From 8cf05a157646c3d165e664fc9868faa948f4924c Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 20 Mar 2026 11:03:01 +0000 Subject: [PATCH 01/33] Fix credentials leaking in debug logs (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a secret-masking slog.Handler that automatically replaces registered passwords with "***" in all log output. Secrets are registered per-scan when a discovery request arrives and unregistered when it completes. This approach masks credentials everywhere they appear in logs — URL userinfo, query parameters, path segments, and Go HTTP error messages — without modifying any business logic in scanner, builder, tester, or ONVIF components. API responses are unaffected and still return full URLs with credentials for frontend use. --- cmd/strix/main.go | 6 +- internal/api/handlers/discover.go | 11 + internal/api/routes.go | 6 +- internal/config/config.go | 12 +- internal/utils/logger/adapter.go | 5 +- internal/utils/logger/masking_handler.go | 188 ++++++++++++++++ internal/utils/logger/masking_handler_test.go | 203 ++++++++++++++++++ 7 files changed, 422 insertions(+), 9 deletions(-) create mode 100644 internal/utils/logger/masking_handler.go create mode 100644 internal/utils/logger/masking_handler_test.go diff --git a/cmd/strix/main.go b/cmd/strix/main.go index f89edc4..24bb6e6 100644 --- a/cmd/strix/main.go +++ b/cmd/strix/main.go @@ -45,11 +45,11 @@ func main() { cfg.Version = Version // Setup logger - slogger := cfg.SetupLogger() + slogger, secrets := cfg.SetupLogger() slog.SetDefault(slogger) // Create adapter for our interface - log := logger.NewAdapter(slogger) + log := logger.NewAdapter(slogger, secrets) log.Info("starting Strix", slog.String("version", Version), @@ -63,7 +63,7 @@ func main() { } // Create API server - apiServer, err := api.NewServer(cfg, log) + apiServer, err := api.NewServer(cfg, secrets, log) if err != nil { log.Error("failed to create API server", err) os.Exit(1) diff --git a/internal/api/handlers/discover.go b/internal/api/handlers/discover.go index 073791c..7a8f58a 100644 --- a/internal/api/handlers/discover.go +++ b/internal/api/handlers/discover.go @@ -7,6 +7,7 @@ import ( "github.com/go-playground/validator/v10" "github.com/eduard256/Strix/internal/camera/discovery" "github.com/eduard256/Strix/internal/models" + "github.com/eduard256/Strix/internal/utils/logger" "github.com/eduard256/Strix/pkg/sse" ) @@ -15,6 +16,7 @@ type DiscoverHandler struct { scanner *discovery.Scanner sseServer *sse.Server validator *validator.Validate + secrets *logger.SecretStore logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) } } @@ -22,11 +24,13 @@ type DiscoverHandler struct { func NewDiscoverHandler( scanner *discovery.Scanner, sseServer *sse.Server, + secrets *logger.SecretStore, logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) }, ) *DiscoverHandler { return &DiscoverHandler{ scanner: scanner, sseServer: sseServer, + secrets: secrets, validator: validator.New(), logger: logger, } @@ -65,6 +69,13 @@ func (h *DiscoverHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } + // Register password as a secret so it gets masked in all log output. + // The secret is automatically unregistered when the request completes. + if req.Password != "" { + h.secrets.Add(req.Password) + defer h.secrets.Remove(req.Password) + } + h.logger.Info("stream discovery requested", "target", req.Target, "model", req.Model, diff --git a/internal/api/routes.go b/internal/api/routes.go index bd643d3..a014190 100644 --- a/internal/api/routes.go +++ b/internal/api/routes.go @@ -10,6 +10,7 @@ import ( "github.com/eduard256/Strix/internal/camera/discovery" "github.com/eduard256/Strix/internal/camera/stream" "github.com/eduard256/Strix/internal/config" + logutil "github.com/eduard256/Strix/internal/utils/logger" "github.com/eduard256/Strix/pkg/sse" ) @@ -22,12 +23,14 @@ type Server struct { scanner *discovery.Scanner probeService *discovery.ProbeService sseServer *sse.Server + secrets *logutil.SecretStore logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) } } // NewServer creates a new API server func NewServer( cfg *config.Config, + secrets *logutil.SecretStore, logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) }, ) (*Server, error) { // Initialize database loader @@ -102,6 +105,7 @@ func NewServer( scanner: scanner, probeService: probeService, sseServer: sseServer, + secrets: secrets, logger: logger, } @@ -147,7 +151,7 @@ func (s *Server) setupRoutes() { s.router.Post("/cameras/search", handlers.NewSearchHandler(s.searchEngine, s.logger).ServeHTTP) // Stream discovery (SSE) - s.router.Post("/streams/discover", handlers.NewDiscoverHandler(s.scanner, s.sseServer, s.logger).ServeHTTP) + s.router.Post("/streams/discover", handlers.NewDiscoverHandler(s.scanner, s.sseServer, s.secrets, s.logger).ServeHTTP) // Device probe (ping + DNS + ARP/OUI + mDNS) s.router.Get("/probe", handlers.NewProbeHandler(s.probeService, s.logger).ServeHTTP) diff --git a/internal/config/config.go b/internal/config/config.go index 0bdef72..7c9fbe8 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/eduard256/Strix/internal/utils/logger" "gopkg.in/yaml.v3" ) @@ -225,8 +226,10 @@ func validateListen(listen string) error { return nil } -// SetupLogger configures the global logger -func (c *Config) SetupLogger() *slog.Logger { +// SetupLogger configures the global logger. It returns the logger and a +// SecretStore that can be used to register credentials for automatic masking +// in all log output. +func (c *Config) SetupLogger() (*slog.Logger, *logger.SecretStore) { var level slog.Level switch c.Logger.Level { case "debug": @@ -250,7 +253,10 @@ func (c *Config) SetupLogger() *slog.Logger { handler = slog.NewTextHandler(os.Stdout, opts) } - return slog.New(handler) + secrets := logger.NewSecretStore() + maskedHandler := logger.NewSecretMaskingHandler(handler, secrets) + + return slog.New(maskedHandler), secrets } func getEnv(key, defaultValue string) string { diff --git a/internal/utils/logger/adapter.go b/internal/utils/logger/adapter.go index b0319f8..37a339f 100644 --- a/internal/utils/logger/adapter.go +++ b/internal/utils/logger/adapter.go @@ -5,11 +5,12 @@ import "log/slog" // Adapter wraps slog.Logger to match our interface type Adapter struct { *slog.Logger + Secrets *SecretStore } // NewAdapter creates a new logger adapter -func NewAdapter(logger *slog.Logger) *Adapter { - return &Adapter{Logger: logger} +func NewAdapter(logger *slog.Logger, secrets *SecretStore) *Adapter { + return &Adapter{Logger: logger, Secrets: secrets} } // Debug logs a debug message diff --git a/internal/utils/logger/masking_handler.go b/internal/utils/logger/masking_handler.go new file mode 100644 index 0000000..cefe4b0 --- /dev/null +++ b/internal/utils/logger/masking_handler.go @@ -0,0 +1,188 @@ +package logger + +import ( + "context" + "fmt" + "log/slog" + "strings" + "sync" +) + +// SecretStore holds a set of secret strings that should be masked in log output. +// It is safe for concurrent use by multiple goroutines. Multiple concurrent scans +// can register different passwords; all are masked simultaneously. +type SecretStore struct { + mu sync.RWMutex + secrets map[string]struct{} +} + +// NewSecretStore creates a new empty secret store. +func NewSecretStore() *SecretStore { + return &SecretStore{ + secrets: make(map[string]struct{}), + } +} + +// Add registers a secret string to be masked in all future log output. +// Empty strings are ignored. +func (s *SecretStore) Add(secret string) { + if secret == "" { + return + } + s.mu.Lock() + s.secrets[secret] = struct{}{} + s.mu.Unlock() +} + +// Remove unregisters a secret string so it is no longer masked. +func (s *SecretStore) Remove(secret string) { + if secret == "" { + return + } + s.mu.Lock() + delete(s.secrets, secret) + s.mu.Unlock() +} + +// Mask replaces all registered secret strings in text with "***". +// Returns the original string unchanged if no secrets are registered. +func (s *SecretStore) Mask(text string) string { + s.mu.RLock() + defer s.mu.RUnlock() + + if len(s.secrets) == 0 { + return text + } + + for secret := range s.secrets { + if strings.Contains(text, secret) { + text = strings.ReplaceAll(text, secret, "***") + } + } + return text +} + +// SecretMaskingHandler wraps a slog.Handler and replaces registered secrets +// with "***" in all log record messages and attribute values before passing +// them to the inner handler. This ensures credentials never appear in log +// output regardless of where they originate in the code. +type SecretMaskingHandler struct { + inner slog.Handler + secrets *SecretStore +} + +// NewSecretMaskingHandler creates a handler that masks secrets in log output. +func NewSecretMaskingHandler(inner slog.Handler, secrets *SecretStore) *SecretMaskingHandler { + return &SecretMaskingHandler{ + inner: inner, + secrets: secrets, + } +} + +// Enabled reports whether the inner handler handles records at the given level. +func (h *SecretMaskingHandler) Enabled(ctx context.Context, level slog.Level) bool { + return h.inner.Enabled(ctx, level) +} + +// Handle masks secrets in the record message and all attributes, then +// delegates to the inner handler. +func (h *SecretMaskingHandler) Handle(ctx context.Context, record slog.Record) error { + // Fast path: no secrets registered + h.secrets.mu.RLock() + hasSecrets := len(h.secrets.secrets) > 0 + h.secrets.mu.RUnlock() + + if !hasSecrets { + return h.inner.Handle(ctx, record) + } + + // Mask the message + record.Message = h.secrets.Mask(record.Message) + + // Mask all attributes by collecting, masking, and replacing them + maskedAttrs := make([]slog.Attr, 0, record.NumAttrs()) + record.Attrs(func(a slog.Attr) bool { + maskedAttrs = append(maskedAttrs, h.maskAttr(a)) + return true + }) + + // Create a new record without the old attrs and add the masked ones. + // slog.Record doesn't have a method to clear attrs, so we build a new one. + newRecord := slog.NewRecord(record.Time, record.Level, record.Message, record.PC) + newRecord.AddAttrs(maskedAttrs...) + + return h.inner.Handle(ctx, newRecord) +} + +// WithAttrs returns a new handler with the given pre-masked attributes. +func (h *SecretMaskingHandler) WithAttrs(attrs []slog.Attr) slog.Handler { + masked := make([]slog.Attr, len(attrs)) + for i, a := range attrs { + masked[i] = h.maskAttr(a) + } + return &SecretMaskingHandler{ + inner: h.inner.WithAttrs(masked), + secrets: h.secrets, + } +} + +// WithGroup returns a new handler with the given group name. +func (h *SecretMaskingHandler) WithGroup(name string) slog.Handler { + return &SecretMaskingHandler{ + inner: h.inner.WithGroup(name), + secrets: h.secrets, + } +} + +// maskAttr masks secrets in an attribute value. Handles string values, +// error values, and recursively handles group attributes. +func (h *SecretMaskingHandler) maskAttr(a slog.Attr) slog.Attr { + switch a.Value.Kind() { + case slog.KindString: + a.Value = slog.StringValue(h.secrets.Mask(a.Value.String())) + + case slog.KindGroup: + attrs := a.Value.Group() + masked := make([]slog.Attr, len(attrs)) + for i, ga := range attrs { + masked[i] = h.maskAttr(ga) + } + a.Value = slog.GroupValue(masked...) + + case slog.KindAny: + v := a.Value.Any() + + // Handle error values (Go's http.Client embeds full URLs in errors) + if err, ok := v.(error); ok { + masked := h.secrets.Mask(err.Error()) + a.Value = slog.StringValue(masked) + return a + } + + // Handle fmt.Stringer (e.g. time.Duration, url.URL, etc.) + if stringer, ok := v.(fmt.Stringer); ok { + masked := h.secrets.Mask(stringer.String()) + a.Value = slog.StringValue(masked) + return a + } + + // Handle string slices (used in BuildURLsFromEntry logging) + if ss, ok := v.([]string); ok { + maskedSlice := make([]string, len(ss)) + for i, s := range ss { + maskedSlice[i] = h.secrets.Mask(s) + } + a.Value = slog.AnyValue(maskedSlice) + return a + } + + // For other Any values, convert to string and mask + str := fmt.Sprintf("%v", v) + masked := h.secrets.Mask(str) + if masked != str { + a.Value = slog.StringValue(masked) + } + } + + return a +} diff --git a/internal/utils/logger/masking_handler_test.go b/internal/utils/logger/masking_handler_test.go new file mode 100644 index 0000000..49623a1 --- /dev/null +++ b/internal/utils/logger/masking_handler_test.go @@ -0,0 +1,203 @@ +package logger + +import ( + "bytes" + "context" + "errors" + "log/slog" + "strings" + "sync" + "testing" +) + +func TestSecretStore_AddRemoveMask(t *testing.T) { + store := NewSecretStore() + + // No secrets: text unchanged + if got := store.Mask("password=secret123"); got != "password=secret123" { + t.Errorf("expected unchanged text, got %q", got) + } + + // Add a secret + store.Add("secret123") + if got := store.Mask("password=secret123"); got != "password=***" { + t.Errorf("expected masked, got %q", got) + } + + // Remove the secret + store.Remove("secret123") + if got := store.Mask("password=secret123"); got != "password=secret123" { + t.Errorf("expected unmasked after remove, got %q", got) + } +} + +func TestSecretStore_EmptyString(t *testing.T) { + store := NewSecretStore() + store.Add("") + if got := store.Mask("test"); got != "test" { + t.Errorf("empty secret should be ignored, got %q", got) + } + store.Remove("") // should not panic +} + +func TestSecretStore_MultipleSecrets(t *testing.T) { + store := NewSecretStore() + store.Add("pass1") + store.Add("pass2") + + got := store.Mask("url=rtsp://user:pass1@host and also pwd=pass2&rate=0") + if strings.Contains(got, "pass1") || strings.Contains(got, "pass2") { + t.Errorf("both passwords should be masked, got %q", got) + } +} + +func TestSecretStore_ConcurrentAccess(t *testing.T) { + store := NewSecretStore() + var wg sync.WaitGroup + + // Simulate concurrent scans adding/removing/masking + for i := 0; i < 100; i++ { + wg.Add(3) + secret := "secret" + string(rune('A'+i%26)) + + go func(s string) { + defer wg.Done() + store.Add(s) + }(secret) + + go func() { + defer wg.Done() + _ = store.Mask("some text with secretA in it") + }() + + go func(s string) { + defer wg.Done() + store.Remove(s) + }(secret) + } + + wg.Wait() +} + +func TestSecretMaskingHandler_MasksStringAttrs(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("mypassword") + + inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + log.Debug("testing stream", "url", "rtsp://admin:mypassword@192.168.1.10/stream") + + output := buf.String() + if strings.Contains(output, "mypassword") { + t.Errorf("password should be masked in output: %s", output) + } + if !strings.Contains(output, "***") { + t.Errorf("expected *** in output: %s", output) + } +} + +func TestSecretMaskingHandler_MasksMessage(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("secretpwd") + + inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + log.Debug("failed with secretpwd in message") + + output := buf.String() + if strings.Contains(output, "secretpwd") { + t.Errorf("password should be masked in message: %s", output) + } +} + +func TestSecretMaskingHandler_MasksErrorValues(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("r6wnm0wlix") + + inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + err := errors.New(`Get "http://10.0.20.111/cgi-bin/encoder?PWD=r6wnm0wlix&USER=admin": dial tcp`) + log.Debug("request failed", "error", err) + + output := buf.String() + if strings.Contains(output, "r6wnm0wlix") { + t.Errorf("password should be masked in error: %s", output) + } +} + +func TestSecretMaskingHandler_NoSecretsPassthrough(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + + inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + log.Debug("normal message", "key", "value") + + output := buf.String() + if !strings.Contains(output, "normal message") || !strings.Contains(output, "value") { + t.Errorf("output should pass through unchanged: %s", output) + } +} + +func TestSecretMaskingHandler_MasksMultipleOccurrences(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("secret123") + + inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + log.Debug("test", + "url1", "rtsp://user:secret123@host1/stream", + "url2", "http://host2/snap?pwd=secret123", + "path", "/user=admin_password=secret123_channel=1", + ) + + output := buf.String() + if strings.Contains(output, "secret123") { + t.Errorf("all occurrences should be masked: %s", output) + } +} + +func TestSecretMaskingHandler_Enabled(t *testing.T) { + store := NewSecretStore() + inner := slog.NewTextHandler(&bytes.Buffer{}, &slog.HandlerOptions{Level: slog.LevelInfo}) + handler := NewSecretMaskingHandler(inner, store) + + if handler.Enabled(context.Background(), slog.LevelDebug) { + t.Error("debug should be disabled when level is info") + } + if !handler.Enabled(context.Background(), slog.LevelInfo) { + t.Error("info should be enabled") + } +} + +func TestSecretMaskingHandler_WithAttrs(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("secretval") + + inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + child := handler.WithAttrs([]slog.Attr{slog.String("static", "has secretval inside")}) + log := slog.New(child) + + log.Debug("test") + + output := buf.String() + if strings.Contains(output, "secretval") { + t.Errorf("pre-set attr should be masked: %s", output) + } +} From 3acc96665872be8eacca788c767aa09bcdb86eb6 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 20 Mar 2026 19:59:22 +0000 Subject: [PATCH 02/33] Mask URL-encoded passwords in debug logs SecretStore.Add now registers both plain text and URL-encoded forms of the password. Fixes cases where passwords with special characters (e.g. @, #, :) appear percent-encoded in URLs but were not matched by the masking handler. --- internal/utils/logger/masking_handler.go | 13 +++- internal/utils/logger/masking_handler_test.go | 59 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/internal/utils/logger/masking_handler.go b/internal/utils/logger/masking_handler.go index cefe4b0..1a4c937 100644 --- a/internal/utils/logger/masking_handler.go +++ b/internal/utils/logger/masking_handler.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log/slog" + "net/url" "strings" "sync" ) @@ -24,13 +25,19 @@ func NewSecretStore() *SecretStore { } // Add registers a secret string to be masked in all future log output. -// Empty strings are ignored. +// Empty strings are ignored. Both the plain text and URL-encoded forms +// are registered, because credentials may appear percent-encoded in URLs +// (e.g. "p@ss" becomes "p%40ss" via url.QueryEscape or url.UserPassword). func (s *SecretStore) Add(secret string) { if secret == "" { return } s.mu.Lock() s.secrets[secret] = struct{}{} + encoded := url.QueryEscape(secret) + if encoded != secret { + s.secrets[encoded] = struct{}{} + } s.mu.Unlock() } @@ -41,6 +48,10 @@ func (s *SecretStore) Remove(secret string) { } s.mu.Lock() delete(s.secrets, secret) + encoded := url.QueryEscape(secret) + if encoded != secret { + delete(s.secrets, encoded) + } s.mu.Unlock() } diff --git a/internal/utils/logger/masking_handler_test.go b/internal/utils/logger/masking_handler_test.go index 49623a1..2eb2c44 100644 --- a/internal/utils/logger/masking_handler_test.go +++ b/internal/utils/logger/masking_handler_test.go @@ -184,6 +184,65 @@ func TestSecretMaskingHandler_Enabled(t *testing.T) { } } +func TestSecretMaskingHandler_SpecialCharsPassword(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("p@ss:w0rd#1") + + inner := slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + // Simulate URLs built by builder.go and onvif_simple.go + // 1. RTSP with url.QueryEscape (onvif_simple.go:395) + log.Debug("testing RTSP stream", "url", "rtsp://admin:p%40ss%3Aw0rd%231@192.168.1.10:554/stream1") + + // 2. HTTP with url.UserPassword (builder.go:355) -- Go encodes special chars + log.Debug("testing HTTP stream", "url", "http://admin:p%40ss%3Aw0rd%231@192.168.1.10/snap.jpg") + + // 3. Query params with url.Values.Encode (builder.go:377) + log.Debug("testing HTTP stream", "url", "http://192.168.1.10/snap.jpg?pwd=p%40ss%3Aw0rd%231&user=admin") + + // 4. Error from Go http.Client (contains encoded URL) + log.Debug("stream test failed", + "url", "http://admin:p%40ss%3Aw0rd%231@192.168.1.10/camera", + "error", `HTTP request failed: Get "http://admin:***@192.168.1.10/camera": connection refused`) + + output := buf.String() + t.Logf("Output:\n%s", output) + + if strings.Contains(output, "p@ss:w0rd#1") { + t.Errorf("plain text password should be masked: %s", output) + } + if strings.Contains(output, "p%40ss%3Aw0rd%231") { + t.Errorf("URL-encoded password should be masked: %s", output) + } +} + +func TestSecretMaskingHandler_PlainPassword(t *testing.T) { + var buf bytes.Buffer + store := NewSecretStore() + store.Add("simplepass123") + + inner := slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) + handler := NewSecretMaskingHandler(inner, store) + log := slog.New(handler) + + // Plain password without special chars -- no encoding difference + log.Debug("testing RTSP stream", "url", "rtsp://admin:simplepass123@192.168.1.10:554/stream") + log.Debug("testing HTTP stream", "url", "http://192.168.1.10/snap.jpg?pwd=simplepass123&user=admin") + log.Debug("stream test failed", + "url", "http://admin:simplepass123@192.168.1.10/camera", + "error", `HTTP request failed: Get "http://192.168.1.10/snap.jpg?pwd=simplepass123&user=admin": connection refused`) + + output := buf.String() + t.Logf("Output:\n%s", output) + + if strings.Contains(output, "simplepass123") { + t.Errorf("password should be masked everywhere: %s", output) + } +} + func TestSecretMaskingHandler_WithAttrs(t *testing.T) { var buf bytes.Buffer store := NewSecretStore() From 4fe5ae944724c611c4bbaee99515a91bb4189f5e Mon Sep 17 00:00:00 2001 From: eduard256 Date: Sun, 22 Mar 2026 17:13:38 +0000 Subject: [PATCH 03/33] URL-encode credentials with special characters in stream URLs Passwords containing @, #, :, ?, /, %, &, space and other special characters broke URL parsing, causing streams to not be detected. Replaced fmt.Sprintf string concatenation with url.URL struct for building RTSP/HTTP URLs. Credentials in userinfo are now handled via url.UserPassword() which encodes special chars automatically. Split replacePlaceholders into two phases: - Phase 1: safe placeholders (channel, width, IP, port) - Phase 2: credential placeholders with context-aware encoding: - Query string: url.Values.Set + Encode (auto percent-encoding) - Path segments: url.PathEscape Normal passwords (letters, digits, -._~) produce identical URLs as before -- encoding is a no-op for safe characters. Fixes #10 --- internal/camera/stream/builder.go | 255 ++++++--- internal/camera/stream/special_chars_test.go | 559 +++++++++++++++++++ 2 files changed, 726 insertions(+), 88 deletions(-) create mode 100644 internal/camera/stream/special_chars_test.go diff --git a/internal/camera/stream/builder.go b/internal/camera/stream/builder.go index 9307c14..94749ff 100644 --- a/internal/camera/stream/builder.go +++ b/internal/camera/stream/builder.go @@ -4,7 +4,6 @@ import ( "encoding/base64" "fmt" "net/url" - "regexp" "strconv" "strings" @@ -94,62 +93,52 @@ func (b *Builder) BuildURL(entry models.CameraEntry, ctx BuildContext) string { ctx.Protocol = entry.Protocol } - // Replace placeholders in URL path + // Replace placeholders in URL path (credentials are handled separately + // to ensure proper encoding depending on their position in the URL). path := b.replacePlaceholders(entry.URL, ctx) b.logger.Debug("placeholders replaced", "original", entry.URL, "after_replacement", path) - // Build the complete URL + // Build the complete URL using url.URL struct for correct encoding var fullURL string // Check if the URL already contains authentication parameters hasAuthInURL := b.hasAuthenticationParams(path) b.logger.Debug("auth params detection", "has_auth_in_url", hasAuthInURL, "path", path) + // Determine host string (omit default port for cleaner URLs) + host := b.buildHost(ctx.IP, ctx.Port, ctx.Protocol) + + // Split path and query for url.URL (it expects them separately) + pathPart, queryPart := b.splitPathQuery(path) + + // Ensure path starts with exactly one slash + if !strings.HasPrefix(pathPart, "/") { + pathPart = "/" + pathPart + } + + u := &url.URL{ + Scheme: ctx.Protocol, + Host: host, + Path: pathPart, + RawQuery: queryPart, + } + switch ctx.Protocol { - case "rtsp": + case "rtsp", "rtsps": if ctx.Username != "" && ctx.Password != "" && !hasAuthInURL { - // Standard ports can be omitted - if ctx.Port == 554 { - fullURL = fmt.Sprintf("rtsp://%s:%s@%s/%s", - ctx.Username, ctx.Password, ctx.IP, path) - } else { - fullURL = fmt.Sprintf("rtsp://%s:%s@%s:%d/%s", - ctx.Username, ctx.Password, ctx.IP, ctx.Port, path) - } - } else { - if ctx.Port == 554 { - fullURL = fmt.Sprintf("rtsp://%s/%s", ctx.IP, path) - } else { - fullURL = fmt.Sprintf("rtsp://%s:%d/%s", ctx.IP, ctx.Port, path) - } + u.User = url.UserPassword(ctx.Username, ctx.Password) } case "http", "https": - // For HTTP, check if auth should be in URL or parameters - if ctx.Username != "" && ctx.Password != "" && !hasAuthInURL { - // Don't put auth in URL for HTTP, will use Basic Auth header - if (ctx.Protocol == "http" && ctx.Port == 80) || - (ctx.Protocol == "https" && ctx.Port == 443) { - fullURL = fmt.Sprintf("%s://%s/%s", ctx.Protocol, ctx.IP, path) - } else { - fullURL = fmt.Sprintf("%s://%s:%d/%s", ctx.Protocol, ctx.IP, ctx.Port, path) - } - } else { - if (ctx.Protocol == "http" && ctx.Port == 80) || - (ctx.Protocol == "https" && ctx.Port == 443) { - fullURL = fmt.Sprintf("%s://%s/%s", ctx.Protocol, ctx.IP, path) - } else { - fullURL = fmt.Sprintf("%s://%s:%d/%s", ctx.Protocol, ctx.IP, ctx.Port, path) - } - } + // For HTTP, credentials are NOT embedded in the URL by BuildURL. + // BuildURLsFromEntry handles auth variants (userinfo, query params, etc.) + // separately with url.UserPassword for proper encoding. default: - // Generic URL construction - fullURL = fmt.Sprintf("%s://%s:%d/%s", ctx.Protocol, ctx.IP, ctx.Port, path) + // Generic: no credentials in URL } - // Clean up double slashes (except after protocol://) - fullURL = b.cleanURL(fullURL) + fullURL = u.String() b.logger.Debug("BuildURL complete", "final_url", fullURL, @@ -162,23 +151,42 @@ func (b *Builder) BuildURL(entry models.CameraEntry, ctx BuildContext) string { return fullURL } -// replacePlaceholders replaces all placeholders in the URL +// credentialPlaceholders lists all placeholder strings that represent +// username or password values. These must NOT be replaced via simple string +// substitution because they require context-aware encoding (different for +// query parameters, path segments, and userinfo). +var credentialPlaceholders = []string{ + "[USERNAME]", "[username]", "[USER]", "[user]", + "[PASSWORD]", "[password]", "[PASWORD]", "[pasword]", + "[PASS]", "[pass]", "[PWD]", "[pwd]", +} + +// replacePlaceholders replaces all placeholders in the URL. +// +// Credential placeholders ([USERNAME], [PASSWORD], etc.) are handled in two +// phases to ensure correct encoding: +// 1. Non-credential placeholders (channel, resolution, IP, etc.) are replaced +// first — these contain only safe characters. +// 2. Credential placeholders are then replaced with proper encoding: +// - In query strings: via url.Values.Set + Encode (automatic encoding) +// - In path segments: via url.PathEscape func (b *Builder) replacePlaceholders(urlPath string, ctx BuildContext) string { result := urlPath - // Generate base64 auth for [AUTH] placeholder + // Generate base64 auth for [AUTH] placeholder (already safe — base64 has no + // characters that need URL encoding) auth := "" if ctx.Username != "" && ctx.Password != "" { auth = base64.StdEncoding.EncodeToString([]byte(ctx.Username + ":" + ctx.Password)) } - // Common placeholders - replacements := map[string]string{ + // Phase 1: Replace non-credential placeholders (all values are safe strings) + safeReplacements := map[string]string{ "[CHANNEL]": strconv.Itoa(ctx.Channel), "[channel]": strconv.Itoa(ctx.Channel), - "[CHANNEL+1]": strconv.Itoa(ctx.Channel + 1), // For Hikvision-style channels (101, 201, 301...) + "[CHANNEL+1]": strconv.Itoa(ctx.Channel + 1), "[channel+1]": strconv.Itoa(ctx.Channel + 1), - "{CHANNEL}": strconv.Itoa(ctx.Channel), // BUBBLE protocol uses {channel} + "{CHANNEL}": strconv.Itoa(ctx.Channel), "{channel}": strconv.Itoa(ctx.Channel), "{CHANNEL+1}": strconv.Itoa(ctx.Channel + 1), "{channel+1}": strconv.Itoa(ctx.Channel + 1), @@ -186,43 +194,35 @@ func (b *Builder) replacePlaceholders(urlPath string, ctx BuildContext) string { "[width]": strconv.Itoa(ctx.Width), "[HEIGHT]": strconv.Itoa(ctx.Height), "[height]": strconv.Itoa(ctx.Height), - "[USERNAME]": ctx.Username, - "[username]": ctx.Username, - "[PASSWORD]": ctx.Password, - "[password]": ctx.Password, - "[PASWORD]": ctx.Password, // Handle typo in database - "[pasword]": ctx.Password, - "[USER]": ctx.Username, - "[user]": ctx.Username, - "[PASS]": ctx.Password, - "[pass]": ctx.Password, - "[PWD]": ctx.Password, - "[pwd]": ctx.Password, "[IP]": ctx.IP, "[ip]": ctx.IP, "[PORT]": strconv.Itoa(ctx.Port), "[port]": strconv.Itoa(ctx.Port), - "[AUTH]": auth, // base64(username:password) for basic auth + "[AUTH]": auth, "[auth]": auth, - "[TOKEN]": "", // Empty for now + "[TOKEN]": "", "[token]": "", } - // Replace all placeholders - for placeholder, value := range replacements { + for placeholder, value := range safeReplacements { result = strings.ReplaceAll(result, placeholder, value) } - // Handle query parameter placeholders (only for auth params) - result = b.replaceQueryParams(result, ctx) + // Phase 2: Replace credential placeholders with proper encoding. + // First handle query parameters (via url.Values for safe encoding), + // then handle any remaining credential placeholders in the path. + result = b.replaceQueryCredentials(result, ctx) + result = b.replacePathCredentials(result, ctx) return result } - -// replaceQueryParams handles query parameter replacements -func (b *Builder) replaceQueryParams(urlPath string, ctx BuildContext) string { - // Parse URL to handle query params +// replaceQueryCredentials handles credential replacement in query parameters. +// It parses the query string while credential placeholders are still intact +// (safe ASCII strings like "[PASSWORD]"), replaces them with real values via +// url.Values.Set, and re-encodes. This ensures special characters in passwords +// are always properly percent-encoded. +func (b *Builder) replaceQueryCredentials(urlPath string, ctx BuildContext) string { parts := strings.SplitN(urlPath, "?", 2) if len(parts) < 2 { return urlPath @@ -231,30 +231,103 @@ func (b *Builder) replaceQueryParams(urlPath string, ctx BuildContext) string { basePath := parts[0] queryString := parts[1] - // Parse query parameters + // Parse the query string — placeholders like [PASSWORD] are safe to parse + // because they contain no special URL characters. params, err := url.ParseQuery(queryString) if err != nil { return urlPath } - // ONLY replace authentication parameters - // DO NOT replace channel, width, height - they should stay as-is from URL patterns - for key := range params { - lowerKey := strings.ToLower(key) + // Username placeholder values that should be replaced + usernamePlaceholders := map[string]bool{ + "[USERNAME]": true, "[username]": true, + "[USER]": true, "[user]": true, + } + // Password placeholder values that should be replaced + passwordPlaceholders := map[string]bool{ + "[PASSWORD]": true, "[password]": true, + "[PASWORD]": true, "[pasword]": true, + "[PASS]": true, "[pass]": true, + "[PWD]": true, "[pwd]": true, + } + + changed := false + for key, values := range params { + for _, val := range values { + if usernamePlaceholders[val] { + params.Set(key, ctx.Username) + changed = true + } else if passwordPlaceholders[val] { + params.Set(key, ctx.Password) + changed = true + } + } + + // Also handle auth-named keys whose values are still placeholders + // or already contain the raw value from a previous step. + // This covers patterns like "?user=admin&pwd=12345" that come from + // replaceQueryParams in the old code. + lowerKey := strings.ToLower(key) switch lowerKey { case "user", "username", "usr", "loginuse": - params.Set(key, ctx.Username) + if params.Get(key) == "" || isCredentialPlaceholder(params.Get(key)) { + params.Set(key, ctx.Username) + changed = true + } case "password", "pass", "pwd", "loginpas", "passwd": - params.Set(key, ctx.Password) - // Removed: channel, width, height replacements - they were breaking working URLs + if params.Get(key) == "" || isCredentialPlaceholder(params.Get(key)) { + params.Set(key, ctx.Password) + changed = true + } } } - // Rebuild URL + if !changed { + return urlPath + } + + // params.Encode() automatically percent-encodes all values return basePath + "?" + params.Encode() } +// replacePathCredentials replaces any remaining credential placeholders in the +// path portion of the URL using url.PathEscape for safe encoding. +func (b *Builder) replacePathCredentials(urlPath string, ctx BuildContext) string { + // Map of credential placeholders to their escaped values for use in paths + pathReplacements := map[string]string{ + "[USERNAME]": url.PathEscape(ctx.Username), + "[username]": url.PathEscape(ctx.Username), + "[USER]": url.PathEscape(ctx.Username), + "[user]": url.PathEscape(ctx.Username), + "[PASSWORD]": url.PathEscape(ctx.Password), + "[password]": url.PathEscape(ctx.Password), + "[PASWORD]": url.PathEscape(ctx.Password), + "[pasword]": url.PathEscape(ctx.Password), + "[PASS]": url.PathEscape(ctx.Password), + "[pass]": url.PathEscape(ctx.Password), + "[PWD]": url.PathEscape(ctx.Password), + "[pwd]": url.PathEscape(ctx.Password), + } + + for placeholder, value := range pathReplacements { + urlPath = strings.ReplaceAll(urlPath, placeholder, value) + } + + return urlPath +} + +// isCredentialPlaceholder checks if a string is one of the known credential +// placeholder tokens. +func isCredentialPlaceholder(s string) bool { + for _, p := range credentialPlaceholders { + if s == p { + return true + } + } + return false +} + // hasAuthenticationParams checks if URL contains auth parameters func (b *Builder) hasAuthenticationParams(urlPath string) bool { @@ -273,21 +346,27 @@ func (b *Builder) hasAuthenticationParams(urlPath string) bool { return false } -// cleanURL cleans up the URL -func (b *Builder) cleanURL(fullURL string) string { - // Remove double slashes except after protocol:// - protocolEnd := strings.Index(fullURL, "://") - if protocolEnd > 0 { - protocol := fullURL[:protocolEnd+3] - rest := fullURL[protocolEnd+3:] +// buildHost returns the host:port string, omitting the port when it matches +// the default for the given protocol. +func (b *Builder) buildHost(ip string, port int, protocol string) string { + isDefault := (protocol == "http" && port == 80) || + (protocol == "https" && port == 443) || + (protocol == "rtsp" && port == 554) || + (protocol == "rtsps" && port == 322) - // Replace multiple slashes with single slash - rest = regexp.MustCompile(`/{2,}`).ReplaceAllString(rest, "/") - - return protocol + rest + if isDefault || port == 0 { + return ip } + return fmt.Sprintf("%s:%d", ip, port) +} - return fullURL +// splitPathQuery splits a path string into path and raw query components. +// The input may contain "?" separating the path from the query string. +func (b *Builder) splitPathQuery(path string) (string, string) { + if idx := strings.IndexByte(path, '?'); idx >= 0 { + return path[:idx], path[idx+1:] + } + return path, "" } // BuildURLsFromEntry generates all possible URLs from a camera entry diff --git a/internal/camera/stream/special_chars_test.go b/internal/camera/stream/special_chars_test.go new file mode 100644 index 0000000..a32e81d --- /dev/null +++ b/internal/camera/stream/special_chars_test.go @@ -0,0 +1,559 @@ +package stream + +import ( + "net/url" + "strings" + "testing" + + "github.com/eduard256/Strix/internal/models" +) + +// Passwords with various special characters that real users might use. +// Each one exercises a different URL-parsing edge case. +var specialPasswords = []struct { + name string + password string + breaking string // which URL component this character breaks without escaping +}{ + {"at sign", "p@ssword", "userinfo delimiter — splits user:pass from host"}, + {"colon", "p:ssword", "userinfo separator — splits username from password"}, + {"hash", "p#ssword", "fragment delimiter — truncates everything after it"}, + {"ampersand", "p&ssword", "query param separator — splits password into two params"}, + {"equals", "p=ssword", "query value delimiter — corrupts key=value parsing"}, + {"question mark", "p?ssword", "query start — creates phantom query string"}, + {"slash", "p/ssword", "path separator — changes URL path structure"}, + {"percent", "p%ssword", "escape prefix — creates invalid percent-encoding"}, + {"space", "p ssword", "whitespace — breaks URL parsing entirely"}, + {"plus", "p+ssword", "query space encoding — decoded as space in query strings"}, + {"dollar", "p$ssword", "shell/URI special character"}, + {"exclamation", "p!ssword", "sub-delimiter in RFC 3986"}, + {"mixed special", "p@ss:w#rd$1&2", "multiple special characters combined"}, + {"all dangerous", "P@:?#&=+$ !", "all URL-breaking characters at once"}, + {"url-like", "http://evil", "password that looks like a URL"}, + {"chinese", "密码test", "unicode characters in password"}, +} + +// --------------------------------------------------------------------------- +// RTSP URL tests +// --------------------------------------------------------------------------- + +// TestRTSP_SpecialCharsInPassword_URLMustBeParseable verifies that RTSP URLs +// built with special-character passwords can be parsed back by url.Parse +// without losing or corrupting the host, scheme, or userinfo. +func TestRTSP_SpecialCharsInPassword_URLMustBeParseable(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "FFMPEG", + Protocol: "rtsp", + Port: 554, + URL: "/live/main", + } + + for _, sp := range specialPasswords { + t.Run(sp.name, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: sp.password, + Port: 554, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) == 0 { + t.Fatal("no URLs generated") + } + + for i, rawURL := range urls { + u, err := url.Parse(rawURL) + if err != nil { + t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) + continue + } + + // Scheme must be rtsp + if u.Scheme != "rtsp" { + t.Errorf("[%d] wrong scheme %q, want \"rtsp\"\n raw URL: %s", i, u.Scheme, rawURL) + } + + // Host must be the camera IP, not garbage from a mis-parsed password + host := u.Hostname() + if host != "192.168.1.100" { + t.Errorf("[%d] wrong host %q, want \"192.168.1.100\"\n raw URL: %s", i, host, rawURL) + } + + // Password must round-trip correctly + if u.User != nil { + got, ok := u.User.Password() + if !ok { + t.Errorf("[%d] password not present in parsed URL\n raw URL: %s", i, rawURL) + } else if got != sp.password { + t.Errorf("[%d] password mismatch: got %q, want %q\n raw URL: %s", i, got, sp.password, rawURL) + } + } + + // Path must start with /live/main + if !strings.HasPrefix(u.Path, "/live/main") { + t.Errorf("[%d] wrong path %q, want prefix \"/live/main\"\n raw URL: %s", i, u.Path, rawURL) + } + + // Fragment must be empty (# in password must not leak) + if u.Fragment != "" { + t.Errorf("[%d] unexpected fragment %q — '#' in password leaked\n raw URL: %s", i, u.Fragment, rawURL) + } + } + }) + } +} + +// TestRTSP_SpecialCharsInPassword_CountUnchanged verifies that the number +// of generated URLs does not change based on password content. +// A simple password and a complex one should produce the same URL count. +func TestRTSP_SpecialCharsInPassword_CountUnchanged(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "FFMPEG", + Protocol: "rtsp", + Port: 554, + URL: "/stream1", + } + + // Baseline: simple password + baseCtx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: "simple123", + Port: 554, + } + baseURLs := builder.BuildURLsFromEntry(entry, baseCtx) + baseCount := len(baseURLs) + + for _, sp := range specialPasswords { + t.Run(sp.name, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: sp.password, + Port: 554, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) != baseCount { + t.Errorf("URL count changed: simple password produces %d, %q produces %d", + baseCount, sp.password, len(urls)) + t.Logf(" simple URLs: %v", baseURLs) + t.Logf(" special URLs: %v", urls) + } + }) + } +} + +// TestRTSP_NormalPassword_NoChange ensures that encoding does not alter URLs +// when the password contains only safe characters (letters, digits, - . _ ~). +func TestRTSP_NormalPassword_NoChange(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "FFMPEG", + Protocol: "rtsp", + Port: 554, + URL: "/Streaming/Channels/101", + } + + normalPasswords := []string{ + "admin", + "Admin123", + "test-password", + "hello_world", + "dots.in.password", + "tilde~ok", + "UPPERCASE", + "1234567890", + } + + for _, pass := range normalPasswords { + t.Run(pass, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: pass, + Port: 554, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) == 0 { + t.Fatal("no URLs generated") + } + + for _, rawURL := range urls { + // Normal passwords must NOT contain any percent-encoding + // because all their characters are unreserved. + if strings.Contains(rawURL, "%") { + t.Errorf("normal password %q was percent-encoded in URL: %s", pass, rawURL) + } + + // Must contain the literal password string + if !strings.Contains(rawURL, pass) { + t.Errorf("URL does not contain literal password %q: %s", pass, rawURL) + } + } + }) + } +} + +// --------------------------------------------------------------------------- +// HTTP query string tests +// --------------------------------------------------------------------------- + +// TestHTTP_SpecialCharsInPassword_QueryPlaceholders tests URLs where +// the password goes into a query parameter via [PASSWORD] placeholder. +// These are patterns like "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]". +func TestHTTP_SpecialCharsInPassword_QueryPlaceholders(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "JPEG", + Protocol: "http", + Port: 80, + URL: "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]", + } + + for _, sp := range specialPasswords { + t.Run(sp.name, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: sp.password, + Port: 80, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) == 0 { + t.Fatal("no URLs generated") + } + + for i, rawURL := range urls { + u, err := url.Parse(rawURL) + if err != nil { + t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) + continue + } + + // Host must be correct + if u.Hostname() != "192.168.1.100" { + t.Errorf("[%d] wrong host %q\n raw URL: %s", i, u.Hostname(), rawURL) + } + + // Fragment must be empty + if u.Fragment != "" { + t.Errorf("[%d] fragment leak %q — '#' in password broke URL\n raw URL: %s", + i, u.Fragment, rawURL) + } + + // If URL has query params, check pwd round-trips + q := u.Query() + if pwd := q.Get("pwd"); pwd != "" { + if pwd != sp.password { + t.Errorf("[%d] pwd param mismatch: got %q, want %q\n raw URL: %s", + i, pwd, sp.password, rawURL) + } + } + + // Ampersand in password must NOT create extra query params + // e.g. password "p&ssword" must not produce key "ssword" + if strings.Contains(sp.password, "&") { + // Extract the part after & as potential rogue key + parts := strings.SplitN(sp.password, "&", 2) + rogueKey := strings.SplitN(parts[1], "&", 2)[0] + rogueKey = strings.SplitN(rogueKey, "=", 2)[0] + if rogueKey != "" && q.Has(rogueKey) { + t.Errorf("[%d] ampersand in password created rogue query param %q\n raw URL: %s", + i, rogueKey, rawURL) + } + } + } + }) + } +} + +// TestHTTP_SpecialCharsInPassword_PathPlaceholders tests patterns where +// credentials appear in the URL path, e.g. +// "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" +func TestHTTP_SpecialCharsInPassword_PathPlaceholders(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "FFMPEG", + Protocol: "rtsp", + Port: 554, + URL: "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp", + } + + for _, sp := range specialPasswords { + t.Run(sp.name, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: sp.password, + Port: 554, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) == 0 { + t.Fatal("no URLs generated") + } + + for i, rawURL := range urls { + u, err := url.Parse(rawURL) + if err != nil { + t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) + continue + } + + // Host must be correct + if u.Hostname() != "192.168.1.100" { + t.Errorf("[%d] wrong host %q, want \"192.168.1.100\"\n raw URL: %s", + i, u.Hostname(), rawURL) + } + + // Scheme must be rtsp + if u.Scheme != "rtsp" { + t.Errorf("[%d] wrong scheme %q, want \"rtsp\"\n raw URL: %s", + i, u.Scheme, rawURL) + } + + // Fragment must be empty + if u.Fragment != "" { + t.Errorf("[%d] fragment leak %q\n raw URL: %s", i, u.Fragment, rawURL) + } + } + }) + } +} + +// TestHTTP_SpecialCharsInPassword_UserInfo tests HTTP URLs where +// credentials are embedded in the userinfo part (user:pass@host). +func TestHTTP_SpecialCharsInPassword_UserInfo(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "JPEG", + Protocol: "http", + Port: 80, + URL: "snapshot.jpg", + } + + for _, sp := range specialPasswords { + t.Run(sp.name, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: sp.password, + Port: 80, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) == 0 { + t.Fatal("no URLs generated") + } + + for i, rawURL := range urls { + u, err := url.Parse(rawURL) + if err != nil { + t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) + continue + } + + // Host must be correct + if u.Hostname() != "192.168.1.100" { + t.Errorf("[%d] wrong host %q\n raw URL: %s", i, u.Hostname(), rawURL) + } + + // If userinfo present, password must round-trip + if u.User != nil { + if got, ok := u.User.Password(); ok { + if got != sp.password { + t.Errorf("[%d] userinfo password mismatch: got %q, want %q\n raw URL: %s", + i, got, sp.password, rawURL) + } + } + } + + // Fragment must be empty + if u.Fragment != "" { + t.Errorf("[%d] fragment leak %q\n raw URL: %s", i, u.Fragment, rawURL) + } + } + }) + } +} + +// TestHTTP_SpecialCharsInPassword_CountUnchanged ensures HTTP URL count +// stays the same regardless of password content. +func TestHTTP_SpecialCharsInPassword_CountUnchanged(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "JPEG", + Protocol: "http", + Port: 80, + URL: "snapshot.jpg", + } + + baseCtx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: "simple123", + Port: 80, + } + baseURLs := builder.BuildURLsFromEntry(entry, baseCtx) + baseCount := len(baseURLs) + + for _, sp := range specialPasswords { + t.Run(sp.name, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: sp.password, + Port: 80, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) != baseCount { + t.Errorf("URL count changed: simple=%d, special(%q)=%d", + baseCount, sp.password, len(urls)) + } + }) + } +} + +// --------------------------------------------------------------------------- +// Username special char tests +// --------------------------------------------------------------------------- + +// TestSpecialCharsInUsername verifies that usernames with special characters +// are also handled correctly (less common but possible). +func TestSpecialCharsInUsername(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "FFMPEG", + Protocol: "rtsp", + Port: 554, + URL: "/stream1", + } + + specialUsernames := []string{ + "user@domain", + "user:name", + "user#1", + "admin&root", + } + + for _, username := range specialUsernames { + t.Run(username, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: username, + Password: "password123", + Port: 554, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + if len(urls) == 0 { + t.Fatal("no URLs generated") + } + + for i, rawURL := range urls { + u, err := url.Parse(rawURL) + if err != nil { + t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) + continue + } + + if u.Hostname() != "192.168.1.100" { + t.Errorf("[%d] wrong host %q\n raw URL: %s", i, u.Hostname(), rawURL) + } + + if u.User != nil { + if got := u.User.Username(); got != username { + t.Errorf("[%d] username mismatch: got %q, want %q\n raw URL: %s", + i, got, username, rawURL) + } + } + } + }) + } +} + +// --------------------------------------------------------------------------- +// Regression: normal passwords must not be affected +// --------------------------------------------------------------------------- + +// TestHTTP_NormalPassword_NoPercentEncoding ensures that simple passwords +// do not get percent-encoded in the userinfo part, so we don't break +// cameras that might do byte-level comparison. +func TestHTTP_NormalPassword_NoPercentEncoding(t *testing.T) { + logger := &mockLogger{} + builder := NewBuilder([]string{}, logger) + + entry := models.CameraEntry{ + Type: "JPEG", + Protocol: "http", + Port: 80, + URL: "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]", + } + + normalPasswords := []string{ + "admin123", + "Password", + "test-pass", + "hello_world", + "dots.dots", + "tilde~ok", + } + + for _, pass := range normalPasswords { + t.Run(pass, func(t *testing.T) { + ctx := BuildContext{ + IP: "192.168.1.100", + Username: "admin", + Password: pass, + Port: 80, + } + + urls := builder.BuildURLsFromEntry(entry, ctx) + + for _, rawURL := range urls { + u, err := url.Parse(rawURL) + if err != nil { + t.Errorf("url.Parse failed: %v\n URL: %s", err, rawURL) + continue + } + + // Check query params: value must match exactly. + // Skip URLs where pwd is empty (the no-auth variant). + q := u.Query() + if pwd := q.Get("pwd"); pwd != "" && pwd != pass { + t.Errorf("pwd param %q != expected %q\n URL: %s", pwd, pass, rawURL) + } + + // Only check raw query encoding on URLs that actually have + // the password in query params (skip no-auth and userinfo-only variants). + if q.Get("pwd") != "" && !strings.Contains(u.RawQuery, pass) { + t.Errorf("safe password %q was percent-encoded in query: %s\n URL: %s", + pass, u.RawQuery, rawURL) + } + } + }) + } +} From 3fafdbc6cebe9df2ba3fc33c9f3705750e8e6ccc Mon Sep 17 00:00:00 2001 From: eduard256 Date: Sun, 22 Mar 2026 17:44:16 +0000 Subject: [PATCH 04/33] Separate structured logs from human-readable output Move SetupLogger() to a standalone function called before config.Load() so the logger is available from the very start. Replace all fmt.Printf calls in config.go with slog calls. Redirect banner and endpoint info to stderr, keeping stdout clean for structured log output (JSON/text). Fixes #5 --- cmd/strix/main.go | 28 ++++++++++----------- internal/config/config.go | 53 ++++++++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/cmd/strix/main.go b/cmd/strix/main.go index 24bb6e6..744b956 100644 --- a/cmd/strix/main.go +++ b/cmd/strix/main.go @@ -36,18 +36,18 @@ Version: %s ` func main() { - // Print banner - fmt.Printf(Banner, Version) - fmt.Println() + // Print banner to stderr so it doesn't mix with structured log output on stdout + fmt.Fprintf(os.Stderr, Banner, Version) + fmt.Fprintln(os.Stderr) - // Load configuration - cfg := config.Load() - cfg.Version = Version - - // Setup logger - slogger, secrets := cfg.SetupLogger() + // Setup logger first, before anything else, so all messages use consistent format + slogger, secrets := config.SetupLogger() slog.SetDefault(slogger) + // Load configuration (uses the logger for startup messages) + cfg := config.Load(slogger) + cfg.Version = Version + // Create adapter for our interface log := logger.NewAdapter(slogger, secrets) @@ -193,10 +193,10 @@ func printEndpoints(listen string) { // ANSI escape codes for clickable link (OSC 8 hyperlink) clickableURL := fmt.Sprintf("\033]8;;%s\033\\%s\033]8;;\033\\", url, url) - fmt.Println("\n🌐 Web Interface:") - fmt.Println("────────────────────────────────────────────────") - fmt.Printf(" Open in browser: %s\n", clickableURL) - fmt.Println("────────────────────────────────────────────────") + fmt.Fprintln(os.Stderr, "\nWeb Interface:") + fmt.Fprintln(os.Stderr, "────────────────────────────────────────────────") + fmt.Fprintf(os.Stderr, " Open in browser: %s\n", clickableURL) + fmt.Fprintln(os.Stderr, "────────────────────────────────────────────────") - fmt.Println("\n📚 Documentation: https://github.com/eduard256/Strix") + fmt.Fprintln(os.Stderr, "\nDocumentation: https://github.com/eduard256/Strix") } diff --git a/internal/config/config.go b/internal/config/config.go index 7c9fbe8..4e1c56c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -69,8 +69,10 @@ type yamlConfig struct { } `yaml:"api"` } -// Load returns configuration with defaults -func Load() *Config { +// Load returns configuration with defaults. The provided logger is used for +// all startup messages so that output format stays consistent (JSON or text) +// with the rest of the application logs. +func Load(log *slog.Logger) *Config { dataPath := getEnv("STRIX_DATA_PATH", "./data") cfg := &Config{ @@ -127,14 +129,19 @@ func Load() *Config { // Validate listen address if err := validateListen(cfg.Server.Listen); err != nil { - fmt.Fprintf(os.Stderr, "ERROR: Invalid listen address '%s': %v\n", cfg.Server.Listen, err) - fmt.Fprintf(os.Stderr, "Using default: :4567\n") + log.Error("invalid listen address, using default :4567", + slog.String("address", cfg.Server.Listen), + slog.String("error", err.Error()), + ) cfg.Server.Listen = ":4567" configSource = "default (validation failed)" } // Log configuration source - fmt.Printf("INFO: API listen address '%s' loaded from %s\n", cfg.Server.Listen, configSource) + log.Info("configuration loaded", + slog.String("listen", cfg.Server.Listen), + slog.String("source", configSource), + ) return cfg } @@ -226,12 +233,30 @@ func validateListen(listen string) error { return nil } -// SetupLogger configures the global logger. It returns the logger and a -// SecretStore that can be used to register credentials for automatic masking -// in all log output. -func (c *Config) SetupLogger() (*slog.Logger, *logger.SecretStore) { +// SetupLogger creates the application logger by reading log configuration +// from environment variables and Home Assistant options. It must be called +// before Load() so that all startup messages use a consistent output format. +// +// Configuration priority: defaults < HA options < environment variables. +func SetupLogger() (*slog.Logger, *logger.SecretStore) { + // Read log settings from environment (same defaults as Config) + logLevel := getEnv("STRIX_LOG_LEVEL", "info") + logFormat := getEnv("STRIX_LOG_FORMAT", "json") + + // Apply Home Assistant overrides if running as HA add-on + if data, err := os.ReadFile("/data/options.json"); err == nil { + var opts haOptions + if err := json.Unmarshal(data, &opts); err == nil { + if opts.LogLevel != "" { + logLevel = opts.LogLevel + } + // Home Assistant add-on always uses JSON logging for the HA log viewer + logFormat = "json" + } + } + var level slog.Level - switch c.Logger.Level { + switch logLevel { case "debug": level = slog.LevelDebug case "warn": @@ -242,15 +267,15 @@ func (c *Config) SetupLogger() (*slog.Logger, *logger.SecretStore) { level = slog.LevelInfo } - opts := &slog.HandlerOptions{ + handlerOpts := &slog.HandlerOptions{ Level: level, } var handler slog.Handler - if c.Logger.Format == "json" { - handler = slog.NewJSONHandler(os.Stdout, opts) + if logFormat == "json" { + handler = slog.NewJSONHandler(os.Stdout, handlerOpts) } else { - handler = slog.NewTextHandler(os.Stdout, opts) + handler = slog.NewTextHandler(os.Stdout, handlerOpts) } secrets := logger.NewSecretStore() From 9e493a2baca3c4f7a1ddc41baf114b6dffa3b93f Mon Sep 17 00:00:00 2001 From: eduard256 Date: Sun, 22 Mar 2026 17:56:10 +0000 Subject: [PATCH 05/33] Add Podman installation docs with required capabilities Document NET_RAW and NET_ADMIN capabilities needed for network scanning when running Strix with Podman. Includes podman run, podman-compose, and Quadlet (systemd) setup instructions. Addresses #6 --- DOCKER.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 8 ++++++ 2 files changed, 90 insertions(+) diff --git a/DOCKER.md b/DOCKER.md index 91cbf16..7e158fc 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -67,6 +67,88 @@ Services: - go2rtc: http://localhost:1984 - Frigate: http://localhost:5000 +## Podman + +Strix uses raw sockets for network scanning. Podman drops these capabilities by default, +so you need to add them explicitly. Rootless mode does not support host network scanning — +run with `sudo`. + +### Using Podman Run + +```bash +sudo podman run -d \ + --name strix \ + --network host \ + --cap-add=NET_RAW \ + --cap-add=NET_ADMIN \ + --restart unless-stopped \ + eduard256/strix:latest +``` + +- `NET_RAW` — required for network scanning (ARP, ICMP) to discover cameras +- `NET_ADMIN` — required for network interface and routing operations + +### Using Podman Compose + +```yaml +version: '3' + +services: + strix: + image: eduard256/strix:latest + container_name: strix + restart: unless-stopped + network_mode: host + cap_add: + - NET_RAW + - NET_ADMIN + environment: + - STRIX_LOG_LEVEL=info + - STRIX_LOG_FORMAT=json + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4567/api/v1/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s +``` + +```bash +sudo podman-compose up -d +``` + +### Using Quadlet (systemd) + +Recommended for production. Create `/etc/containers/systemd/strix.container`: + +```ini +[Unit] +Description=Strix Camera Stream Discovery +After=network-online.target +Wants=network-online.target + +[Container] +Image=docker.io/eduard256/strix:latest +ContainerName=strix +Network=host +AddCapability=CAP_NET_RAW CAP_NET_ADMIN +Environment=STRIX_LOG_LEVEL=info +Environment=STRIX_LOG_FORMAT=json +AutoUpdate=registry + +[Install] +WantedBy=multi-user.target +``` + +```bash +sudo systemctl daemon-reload +sudo systemctl enable --now strix +sudo systemctl status strix +``` + +Quadlet auto-generates a systemd service from the `.container` file. +The container starts on boot and restarts on failure automatically. + ## Building Locally ```bash diff --git a/README.md b/README.md index 550ece2..18b9510 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,14 @@ Open **http://YOUR_SERVER_IP:4567** sudo apt update && command -v docker >/dev/null 2>&1 || curl -fsSL https://get.docker.com | sudo sh && command -v docker-compose >/dev/null 2>&1 || { sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose; } && curl -fsSL https://raw.githubusercontent.com/eduard256/Strix/main/docker-compose.yml -o docker-compose.yml && docker-compose up -d ``` +### Podman + +```bash +sudo podman run -d --name strix --network host --cap-add=NET_RAW --cap-add=NET_ADMIN --restart unless-stopped eduard256/strix:latest +``` + +Strix uses network scanning to discover cameras. Podman blocks this by default, so `NET_RAW` and `NET_ADMIN` capabilities are required. Must run as root (`sudo`). See [DOCKER.md](DOCKER.md) for Podman Compose and Quadlet (systemd) setup. + ### Home Assistant Add-on **Installation:** From 87c96970a629ca64bb86d2a48d9a884b5f303844 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Mon, 23 Mar 2026 20:12:13 +0000 Subject: [PATCH 06/33] Add camera contribution link to README --- README.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 18b9510..add9e4f 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ ![Demo](assets/main.gif) +**Your camera is not in the database?** [Add it here](https://gostrix.github.io/#/contribute) -- takes 30 seconds. + --- ## Your Problem? @@ -506,14 +508,7 @@ Timeout: 120 (instead of 240) ### Add Your Camera -Found working stream for camera not in database? - -1. [Create Issue](https://github.com/eduard256/Strix/issues) -2. Provide: - - Camera brand and model - - Working URL pattern - - Protocol (RTSP/HTTP/etc) -3. We'll add to database +Found working stream for camera not in database? [Add it here](https://gostrix.github.io/#/contribute). ### Report Bugs From 3a18390f4238cb517dc6d9522ef2d5f7dbd6c0aa Mon Sep 17 00:00:00 2001 From: eduard256 Date: Mon, 23 Mar 2026 20:20:59 +0000 Subject: [PATCH 07/33] Add camera database browse link to README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index add9e4f..e5a20e1 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ![Demo](assets/main.gif) -**Your camera is not in the database?** [Add it here](https://gostrix.github.io/#/contribute) -- takes 30 seconds. +**Check if your camera is supported:** [Browse the database](https://gostrix.github.io/#/brands) | **Not listed?** [Add it here](https://gostrix.github.io/#/contribute) --- From 3b291889242995a4c80c9ffbc8da6934950bcdbf Mon Sep 17 00:00:00 2001 From: eduard256 Date: Mon, 23 Mar 2026 20:25:02 +0000 Subject: [PATCH 08/33] Fix database link to homepage --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5a20e1..f75165b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ![Demo](assets/main.gif) -**Check if your camera is supported:** [Browse the database](https://gostrix.github.io/#/brands) | **Not listed?** [Add it here](https://gostrix.github.io/#/contribute) +**Check if your camera is supported:** [Browse the database](https://gostrix.github.io/) | **Not listed?** [Add it here](https://gostrix.github.io/#/contribute) --- From 27117900ebef60c8e62788369b0d12f80102adc0 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 10:38:46 +0000 Subject: [PATCH 09/33] Rewrite Strix from scratch as single binary 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 --- .dockerignore | 52 - .gitignore | 53 +- CHANGELOG.md | 111 - DEDUPLICATION_TEST_RESULTS.md | 185 - DOCKER.md | 246 - Dockerfile | 69 - FRIGATE_RECORD_CONFIG.md | 155 - LICENSE | 21 - Makefile | 147 - README.md | 553 - assets/icon-192-transparent.png | Bin 19532 -> 0 bytes assets/icon-192.png | Bin 17538 -> 0 bytes assets/icon-512-transparent.png | Bin 54104 -> 0 bytes assets/icon-512.png | Bin 56492 -> 0 bytes assets/icon.svg | 15 - assets/main.gif | Bin 1260899 -> 0 bytes cmd/strix/main.go | 202 - data/DATABASE_FORMAT.md | 517 - data/brands/255-ip-cam.json | 258 - data/brands/2n-helios.json | 54 - data/brands/307-hi-silicon.json | 44 - data/brands/360-eye.json | 266 - data/brands/3com.json | 151 - data/brands/3eyes3.json | 17 - data/brands/3g-ipcam.json | 474 - data/brands/3r.json | 64 - data/brands/3svision.json | 251 - data/brands/3xlogic.json | 245 - data/brands/4er.json | 17 - data/brands/4mp-ip-camera.json | 85 - data/brands/4sdot.json | 72 - data/brands/4ucam.json | 209 - data/brands/4xem.json | 179 - data/brands/4xptz.json | 26 - data/brands/555.json | 17 - data/brands/5mpbullet.json | 17 - data/brands/7-star.json | 17 - data/brands/7links.json | 763 - data/brands/8level.json | 36 - data/brands/9up.json | 53 - data/brands/a-bmi.json | 17 - data/brands/a-link.json | 80 - data/brands/a-mtk.json | 143 - data/brands/a-tion.json | 17 - data/brands/a1webcam.json | 55 - data/brands/a4tech.json | 141 - data/brands/aanke.json | 24 - data/brands/abelcam.json | 80 - data/brands/abient-weather.json | 26 - data/brands/abo.json | 17 - data/brands/abr-security.json | 17 - data/brands/abr.json | 32 - data/brands/abron.json | 17 - data/brands/abs.json | 108 - data/brands/absolutron.json | 35 - data/brands/abus.json | 676 - data/brands/ac38xx.json | 28 - data/brands/acam.json | 36 - data/brands/accfly.json | 29 - data/brands/accsxperts.json | 17 - data/brands/ace.json | 31 - data/brands/acer.json | 123 - data/brands/aceri-bcn.json | 17 - data/brands/acesee.json | 90 - data/brands/achtertuin.json | 56 - data/brands/acm-v3002.json | 18 - data/brands/acm.json | 62 - data/brands/acor.json | 17 - data/brands/acromedia.json | 182 - data/brands/acti.json | 727 - data/brands/action.json | 72 - data/brands/actioncam.json | 44 - data/brands/actiontec.json | 17 - data/brands/activa.json | 28 - data/brands/active-vision.json | 17 - data/brands/active.json | 161 - data/brands/activecam.json | 36 - data/brands/acumen.json | 49 - data/brands/acunico.json | 26 - data/brands/acvil.json | 35 - data/brands/adamas.json | 26 - data/brands/adapter.json | 26 - data/brands/adata.json | 67 - data/brands/adc.json | 130 - data/brands/adeco.json | 17 - data/brands/adhua-dh-ipc-hdw4233c-a.json | 17 - data/brands/adhua.json | 116 - data/brands/adiance.json | 17 - data/brands/adj.json | 62 - data/brands/adt.json | 433 - data/brands/adv.json | 18 - data/brands/advance.json | 220 - data/brands/advanced-home.json | 80 - data/brands/advidia.json | 327 - data/brands/advisen.json | 28 - data/brands/advitronics.json | 17 - data/brands/aecbl1.json | 26 - data/brands/aegis.json | 17 - data/brands/aeon.json | 27 - data/brands/aeoss.json | 67 - data/brands/aercont.json | 52 - data/brands/aeromax.json | 34 - data/brands/aes.json | 26 - data/brands/aetos.json | 35 - data/brands/aevision.json | 32 - data/brands/afidus.json | 58 - data/brands/afreey.json | 56 - data/brands/agasio.json | 357 - data/brands/agk.json | 26 - data/brands/agptek.json | 17 - data/brands/agrofilm.json | 26 - data/brands/agsso.json | 26 - data/brands/aguadilla.json | 17 - data/brands/aguilera.json | 26 - data/brands/aha.json | 26 - data/brands/ahd.json | 78 - data/brands/ahio-digital.json | 17 - data/brands/ahula.json | 17 - data/brands/ai-ball.json | 35 - data/brands/ai-wifi.json | 26 - data/brands/aiboostpro.json | 26 - data/brands/aicam.json | 65 - data/brands/aida.json | 18 - data/brands/aiex.json | 27 - data/brands/aigas.json | 17 - data/brands/ainol.json | 17 - data/brands/aipcam.json | 172 - data/brands/air-live.json | 153 - data/brands/aircam.json | 142 - data/brands/aircamubnt.json | 17 - data/brands/airlink.json | 435 - data/brands/airlive.json | 613 - data/brands/airmobi.json | 17 - data/brands/airship.json | 35 - data/brands/airsight.json | 430 - data/brands/airsoft.json | 19 - data/brands/airspace.json | 55 - data/brands/airstream.json | 17 - data/brands/airties.json | 26 - data/brands/airtop.json | 17 - data/brands/airview.json | 17 - data/brands/airwave.json | 53 - data/brands/ait.json | 17 - data/brands/aitek.json | 17 - data/brands/aivant.json | 17 - data/brands/ajhua.json | 119 - data/brands/ajt.json | 47 - data/brands/ajtv.json | 17 - data/brands/akai.json | 54 - data/brands/akaso.json | 46 - data/brands/akeia.json | 17 - data/brands/akon.json | 26 - data/brands/aksilium.json | 17 - data/brands/aku.json | 35 - data/brands/akuvox.json | 52 - data/brands/alarm.com.json | 156 - data/brands/alaterassi.json | 17 - data/brands/alcatel.json | 85 - data/brands/alcon.json | 55 - data/brands/alecto.json | 224 - data/brands/alertme.json | 27 - data/brands/alexim.json | 83 - data/brands/alfa.json | 109 - data/brands/alfawise.json | 18 - data/brands/alhua.json | 291 - data/brands/ali-express.json | 104 - data/brands/ali.json | 77 - data/brands/alianza.json | 17 - data/brands/alias.json | 26 - data/brands/alibi.json | 149 - data/brands/aliendvr.json | 35 - data/brands/aliexpress.json | 18 - data/brands/alinking.json | 292 - data/brands/alivision.json | 26 - data/brands/all-in-one.json | 245 - data/brands/allecto.json | 35 - data/brands/alliede.json | 35 - data/brands/allnet.json | 383 - data/brands/allsky.json | 26 - data/brands/alltec.json | 17 - data/brands/almacen.json | 35 - data/brands/alonma.json | 17 - data/brands/alp.json | 17 - data/brands/alpha-power.json | 26 - data/brands/alpha.json | 17 - data/brands/alphacam.json | 17 - data/brands/alphago.json | 17 - data/brands/alphatec.json | 26 - data/brands/alphatech.json | 26 - data/brands/alpina.json | 35 - data/brands/alpine.json | 17 - data/brands/alptop.json | 104 - data/brands/altan.json | 19 - data/brands/altasec.json | 45 - data/brands/altcam.json | 20 - data/brands/altec-lansing.json | 17 - data/brands/am.json | 26 - data/brands/amamax.json | 59 - data/brands/amano.json | 18 - data/brands/amarine.json | 17 - data/brands/amatek.json | 27 - data/brands/amax.json | 36 - data/brands/amazable.json | 18 - data/brands/amazon.json | 54 - data/brands/amba.json | 17 - data/brands/ambarella.json | 35 - data/brands/amber.json | 17 - data/brands/ambientcam.json | 26 - data/brands/ambyux-dual-cam.json | 26 - data/brands/amc.json | 63 - data/brands/amcast.json | 17 - data/brands/amcom.json | 17 - data/brands/amcrest.json | 1833 -- data/brands/amegia.json | 26 - data/brands/amera.json | 17 - data/brands/american-dynamics.json | 225 - data/brands/ameta.json | 45 - data/brands/amiccom.json | 30 - data/brands/amiko.json | 28 - data/brands/amirok.json | 17 - data/brands/amity.json | 20 - data/brands/amopm.json | 35 - data/brands/amorvue.json | 60 - data/brands/amovision.json | 205 - data/brands/ampand.json | 17 - data/brands/amsecu.json | 17 - data/brands/amview-hd.json | 18 - data/brands/amview.json | 17 - data/brands/amway.json | 35 - data/brands/ana-pola.json | 17 - data/brands/anba.json | 51 - data/brands/anbash.json | 28 - data/brands/anbe.json | 17 - data/brands/anbe2.json | 30 - data/brands/anben.json | 17 - data/brands/anbentech.json | 17 - data/brands/anbiux.json | 28 - data/brands/anbong.json | 17 - data/brands/anbvision.json | 20 - data/brands/ancarla.json | 17 - data/brands/andin.json | 17 - data/brands/andowl.json | 78 - data/brands/android-ip-cam.json | 65 - data/brands/android-ip-webcam.json | 104 - data/brands/android.json | 410 - data/brands/anenda.json | 17 - data/brands/anga.json | 20 - data/brands/angel-electronics.json | 75 - data/brands/anhkiet.json | 17 - data/brands/anjia.json | 17 - data/brands/anjiel.json | 17 - data/brands/anjvision.json | 19 - data/brands/anker.json | 17 - data/brands/anko-tech.json | 17 - data/brands/anlapus.json | 44 - data/brands/annahme.json | 26 - data/brands/annez.json | 26 - data/brands/anni-digital.json | 41 - data/brands/annke.json | 892 - data/brands/anno-zero-ltd.json | 17 - data/brands/anpviz.json | 269 - data/brands/anran.json | 557 - data/brands/anscam.json | 17 - data/brands/ansice.json | 20 - data/brands/ansjer.json | 28 - data/brands/anson.json | 37 - data/brands/anspo.json | 50 - data/brands/antifurto365.json | 17 - data/brands/antik-smartcam.json | 35 - data/brands/antkr.json | 28 - data/brands/antrica.json | 18 - data/brands/anv.json | 88 - data/brands/anvan.json | 35 - data/brands/anxinshi.json | 17 - data/brands/anyka.json | 17 - data/brands/anykeeper.json | 26 - data/brands/anysun.json | 27 - data/brands/aobo.json | 46 - data/brands/aochan.json | 17 - data/brands/aomg.json | 17 - data/brands/aoshi.json | 17 - data/brands/aote.json | 99 - data/brands/aotetek.json | 17 - data/brands/aottom.json | 44 - data/brands/ap-tech.json | 26 - data/brands/apc.json | 50 - data/brands/apeman.json | 36 - data/brands/aper.json | 46 - data/brands/apexis.json | 746 - data/brands/apix.json | 17 - data/brands/apklink.json | 141 - data/brands/apleye.json | 17 - data/brands/apm.json | 17 - data/brands/apn-vision-ltd..json | 17 - data/brands/apogee.json | 26 - data/brands/aposonic.json | 83 - data/brands/app-cam-35.json | 17 - data/brands/apple.json | 221 - data/brands/applesonic.json | 17 - data/brands/applink.json | 17 - data/brands/appo.json | 17 - data/brands/appro.json | 117 - data/brands/approx.json | 124 - data/brands/aprica.json | 17 - data/brands/aprox.json | 17 - data/brands/apti.json | 79 - data/brands/aptina.json | 54 - data/brands/aqara.json | 35 - data/brands/aqua.json | 17 - data/brands/aquila.json | 63 - data/brands/ar3210.json | 17 - data/brands/aran.json | 27 - data/brands/archos.json | 17 - data/brands/arcvision.json | 28 - data/brands/area.json | 17 - data/brands/area51.json | 35 - data/brands/arebi.json | 26 - data/brands/arecont.json | 767 - data/brands/arenti.json | 33 - data/brands/argom-tech.json | 17 - data/brands/argos.json | 26 - data/brands/argus.json | 26 - data/brands/argusleader.json | 17 - data/brands/arit.json | 17 - data/brands/arlotto.json | 76 - data/brands/arm.json | 26 - data/brands/arma-tech.json | 17 - data/brands/armorview.json | 17 - data/brands/armorvue.json | 17 - data/brands/arnan.json | 35 - data/brands/arp.json | 17 - data/brands/arrow-security-system.json | 26 - data/brands/arsoft.json | 17 - data/brands/arvani-cctv.json | 36 - data/brands/asagio.json | 74 - data/brands/asante.json | 109 - data/brands/asc.json | 17 - data/brands/asdibuy.json | 35 - data/brands/asecam.json | 60 - data/brands/asgari.json | 186 - data/brands/ashmount-ptz.json | 26 - data/brands/asia.json | 17 - data/brands/asip.json | 27 - data/brands/asm.json | 35 - data/brands/asoni.json | 97 - data/brands/aspac.json | 30 - data/brands/asrock.json | 29 - data/brands/astak.json | 84 - data/brands/asterix.json | 17 - data/brands/asti.json | 17 - data/brands/astr.json | 17 - data/brands/astra-streaming.json | 17 - data/brands/astrind.json | 17 - data/brands/astroghost.json | 17 - data/brands/astrum.json | 18 - data/brands/astun.json | 17 - data/brands/asus.json | 129 - data/brands/asutech.json | 17 - data/brands/asw-006.json | 17 - data/brands/aszhonga.json | 17 - data/brands/at-vision.json | 26 - data/brands/atheros.json | 44 - data/brands/athome.json | 45 - data/brands/atis.json | 36 - data/brands/atlantis.json | 85 - data/brands/atlona.json | 17 - data/brands/atomtech.json | 18 - data/brands/atrix.json | 26 - data/brands/att.json | 27 - data/brands/attech.json | 17 - data/brands/attichd.json | 26 - data/brands/attn.json | 17 - data/brands/atv.json | 64 - data/brands/atz.json | 45 - data/brands/au3.json | 18 - data/brands/audiance.json | 17 - data/brands/audio-enhancement.json | 17 - data/brands/august.json | 71 - data/brands/auric.json | 27 - data/brands/aussen.json | 26 - data/brands/auto.json | 13 - data/brands/autoip.json | 29 - data/brands/auwer.json | 17 - data/brands/av102ip-40.json | 35 - data/brands/av12176dn-15.json | 26 - data/brands/av265.json | 17 - data/brands/av40185dn-cd.json | 17 - data/brands/avacom.json | 162 - data/brands/avaja.json | 17 - data/brands/avalonix.json | 28 - data/brands/avantgarde.json | 42 - data/brands/avaya.json | 44 - data/brands/avcam.json | 17 - data/brands/avd552mip.json | 26 - data/brands/ave.json | 26 - data/brands/avenir.json | 17 - data/brands/aventi.json | 26 - data/brands/aventura.json | 47 - data/brands/aver.json | 121 - data/brands/averdigi.json | 17 - data/brands/avermedia.json | 103 - data/brands/avertx.json | 90 - data/brands/avicam.json | 53 - data/brands/avidia.json | 45 - data/brands/avidsen.json | 65 - data/brands/avigilon.json | 103 - data/brands/avilink.json | 17 - data/brands/avios-webserver.json | 17 - data/brands/aviosis.json | 17 - data/brands/aviosys.json | 210 - data/brands/avipas.json | 19 - data/brands/aviptek.json | 35 - data/brands/avistek.json | 17 - data/brands/avl-hd-dome.json | 17 - data/brands/avl.json | 17 - data/brands/avn.json | 17 - data/brands/avonic.json | 17 - data/brands/avosys.json | 18 - data/brands/avr-raiden.json | 44 - data/brands/avs.json | 130 - data/brands/avstart.json | 17 - data/brands/avt.json | 17 - data/brands/avtech.json | 808 - data/brands/avtron.json | 18 - data/brands/avue.json | 18 - data/brands/avycon.json | 19 - data/brands/avz.json | 17 - data/brands/awfa-cam.json | 17 - data/brands/awow.json | 17 - data/brands/axenta.json | 26 - data/brands/axeon.json | 18 - data/brands/axgio.json | 19 - data/brands/axis.json | 4127 --- data/brands/axium.json | 17 - data/brands/axp.json | 56 - data/brands/ayrstone.json | 26 - data/brands/azemax.json | 29 - data/brands/azone.json | 51 - data/brands/azpen.json | 17 - data/brands/aztech.json | 277 - data/brands/b-qtech.json | 74 - data/brands/b-series.json | 108 - data/brands/ba-vision.json | 28 - data/brands/babelens.json | 17 - data/brands/babicka.json | 17 - data/brands/babycam.json | 54 - data/brands/baksa.json | 17 - data/brands/balitech.json | 26 - data/brands/balkon.json | 26 - data/brands/balkong.json | 17 - data/brands/balzan.json | 27 - data/brands/banzoo.json | 26 - data/brands/barco.json | 35 - data/brands/bardi.json | 26 - data/brands/barlus.json | 54 - data/brands/bascom.json | 51 - data/brands/basler.json | 114 - data/brands/bavision.json | 27 - data/brands/bayit.json | 36 - data/brands/baytech.json | 17 - data/brands/bb10.json | 17 - data/brands/bcs.json | 195 - data/brands/bdpower.json | 26 - data/brands/beaulieu.json | 17 - data/brands/beb3.json | 17 - data/brands/becam.json | 17 - data/brands/bedee.json | 28 - data/brands/beenocam.json | 17 - data/brands/belco.json | 44 - data/brands/belder.json | 17 - data/brands/belkin-netcam.json | 39 - data/brands/belkin.json | 75 - data/brands/bell.json | 17 - data/brands/belle.json | 17 - data/brands/beltech.json | 17 - data/brands/bentoo.json | 17 - data/brands/benyuan.json | 26 - data/brands/berger.json | 17 - data/brands/bersan.json | 26 - data/brands/besder.json | 507 - data/brands/bessky.json | 17 - data/brands/best-buy.json | 37 - data/brands/best-digital.json | 17 - data/brands/besta.json | 18 - data/brands/bestek.json | 17 - data/brands/bettini.json | 17 - data/brands/beview.json | 17 - data/brands/beward.json | 268 - data/brands/bholt.json | 17 - data/brands/bigasua.json | 26 - data/brands/bigfoot.json | 17 - data/brands/bikal-ip-cctv.json | 44 - data/brands/biltema.json | 21 - data/brands/binnencamera.json | 17 - data/brands/bins.json | 17 - data/brands/bionics.json | 113 - data/brands/biovision.json | 32 - data/brands/bioxo.json | 17 - data/brands/bip-2.json | 18 - data/brands/bipcam.json | 67 - data/brands/biqu.json | 26 - data/brands/birdsy.json | 26 - data/brands/bitron.json | 18 - data/brands/biwond.json | 18 - data/brands/bl-ip-cam.json | 56 - data/brands/black-eagle.json | 44 - data/brands/black-label.json | 47 - data/brands/black.json | 57 - data/brands/blackat.json | 17 - data/brands/blackberry.json | 53 - data/brands/blackcamera.json | 17 - data/brands/blackfirst.json | 17 - data/brands/blackview.json | 17 - data/brands/blaupunkt.json | 29 - data/brands/blink.json | 23 - data/brands/blitzwolf.json | 37 - data/brands/bls.json | 17 - data/brands/blu.json | 26 - data/brands/blue-fish-cam.json | 17 - data/brands/blue-iris.json | 47 - data/brands/bluecherry.json | 17 - data/brands/blueeyes.json | 44 - data/brands/bluejay.json | 44 - data/brands/bluepix.json | 17 - data/brands/bluestork.json | 121 - data/brands/blurams.json | 18 - data/brands/bmobile.json | 28 - data/brands/bnc-vision.json | 17 - data/brands/bnt.json | 17 - data/brands/boavision.json | 280 - data/brands/boh.json | 27 - data/brands/bolide.json | 35 - data/brands/bolin.json | 17 - data/brands/bondfree.json | 17 - data/brands/bonvision.json | 26 - data/brands/borsystems.json | 17 - data/brands/bortox.json | 17 - data/brands/bosch.json | 767 - data/brands/bosma.json | 17 - data/brands/boss.json | 17 - data/brands/bosslan.json | 17 - data/brands/botcam.json | 28 - data/brands/botslab.json | 18 - data/brands/boust.json | 17 - data/brands/boven.json | 17 - data/brands/bowya.json | 17 - data/brands/box.json | 17 - data/brands/bp-power.json | 26 - data/brands/brahms.json | 17 - data/brands/brama.json | 17 - data/brands/braun.json | 46 - data/brands/bravo.json | 35 - data/brands/bravolink.json | 35 - data/brands/breno.json | 17 - data/brands/brickcom.json | 219 - data/brands/brickhouse-security.json | 17 - data/brands/bridge.json | 17 - data/brands/bridget.json | 26 - data/brands/bridgevms.json | 26 - data/brands/brillcam.json | 52 - data/brands/briwax.json | 17 - data/brands/broadcom.json | 17 - data/brands/brovision.json | 35 - data/brands/brovotech.json | 20 - data/brands/bsp-security.json | 37 - data/brands/bsti.json | 55 - data/brands/bticam.json | 53 - data/brands/bticino.json | 17 - data/brands/btmax.json | 17 - data/brands/bu-720.json | 26 - data/brands/buffalo.json | 26 - data/brands/buffelshoek.json | 17 - data/brands/buitencamera.json | 64 - data/brands/bullet.json | 65 - data/brands/bulletzoom.json | 26 - data/brands/bullwark.json | 36 - data/brands/bush-plus.json | 29 - data/brands/buyee.json | 35 - data/brands/bv-globe.json | 17 - data/brands/bv-security.json | 35 - data/brands/bvcam.json | 27 - data/brands/bvusa.json | 17 - data/brands/bwa.json | 26 - data/brands/bxkam.json | 17 - data/brands/bytec.json | 26 - data/brands/bytek.json | 26 - data/brands/c2100.json | 54 - data/brands/ca-ip400mp.json | 17 - data/brands/cacagoo.json | 29 - data/brands/caddx.json | 17 - data/brands/cadyce.json | 66 - data/brands/caikong.json | 26 - data/brands/caisse.json | 17 - data/brands/caja.json | 17 - data/brands/calion.json | 18 - data/brands/camasmart.json | 26 - data/brands/cambozola.json | 17 - data/brands/camdeor.json | 18 - .../brands/camera-solar-led-street-light.json | 17 - data/brands/camerawelt.json | 17 - data/brands/camery.json | 26 - data/brands/cameye.json | 17 - data/brands/camhd.json | 26 - data/brands/camhi.json | 117 - data/brands/camius.json | 17 - data/brands/camkeeper.json | 17 - data/brands/camline-pro.json | 28 - data/brands/cammy.json | 44 - data/brands/camon.json | 27 - data/brands/campo.json | 17 - data/brands/camqo.json | 17 - data/brands/camsafe.json | 17 - data/brands/camscam.json | 17 - data/brands/camsee.json | 29 - data/brands/camspot.json | 29 - data/brands/camstar.json | 26 - data/brands/camtronics.json | 44 - data/brands/camview.json | 53 - data/brands/camvision.json | 17 - data/brands/camwest.json | 17 - data/brands/camwon.json | 28 - data/brands/canavis.json | 38 - data/brands/canon.json | 257 - data/brands/cantek.json | 19 - data/brands/cantok.json | 26 - data/brands/cantonk.json | 111 - data/brands/carcam.json | 59 - data/brands/cas-200.json | 35 - data/brands/cas-700.json | 35 - data/brands/casa.json | 26 - data/brands/casio.json | 19 - data/brands/casperi.json | 26 - data/brands/catawba.json | 17 - data/brands/cb-101ae.json | 17 - data/brands/cb-102ae.json | 17 - data/brands/cbc-america.json | 66 - data/brands/cc-plus.json | 26 - data/brands/ccam.json | 36 - data/brands/ccd-ip-camera.json | 84 - data/brands/ccd-video-camera.json | 35 - data/brands/ccdcam.json | 91 - data/brands/cci.json | 17 - data/brands/cco.json | 26 - data/brands/cctv-sentry.json | 44 - data/brands/cctv.json | 425 - data/brands/cctvhotdeals.json | 170 - data/brands/cctvman.json | 46 - data/brands/cctvr3.json | 17 - data/brands/cctvsecuritypros.json | 26 - data/brands/cctvstar.json | 17 - data/brands/ccy.json | 26 - data/brands/cd-cam.json | 17 - data/brands/cda.json | 17 - data/brands/cdr-king.json | 398 - data/brands/cdr.json | 17 - data/brands/cdxx.json | 26 - data/brands/cdxxcamera.json | 17 - data/brands/cechas.json | 17 - data/brands/celestrom.json | 17 - data/brands/celius.json | 18 - data/brands/cell-cam.json | 17 - data/brands/cellinx-sth775.json | 17 - data/brands/cellinx.json | 27 - data/brands/cellvision.json | 54 - data/brands/celu.json | 17 - data/brands/cengiz.json | 35 - data/brands/cennan.json | 17 - data/brands/cenova.json | 28 - data/brands/censee.json | 17 - data/brands/centechia.json | 17 - data/brands/centrium.json | 19 - data/brands/centrix.json | 17 - data/brands/centronics.json | 17 - data/brands/cepsa.json | 56 - data/brands/cesnet.json | 17 - data/brands/chacon.json | 125 - data/brands/chakir.json | 17 - data/brands/chambre.json | 17 - data/brands/channel-vision.json | 42 - data/brands/channel01.json | 38 - data/brands/chapel.json | 17 - data/brands/chavega.json | 54 - data/brands/cheap.json | 26 - data/brands/cheapcam.json | 17 - data/brands/cherry-mobile.json | 17 - data/brands/chicony.json | 35 - data/brands/childrenview.com.json | 17 - data/brands/china-dragon.json | 55 - data/brands/china.json | 868 - data/brands/chinavasion.json | 329 - data/brands/chinawest.json | 17 - data/brands/chine.json | 17 - data/brands/chinese-lamp-camera.json | 26 - data/brands/chinese.json | 39 - data/brands/chineseptz.json | 26 - data/brands/chineseum.json | 17 - data/brands/chingling.json | 28 - data/brands/chino.json | 17 - data/brands/chint.json | 17 - data/brands/choice.json | 121 - data/brands/chongro.json | 17 - data/brands/chortau.json | 68 - data/brands/chowha.json | 26 - data/brands/chrysalis.json | 17 - data/brands/chua.json | 17 - data/brands/chubb.json | 17 - data/brands/ciana-exports.json | 26 - data/brands/cib-security.json | 26 - data/brands/cina.json | 26 - data/brands/cinnado.json | 35 - data/brands/cip.json | 100 - data/brands/cipem.json | 17 - data/brands/ciqurix.json | 26 - data/brands/cisco.json | 504 - data/brands/cita.json | 17 - data/brands/citc.json | 26 - data/brands/citronix.json | 47 - data/brands/citrox.json | 20 - data/brands/citystar.json | 17 - data/brands/citysync.json | 17 - data/brands/civs-ipc-6400.json | 18 - data/brands/clairvoyant-mwr.json | 17 - data/brands/clas.json | 53 - data/brands/clearone.json | 17 - data/brands/clearpix.json | 17 - data/brands/clearview.json | 31 - data/brands/clever-loop.json | 21 - data/brands/clock.json | 35 - data/brands/cloud-ip-camera.json | 161 - data/brands/cloud.json | 121 - data/brands/cloud2000.json | 17 - data/brands/cloudcam.json | 167 - data/brands/cloudlive.json | 17 - data/brands/cmos.json | 26 - data/brands/cms-zonet.json | 17 - data/brands/cms.json | 38 - data/brands/cnb.json | 65 - data/brands/cnet.json | 44 - data/brands/cnm.json | 64 - data/brands/cobra.json | 64 - data/brands/cocoon.json | 18 - data/brands/codnida.json | 18 - data/brands/cohu.json | 76 - data/brands/cohuhd.json | 17 - data/brands/comcast.json | 39 - data/brands/comelit.json | 81 - data/brands/commend.json | 55 - data/brands/communications-line.json | 27 - data/brands/compro.json | 286 - data/brands/compufix4u.json | 17 - data/brands/coms.json | 17 - data/brands/comtac.json | 48 - data/brands/comtrend.json | 20 - data/brands/concept-pro.json | 28 - data/brands/conceptronic.json | 298 - data/brands/concord.json | 39 - data/brands/condere.json | 78 - data/brands/conico.json | 37 - data/brands/connectec.json | 36 - data/brands/connectionnc.json | 62 - data/brands/connectsmarthome.json | 26 - data/brands/connex.json | 44 - data/brands/contack.json | 26 - data/brands/control3d.json | 17 - data/brands/control4.json | 17 - data/brands/convision.json | 84 - data/brands/convo-kontor.json | 17 - data/brands/cooau.json | 79 - data/brands/coocheer.json | 18 - data/brands/coolcam.json | 58 - data/brands/coolead.json | 40 - data/brands/coolpad.json | 18 - data/brands/cooradilla.json | 17 - data/brands/cootli.json | 28 - data/brands/cop.json | 17 - data/brands/copa-10.json | 17 - data/brands/copbr.json | 17 - data/brands/core.json | 17 - data/brands/corega.json | 71 - data/brands/corex.json | 17 - data/brands/corprit.json | 17 - data/brands/corsee.json | 98 - data/brands/cosansys.json | 17 - data/brands/costar.json | 44 - data/brands/costim.json | 17 - data/brands/cotier.json | 245 - data/brands/cour.json | 17 - data/brands/covisec.json | 17 - data/brands/cowkey.json | 35 - data/brands/cp-plus.json | 407 - data/brands/cpcam.json | 54 - data/brands/cpd.json | 26 - data/brands/cptcam.json | 74 - data/brands/cpvan.json | 18 - data/brands/cr2100.json | 17 - data/brands/creality.json | 18 - data/brands/creative.json | 65 - data/brands/crenova.json | 62 - data/brands/crest.json | 26 - data/brands/crestron.json | 17 - data/brands/cricket.json | 33 - data/brands/crl.json | 17 - data/brands/crysta-vision.json | 17 - data/brands/crystal-vision.json | 50 - data/brands/cs-280f53.json | 26 - data/brands/cs2link.json | 26 - data/brands/csst.json | 26 - data/brands/ct2.json | 17 - data/brands/ctipc.json | 17 - data/brands/ctronics.json | 389 - data/brands/ctvision.json | 26 - data/brands/ctvison.json | 17 - data/brands/ctvman.json | 17 - data/brands/cube.json | 26 - data/brands/cubitech.json | 17 - data/brands/cusxy.json | 17 - data/brands/cv-b13b10-odi.json | 26 - data/brands/cv3c.json | 17 - data/brands/cvlm.json | 58 - data/brands/cyber.json | 26 - data/brands/cybernetik.json | 17 - data/brands/cybernova.json | 59 - data/brands/cyberview.json | 17 - data/brands/cybo.json | 17 - data/brands/cycam.json | 17 - data/brands/cyclops.json | 98 - data/brands/cygnus.json | 17 - data/brands/cygonix.json | 17 - data/brands/cymbol.json | 17 - data/brands/cynics.json | 19 - data/brands/cyrus.json | 26 - data/brands/czarna.json | 26 - data/brands/d-link.json | 3919 --- data/brands/d-tech.json | 44 - data/brands/d2ip.json | 17 - data/brands/d3d.json | 63 - data/brands/d5118-acfsvt7.json | 17 - data/brands/d5118-acnkf13.json | 17 - data/brands/dae.json | 35 - data/brands/dafang.json | 17 - data/brands/dagro.json | 55 - data/brands/dahua.json | 2850 -- data/brands/dakang.json | 18 - data/brands/dali-tech.json | 17 - data/brands/dallmeier.json | 41 - data/brands/damigou.json | 17 - data/brands/danale.json | 17 - data/brands/danele.json | 17 - data/brands/danmini.json | 17 - data/brands/dannovo.json | 46 - data/brands/danother.json | 26 - data/brands/dante.json | 26 - data/brands/darts.json | 17 - data/brands/dasco.json | 26 - data/brands/dashua.json | 19 - data/brands/datapartner.json | 17 - data/brands/datavideo.json | 17 - data/brands/davicom.json | 17 - data/brands/davislumadvr.json | 17 - data/brands/dawan.json | 27 - data/brands/dax.json | 106 - data/brands/daytech.json | 30 - data/brands/dayukeji.json | 17 - data/brands/db-power.json | 855 - data/brands/dbb.json | 36 - data/brands/dbcam.json | 27 - data/brands/dbell.json | 46 - data/brands/dbp.json | 17 - data/brands/dcl.json | 38 - data/brands/dcpcctv.json | 17 - data/brands/dcs.json | 35 - data/brands/decam.json | 17 - data/brands/declink.json | 17 - data/brands/dedicated-micro.json | 17 - data/brands/dedicated-micros.json | 49 - data/brands/deecam.json | 48 - data/brands/deep-sentinel.json | 17 - data/brands/defaway.json | 17 - data/brands/defender.json | 76 - data/brands/defeway.json | 130 - data/brands/dekco.json | 53 - data/brands/dekel.json | 17 - data/brands/delaval.json | 17 - data/brands/delcatec.json | 17 - data/brands/dell.json | 66 - data/brands/delphi.json | 26 - data/brands/deltaco.json | 64 - data/brands/denavo.json | 44 - data/brands/dentech.json | 17 - data/brands/denver.json | 240 - data/brands/dericam.json | 483 - data/brands/desertwolfblackwidow606.json | 27 - data/brands/detec.json | 17 - data/brands/dev_ipnc.json | 17 - data/brands/devant.json | 17 - data/brands/deviceclientq.json | 17 - data/brands/dextel.json | 17 - data/brands/df960p.json | 17 - data/brands/dgsol.json | 18 - data/brands/dharmesh.json | 17 - data/brands/dhi-cam.json | 36 - data/brands/dhwe.json | 26 - data/brands/diadromos.json | 17 - data/brands/diamond.json | 17 - data/brands/dianwan.json | 17 - data/brands/dico-800.json | 26 - data/brands/digicam.json | 18 - data/brands/digicom.json | 96 - data/brands/digihero.json | 17 - data/brands/digijet.json | 17 - data/brands/digilan.json | 36 - data/brands/digimerge.json | 110 - data/brands/digisol.json | 81 - data/brands/digital-intellect.json | 26 - data/brands/digital-security.json | 17 - data/brands/digital-video-recorder.json | 18 - data/brands/digital-watchdog.json | 197 - data/brands/digitalvision.json | 17 - data/brands/digitalwatchdog.json | 17 - data/brands/digitcam.json | 56 - data/brands/digitech.json | 18 - data/brands/digitus.json | 351 - data/brands/digivue.json | 17 - data/brands/digix.json | 26 - data/brands/digma-smart-home.json | 17 - data/brands/digma.json | 26 - data/brands/dignity.json | 17 - data/brands/digoo.json | 246 - data/brands/dimension.json | 17 - data/brands/dimos.json | 17 - data/brands/dinesh.json | 17 - data/brands/dinon.json | 86 - data/brands/dinox.json | 37 - data/brands/diopoint.json | 26 - data/brands/discover.json | 27 - data/brands/discovery.json | 17 - data/brands/dish-cam.json | 17 - data/brands/diske.json | 17 - data/brands/diverse.json | 27 - data/brands/diviotec.json | 35 - data/brands/divis.json | 71 - data/brands/divisat.json | 17 - data/brands/dixie.json | 17 - data/brands/dizink.json | 17 - data/brands/dkseg.json | 54 - data/brands/dl-cam.json | 17 - data/brands/dlt-plenty.json | 17 - data/brands/dm365-ipnc.json | 218 - data/brands/dmp.json | 36 - data/brands/dmzok.json | 21 - data/brands/dnt.json | 37 - data/brands/dnvr.json | 26 - data/brands/docker-wyze-bridge.json | 35 - data/brands/docooler.json | 17 - data/brands/dod-tech.json | 17 - data/brands/dodocool.json | 27 - data/brands/doma.json | 19 - data/brands/domar.json | 17 - data/brands/dome.json | 110 - data/brands/domecam.json | 17 - data/brands/domintell.json | 17 - data/brands/domogonza.json | 26 - data/brands/dongjia.json | 49 - data/brands/doogee.json | 28 - data/brands/door-bell.json | 17 - data/brands/door.json | 44 - data/brands/doorbird.json | 61 - data/brands/doorcam.json | 26 - data/brands/doorphone.json | 27 - data/brands/dosilkc.json | 17 - data/brands/doss.json | 35 - data/brands/dotix.json | 17 - data/brands/doubleeagl.json | 17 - data/brands/dowse.json | 17 - data/brands/dowson.json | 17 - data/brands/dragon-touch.json | 30 - data/brands/dragoncam.json | 35 - data/brands/dreamstar.json | 28 - data/brands/drh-domotics.json | 17 - data/brands/droid.json | 29 - data/brands/ds-i200.json | 17 - data/brands/dsc.json | 36 - data/brands/dsnny.json | 36 - data/brands/dsp.json | 17 - data/brands/dss.json | 18 - data/brands/ducki.json | 35 - data/brands/duhau.json | 18 - data/brands/duhua.json | 46 - data/brands/dunlop.json | 26 - data/brands/durawell.json | 27 - data/brands/dvir.json | 17 - data/brands/dvr.json | 382 - data/brands/dvri.json | 26 - data/brands/dvrn4.json | 53 - data/brands/dvrusa.json | 17 - data/brands/dvs-ip-cam.json | 68 - data/brands/dvs.json | 46 - data/brands/dvtel.json | 90 - data/brands/dx.json | 18 - data/brands/dygitus.json | 17 - data/brands/dynacolor.json | 105 - data/brands/dynamo.json | 35 - data/brands/dynamode.json | 37 - data/brands/e-landing.json | 35 - data/brands/e-lock.json | 36 - data/brands/e-tech.json | 39 - data/brands/e-think.json | 27 - data/brands/e-view.json | 17 - data/brands/eagle-eye.json | 77 - data/brands/eagle-view.json | 30 - data/brands/eagle-vision.json | 44 - data/brands/eagleeye.json | 17 - data/brands/eaglestar.json | 17 - data/brands/eagleview.json | 17 - data/brands/eam.json | 17 - data/brands/eamo.json | 26 - data/brands/eardatech.json | 45 - data/brands/east.json | 18 - data/brands/eastcam.json | 17 - data/brands/easternccc.json | 17 - data/brands/easterncctv.json | 18 - data/brands/eastvision.json | 17 - data/brands/easy-ip.json | 28 - data/brands/easy.json | 108 - data/brands/easy4ip.json | 27 - data/brands/easycam.json | 120 - data/brands/easycap.json | 17 - data/brands/easyn.json | 1285 - data/brands/easyse.json | 192 - data/brands/easytao.json | 26 - data/brands/easyz.json | 17 - data/brands/eazydv.json | 35 - data/brands/ebode.json | 133 - data/brands/ebw.json | 26 - data/brands/ec101.json | 17 - data/brands/ecam.json | 26 - data/brands/echo-star.json | 44 - data/brands/eclipse.json | 42 - data/brands/eco.json | 26 - data/brands/ecoline.json | 17 - data/brands/economato.json | 17 - data/brands/edge.json | 80 - data/brands/edgecore.json | 17 - data/brands/edimax.json | 809 - data/brands/edison.json | 17 - data/brands/ednet.json | 26 - data/brands/edss.json | 17 - data/brands/eero.json | 26 - data/brands/eescam.json | 55 - data/brands/eesee.json | 17 - data/brands/eet.json | 17 - data/brands/ego.json | 26 - data/brands/egpis.json | 19 - data/brands/eguard.json | 17 - data/brands/ehea.json | 17 - data/brands/eickhoff.json | 17 - data/brands/eigeek.json | 49 - data/brands/eigen.json | 17 - data/brands/eight.json | 26 - data/brands/eighteen.json | 17 - data/brands/eingangscamera.json | 17 - data/brands/einnov.json | 28 - data/brands/eip.json | 26 - data/brands/eitea.json | 17 - data/brands/ekaza.json | 17 - data/brands/eken.json | 17 - data/brands/elcom.json | 35 - data/brands/ele-technology.json | 26 - data/brands/elec.json | 83 - data/brands/elecom.json | 27 - data/brands/electriq.json | 19 - data/brands/electrodh.json | 17 - data/brands/elegate.json | 17 - data/brands/elegiant.json | 17 - data/brands/elegoo.json | 17 - data/brands/elex.json | 17 - data/brands/elinksmart-ip-camera.json | 35 - data/brands/elinz.json | 35 - data/brands/elisa.json | 26 - data/brands/elite.json | 26 - data/brands/elmo.json | 53 - data/brands/elp.json | 179 - data/brands/elp201.json | 44 - data/brands/elro.json | 676 - data/brands/elsys.json | 54 - data/brands/elver.json | 17 - data/brands/ematic.json | 17 - data/brands/emax.json | 17 - data/brands/embedded-net-dvr.json | 238 - data/brands/emerson.json | 35 - data/brands/eminent.json | 392 - data/brands/empire.json | 55 - data/brands/empiretech.json | 35 - data/brands/emstone.json | 26 - data/brands/encoder10.json | 35 - data/brands/encore-electronics.json | 35 - data/brands/encore.json | 67 - data/brands/encwi-g1.json | 17 - data/brands/endoscope.json | 17 - data/brands/endroid.json | 26 - data/brands/endurance.json | 26 - data/brands/eneo.json | 212 - data/brands/engeninus.json | 17 - data/brands/engenius.json | 66 - data/brands/enio-bell.json | 17 - data/brands/ens-security.json | 17 - data/brands/enscam.json | 18 - data/brands/ensidio.json | 53 - data/brands/enster.json | 71 - data/brands/enter.json | 53 - data/brands/entrematic.json | 26 - data/brands/enviewer.json | 18 - data/brands/envio.json | 18 - data/brands/envision.json | 17 - data/brands/enxun.json | 39 - data/brands/eonboom.json | 17 - data/brands/eopen.json | 35 - data/brands/eos-vision.json | 39 - data/brands/epcam2.json | 45 - data/brands/epexis.json | 26 - data/brands/epges.json | 17 - data/brands/ephone.json | 17 - data/brands/epicamera.json | 35 - data/brands/epine.json | 46 - data/brands/epson.json | 17 - data/brands/ernitec.json | 111 - data/brands/esc.json | 29 - data/brands/escam.json | 693 - data/brands/esecure.json | 17 - data/brands/esee.json | 102 - data/brands/esense.json | 17 - data/brands/esky.json | 222 - data/brands/esmart.json | 28 - data/brands/esp.json | 65 - data/brands/esp32.json | 205 - data/brands/espressif.json | 17 - data/brands/esprit-enhanced.json | 17 - data/brands/essay.json | 17 - data/brands/essfly.json | 27 - data/brands/est.json | 37 - data/brands/estcctv.json | 17 - data/brands/esternal.json | 17 - data/brands/esunstar.json | 40 - data/brands/esypop.json | 17 - data/brands/etc.json | 17 - data/brands/etcam.json | 26 - data/brands/etevision.json | 17 - data/brands/etn.json | 17 - data/brands/etrovision.json | 85 - data/brands/etupiha.json | 26 - data/brands/eu3c.json | 17 - data/brands/eufy.json | 215 - data/brands/eule.json | 35 - data/brands/eura-tech.json | 58 - data/brands/eurolook.json | 36 - data/brands/europ-camera.json | 17 - data/brands/eurotek.json | 17 - data/brands/eurovideo.json | 18 - data/brands/eusso.json | 45 - data/brands/ev3c.json | 26 - data/brands/everest.json | 35 - data/brands/everfocus.json | 168 - data/brands/eversecu.json | 119 - data/brands/eversun.json | 17 - data/brands/evgeni.json | 17 - data/brands/evidence.json | 75 - data/brands/evo3d.json | 26 - data/brands/evocam.json | 53 - data/brands/evolli.json | 44 - data/brands/evolution.json | 29 - data/brands/evolveo.json | 35 - data/brands/evolylcam.json | 18 - data/brands/evonet-c-vd320ir.json | 17 - data/brands/evonet.json | 26 - data/brands/evviz.json | 17 - data/brands/ewan-ko.json | 17 - data/brands/ewelink.json | 17 - data/brands/ews1025.json | 17 - data/brands/exache.json | 17 - data/brands/exacqvision.json | 35 - data/brands/exceed.json | 17 - data/brands/excelvan.json | 17 - data/brands/exelon.json | 17 - data/brands/exom.json | 17 - data/brands/exotic-life.json | 17 - data/brands/expert.json | 17 - data/brands/export-import-global.json | 29 - data/brands/expose.json | 26 - data/brands/extel.json | 36 - data/brands/extend-lan.json | 17 - data/brands/extreme.json | 46 - data/brands/extron.json | 17 - data/brands/eye-360.json | 73 - data/brands/eye-sight.json | 27 - data/brands/eye-vision.json | 17 - data/brands/eye01w.json | 53 - data/brands/eyecam.json | 182 - data/brands/eyecloud.json | 26 - data/brands/eyeguard.json | 17 - data/brands/eyeipcam.json | 45 - data/brands/eyemax.json | 27 - data/brands/eyenimal.json | 17 - data/brands/eyenix.json | 17 - data/brands/eyeon.json | 26 - data/brands/eyeonet.json | 45 - data/brands/eyeplus.json | 174 - data/brands/eyerely.json | 17 - data/brands/eyes-sys.json | 35 - data/brands/eyesec.json | 26 - data/brands/eyesight.json | 239 - data/brands/eyesonic.json | 18 - data/brands/eyespy.json | 36 - data/brands/eyespy247.json | 100 - data/brands/eyesurv.json | 44 - data/brands/eyetech.json | 17 - data/brands/eyetelligent.json | 17 - data/brands/eyevision.json | 49 - data/brands/eyewatch.json | 18 - data/brands/eyseo.json | 38 - data/brands/eyu.json | 17 - data/brands/ez-ip.json | 27 - data/brands/ez-watching.json | 17 - data/brands/ezbiz.json | 45 - data/brands/ezcam.json | 271 - data/brands/eziviewcctv.json | 18 - data/brands/eziviz.json | 19 - data/brands/ezlink.json | 17 - data/brands/ezviz.json | 1060 - data/brands/f-series.json | 17 - data/brands/f7210.json | 17 - data/brands/facetime.json | 17 - data/brands/faitt0o.json | 17 - data/brands/faittoo.json | 17 - data/brands/falcon-eye.json | 86 - data/brands/falcon.json | 110 - data/brands/faleemi.json | 48 - data/brands/falke.json | 26 - data/brands/fam.json | 80 - data/brands/fang-hacks.json | 44 - data/brands/fanse.json | 17 - data/brands/fanshine.json | 20 - data/brands/fanvil.json | 79 - data/brands/fanyii.json | 17 - data/brands/fayele.json | 48 - data/brands/fb-100ap.json | 17 - data/brands/fc5415e.json | 18 - data/brands/fcc.json | 17 - data/brands/fdt.json | 162 - data/brands/feasso.json | 26 - data/brands/febfox-wifi-camera.json | 17 - data/brands/feit-electric.json | 17 - data/brands/feite.json | 17 - data/brands/fen-joo.json | 35 - data/brands/fenton.json | 52 - data/brands/ferguson.json | 37 - data/brands/fern360.json | 17 - data/brands/fhd-2mp.json | 17 - data/brands/fifi-spectrum.json | 35 - data/brands/fine.json | 142 - data/brands/finesight.json | 63 - data/brands/finex.json | 26 - data/brands/fiptec.json | 17 - data/brands/firas.json | 26 - data/brands/firetruck.json | 17 - data/brands/first-alert.json | 55 - data/brands/first-concept.json | 44 - data/brands/firstcam.json | 26 - data/brands/firstrend.json | 27 - data/brands/fisotech.json | 115 - data/brands/fitivision.json | 39 - data/brands/fkyro.json | 17 - data/brands/fla.json | 17 - data/brands/flashforge.json | 39 - data/brands/flexidome.json | 26 - data/brands/flexwatch.json | 70 - data/brands/flir.json | 503 - data/brands/floureon.json | 658 - data/brands/fluesonic.json | 17 - data/brands/flying.json | 36 - data/brands/fnkvision.json | 18 - data/brands/focuscam.json | 105 - data/brands/focuseye.json | 26 - data/brands/folsom.json | 44 - data/brands/fomei.json | 17 - data/brands/foodtec.json | 26 - data/brands/fortec.json | 17 - data/brands/forti.json | 17 - data/brands/forticam.json | 72 - data/brands/fortinet.json | 36 - data/brands/fortis.json | 17 - data/brands/fortrek.json | 17 - data/brands/foscam.json | 2716 -- data/brands/fossi.json | 17 - data/brands/fostar.json | 17 - data/brands/fosvision.json | 37 - data/brands/foxcam.json | 55 - data/brands/fracarro.json | 18 - data/brands/fredi.json | 45 - data/brands/freesbell.json | 17 - data/brands/freetec.json | 26 - data/brands/frente.json | 63 - data/brands/fs.com.json | 20 - data/brands/fsan.json | 36 - data/brands/ftype.json | 35 - data/brands/fujicam.json | 17 - data/brands/fujiko.json | 46 - data/brands/fujima.json | 17 - data/brands/fujinon.json | 18 - data/brands/fujitel.json | 28 - data/brands/fujitron.json | 17 - data/brands/fujtech.json | 37 - data/brands/fujut.json | 17 - data/brands/fukuda.json | 28 - data/brands/fulicom.json | 17 - data/brands/fullsec.json | 36 - data/brands/fullward.json | 17 - data/brands/fuluva.json | 44 - data/brands/fundos.json | 36 - data/brands/funlux.json | 84 - data/brands/funxwe.json | 59 - data/brands/furbo.json | 26 - data/brands/fures.json | 17 - data/brands/fusion.json | 26 - data/brands/fustes-sola.json | 26 - data/brands/fuswlan.json | 39 - data/brands/futura-elettronica.json | 17 - data/brands/fvc-cameras.json | 35 - data/brands/fyuui.json | 17 - data/brands/g180.json | 26 - data/brands/g4direct.json | 35 - data/brands/gadinan.json | 48 - data/brands/gadnic.json | 73 - data/brands/gadspot.json | 239 - data/brands/gaines-dvr.json | 71 - data/brands/galaxy-note-3.json | 17 - data/brands/galaxy-note3.json | 17 - data/brands/galaxy-phone.json | 18 - data/brands/galaxy-s3.json | 27 - data/brands/galaxy-s4.json | 18 - data/brands/galaxy.json | 69 - data/brands/galpon.json | 17 - data/brands/ganvis.json | 39 - data/brands/ganz.json | 121 - data/brands/gardinan.json | 17 - data/brands/gate.json | 35 - data/brands/gateway-security.json | 28 - data/brands/gateway.json | 17 - data/brands/gato.json | 17 - data/brands/gawell.json | 18 - data/brands/gazingsure.json | 17 - data/brands/gbf.json | 17 - data/brands/gbo.json | 80 - data/brands/gcam.json | 17 - data/brands/gds.json | 17 - data/brands/ge.json | 53 - data/brands/gecko-security.json | 26 - data/brands/gedthry.json | 17 - data/brands/geecam.json | 17 - data/brands/geecamvnt.json | 17 - data/brands/geeni.json | 69 - data/brands/geeya.json | 122 - data/brands/gembird.json | 74 - data/brands/gemtek.json | 36 - data/brands/gen.json | 20 - data/brands/genbolt.json | 216 - data/brands/general.json | 410 - data/brands/generic.json | 286 - data/brands/genie.json | 54 - data/brands/genius.json | 137 - data/brands/geniv-flux.json | 17 - data/brands/geniv.json | 27 - data/brands/genrui.json | 17 - data/brands/genuine.json | 23 - data/brands/geo.json | 19 - data/brands/geovision.json | 830 - data/brands/gertec.json | 17 - data/brands/gf-pumps.json | 17 - data/brands/gi-star-srl.json | 17 - data/brands/gid20m-pvir.json | 17 - data/brands/gifran.json | 26 - data/brands/giga.json | 44 - data/brands/gigaeye.json | 64 - data/brands/gigamedia.json | 27 - data/brands/ginzzu.json | 38 - data/brands/gionee-cam.json | 17 - data/brands/gionee.json | 17 - data/brands/gipcam.json | 17 - data/brands/giraffe.json | 18 - data/brands/gise.json | 28 - data/brands/giucam.json | 17 - data/brands/gkb.json | 65 - data/brands/glados-cam.json | 18 - data/brands/glenz.json | 18 - data/brands/glink.json | 17 - data/brands/global-tech.json | 26 - data/brands/global.json | 47 - data/brands/globeteck.json | 27 - data/brands/gltech.json | 17 - data/brands/gmini.json | 17 - data/brands/gncc.json | 18 - data/brands/gnexus.json | 17 - data/brands/gnomecam.json | 18 - data/brands/go1984.json | 26 - data/brands/go2rtc.json | 17 - data/brands/go4.json | 27 - data/brands/goahead.json | 122 - data/brands/gocam.json | 35 - data/brands/goclever.json | 55 - data/brands/gocomma.json | 38 - data/brands/godraj.json | 17 - data/brands/gogogate.json | 26 - data/brands/going.json | 82 - data/brands/goingtech.json | 17 - data/brands/golbong.json | 51 - data/brands/goldchamp.json | 26 - data/brands/golden-gate.json | 17 - data/brands/goldnet.json | 17 - data/brands/goldstream.json | 17 - data/brands/goliath.json | 17 - data/brands/goodgo.json | 17 - data/brands/google-pixel.json | 18 - data/brands/google.json | 54 - data/brands/goospy.json | 17 - data/brands/gopro.json | 28 - data/brands/gopro4.json | 17 - data/brands/goscam.json | 71 - data/brands/goswift.json | 27 - data/brands/gotab.json | 17 - data/brands/gotake.json | 26 - data/brands/gotme.json | 17 - data/brands/gpi360.json | 17 - data/brands/gps-standard.json | 17 - data/brands/gq1080p.json | 17 - data/brands/gqd.json | 26 - data/brands/grafeio.json | 17 - data/brands/grain.json | 26 - data/brands/grainmedia.json | 17 - data/brands/grand.json | 130 - data/brands/grandstream.json | 521 - data/brands/grandtec.json | 128 - data/brands/grandtech.json | 18 - data/brands/grant.json | 35 - data/brands/granvista.json | 18 - data/brands/great-wall.json | 53 - data/brands/greatek.json | 17 - data/brands/green-feathers.json | 85 - data/brands/green-home.json | 17 - data/brands/greentech.json | 29 - data/brands/greentel.json | 17 - data/brands/greenview.json | 17 - data/brands/greenvision.json | 17 - data/brands/grey-cam.json | 17 - data/brands/grid-micro-corp..json | 18 - data/brands/grisboa.json | 17 - data/brands/groudchat.json | 17 - data/brands/group.json | 17 - data/brands/grundig.json | 114 - data/brands/grwibeou.json | 27 - data/brands/gsi.json | 17 - data/brands/gt-view.json | 18 - data/brands/gtc.json | 26 - data/brands/gtec.json | 17 - data/brands/gts.json | 17 - data/brands/guangzhou.json | 99 - data/brands/guard.json | 44 - data/brands/guardcam.json | 28 - data/brands/guardian.json | 29 - data/brands/guardzilla.json | 71 - data/brands/guoanvision.json | 28 - data/brands/guudgo.json | 188 - data/brands/gvi.json | 55 - data/brands/gw-security.json | 402 - data/brands/gwelltimes.json | 38 - data/brands/gwipc.json | 38 - data/brands/gynoii.json | 17 - data/brands/gyration.json | 17 - data/brands/gyuk.json | 26 - data/brands/gzhou.json | 17 - data/brands/h-cam.json | 17 - data/brands/h-series.json | 74 - data/brands/h.264-network-dvr.json | 334 - .../h.264-vga-wireless-cube-camera.json | 89 - data/brands/h.264.json | 509 - data/brands/h.265.json | 37 - data/brands/h.view.json | 142 - .../brands/h264-vga-wireless-cube-camera.json | 35 - data/brands/h2md4a.json | 17 - data/brands/h3-137.json | 17 - data/brands/h3518e.json | 17 - data/brands/h6837wi.json | 63 - data/brands/hacon.json | 17 - data/brands/hai.json | 44 - data/brands/haivison.json | 28 - data/brands/haiz.json | 64 - data/brands/hama.json | 129 - data/brands/hamlet.json | 18 - data/brands/hamrabi.json | 17 - data/brands/hamrol.json | 33 - data/brands/hamrolte.json | 55 - data/brands/hanbang.json | 35 - data/brands/handy-ip-cam.json | 35 - data/brands/hangzhou.json | 25 - data/brands/hanhwa.json | 17 - data/brands/hanlin.json | 17 - data/brands/hanwei.json | 26 - data/brands/hanwha.json | 112 - data/brands/harex.json | 57 - data/brands/hatake.json | 17 - data/brands/haucam.json | 17 - data/brands/hauppauge.json | 18 - data/brands/haustuer.json | 17 - data/brands/hauwei.json | 17 - data/brands/hawk-vision.json | 44 - data/brands/hawk.json | 44 - data/brands/hawkcam.json | 54 - data/brands/hawki.json | 17 - data/brands/hawking.json | 121 - data/brands/hawq.json | 17 - data/brands/hayear.json | 17 - data/brands/hbell.json | 17 - data/brands/hd-camera.json | 126 - data/brands/hd-cloudcam.json | 26 - data/brands/hd-ip-camera-depan.json | 26 - data/brands/hd-ip-dome-2.json | 27 - data/brands/hd-ip-dome.json | 26 - data/brands/hd-ipc.json | 940 - data/brands/hd-link.json | 152 - data/brands/hd-megapixel.json | 26 - data/brands/hd-minicam.json | 37 - data/brands/hd-wireless.json | 17 - data/brands/hd.json | 135 - data/brands/hdcam.json | 35 - data/brands/hdcvi.json | 17 - data/brands/hddcam.json | 17 - data/brands/hdipc.json | 63 - data/brands/hdipcam.json | 183 - data/brands/hdl.json | 67 - data/brands/hdp-1100pt.json | 17 - data/brands/hdpro.json | 17 - data/brands/hds.json | 17 - data/brands/hdview.json | 18 - data/brands/he-wifi.json | 17 - data/brands/heanworld.json | 35 - data/brands/hed.json | 17 - data/brands/heden.json | 265 - data/brands/heetoo.json | 47 - data/brands/heimlink.json | 20 - data/brands/heimvision.json | 299 - data/brands/heisee.json | 17 - data/brands/heitel.json | 17 - data/brands/heivision.json | 121 - data/brands/heiwell.json | 18 - data/brands/helios.json | 38 - data/brands/hemkamera.json | 17 - data/brands/henelec.json | 26 - data/brands/hengda.json | 26 - data/brands/hengstar.json | 17 - data/brands/hennda.json | 17 - data/brands/hensel.json | 18 - data/brands/herkules.json | 17 - data/brands/herospeed.json | 249 - data/brands/hesa.json | 26 - data/brands/hesavision.json | 36 - data/brands/hessu.json | 17 - data/brands/hexa.json | 17 - data/brands/heystop.json | 26 - data/brands/hfws.json | 27 - data/brands/hhi.json | 26 - data/brands/hi-focus.json | 44 - data/brands/hi-fun.json | 17 - data/brands/hi-jin.json | 35 - data/brands/hi-silicon.json | 104 - data/brands/hi-view.json | 75 - data/brands/hi3507.json | 66 - data/brands/hi3518.json | 35 - data/brands/hi5.json | 17 - data/brands/hicam.json | 67 - data/brands/hicc-2300t.json | 18 - data/brands/hicc-p-3100.json | 17 - data/brands/hichip.json | 17 - data/brands/hidetech.json | 17 - data/brands/hidrokemel.json | 17 - data/brands/hifocus.json | 17 - data/brands/hiina.json | 17 - data/brands/hiinakas.json | 17 - data/brands/hijack-hq-nvr.json | 39 - data/brands/hikam.json | 51 - data/brands/hikari.json | 26 - data/brands/hiki.json | 53 - data/brands/hikity.json | 17 - data/brands/hiklook.json | 36 - data/brands/hikvision.json | 4343 --- data/brands/hikwon.json | 18 - data/brands/hills.json | 28 - data/brands/hilook.json | 172 - data/brands/hiltron.json | 26 - data/brands/hip.json | 17 - data/brands/hip2p.json | 108 - data/brands/hipcam.json | 126 - data/brands/hipro.json | 19 - data/brands/hisee.json | 87 - data/brands/hiseeu.json | 471 - data/brands/hisense.json | 26 - data/brands/hisilicon.json | 156 - data/brands/hisomu.json | 17 - data/brands/histream.json | 55 - data/brands/hisung.json | 30 - data/brands/hitek.json | 17 - data/brands/hitron.json | 46 - data/brands/hivdc-2300v.json | 27 - data/brands/hiview.json | 59 - data/brands/hivision.json | 148 - data/brands/hiwatch.json | 432 - data/brands/hjshi.json | 17 - data/brands/hjt.json | 99 - data/brands/hkes.json | 17 - data/brands/hnc.json | 38 - data/brands/hodely.json | 17 - data/brands/hofsta.json | 17 - data/brands/hokam.json | 17 - data/brands/holdoor.json | 101 - data/brands/holovision.json | 17 - data/brands/holowits.json | 18 - data/brands/home-it.json | 26 - data/brands/home-life.json | 26 - data/brands/homecare.json | 17 - data/brands/homedia.json | 18 - data/brands/homeguard.json | 95 - data/brands/homeseer.json | 26 - data/brands/homeviz.json | 17 - data/brands/homewizard.json | 35 - data/brands/hondgda.json | 17 - data/brands/honestech.json | 17 - data/brands/honeywell.json | 452 - data/brands/hongda.json | 36 - data/brands/hongjingtian.json | 77 - data/brands/honic.json | 57 - data/brands/hootoo.json | 424 - data/brands/hopeway.json | 18 - data/brands/hopewell-cctv.com.json | 17 - data/brands/horstek.json | 17 - data/brands/hosafe.json | 345 - data/brands/hosftra.json | 17 - data/brands/hoswell.json | 18 - data/brands/hotfun.json | 17 - data/brands/hozelec.json | 17 - data/brands/hp.json | 44 - data/brands/hqcam.json | 31 - data/brands/hqvision.json | 28 - data/brands/hr04.json | 17 - data/brands/hrv.json | 17 - data/brands/hs-ip-camera.json | 44 - data/brands/hs-ipsc.json | 17 - data/brands/hscomila.json | 17 - data/brands/hsmartlink.json | 56 - data/brands/hsv.json | 17 - data/brands/hta.json | 35 - data/brands/htc.json | 148 - data/brands/htcone.json | 37 - data/brands/huacam.json | 210 - data/brands/huashi.json | 17 - data/brands/huawei.json | 192 - data/brands/hubble.json | 76 - data/brands/huisun.json | 19 - data/brands/humcam.json | 17 - data/brands/hungtek.json | 35 - data/brands/hunt.json | 203 - data/brands/hunter.json | 17 - data/brands/husier.json | 17 - data/brands/hutermann.json | 17 - data/brands/huviron.json | 17 - data/brands/hv3c.json | 17 - data/brands/hvcam.json | 17 - data/brands/hview.json | 84 - data/brands/hvr.json | 19 - data/brands/hx-635k.json | 17 - data/brands/hxview.json | 28 - data/brands/hy-outdoor-ip-camera.json | 17 - data/brands/hybsys.json | 17 - data/brands/hyobalc.json | 17 - data/brands/hyundai.json | 51 - data/brands/hzconnect.json | 27 - data/brands/i-can-see.json | 38 - data/brands/i-view.json | 17 - data/brands/i30vd.json | 17 - data/brands/i591b6f.json | 26 - data/brands/ibcam.json | 17 - data/brands/ic-realtime.json | 64 - data/brands/ic-realtimes.json | 26 - data/brands/icam.json | 338 - data/brands/icamview.json | 99 - data/brands/icantek.json | 73 - data/brands/icloudcam.json | 19 - data/brands/iclp.json | 26 - data/brands/icom.json | 18 - data/brands/icon.json | 35 - data/brands/icrealtime.json | 72 - data/brands/ics.json | 26 - data/brands/identivision.json | 20 - data/brands/idis-global.json | 18 - data/brands/idis.json | 17 - data/brands/idt.json | 26 - data/brands/idview.json | 53 - data/brands/ie-link-0.json | 18 - data/brands/iegeek.json | 477 - data/brands/iernut-2.json | 17 - data/brands/iets.json | 17 - data/brands/iflux.json | 17 - data/brands/igson.json | 35 - data/brands/iguard.json | 28 - data/brands/ijack-liu.json | 17 - data/brands/ikegami.json | 58 - data/brands/ikonic.json | 17 - data/brands/ildvr.json | 29 - data/brands/illumivue.json | 17 - data/brands/illustra.json | 74 - data/brands/imagiatek.json | 17 - data/brands/imaginon.json | 206 - data/brands/imago.json | 17 - data/brands/ime3122-admnq39.json | 26 - data/brands/img.json | 17 - data/brands/imieye.json | 35 - data/brands/imogen.json | 35 - data/brands/imou.json | 418 - data/brands/impax.json | 17 - data/brands/imporx.json | 87 - data/brands/impulse.json | 17 - data/brands/ims200.json | 17 - data/brands/imx290.json | 17 - data/brands/inaxsys.json | 18 - data/brands/inc.json | 26 - data/brands/index.json | 21764 ---------------- data/brands/indexa.json | 26 - data/brands/indigo.json | 55 - data/brands/indkoersel.json | 17 - data/brands/inesun.json | 114 - data/brands/infinity.json | 54 - data/brands/infinova.json | 62 - data/brands/infocus.json | 17 - data/brands/ing.json | 17 - data/brands/ingeek.json | 17 - data/brands/ingenic-v01.json | 17 - data/brands/ingresso.json | 44 - data/brands/ingressosede.json | 17 - data/brands/inisoft-cam.json | 17 - data/brands/inkovideo.json | 157 - data/brands/innekt.json | 40 - data/brands/inngang.json | 35 - data/brands/innmat.json | 17 - data/brands/inno-vision.json | 26 - data/brands/innotrends.json | 27 - data/brands/innovatek.json | 35 - data/brands/innovative-security-designs.json | 26 - data/brands/innovo.json | 44 - data/brands/inosun.json | 17 - data/brands/inpotek.json | 17 - data/brands/inqmega.json | 57 - data/brands/inscape.json | 35 - data/brands/inside.json | 26 - data/brands/insma.json | 18 - data/brands/instar.json | 488 - data/brands/instek-digital.json | 17 - data/brands/insun.json | 18 - data/brands/insys.json | 17 - data/brands/intamac.json | 17 - data/brands/intelbras.json | 449 - data/brands/intelkam.json | 47 - data/brands/intelli.json | 17 - data/brands/intelligent-network.json | 27 - data/brands/intellinet.json | 331 - data/brands/intellio.json | 26 - data/brands/intellsec.json | 17 - data/brands/interlogix.json | 91 - data/brands/interna.json | 62 - data/brands/internal.json | 17 - data/brands/internet-eye.json | 54 - data/brands/interno.json | 17 - data/brands/intervision.json | 17 - data/brands/intex.json | 26 - data/brands/invid.json | 47 - data/brands/invidtech.json | 26 - data/brands/inwerang.json | 26 - data/brands/io-data.json | 84 - data/brands/ip-300ptw.json | 17 - data/brands/ip-402b.json | 35 - data/brands/ip-buiten.json | 17 - data/brands/ip-camera-(android).json | 86 - data/brands/ip-camera.json | 44 - data/brands/ip-chitchat.json | 17 - data/brands/ip-m-p836v.json | 17 - data/brands/ip-phone-camera.json | 27 - data/brands/ip-power.json | 45 - data/brands/ip-pro-tech.json | 26 - data/brands/ip-speeddome.json | 36 - data/brands/ip-t5201-f.json | 17 - data/brands/ip-video.json | 35 - data/brands/ip-webcam-(android).json | 111 - data/brands/ip-webcam-android.json | 63 - data/brands/ip-webcam-app.json | 45 - data/brands/ip-webcam-pro.json | 66 - data/brands/ip-webcam.json | 35 - data/brands/ip112.json | 26 - data/brands/ip302.json | 17 - data/brands/ip3393pv2.json | 28 - data/brands/ip400.json | 17 - data/brands/ip4112poe.json | 17 - data/brands/ip66.json | 26 - data/brands/ip6795p.json | 17 - data/brands/ip_cam_inspector.json | 17 - data/brands/ipbell.json | 17 - data/brands/ipc-bo.json | 129 - data/brands/ipc-f10p.json | 17 - data/brands/ipc-model.json | 38 - data/brands/ipc-other.json | 35 - data/brands/ipc.json | 1121 - data/brands/ipc360.json | 50 - data/brands/ipc365.json | 82 - data/brands/ipcam-2015.json | 92 - data/brands/ipcam.json | 321 - data/brands/ipcameros.json | 28 - data/brands/ipcami.json | 35 - data/brands/ipcc.json | 253 - data/brands/ipce.json | 17 - data/brands/ipcmontor.json | 81 - data/brands/ipd.json | 35 - data/brands/ipdom-hz0102.json | 17 - data/brands/ipega.json | 48 - data/brands/ipeye.json | 28 - data/brands/ipfd200.json | 17 - data/brands/ipfd201.json | 17 - data/brands/ipg.json | 27 - data/brands/ipgah9oc2am7.json | 17 - data/brands/iphdcam.json | 17 - data/brands/ipixo.json | 17 - data/brands/ipm-1z-20x-dn.json | 17 - data/brands/ipnawin7.json | 17 - data/brands/ipnc.json | 166 - data/brands/ipnetcam.json | 136 - data/brands/ipnz.json | 17 - data/brands/ipq1652x.json | 17 - data/brands/ipq1658x.json | 17 - data/brands/ipr31esx.json | 17 - data/brands/ipr712m.json | 17 - data/brands/ipr7424%2f8e.json | 17 - data/brands/ipro.json | 26 - data/brands/iprobot3.json | 44 - data/brands/ips-21w.json | 26 - data/brands/ips.json | 126 - data/brands/ipscam.json | 18 - data/brands/ipteles.json | 17 - data/brands/iptime.json | 17 - data/brands/iptronic.json | 42 - data/brands/iptz-h20xx.json | 26 - data/brands/ipux.json | 95 - data/brands/ipvd300.json | 18 - data/brands/ipvideo.json | 18 - data/brands/ipwebcam-app.json | 35 - data/brands/ipx.json | 180 - data/brands/iq-eye.json | 354 - data/brands/iqinvision.json | 68 - data/brands/iqr.json | 17 - data/brands/ir-color-ip-camera.json | 44 - data/brands/irea.json | 17 - data/brands/iris.json | 123 - data/brands/irlab.json | 71 - data/brands/isabeau.json | 17 - data/brands/isbsupport.json | 17 - data/brands/isd-jaguar.json | 27 - data/brands/iseeu.json | 81 - data/brands/isit.json | 17 - data/brands/isotect.json | 21 - data/brands/isp.json | 17 - data/brands/ispy.json | 36 - data/brands/itajto.json | 17 - data/brands/italsistem.json | 36 - data/brands/its.json | 26 - data/brands/itx-security.json | 52 - data/brands/itx.json | 35 - data/brands/iv9000.json | 17 - data/brands/ivc.json | 26 - data/brands/ivcc.json | 26 - data/brands/ivideon.json | 26 - data/brands/ivio.json | 17 - data/brands/iwh-31ir.json | 26 - data/brands/iwigus.json | 17 - data/brands/iz-touch.json | 17 - data/brands/izotech.json | 17 - data/brands/iztouch.json | 40 - data/brands/izviz.json | 17 - data/brands/j5create.json | 26 - data/brands/ja7204s.json | 26 - data/brands/ja7208s.json | 45 - data/brands/ja7216nc.json | 27 - data/brands/jalan.json | 31 - data/brands/janex.json | 17 - data/brands/janusz.json | 17 - data/brands/japan.json | 44 - data/brands/japon-dynamic.json | 17 - data/brands/jasboom.json | 29 - data/brands/jatech.json | 17 - data/brands/javea.json | 17 - data/brands/jaycar.json | 353 - data/brands/jaytech.json | 54 - data/brands/jbp.json | 37 - data/brands/jcr.json | 17 - data/brands/jdl.json | 26 - data/brands/jecurity.json | 19 - data/brands/jedicam.json | 17 - data/brands/jeinuo.json | 17 - data/brands/jen-fu.json | 62 - data/brands/jenimex.json | 73 - data/brands/jennov.json | 290 - data/brands/jensen.json | 35 - data/brands/jetview.json | 76 - data/brands/jetvision.json | 17 - data/brands/jhempcam.json | 26 - data/brands/jialite.json | 17 - data/brands/jidetech.json | 346 - data/brands/jienuo.json | 130 - data/brands/jinan.json | 18 - data/brands/jitech.json | 17 - data/brands/jiuan.json | 44 - data/brands/jlb.json | 17 - data/brands/jmk.json | 64 - data/brands/joko.json | 26 - data/brands/jooan.json | 352 - data/brands/jortan.json | 140 - data/brands/jovision.json | 231 - data/brands/joy.json | 44 - data/brands/joymin.json | 17 - data/brands/jp5.json | 26 - data/brands/jpjv.json | 17 - data/brands/jrc-tokki.json | 51 - data/brands/jrecam.json | 26 - data/brands/jsur.json | 17 - data/brands/jsw.json | 98 - data/brands/jtech.json | 63 - data/brands/juan.json | 146 - data/brands/jubson.json | 18 - data/brands/judge.json | 18 - data/brands/juning.json | 17 - data/brands/jupiter.json | 17 - data/brands/just-compare.json | 17 - data/brands/jvc.json | 345 - data/brands/jvr.json | 17 - data/brands/jvs.json | 20 - data/brands/jvt.json | 17 - data/brands/jwcam.json | 112 - data/brands/jwt.json | 17 - data/brands/jxl.json | 17 - data/brands/jyacam.json | 26 - data/brands/jyuha.json | 26 - data/brands/k-vision.json | 17 - data/brands/k11.json | 26 - data/brands/kaansky.json | 17 - data/brands/kado.json | 17 - data/brands/kadymay.json | 167 - data/brands/kafeoinos-tv.json | 17 - data/brands/kaikong.json | 472 - data/brands/kaluga.json | 17 - data/brands/kamera2000.json | 53 - data/brands/kamo.json | 17 - data/brands/kamote.json | 17 - data/brands/kamtron.json | 75 - data/brands/kanan.json | 17 - data/brands/kanda.json | 17 - data/brands/kang-xun.json | 17 - data/brands/kantoor.json | 17 - data/brands/kapi.json | 26 - data/brands/kapkam.json | 26 - data/brands/karbontech.json | 17 - data/brands/kare.json | 65 - data/brands/karel.json | 45 - data/brands/karkam.json | 17 - data/brands/kasa.json | 26 - data/brands/kasaba.json | 17 - data/brands/kassaba.json | 26 - data/brands/katamso.json | 44 - data/brands/katway.json | 36 - data/brands/kavass.json | 126 - data/brands/kayodo.json | 18 - data/brands/kbc.json | 26 - data/brands/kboom.json | 17 - data/brands/kbvision.json | 19 - data/brands/kd.json | 26 - data/brands/kdm.json | 26 - data/brands/kdt.json | 26 - data/brands/kedakom.json | 17 - data/brands/keebox.json | 58 - data/brands/keekoon.json | 109 - data/brands/keeper.json | 44 - data/brands/keeyo.json | 17 - data/brands/keian.json | 26 - data/brands/kenik.json | 45 - data/brands/kenpro.json | 36 - data/brands/kenton.json | 36 - data/brands/kenvs.json | 83 - data/brands/kerui.json | 45 - data/brands/keshini.json | 17 - data/brands/keuken.json | 17 - data/brands/keview.json | 82 - data/brands/keye.json | 32 - data/brands/keypad.json | 17 - data/brands/keyseen.json | 17 - data/brands/keytech-dvr.json | 17 - data/brands/kfly.json | 17 - data/brands/kguard.json | 116 - data/brands/kiacong.json | 36 - data/brands/kiina.json | 17 - data/brands/kiirie.json | 27 - data/brands/kimpok.json | 17 - data/brands/kina-kamera.json | 17 - data/brands/kindermeubel.json | 17 - data/brands/kindle.json | 26 - data/brands/king-special.json | 17 - data/brands/kingcam.json | 32 - data/brands/kingcctv.json | 17 - data/brands/kingkong.json | 28 - data/brands/kingmak.json | 17 - data/brands/kingnow.json | 17 - data/brands/kingstar.json | 62 - data/brands/kinson.json | 35 - data/brands/kiocong.json | 37 - data/brands/kip.json | 27 - data/brands/kishgo.json | 28 - data/brands/kitcam.json | 17 - data/brands/kittyhok.json | 44 - data/brands/kkmoon.json | 525 - data/brands/klikaanklikuit.json | 17 - data/brands/klok.json | 17 - data/brands/kmart.json | 17 - data/brands/kmoon.json | 54 - data/brands/kmw.json | 35 - data/brands/knc.json | 77 - data/brands/knewmart.json | 92 - data/brands/knowyournanny.com.json | 17 - data/brands/kobert.json | 17 - data/brands/kobi.json | 38 - data/brands/kocom.json | 35 - data/brands/kodak.json | 71 - data/brands/kodu.json | 17 - data/brands/koepel.json | 35 - data/brands/kogacam.json | 17 - data/brands/kogan.json | 301 - data/brands/kohlen.json | 26 - data/brands/koicong.json | 26 - data/brands/komatsu.json | 17 - data/brands/kompernass.json | 27 - data/brands/komplexfix.json | 17 - data/brands/konan.json | 17 - data/brands/konarrk.json | 17 - data/brands/konig.json | 102 - data/brands/konik.json | 28 - data/brands/konix.json | 35 - data/brands/konlen.json | 38 - data/brands/konnek-stein.json | 17 - data/brands/koogeek.json | 17 - data/brands/koolertron.json | 47 - data/brands/koomooni.json | 17 - data/brands/korang.json | 17 - data/brands/koti.json | 17 - data/brands/kowa.json | 27 - data/brands/kpi.json | 26 - data/brands/kpp.json | 17 - data/brands/kraun.json | 30 - data/brands/krissview.json | 17 - data/brands/krypton.json | 17 - data/brands/ksvp.json | 17 - data/brands/kt-and-c.json | 44 - data/brands/kucam.json | 18 - data/brands/kyocera.json | 23 - data/brands/l-series.json | 124 - data/brands/lager.json | 35 - data/brands/lambda.json | 26 - data/brands/lampa.json | 17 - data/brands/laser.json | 62 - data/brands/lau-3.json | 17 - data/brands/launch.json | 38 - data/brands/laview.json | 357 - data/brands/lc-security.json | 118 - data/brands/lc-systems.json | 17 - data/brands/leadcam.json | 17 - data/brands/leadership.json | 55 - data/brands/leadtek.json | 135 - data/brands/lecoe.json | 18 - data/brands/ledvance.json | 18 - data/brands/leftek.json | 94 - data/brands/legeek.json | 20 - data/brands/legra.json | 17 - data/brands/legrand.json | 26 - data/brands/legrange.json | 17 - data/brands/lenel.json | 76 - data/brands/lenovo.json | 119 - data/brands/lensoul.json | 17 - data/brands/leocam.json | 17 - data/brands/leopard-imaging-inc.json | 17 - data/brands/leopard-imaging.json | 26 - data/brands/lerch.json | 17 - data/brands/leshp.json | 75 - data/brands/levelone.json | 793 - data/brands/levscam.json | 17 - data/brands/lexy.json | 17 - data/brands/lg-phone.json | 27 - data/brands/lg.json | 199 - data/brands/libor.json | 17 - data/brands/lidl.json | 37 - data/brands/lifecontrol.json | 17 - data/brands/lifeshield.json | 28 - data/brands/lifetech.json | 28 - data/brands/lifeview.json | 17 - data/brands/light-in-the-box.json | 17 - data/brands/lightcam.json | 17 - data/brands/lightdow.json | 17 - data/brands/lightinthebox.json | 17 - data/brands/lihai.json | 17 - data/brands/likean.json | 18 - data/brands/lilly.json | 44 - data/brands/limix.json | 17 - data/brands/lindata.json | 17 - data/brands/lindy.json | 27 - data/brands/linemak.json | 17 - data/brands/linia.json | 17 - data/brands/link.json | 27 - data/brands/linkcom.json | 18 - data/brands/linkit-security.json | 26 - data/brands/linkit.json | 18 - data/brands/linkpro.json | 47 - data/brands/linksys.json | 422 - data/brands/linovision.json | 19 - data/brands/linq.json | 17 - data/brands/linudix.json | 56 - data/brands/linux.json | 26 - data/brands/lionvis.json | 35 - data/brands/lipetsk.json | 17 - data/brands/liquid.json | 17 - data/brands/litetec.json | 17 - data/brands/litmor.json | 18 - data/brands/littleadd.json | 17 - data/brands/live-reporter.json | 17 - data/brands/livecam.json | 17 - data/brands/living.json | 35 - data/brands/lizvie.json | 29 - data/brands/lloyds.json | 26 - data/brands/lmou.json | 17 - data/brands/lof-v.json | 17 - data/brands/loftek.json | 395 - data/brands/logan.json | 53 - data/brands/logenex.json | 17 - data/brands/logidebian.json | 17 - data/brands/logilink.json | 237 - data/brands/logisaf.json | 17 - data/brands/logitech.json | 477 - data/brands/lokanta.json | 17 - data/brands/lonestar.json | 46 - data/brands/long-plus.json | 19 - data/brands/longdream.json | 17 - data/brands/longsafe.json | 17 - data/brands/longse.json | 187 - data/brands/longshine.json | 27 - data/brands/longteam.json | 26 - data/brands/lonrock.json | 17 - data/brands/lonse.json | 17 - data/brands/look.json | 17 - data/brands/loosafe.json | 232 - data/brands/lorensen-01.json | 17 - data/brands/lorex.json | 1113 - data/brands/loryta.json | 44 - data/brands/lotus.json | 26 - data/brands/louance.json | 17 - data/brands/louwice.json | 28 - data/brands/loveday-smart-home.json | 18 - data/brands/lowcam.json | 17 - data/brands/lowes-iris.json | 100 - data/brands/lowes.json | 38 - data/brands/lox.json | 17 - data/brands/loxone.json | 26 - data/brands/lpr-hdcam.json | 17 - data/brands/lsc.json | 90 - data/brands/lseries.json | 17 - data/brands/lsvision.json | 46 - data/brands/ltc.json | 17 - data/brands/ltek.json | 17 - data/brands/ltp.json | 17 - data/brands/lts.json | 439 - data/brands/ltv.json | 40 - data/brands/lu.json | 17 - data/brands/luatek.json | 37 - data/brands/lucem.json | 18 - data/brands/lucidphone.json | 17 - data/brands/lucky-star.json | 31 - data/brands/lukavi.json | 26 - data/brands/lum-700-bul-iph-gr.json | 17 - data/brands/luma.json | 60 - data/brands/lumenera.json | 55 - data/brands/lumens.json | 36 - data/brands/lumia.json | 18 - data/brands/lumiere.json | 44 - data/brands/luna.json | 27 - data/brands/luowice.json | 117 - data/brands/lupes-electronics.json | 17 - data/brands/lupus.json | 216 - data/brands/luxon.json | 35 - data/brands/luxonvideo.json | 53 - data/brands/luxor.json | 17 - data/brands/luxvision.json | 53 - data/brands/lw.json | 44 - data/brands/lyd.json | 35 - data/brands/lylu.json | 17 - data/brands/lynstan.json | 18 - data/brands/mabio.json | 26 - data/brands/mace.json | 17 - data/brands/mach.json | 26 - data/brands/macrovision.json | 27 - data/brands/magic-eye.json | 17 - data/brands/magic-vision-box-series.json | 17 - data/brands/maginon.json | 769 - data/brands/magnus.json | 17 - data/brands/maizic.json | 17 - data/brands/makecell.json | 17 - data/brands/manhattan.json | 17 - data/brands/manse.json | 17 - data/brands/mant.json | 17 - data/brands/march-networks.json | 63 - data/brands/marlboze.json | 28 - data/brands/marmitek.json | 206 - data/brands/marquis.json | 55 - data/brands/marshall.json | 48 - data/brands/masione.json | 35 - data/brands/master.json | 19 - data/brands/matchpoint.json | 28 - data/brands/matecam.json | 26 - data/brands/matrix.json | 55 - data/brands/mattex.json | 17 - data/brands/mavell.json | 17 - data/brands/maximus.json | 17 - data/brands/maxpixel.json | 17 - data/brands/maxron.json | 27 - data/brands/maxvideo.json | 26 - data/brands/maxvision.json | 35 - data/brands/maxwest.json | 17 - data/brands/maxxone.json | 35 - data/brands/maygion.json | 252 - data/brands/mazi.json | 26 - data/brands/mbx.json | 17 - data/brands/mc-cam.json | 26 - data/brands/mc-electronics.json | 100 - data/brands/mci.json | 26 - data/brands/mcl.json | 66 - data/brands/mdi.json | 17 - data/brands/meco.json | 26 - data/brands/medialink.json | 17 - data/brands/mediatech.json | 90 - data/brands/medion.json | 130 - data/brands/medisana.json | 93 - data/brands/mega-pixel.json | 433 - data/brands/megacam.json | 26 - data/brands/megapix.json | 26 - data/brands/megavideo.json | 17 - data/brands/meiego.json | 17 - data/brands/meisort.json | 27 - data/brands/melchioni.json | 17 - data/brands/memtex.json | 17 - data/brands/menetec.json | 17 - data/brands/meraki.json | 41 - data/brands/mercury.json | 99 - data/brands/merit-lilin.json | 470 - data/brands/meriva.json | 26 - data/brands/merk.json | 17 - data/brands/merkury.json | 67 - data/brands/merlan.json | 17 - data/brands/merlin.json | 38 - data/brands/meshare.json | 17 - data/brands/messoa.json | 237 - data/brands/metrocom.json | 17 - data/brands/metzler.json | 17 - data/brands/meye.json | 30 - data/brands/meyetech.json | 127 - data/brands/mi-casa-verde.json | 46 - data/brands/mia.json | 26 - data/brands/mibao.json | 81 - data/brands/micro-digital.json | 54 - data/brands/micro-view.json | 27 - data/brands/microdigital.json | 17 - data/brands/microlino.json | 17 - data/brands/micromax.json | 17 - data/brands/micronet.json | 209 - data/brands/microseven.json | 188 - data/brands/microsoft.json | 56 - data/brands/microview.json | 27 - data/brands/midas-link.json | 42 - data/brands/midaslink.json | 17 - data/brands/midconer.json | 17 - data/brands/mieke-ipcamera.json | 44 - data/brands/milesight.json | 225 - data/brands/milestone.json | 17 - data/brands/millennial.json | 17 - data/brands/mingyoushi.json | 26 - data/brands/mini-hd-ir-speed-dome.json | 17 - data/brands/mini.json | 17 - data/brands/minicam.json | 55 - data/brands/minking.json | 19 - data/brands/minnray.json | 19 - data/brands/minolta.json | 35 - data/brands/miosmart.json | 18 - data/brands/mipc.json | 26 - data/brands/mipcam.json | 64 - data/brands/mips.json | 89 - data/brands/misecu.json | 75 - data/brands/mitec.json | 17 - data/brands/mitra-utama.json | 26 - data/brands/mivision.json | 17 - data/brands/mjpeg.json | 17 - data/brands/mjpg-streamer.json | 35 - data/brands/mnet-dvr.json | 17 - data/brands/mobiwire.json | 17 - data/brands/mobotix.json | 734 - data/brands/mocam.json | 26 - data/brands/mocon.json | 26 - data/brands/moja-ip.json | 26 - data/brands/moko.json | 28 - data/brands/momentum.json | 289 - data/brands/monacor.json | 90 - data/brands/monita-cctv.json | 17 - data/brands/monomat.json | 17 - data/brands/monoprice.json | 66 - data/brands/monsterip.json | 17 - data/brands/morphxstar.json | 17 - data/brands/mosafe.json | 26 - data/brands/motion.json | 37 - data/brands/motioneye.json | 67 - data/brands/moto.json | 45 - data/brands/motorola.json | 700 - data/brands/motos.json | 26 - data/brands/motru.json | 17 - data/brands/mov-cam.json | 17 - data/brands/movo.json | 19 - data/brands/movols.json | 17 - data/brands/moxa.json | 57 - data/brands/mpcam.json | 17 - data/brands/mrsafe.json | 37 - data/brands/ms-3000.json | 17 - data/brands/mscamera.json | 44 - data/brands/mstar.json | 27 - data/brands/msv.json | 17 - data/brands/mtstar.json | 26 - data/brands/mubview.json | 17 - data/brands/multilaser.json | 17 - data/brands/mustcam.json | 63 - data/brands/mv-power.json | 103 - data/brands/mvs.json | 20 - data/brands/mvteam.json | 45 - data/brands/mwr.json | 27 - data/brands/my-connex.json | 17 - data/brands/myeye.json | 17 - data/brands/myindoorcam.json | 17 - data/brands/mymology.json | 17 - data/brands/mysmartvideo.json | 17 - data/brands/mytech.json | 17 - data/brands/nadatel.json | 35 - data/brands/namai.json | 17 - data/brands/nanocam.json | 26 - data/brands/nanshiba.json | 17 - data/brands/napco-security.json | 73 - data/brands/nari.json | 26 - data/brands/nas.json | 17 - data/brands/nassicam.json | 35 - data/brands/naum-pro.json | 17 - data/brands/nbvision.json | 26 - data/brands/ncp.json | 17 - data/brands/ncx.json | 17 - data/brands/nedis.json | 59 - data/brands/neewer.json | 163 - data/brands/neo-coolcam.json | 541 - data/brands/neos.json | 17 - data/brands/neostar.json | 35 - data/brands/neposmart.json | 27 - data/brands/ness.json | 36 - data/brands/nesuniq.json | 17 - data/brands/net-generation.json | 18 - data/brands/netcam.json | 367 - data/brands/netcat.json | 75 - data/brands/netcomm.json | 37 - data/brands/netis.json | 26 - data/brands/netiscom.json | 17 - data/brands/netmedia.json | 35 - ...ance-dvr-h.264-network-video-recorder.json | 133 - data/brands/nettoly.json | 33 - data/brands/netvideo.json | 35 - data/brands/netview.json | 57 - data/brands/netvision.json | 17 - data/brands/netvue.json | 17 - data/brands/netware.json | 53 - data/brands/netwave.json | 98 - data/brands/network-digital-video.json | 26 - data/brands/network-video-recorder.json | 17 - data/brands/neufusion.json | 56 - data/brands/neugent.json | 35 - data/brands/neutron.json | 143 - data/brands/nevalley.json | 17 - data/brands/nevenoe.json | 17 - data/brands/neview.json | 17 - data/brands/newvision.json | 31 - data/brands/nexcom.json | 94 - data/brands/nexgadget.json | 54 - data/brands/nexht.json | 26 - data/brands/nexsmart.json | 19 - data/brands/nextech.json | 27 - data/brands/nexus-cctv.json | 164 - data/brands/nexus.json | 61 - data/brands/nexxt-solution.json | 190 - data/brands/neye.json | 27 - data/brands/neye3c.json | 26 - data/brands/ngm.json | 26 - data/brands/ngteco.json | 17 - data/brands/niante.json | 17 - data/brands/niceborn.json | 17 - data/brands/nicecam.json | 17 - data/brands/niceview.json | 39 - data/brands/night-owl.json | 398 - data/brands/nighteye.json | 17 - data/brands/nightwatcher.json | 27 - data/brands/nihon.json | 26 - data/brands/nikodem.json | 17 - data/brands/nilox.json | 58 - data/brands/nimbus.json | 17 - data/brands/nip.json | 87 - data/brands/nishimon.json | 17 - data/brands/nisuta.json | 17 - data/brands/nitedevil.json | 17 - data/brands/niutek.json | 17 - data/brands/niv.json | 17 - data/brands/nivian.json | 63 - data/brands/nixzen.json | 54 - data/brands/nlc-cam.json | 17 - data/brands/nobelic.json | 53 - data/brands/nobitech.json | 26 - data/brands/nokia.json | 45 - data/brands/noname-chinese.json | 89 - data/brands/none.json | 17 - data/brands/nonwee.json | 17 - data/brands/nooie-360.json | 17 - data/brands/norden.json | 17 - data/brands/norelco.json | 18 - data/brands/northern.json | 28 - data/brands/northq.json | 57 - data/brands/novate.json | 17 - data/brands/novell.json | 26 - data/brands/novicam.json | 47 - data/brands/novodio.json | 17 - data/brands/novomoskow.json | 35 - data/brands/novus.json | 100 - data/brands/nram.json | 18 - data/brands/ntse.json | 26 - data/brands/nufebs.json | 36 - data/brands/nutri-vision.json | 17 - data/brands/nuvico.json | 35 - data/brands/nv-mbw.json | 17 - data/brands/nvr.json | 134 - data/brands/nvsip.json | 89 - data/brands/nvt.json | 483 - data/brands/nwp.json | 17 - data/brands/nwsvr.json | 18 - data/brands/obs.json | 17 - data/brands/oceantools.json | 17 - data/brands/oco.json | 17 - data/brands/octopi.json | 17 - data/brands/octoprint.json | 20 - data/brands/ocular.json | 17 - data/brands/oculus.json | 17 - data/brands/odesys.json | 46 - data/brands/oem.json | 81 - data/brands/oemcameras.json | 108 - data/brands/off.json | 17 - data/brands/office-one.json | 212 - data/brands/officeone.json | 27 - data/brands/ohwoai.json | 17 - data/brands/oltec.json | 26 - data/brands/olympia.json | 29 - data/brands/omega-power.json | 17 - data/brands/omega.json | 18 - data/brands/omenex.json | 18 - data/brands/omni.json | 27 - data/brands/omnibase.json | 17 - data/brands/omniview.json | 17 - data/brands/omnivision.json | 26 - data/brands/omny.json | 57 - data/brands/omp.json | 17 - data/brands/oncam-grandeye.json | 59 - data/brands/onepixel.json | 17 - data/brands/oneteck.json | 35 - data/brands/oniv.json | 17 - data/brands/onix-usa.json | 54 - data/brands/onvey.json | 36 - data/brands/onvif.json | 425 - data/brands/onwote.json | 93 - data/brands/oossxx.json | 129 - data/brands/opax.json | 35 - data/brands/openeye.json | 29 - data/brands/openipc.json | 257 - data/brands/openmiko.json | 59 - data/brands/openwrt.json | 17 - data/brands/opexia.json | 46 - data/brands/optica-video.json | 204 - data/brands/opticam.json | 111 - data/brands/optics.json | 17 - data/brands/optima.json | 26 - data/brands/optimus.json | 47 - data/brands/optio.json | 26 - data/brands/optiview.json | 36 - data/brands/optivision.json | 35 - data/brands/optris.json | 17 - data/brands/orbit.json | 53 - data/brands/ordro.json | 35 - data/brands/orient.json | 106 - data/brands/orion.json | 63 - data/brands/orite.json | 67 - data/brands/orllo.json | 17 - data/brands/orosaurus.json | 17 - data/brands/orvibo.json | 17 - data/brands/oswoo.json | 55 - data/brands/other.json | 1352 - data/brands/otima.json | 30 - data/brands/otto.json | 17 - data/brands/oude-camera.json | 26 - data/brands/oukitel.json | 17 - .../brands/outdoor-mini-speed-dome-cmera.json | 17 - data/brands/ouvis.json | 87 - data/brands/overcap.json | 17 - data/brands/overmax.json | 190 - data/brands/overseer.json | 17 - data/brands/ovislink.json | 79 - data/brands/owl.json | 26 - data/brands/owlcam.json | 26 - data/brands/owlcat.json | 19 - data/brands/owluck.json | 17 - data/brands/owlvision.json | 19 - data/brands/owsoo.json | 82 - data/brands/ozero.json | 18 - data/brands/p-link.json | 17 - data/brands/p2p.json | 176 - data/brands/p6lite.json | 17 - data/brands/pace.json | 26 - data/brands/pacidal.json | 17 - data/brands/pacom.json | 17 - data/brands/paisan.json | 37 - data/brands/palmvid.json | 17 - data/brands/palus-f.json | 17 - data/brands/pana.json | 53 - data/brands/panasonic.json | 2307 -- data/brands/panatek.json | 17 - data/brands/pangolin.json | 17 - data/brands/panoeagle.json | 40 - data/brands/panomera.json | 26 - data/brands/panoob.json | 35 - data/brands/panorama.json | 17 - data/brands/panoramic.json | 36 - data/brands/panoraxy.json | 26 - data/brands/pantech.json | 17 - data/brands/parolo.json | 35 - data/brands/partizan.json | 53 - data/brands/pasillo.json | 17 - data/brands/patronum.json | 17 - data/brands/pci.json | 26 - data/brands/pco.json | 17 - data/brands/pcs.json | 17 - data/brands/pcview.json | 26 - data/brands/peak.json | 17 - data/brands/pearl.json | 18 - data/brands/pecan.json | 17 - data/brands/pecham.json | 17 - data/brands/pegatah.json | 17 - data/brands/pelco-sarix.json | 139 - data/brands/pelco.json | 439 - data/brands/pelconet.json | 44 - data/brands/pembroke.json | 18 - data/brands/peoplefu.json | 47 - data/brands/periscope-app.json | 15 - data/brands/petawise.json | 17 - data/brands/petiszobaja.json | 17 - data/brands/pheenet.json | 43 - data/brands/philco.json | 17 - data/brands/philips.json | 26 - data/brands/phobe-micro-ink.json | 53 - data/brands/phonescam.json | 35 - data/brands/photonisvip.json | 17 - data/brands/phylink.json | 56 - data/brands/phytech.json | 31 - data/brands/picotech.json | 17 - data/brands/piczel.json | 35 - data/brands/pilot.json | 18 - data/brands/pimfg.json | 17 - data/brands/pinetron.json | 28 - data/brands/pinnacle.json | 17 - data/brands/pintu.json | 17 - data/brands/pipc.json | 35 - data/brands/pipcam.json | 65 - data/brands/piper.json | 17 - data/brands/pir.json | 26 - data/brands/pisocosina.json | 17 - data/brands/pixart.json | 17 - data/brands/pixeye.json | 17 - data/brands/pixmy.json | 28 - data/brands/pixord.json | 226 - data/brands/pixpo.json | 67 - data/brands/pixus.json | 17 - data/brands/pizdets.json | 17 - data/brands/pizero.json | 26 - data/brands/plac.json | 17 - data/brands/plaisio.json | 46 - data/brands/planet.json | 747 - data/brands/planex.json | 248 - data/brands/plantron.json | 17 - data/brands/platinum.json | 23 - data/brands/plc.json | 17 - data/brands/plenty.json | 94 - data/brands/plexonics.json | 27 - data/brands/plustek.json | 49 - data/brands/plv.json | 82 - data/brands/pni.json | 269 - data/brands/pnp.json | 67 - data/brands/pnzeo.json | 17 - data/brands/podofo.json | 17 - data/brands/poe.json | 17 - data/brands/polaris-usa.json | 44 - data/brands/polarity.json | 17 - data/brands/polaroid.json | 225 - data/brands/policetech.json | 26 - data/brands/pollo.json | 17 - data/brands/poly.json | 26 - data/brands/polycom.json | 56 - data/brands/polyvision.json | 47 - data/brands/popp.json | 17 - data/brands/porta.json | 17 - data/brands/positivo.json | 17 - data/brands/posonic.json | 18 - data/brands/powerbizt.json | 31 - data/brands/powerextra.json | 17 - data/brands/powerlead.json | 26 - data/brands/powerpack.json | 17 - data/brands/prada.json | 17 - data/brands/praxis.json | 135 - data/brands/predator.json | 17 - data/brands/premier.json | 18 - data/brands/premiumblue.json | 64 - data/brands/prestel.json | 26 - data/brands/prikim.json | 17 - data/brands/prime.json | 26 - data/brands/pripaso.json | 17 - data/brands/pristenek.json | 17 - data/brands/pritech.json | 36 - data/brands/privileg.json | 17 - data/brands/proba.json | 17 - data/brands/probe-digital.json | 17 - data/brands/procam.json | 45 - data/brands/procctv.json | 102 - data/brands/produttore-ignoto-%23!.json | 17 - data/brands/proelite.json | 31 - data/brands/proimage.json | 17 - data/brands/prok-electronics.json | 36 - data/brands/prolab-security.json | 27 - data/brands/proline-uk.json | 45 - data/brands/proline.json | 17 - data/brands/prolink.json | 53 - data/brands/prolook.json | 26 - data/brands/prolynx.json | 28 - data/brands/promax-usa.json | 17 - data/brands/promelit.json | 35 - data/brands/pronext.json | 26 - data/brands/proscan.json | 35 - data/brands/provecam.json | 53 - data/brands/provideo.json | 44 - data/brands/proview.json | 17 - data/brands/provision.json | 171 - data/brands/provisual.json | 35 - data/brands/ps-link.json | 21 - data/brands/psi-robot.json | 19 - data/brands/psp.json | 17 - data/brands/psy-link.json | 27 - data/brands/ptcl.json | 17 - data/brands/ptz05.json | 17 - data/brands/ptzoptics.json | 104 - data/brands/pumatronix.json | 27 - data/brands/pyle.json | 93 - data/brands/q-nest.json | 35 - data/brands/q-see.json | 477 - data/brands/q-sys.json | 17 - data/brands/q6-wifi-smart-camera.json | 27 - data/brands/qavi.json | 17 - data/brands/qbus.json | 18 - data/brands/qcam.json | 36 - data/brands/qcamera.json | 17 - data/brands/qeye.json | 26 - data/brands/qgs.json | 26 - data/brands/qian-yao.json | 17 - data/brands/qihan.json | 67 - data/brands/qiozdio.json | 17 - data/brands/qnap.json | 117 - data/brands/qoltec.json | 17 - data/brands/qtech.json | 44 - data/brands/quadrant-technology.json | 44 - data/brands/qualcomm-incorporated.json | 35 - data/brands/quanmin.json | 17 - data/brands/qube.json | 47 - data/brands/qubo.json | 17 - data/brands/queback.json | 17 - data/brands/questek.json | 88 - data/brands/qvis.json | 77 - data/brands/qwe.json | 17 - data/brands/r-tech.json | 85 - data/brands/rabbitstorm.json | 17 - data/brands/rainbow.json | 35 - data/brands/ralink.json | 17 - data/brands/raspberry-pi.json | 373 - data/brands/raster.json | 67 - data/brands/ratingsecu.json | 26 - data/brands/raycam.json | 26 - data/brands/rayline.json | 26 - data/brands/raylios.json | 26 - data/brands/raynic.json | 36 - data/brands/raysharp.json | 77 - data/brands/rca.json | 26 - data/brands/rds.json | 17 - data/brands/real-hd.json | 37 - data/brands/realink.json | 36 - data/brands/realm.json | 17 - data/brands/realtek.json | 27 - data/brands/redleaf-security.json | 37 - data/brands/redline.json | 17 - data/brands/redragon.json | 17 - data/brands/redrock.json | 17 - data/brands/redvision.json | 17 - data/brands/reel-tech.json | 26 - data/brands/reidubo.json | 17 - data/brands/reigy.json | 26 - data/brands/relicam.json | 36 - data/brands/remo.json | 17 - data/brands/reobiux.json | 22 - data/brands/reolink.json | 1453 -- data/brands/reotech.json | 17 - data/brands/repotec.json | 58 - data/brands/reticam.json | 17 - data/brands/retina.json | 17 - data/brands/revo.json | 59 - data/brands/revodata.json | 46 - data/brands/revotech.json | 266 - data/brands/rfid-poker-table.json | 26 - data/brands/rhinoco.json | 54 - data/brands/ribbon.json | 17 - data/brands/rifatron.json | 21 - data/brands/rigoo.json | 17 - data/brands/rimax.json | 36 - data/brands/ring.json | 94 - data/brands/rinin.json | 19 - data/brands/rinnin.json | 28 - data/brands/risco.json | 26 - data/brands/riva-flex.json | 17 - data/brands/rivatech.json | 19 - data/brands/riwyth.json | 35 - data/brands/robaxo.json | 59 - data/brands/robicam.json | 27 - data/brands/robocam.json | 26 - data/brands/rocam.json | 200 - data/brands/rohs.json | 201 - data/brands/roidmi.json | 26 - data/brands/roline.json | 69 - data/brands/rollei.json | 61 - data/brands/romai.json | 17 - data/brands/romi.json | 17 - data/brands/ronin.json | 17 - data/brands/rosewill.json | 165 - data/brands/rosh.json | 17 - data/brands/roswill.json | 17 - data/brands/rovio.json | 17 - data/brands/royal.json | 26 - data/brands/royallite.json | 17 - data/brands/rpi.json | 46 - data/brands/rraycom.json | 17 - data/brands/rstahl.json | 17 - data/brands/rtt.json | 41 - data/brands/rtx.json | 186 - data/brands/rua.json | 26 - data/brands/ruang-tamu.json | 17 - data/brands/rubetek.json | 38 - data/brands/ruisvision.json | 17 - data/brands/runyan-gate.json | 26 - data/brands/rvi.json | 272 - data/brands/s.vision.json | 53 - data/brands/s3vc.json | 79 - data/brands/saance.json | 53 - data/brands/sab.json | 35 - data/brands/sacam.json | 31 - data/brands/saewit.json | 17 - data/brands/safecam.json | 17 - data/brands/safehome.json | 349 - data/brands/safer.json | 57 - data/brands/safesky-cn.json | 35 - data/brands/safevant.json | 21 - data/brands/safire.json | 72 - data/brands/samgane.json | 37 - data/brands/samsco.json | 26 - data/brands/samsung.json | 1536 -- data/brands/sanan-cctv.json | 110 - data/brands/sanetron.json | 17 - data/brands/sannce.json | 399 - data/brands/sansco.json | 67 - data/brands/santachi.json | 17 - data/brands/santec-video.json | 122 - data/brands/sanyo.json | 42 - data/brands/sanzio.json | 17 - data/brands/saocom.json | 17 - data/brands/saphire.json | 18 - data/brands/sapsan.json | 17 - data/brands/saqicam.json | 17 - data/brands/sarmatt.json | 35 - data/brands/sarotech.json | 36 - data/brands/sartek.json | 17 - data/brands/sas-digital.json | 28 - data/brands/satvision.json | 68 - data/brands/savitmicro.json | 96 - data/brands/savvypixel.json | 26 - data/brands/sawyobi.json | 17 - data/brands/saxxon.json | 17 - data/brands/sayus.json | 19 - data/brands/scada-technology.json | 29 - data/brands/scancam.json | 17 - data/brands/schlage.json | 17 - data/brands/schneider.json | 17 - data/brands/scout-cctv.json | 36 - data/brands/scs.json | 85 - data/brands/scsi.json | 36 - data/brands/scv3.json | 26 - data/brands/scw.json | 42 - data/brands/sdc.json | 17 - data/brands/sdeter.json | 111 - data/brands/sea-wit.json | 36 - data/brands/secam-cctv.json | 63 - data/brands/seccam.json | 17 - data/brands/sectec.json | 62 - data/brands/secu-first.json | 35 - data/brands/secueasy.json | 26 - data/brands/seculink.json | 83 - data/brands/secuon.json | 17 - data/brands/secuplug.json | 91 - data/brands/secur-eye.json | 166 - data/brands/secur360.json | 19 - data/brands/securecam.json | 18 - data/brands/securia-pro.json | 37 - data/brands/securicom-tunisie.json | 17 - data/brands/security-cam.json | 37 - data/brands/security-camera-2000.json | 92 - data/brands/security-camera-warehouse.json | 27 - data/brands/security-labs.json | 39 - data/brands/security.json | 62 - data/brands/securitytronix.json | 45 - data/brands/securix.json | 36 - data/brands/secuvision.json | 17 - data/brands/secvision.json | 17 - data/brands/seecam.json | 17 - data/brands/seecom.json | 17 - data/brands/seedary.json | 29 - data/brands/seenergy.json | 17 - data/brands/seesoon.json | 18 - data/brands/seetong.json | 42 - data/brands/sefica.json | 17 - data/brands/seif.json | 17 - data/brands/seimem.json | 17 - data/brands/seisa.json | 125 - data/brands/seisatek.json | 83 - data/brands/selea.json | 26 - data/brands/semac.json | 66 - data/brands/senao.json | 26 - data/brands/sensormatic.json | 80 - data/brands/sentient-pro.json | 54 - data/brands/sentry-360.json | 66 - data/brands/sentryview.json | 17 - data/brands/sentul.json | 17 - data/brands/sepcam.json | 18 - data/brands/septekon.json | 38 - data/brands/sequrecam.json | 54 - data/brands/serage.json | 17 - data/brands/serang.json | 17 - data/brands/sercam.json | 17 - data/brands/sercomm.json | 775 - data/brands/serioux.json | 36 - data/brands/sertek.json | 35 - data/brands/ses.json | 17 - data/brands/sesco-security.json | 26 - data/brands/seteye.json | 35 - data/brands/setik.json | 26 - data/brands/seven-systems.json | 17 - data/brands/sgs.json | 17 - data/brands/shamim.json | 26 - data/brands/shany.json | 63 - data/brands/sharx-security.json | 165 - data/brands/shenwhen-neo-electronic-co.json | 226 - data/brands/shenzhen-reecam-tech.ltd..json | 17 - data/brands/shenzhen-tong-bo-wei.json | 26 - data/brands/shenzhen-toptech.json | 83 - data/brands/shenzhen-ycx-electronics.json | 35 - data/brands/shenzhen.json | 393 - data/brands/shieldeye.json | 53 - data/brands/shindai.json | 17 - data/brands/shinsoft-co.json | 18 - data/brands/shiwojia.json | 19 - data/brands/shixin-china.json | 224 - data/brands/short-8ch-nvr.json | 75 - data/brands/short.json | 17 - data/brands/showtec.json | 35 - data/brands/sibel.json | 17 - data/brands/sibo.json | 17 - data/brands/sichuan.json | 62 - data/brands/siemens.json | 185 - data/brands/siepem.json | 99 - data/brands/sightlogix.json | 53 - data/brands/sigma-electronics.json | 26 - data/brands/sigmatel.json | 17 - data/brands/signet.json | 26 - data/brands/sikvio.json | 17 - data/brands/silent-sentinel.json | 63 - data/brands/silicon-labs.json | 62 - data/brands/silvus.json | 89 - data/brands/simi-ip-camera-viewer.json | 90 - data/brands/simicam.json | 67 - data/brands/simshine.json | 17 - data/brands/sineoji.json | 89 - data/brands/sinocam.json | 237 - data/brands/sinovision.json | 18 - data/brands/sionyx.json | 17 - data/brands/sip.json | 17 - data/brands/siqura.json | 146 - data/brands/sircom.json | 17 - data/brands/siricam.json | 17 - data/brands/siricom.json | 17 - data/brands/sisview.json | 17 - data/brands/sitecom.json | 190 - data/brands/sjet.json | 17 - data/brands/sk-tel.json | 17 - data/brands/skilleye.json | 17 - data/brands/skjm.json | 35 - data/brands/sklad.json | 26 - data/brands/skone.json | 26 - data/brands/skvision.json | 26 - data/brands/sky-genious.json | 17 - data/brands/skyfield.json | 17 - data/brands/skylink.json | 85 - data/brands/skyreo.json | 26 - data/brands/skytronic.json | 63 - data/brands/skyview.json | 26 - data/brands/skyvision.json | 26 - data/brands/skyway-security.json | 35 - data/brands/sline.json | 17 - data/brands/smallcell.json | 17 - data/brands/smanos.json | 17 - data/brands/smar.json | 62 - data/brands/smart-cloud-camera.json | 35 - data/brands/smart-hd-wifi-camera.json | 37 - data/brands/smart-home.json | 81 - data/brands/smart-industry.json | 45 - data/brands/smart-net-camera.json | 26 - data/brands/smart-pixel.json | 17 - data/brands/smart-security.json | 17 - data/brands/smart-zoom.json | 17 - data/brands/smart.json | 28 - data/brands/smart380.json | 17 - data/brands/smartcam.json | 44 - data/brands/smartec.json | 62 - data/brands/smartek.json | 17 - data/brands/smarteye.json | 282 - data/brands/smartfrog.json | 26 - data/brands/smartguard.json | 18 - data/brands/smarthome.json | 35 - data/brands/smartiscam.json | 40 - data/brands/smartit.json | 17 - data/brands/smartrol.json | 26 - data/brands/smartsecurity.json | 26 - data/brands/smartsf.json | 17 - data/brands/smarttec.json | 26 - data/brands/smarttek.json | 53 - data/brands/smartview.json | 18 - data/brands/smartvision.json | 17 - data/brands/smartwares.json | 196 - data/brands/smartz.json | 17 - data/brands/smax.json | 30 - data/brands/smc.json | 220 - data/brands/smonet.json | 47 - data/brands/smp.json | 26 - data/brands/smtkey.json | 17 - data/brands/smtsec.json | 19 - data/brands/smvi.json | 26 - data/brands/sn-ipc.json | 17 - data/brands/snapav.json | 99 - data/brands/soar.json | 26 - data/brands/soggi.json | 17 - data/brands/soho.json | 28 - data/brands/solar-ip-camera.json | 50 - data/brands/solarcam.json | 17 - data/brands/soleratec.json | 27 - data/brands/solosecurity.json | 17 - data/brands/solwise.json | 117 - data/brands/sonoff.json | 116 - data/brands/sony.json | 1394 - data/brands/soohao.json | 17 - data/brands/soospy.json | 26 - data/brands/sorrano.json | 17 - data/brands/sotion.json | 17 - data/brands/soullife.json | 44 - data/brands/sovmiku.json | 26 - data/brands/sozo.json | 17 - data/brands/space-technology.json | 76 - data/brands/spacetronik.json | 17 - data/brands/sparklan.json | 125 - data/brands/spc.json | 20 - data/brands/speco.json | 363 - data/brands/sperado-cctv.json | 17 - data/brands/spetslab.json | 17 - data/brands/spider.json | 17 - data/brands/spigen.json | 17 - data/brands/spotai.json | 17 - data/brands/spotcam.json | 26 - data/brands/sprint-cctv.json | 17 - data/brands/spy-cameras.json | 82 - data/brands/spycam.json | 26 - data/brands/spyclops.json | 28 - data/brands/spydroid.json | 17 - data/brands/spytech.json | 26 - data/brands/spytecinc.json | 55 - data/brands/sq11.json | 17 - data/brands/squira.json | 17 - data/brands/sricam.json | 958 - data/brands/sricctv.json | 388 - data/brands/srihome.json | 150 - data/brands/sspc.json | 17 - data/brands/sst.json | 26 - data/brands/sstech.json | 26 - data/brands/st-(spacetechnology).json | 26 - data/brands/st-nt280e1.json | 17 - data/brands/st-team.json | 17 - data/brands/stabo.json | 19 - data/brands/stadis.json | 17 - data/brands/stalwall.json | 35 - data/brands/stanley.json | 27 - data/brands/star-eye.json | 17 - data/brands/star-vedia.json | 193 - data/brands/starcam.json | 99 - data/brands/stardot-tech.json | 132 - data/brands/stardot.json | 18 - data/brands/starir.json | 17 - data/brands/starlight.json | 17 - data/brands/start-vision.json | 74 - data/brands/starvedia.json | 67 - data/brands/starvision.json | 26 - data/brands/steinel.json | 26 - data/brands/stem.json | 18 - data/brands/steren.json | 27 - data/brands/stipelectronics.json | 53 - data/brands/stopcontact.json | 17 - data/brands/storage-options.json | 205 - data/brands/storex.json | 57 - data/brands/storm.json | 18 - data/brands/strawberry.json | 17 - data/brands/strongshine.json | 18 - data/brands/stuart-cam.json | 17 - data/brands/styco.json | 26 - data/brands/suba.json | 17 - data/brands/sucam.json | 17 - data/brands/sucjar.json | 17 - data/brands/sucura-networks.json | 27 - data/brands/sudvision.json | 18 - data/brands/summvision.json | 17 - data/brands/sumpple.json | 102 - data/brands/sumvision.json | 17 - data/brands/sunba.json | 162 - data/brands/sunbio.json | 63 - data/brands/sunchan.json | 18 - data/brands/suncomm.json | 18 - data/brands/sundari.json | 17 - data/brands/sunell-security.json | 26 - data/brands/suneyes.json | 353 - data/brands/sunivision.json | 57 - data/brands/sunkwang.json | 63 - data/brands/sunluxy.json | 274 - data/brands/sunnex.json | 17 - data/brands/sunnylux.json | 17 - data/brands/sunplus-innovation.json | 17 - data/brands/sunsom.json | 17 - data/brands/suntek.json | 17 - data/brands/sunvision-us.json | 44 - data/brands/sunywo.json | 35 - data/brands/super-focus.json | 17 - data/brands/supera.json | 35 - data/brands/supercircuits.json | 92 - data/brands/supereye.json | 100 - data/brands/superspring.json | 19 - data/brands/supervision.json | 17 - data/brands/supra-space.json | 274 - data/brands/supvin.json | 26 - data/brands/surcomm.json | 29 - data/brands/sure-eye.json | 45 - data/brands/surecom.json | 62 - data/brands/surip-cam.json | 36 - data/brands/surveilist.json | 27 - data/brands/surveon.json | 20 - data/brands/surway-technology.json | 17 - data/brands/surya-net.json | 17 - data/brands/sv-b0w-720p-hx.json | 17 - data/brands/sv3c.json | 685 - data/brands/sv3p.json | 26 - data/brands/svat.json | 81 - data/brands/svb-international.json | 26 - data/brands/svbc.json | 45 - data/brands/svc.json | 17 - data/brands/sve3.json | 17 - data/brands/svec.json | 19 - data/brands/svi.json | 26 - data/brands/svision-co.json | 17 - data/brands/svn.json | 17 - data/brands/svplus.json | 26 - data/brands/sw360.json | 28 - data/brands/swann.json | 1355 - data/brands/sweex.json | 63 - data/brands/swibe.json | 17 - data/brands/swnhd-800cam.json | 17 - data/brands/sy2l.json | 44 - data/brands/sygonix.json | 101 - data/brands/symynelec.json | 26 - data/brands/syneye.json | 17 - data/brands/synshore.json | 17 - data/brands/syny-snc.json | 17 - data/brands/syokudou.json | 17 - data/brands/syscom-cctv.json | 18 - data/brands/systemmax.json | 27 - data/brands/systoda.json | 17 - data/brands/szneo.json | 376 - data/brands/szsinocam.json | 424 - data/brands/t.one.json | 17 - data/brands/taber.json | 26 - data/brands/takaovi.json | 17 - data/brands/taller.json | 17 - data/brands/talos-security.json | 35 - data/brands/talos.json | 17 - data/brands/tank.json | 17 - data/brands/tapo.json | 631 - data/brands/targa.json | 17 - data/brands/tas-tech.json | 46 - data/brands/tbi.json | 17 - data/brands/tbkvision.json | 35 - data/brands/tbs.json | 17 - data/brands/tcs-avd-ip.json | 17 - data/brands/teamme.json | 17 - data/brands/teamvision.json | 17 - data/brands/tech-world.json | 17 - data/brands/tech.json | 17 - data/brands/techage.json | 189 - data/brands/techmaxx.json | 26 - data/brands/technaxx.json | 101 - data/brands/technology.json | 26 - data/brands/techpro.json | 18 - data/brands/techview.json | 268 - data/brands/techvision.json | 53 - data/brands/techyo.json | 27 - data/brands/teckin.json | 26 - data/brands/tecvoz.json | 39 - data/brands/tedun.json | 26 - data/brands/telca.json | 28 - data/brands/telco.json | 62 - data/brands/telekom.json | 17 - data/brands/teleste.json | 17 - data/brands/telesystem.json | 17 - data/brands/teletek-electronics.json | 26 - data/brands/telview-cctv.json | 96 - data/brands/tenda.json | 183 - data/brands/tensai.json | 17 - data/brands/tensky.json | 17 - data/brands/tenvis.json | 1566 -- data/brands/tenvus.json | 17 - data/brands/teruhal.json | 19 - data/brands/tesco.json | 17 - data/brands/tethys-innovation.json | 17 - data/brands/tevah.json | 19 - data/brands/texhnaxx.json | 17 - data/brands/thethys.json | 17 - data/brands/thingino.json | 161 - data/brands/thinkvalue.json | 36 - data/brands/thomson.json | 46 - data/brands/threeboy.json | 17 - data/brands/thrifty-tech.json | 28 - data/brands/tiandy.json | 64 - data/brands/tic.json | 17 - data/brands/tidetech.json | 43 - data/brands/tigersecu.json | 19 - data/brands/tigris.json | 18 - data/brands/timhillone.json | 35 - data/brands/tinosec.json | 32 - data/brands/tinycam.json | 26 - data/brands/tipo.json | 17 - data/brands/titanium.json | 17 - data/brands/titathink.json | 75 - data/brands/tl-sc3130g.json | 17 - data/brands/tmezon.json | 95 - data/brands/tmt.json | 17 - data/brands/toa.json | 19 - data/brands/toaioho.json | 17 - data/brands/toguard.json | 46 - data/brands/tomtop.json | 17 - data/brands/tonton.json | 121 - data/brands/top-sky.json | 78 - data/brands/top-vision.json | 35 - data/brands/topcam.json | 146 - data/brands/topcony.json | 40 - data/brands/topica-cctv.json | 203 - data/brands/topmountain.json | 17 - data/brands/topo.json | 17 - data/brands/topodome.json | 44 - data/brands/topsee.json | 46 - data/brands/topsicherheit.json | 17 - data/brands/toptech.json | 19 - data/brands/topway.json | 18 - data/brands/topwelltech.json | 17 - data/brands/torno.json | 17 - data/brands/torv.json | 17 - data/brands/toscan.json | 17 - data/brands/toshiba.json | 376 - data/brands/toughdog.json | 26 - data/brands/touralle.json | 17 - data/brands/tp-ipc.json | 82 - data/brands/tp-link.json | 1462 -- data/brands/tptek.json | 46 - data/brands/tr-d4101ir1v3.json | 17 - data/brands/traficon.json | 65 - data/brands/trantech.json | 17 - data/brands/trasera.json | 17 - data/brands/trassir.json | 71 - data/brands/trek.json | 48 - data/brands/trendnet.json | 2035 -- data/brands/triax.json | 30 - data/brands/trident.json | 17 - data/brands/trivision.json | 229 - data/brands/tronitec.json | 17 - data/brands/truen.json | 35 - data/brands/trueview.json | 27 - data/brands/truman.json | 17 - data/brands/trust.json | 147 - data/brands/truvision.json | 175 - data/brands/ts4001.json | 39 - data/brands/tseeu.json | 17 - data/brands/tshicom.json | 17 - data/brands/tsm.json | 27 - data/brands/tucam.json | 17 - data/brands/tuin.json | 26 - data/brands/tungson-ages.json | 18 - data/brands/turbo-x.json | 262 - data/brands/turing.json | 26 - data/brands/turtle.json | 17 - data/brands/tutk.json | 26 - data/brands/tuya.json | 49 - data/brands/tvc.json | 17 - data/brands/tvpsii.json | 17 - data/brands/tvt.json | 47 - data/brands/tweety-camera.json | 17 - data/brands/twg.json | 44 - data/brands/tyco.json | 56 - data/brands/typhoon.json | 17 - data/brands/tysvance.json | 26 - data/brands/tzmezon.json | 17 - data/brands/ubee.json | 17 - data/brands/ubiquiti.json | 300 - data/brands/ubnt.json | 109 - data/brands/ucam-247.json | 126 - data/brands/uche-camera.json | 17 - data/brands/ucloud.json | 18 - data/brands/ucybo.json | 17 - data/brands/udp-technology.json | 63 - data/brands/udvar.json | 26 - data/brands/uhi.json | 18 - data/brands/uipopo.json | 17 - data/brands/uk-plus.json | 17 - data/brands/ukc.json | 17 - data/brands/ukiyoo.json | 17 - data/brands/ul-tech.json | 53 - data/brands/ular.json | 17 - data/brands/ulkokamera.json | 17 - data/brands/umanor.json | 17 - data/brands/uniarch.json | 95 - data/brands/unicad.json | 17 - data/brands/unicorn.json | 80 - data/brands/uniden.json | 148 - data/brands/unidvr.json | 17 - data/brands/unifi.json | 214 - data/brands/unilook.json | 17 - data/brands/unimo.json | 31 - data/brands/unioncam.json | 54 - data/brands/unioptek.json | 26 - data/brands/unique-cctv.json | 83 - data/brands/unitech.json | 17 - data/brands/unitoptek.json | 30 - data/brands/uniue-vision.json | 17 - data/brands/universal.json | 17 - data/brands/uniview.json | 275 - data/brands/univision.json | 27 - data/brands/univivi.json | 17 - data/brands/unotech.json | 36 - data/brands/unv.json | 152 - data/brands/unview.json | 166 - data/brands/unzano.json | 17 - data/brands/uokoo.json | 148 - data/brands/upcam.json | 34 - data/brands/upupin.json | 35 - data/brands/uranium.json | 26 - data/brands/uray-encoder.json | 17 - data/brands/urban-security-group.json | 26 - data/brands/urmet.json | 56 - data/brands/us-auto.json | 26 - data/brands/usaginc.json | 27 - data/brands/usavision.json | 17 - data/brands/usb.json | 17 - data/brands/usg.json | 17 - data/brands/ut-alert.json | 17 - data/brands/utalent.json | 19 - data/brands/uxdsecurity.json | 36 - data/brands/v200.json | 17 - data/brands/v308.json | 17 - data/brands/v360.json | 54 - data/brands/v380.json | 203 - data/brands/v380pro.json | 153 - data/brands/v4l2rtspserver.json | 27 - data/brands/v600.json | 17 - data/brands/v89.json | 17 - data/brands/vacron.json | 53 - data/brands/vaddio.json | 45 - data/brands/vahti.json | 27 - data/brands/valtronics.json | 26 - data/brands/valuecam.json | 17 - data/brands/vanderbilt.json | 29 - data/brands/vandersec.json | 35 - data/brands/vandesc.json | 17 - data/brands/vangold.json | 74 - data/brands/vantage.json | 73 - data/brands/vantech.json | 191 - data/brands/vaste-achter-8mp104.json | 17 - data/brands/vastsee.json | 17 - data/brands/vatel.json | 28 - data/brands/vatilon.json | 68 - data/brands/vcam.json | 35 - data/brands/vcatch.json | 92 - data/brands/vcenter.json | 27 - data/brands/vchod.json | 17 - data/brands/vcs.json | 35 - data/brands/vea.json | 17 - data/brands/veevocam.json | 44 - data/brands/veezon.json | 18 - data/brands/veezoom.json | 29 - data/brands/veho.json | 17 - data/brands/veilux.json | 35 - data/brands/velleman.json | 67 - data/brands/velpro.json | 27 - data/brands/velvu.json | 17 - data/brands/ventech.json | 56 - data/brands/veo%2fvidi.json | 76 - data/brands/veravista.json | 17 - data/brands/verifly.json | 18 - data/brands/verint.json | 82 - data/brands/verizon.json | 70 - data/brands/verkada.json | 17 - data/brands/veroyi.json | 35 - data/brands/veskys.json | 59 - data/brands/vesta-alarms.json | 36 - data/brands/vesta.json | 37 - data/brands/vevotek.json | 17 - data/brands/veyo.json | 17 - data/brands/vgroup.json | 17 - data/brands/vgsion.json | 35 - data/brands/vguard.json | 18 - data/brands/vhod.json | 17 - data/brands/vicom.json | 17 - data/brands/vicon-security.json | 156 - data/brands/vicsung.json | 17 - data/brands/victex.json | 26 - data/brands/victure.json | 304 - data/brands/videoiq.json | 17 - data/brands/videosec-security.json | 81 - data/brands/videotec.json | 62 - data/brands/videoteknika.json | 80 - data/brands/videotrend.json | 17 - data/brands/videotronik.json | 17 - data/brands/videra.json | 17 - data/brands/vidiline.json | 35 - data/brands/vido.at.json | 36 - data/brands/vidstar.json | 17 - data/brands/viewmax.json | 47 - data/brands/viewsca.json | 17 - data/brands/viewscan.json | 17 - data/brands/vigilant.json | 17 - data/brands/viking.json | 17 - data/brands/vikviz.json | 18 - data/brands/vikylin.json | 72 - data/brands/vilar.json | 28 - data/brands/vimar.json | 17 - data/brands/vimicro.json | 103 - data/brands/vimtag.json | 36 - data/brands/vimtech.json | 17 - data/brands/viofo.json | 17 - data/brands/vip-vision.json | 49 - data/brands/vipcam.json | 72 - data/brands/viral.json | 17 - data/brands/visicom.json | 26 - data/brands/vision-digi.json | 53 - data/brands/vision-gs.json | 17 - data/brands/vision-hi-tech-co.json | 18 - data/brands/vision.json | 44 - data/brands/visioncool-cctv.json | 17 - data/brands/visionhitech-americas.json | 26 - data/brands/visionite.json | 26 - data/brands/visionlite.json | 17 - data/brands/visionstar.json | 17 - data/brands/visionxip.json | 45 - data/brands/visiotech.json | 73 - data/brands/visiotys.json | 17 - data/brands/visonic.json | 38 - data/brands/visortech.json | 17 - data/brands/vista-cctv.json | 111 - data/brands/vistacam.json | 66 - data/brands/visualint.json | 73 - data/brands/vitek-cctv.json | 151 - data/brands/vitek.json | 17 - data/brands/vitorcam.json | 74 - data/brands/vivint.json | 192 - data/brands/vivitar.json | 40 - data/brands/vivotek.json | 1588 -- data/brands/viziuuy.json | 26 - data/brands/vlc.json | 53 - data/brands/voger.json | 26 - data/brands/vonnic.json | 125 - data/brands/vonninc.json | 26 - data/brands/vonnision.json | 27 - data/brands/vonz.json | 26 - data/brands/voor%2fkeuken.json | 17 - data/brands/voordeur.json | 35 - data/brands/voyager.json | 18 - data/brands/voycam.json | 17 - data/brands/voyo.json | 17 - data/brands/vpl.json | 17 - data/brands/vr-cam.json | 120 - data/brands/vr360.json | 27 - data/brands/vsc.json | 26 - data/brands/vsonic.json | 17 - data/brands/vstarcam.json | 1135 - data/brands/vta.json | 26 - data/brands/vtech.json | 17 - data/brands/walkertone.json | 46 - data/brands/wallcharger.json | 17 - data/brands/wanscam.json | 2469 -- data/brands/wansview.json | 988 - data/brands/wapa.json | 26 - data/brands/wardmay-cctv.json | 17 - data/brands/wareshare.json | 17 - data/brands/watashi.json | 91 - data/brands/watch-bot-camera.json | 198 - data/brands/watchdog.json | 17 - data/brands/watchguard.json | 17 - data/brands/watchmeip.json | 17 - data/brands/watchnet-inc.json | 74 - data/brands/waylens.json | 17 - data/brands/waymoon.json | 17 - data/brands/wbox.json | 65 - data/brands/wca.json | 17 - data/brands/webcamxp.json | 72 - data/brands/webeye.json | 17 - data/brands/webgate.json | 35 - data/brands/webo.json | 38 - data/brands/webvision.json | 18 - data/brands/wecam.json | 26 - data/brands/weldex.json | 26 - data/brands/wepra.json | 17 - data/brands/westcam.json | 51 - data/brands/western-digital.json | 18 - data/brands/westline.json | 17 - data/brands/westmile.json | 72 - data/brands/wetranstek.json | 18 - data/brands/wevo.json | 27 - data/brands/wgcc.json | 95 - data/brands/whfi.json | 17 - data/brands/wi-tec.json | 17 - data/brands/wic.json | 17 - data/brands/widix.json | 17 - data/brands/wifi-baby.json | 18 - data/brands/wifi-mi.json | 17 - data/brands/wifi-smart-net-camera.json | 51 - data/brands/winbook.json | 281 - data/brands/winic.json | 41 - data/brands/wintech.json | 18 - data/brands/wireless-charger-cam.json | 17 - data/brands/wirepath.json | 40 - data/brands/wise-group.json | 57 - data/brands/wisenet.json | 141 - data/brands/wisevision.json | 17 - data/brands/wish.json | 26 - data/brands/wistino.json | 18 - data/brands/wistron.json | 17 - data/brands/witi.json | 26 - data/brands/wiwacam.json | 61 - data/brands/wlw.json | 17 - data/brands/wodsee.json | 99 - data/brands/wolulu.json | 17 - data/brands/wonsdar.json | 26 - data/brands/woodie-view.json | 17 - data/brands/woonkamer.json | 44 - data/brands/wouwon.json | 17 - data/brands/wsdcam.json | 17 - data/brands/wtw-tsukamoto.json | 17 - data/brands/wtw.json | 17 - data/brands/wwgc.json | 17 - data/brands/wyzecam.json | 203 - data/brands/x-price.json | 63 - data/brands/x-security.json | 36 - data/brands/x-view.json | 17 - data/brands/x-zhang.json | 17 - data/brands/x10.json | 332 - data/brands/xaimoi.json | 17 - data/brands/xanboo.json | 118 - data/brands/xblitz.json | 17 - data/brands/xblock.json | 17 - data/brands/xdh.json | 17 - data/brands/xelpon.json | 17 - data/brands/xenocam.json | 37 - data/brands/xenta.json | 28 - data/brands/xfinity.json | 38 - data/brands/xgody.json | 18 - data/brands/xiaomi.json | 251 - data/brands/xiaovv.json | 101 - data/brands/xiaoyi.json | 26 - data/brands/xin-ling.json | 35 - data/brands/xineron.json | 17 - data/brands/xinfi.json | 18 - data/brands/xingchuang.json | 17 - data/brands/xingling.json | 17 - data/brands/xinsan.json | 26 - data/brands/xiongmai-dvr.json | 75 - data/brands/xipcam.json | 37 - data/brands/xka.json | 17 - data/brands/xmarto.json | 63 - data/brands/xmate.json | 17 - data/brands/xmeye.json | 297 - data/brands/xonz.json | 27 - data/brands/xpcam.json | 17 - data/brands/xperia.json | 27 - data/brands/xpia.json | 17 - data/brands/xseries.json | 32 - data/brands/xshcam.json | 17 - data/brands/xtendrobotics.json | 26 - data/brands/xtremepro.json | 17 - data/brands/xts-corp.json | 73 - data/brands/xtsy.json | 17 - data/brands/xtu.json | 17 - data/brands/xvi.json | 17 - data/brands/xvim.json | 38 - data/brands/xvision.json | 284 - data/brands/xvr.json | 18 - data/brands/xxcamera.json | 142 - data/brands/xxk.json | 17 - data/brands/xy-ip.json | 26 - data/brands/xyclop.json | 18 - data/brands/y-cam.json | 407 - data/brands/yale.json | 64 - data/brands/yamla.json | 17 - data/brands/yanivision.json | 18 - data/brands/yarsor.json | 17 - data/brands/yatwin.json | 17 - data/brands/yawcam.json | 196 - data/brands/ycc.json | 50 - data/brands/ycc365-plus.json | 75 - data/brands/ycc365.json | 163 - data/brands/yccplus.json | 62 - data/brands/yctechcam.json | 17 - data/brands/yeekamo.json | 18 - data/brands/yeesee.json | 26 - data/brands/yeluor-360-2k.json | 17 - data/brands/yeskam.json | 38 - data/brands/yeskamo.json | 57 - data/brands/yhdo.json | 26 - data/brands/yi-hack-allwinner-v2.json | 90 - data/brands/yi-hack-allwinner.json | 109 - data/brands/yi-hack-mstar.json | 139 - data/brands/yi-hack-v4.json | 187 - data/brands/yi-hack-v5.json | 81 - data/brands/yi.json | 100 - data/brands/yiantime.json | 18 - data/brands/yicam.json | 45 - data/brands/yihack.json | 18 - data/brands/yiliao.json | 26 - data/brands/yinxn.json | 17 - data/brands/yipc.json | 27 - data/brands/yoics.json | 64 - data/brands/yoko-tech.json | 66 - data/brands/yoluke.json | 90 - data/brands/yoosee.json | 176 - data/brands/yoteware.json | 26 - data/brands/yotex.json | 27 - data/brands/youluke.json | 26 - data/brands/ysa.json | 17 - data/brands/ysee.json | 17 - data/brands/ysxlite.json | 17 - data/brands/yucheng.json | 105 - data/brands/yucvision.json | 19 - data/brands/yudor.json | 57 - data/brands/yunch.json | 20 - data/brands/yunshian.json | 18 - data/brands/yunsye.json | 26 - data/brands/yuzun.json | 17 - data/brands/z-bravo.json | 17 - data/brands/z5s.json | 36 - data/brands/zatel.json | 17 - data/brands/zaunip.json | 17 - data/brands/zavio.json | 378 - data/brands/zebion.json | 17 - data/brands/zebronics.json | 18 - data/brands/zee-cure.json | 35 - data/brands/zee.json | 17 - data/brands/zeecam.json | 17 - data/brands/zeetopin.json | 17 - data/brands/zekona.json | 26 - data/brands/zencam.json | 26 - data/brands/zenith-cctv.json | 71 - data/brands/zennox.json | 26 - data/brands/zetronix.json | 44 - data/brands/zeustech.json | 30 - data/brands/zgwang.json | 26 - data/brands/zhejiang.json | 53 - data/brands/zicom.json | 45 - data/brands/zigxico.json | 17 - data/brands/zilink.json | 97 - data/brands/zintronic.json | 59 - data/brands/zivif.json | 19 - data/brands/zjuxin.json | 27 - data/brands/zkteco.json | 87 - data/brands/zmodo.json | 615 - data/brands/znv.json | 31 - data/brands/zodiac-security.json | 35 - data/brands/zoelink.json | 19 - data/brands/zoneminder.json | 17 - data/brands/zonet.json | 110 - data/brands/zoneway.json | 145 - data/brands/zonx.json | 36 - data/brands/zoohi.json | 18 - data/brands/zosi.json | 542 - data/brands/zsgl.json | 17 - data/brands/ztcolife-mini-wifi.json | 17 - data/brands/zte.json | 128 - data/brands/zulex.json | 18 - data/brands/zuum.json | 26 - data/brands/zvision.json | 17 - data/brands/zxtech.json | 194 - data/brands/zysecurity.json | 26 - data/brands/zyxel.json | 206 - data/brands/zzlink.json | 17 - data/brands/zzmoon.json | 26 - data/camera_oui.json | 2407 -- data/popular_stream_patterns.json | 1698 -- data/query_parameters.json | 258 - docker-compose.full.yml | 90 - docker-compose.yml | 54 - go.mod | 34 +- go.sum | 103 +- internal/api/api.go | 126 + internal/api/handlers/discover.go | 141 - internal/api/handlers/health.go | 82 - internal/api/handlers/probe.go | 82 - internal/api/handlers/search.go | 99 - internal/api/routes.go | 168 - internal/api/web/index.html | 16 + internal/app/app.go | 38 + internal/app/log.go | 138 + internal/camera/database/loader.go | 326 - internal/camera/database/search.go | 408 - internal/camera/discovery/onvif_simple.go | 455 - internal/camera/discovery/oui.go | 76 - internal/camera/discovery/probe.go | 184 - internal/camera/discovery/prober_arp.go | 80 - internal/camera/discovery/prober_dns.go | 36 - internal/camera/discovery/prober_http.go | 87 - internal/camera/discovery/prober_mdns.go | 95 - internal/camera/discovery/prober_ping.go | 127 - internal/camera/discovery/scanner.go | 539 - internal/camera/stream/builder.go | 518 - internal/camera/stream/builder_dedup_test.go | 369 - .../camera/stream/deduplication_real_test.go | 420 - .../camera/stream/protocol_comparison_test.go | 351 - .../camera/stream/rtsp_auth_logic_test.go | 449 - internal/camera/stream/special_chars_test.go | 559 - internal/camera/stream/tester.go | 447 - internal/config/config.go | 292 - internal/generate/generate.go | 40 + internal/models/camera.go | 100 - internal/models/probe.go | 53 - internal/probe/probe.go | 193 + internal/search/search.go | 108 + internal/test/test.go | 199 + internal/utils/logger/adapter.go | 35 - internal/utils/logger/masking_handler.go | 199 - internal/utils/logger/masking_handler_test.go | 262 - main.go | 34 + pkg/camdb/search.go | 137 + pkg/camdb/streams.go | 202 + pkg/generate/config.go | 168 + pkg/generate/diff.go | 36 + pkg/generate/insert.go | 190 + pkg/generate/models.go | 117 + pkg/generate/writer.go | 265 + pkg/probe/arp.go | 35 + pkg/probe/dns.go | 21 + pkg/probe/http.go | 65 + pkg/probe/mdns.go | 137 + pkg/probe/models.go | 51 + pkg/probe/oui.go | 21 + pkg/probe/ping.go | 39 + pkg/probe/ports.go | 64 + pkg/sse/sse.go | 405 - pkg/tester/session.go | 97 + pkg/tester/source.go | 50 + pkg/tester/worker.go | 171 + strix.yaml.example | 25 - webui/.eslintrc.cjs | 25 - webui/CONFIG_GENERATORS.md | 279 - webui/package.json | 18 - webui/server.go | 76 - webui/web/css/main.css | 1481 -- webui/web/dev-server.sh | 14 - webui/web/index.html | 654 - webui/web/js/api/camera-search.js | 35 - webui/web/js/api/probe.js | 24 - webui/web/js/api/stream-discovery.js | 112 - .../web/js/config-generators/frigate/index.js | 425 - .../web/js/config-generators/go2rtc/index.js | 127 - webui/web/js/main.js | 650 - webui/web/js/mock/mock-camera-api.js | 49 - webui/web/js/mock/mock-data.js | 209 - webui/web/js/mock/mock-stream-api.js | 311 - webui/web/js/ui/config-panel.js | 98 - webui/web/js/ui/modal.js | 83 - webui/web/js/ui/search-form.js | 6 - webui/web/js/ui/stream-carousel.js | 157 - webui/web/js/ui/stream-list.js | 562 - webui/web/js/utils/toast.js | 13 - 3742 files changed, 2801 insertions(+), 283718 deletions(-) delete mode 100644 .dockerignore delete mode 100644 CHANGELOG.md delete mode 100644 DEDUPLICATION_TEST_RESULTS.md delete mode 100644 DOCKER.md delete mode 100644 Dockerfile delete mode 100644 FRIGATE_RECORD_CONFIG.md delete mode 100644 LICENSE delete mode 100644 Makefile delete mode 100644 README.md delete mode 100644 assets/icon-192-transparent.png delete mode 100644 assets/icon-192.png delete mode 100644 assets/icon-512-transparent.png delete mode 100644 assets/icon-512.png delete mode 100644 assets/icon.svg delete mode 100644 assets/main.gif delete mode 100644 cmd/strix/main.go delete mode 100644 data/DATABASE_FORMAT.md delete mode 100644 data/brands/255-ip-cam.json delete mode 100644 data/brands/2n-helios.json delete mode 100644 data/brands/307-hi-silicon.json delete mode 100644 data/brands/360-eye.json delete mode 100644 data/brands/3com.json delete mode 100644 data/brands/3eyes3.json delete mode 100644 data/brands/3g-ipcam.json delete mode 100644 data/brands/3r.json delete mode 100644 data/brands/3svision.json delete mode 100644 data/brands/3xlogic.json delete mode 100644 data/brands/4er.json delete mode 100644 data/brands/4mp-ip-camera.json delete mode 100644 data/brands/4sdot.json delete mode 100644 data/brands/4ucam.json delete mode 100644 data/brands/4xem.json delete mode 100644 data/brands/4xptz.json delete mode 100644 data/brands/555.json delete mode 100644 data/brands/5mpbullet.json delete mode 100644 data/brands/7-star.json delete mode 100644 data/brands/7links.json delete mode 100644 data/brands/8level.json delete mode 100644 data/brands/9up.json delete mode 100644 data/brands/a-bmi.json delete mode 100644 data/brands/a-link.json delete mode 100644 data/brands/a-mtk.json delete mode 100644 data/brands/a-tion.json delete mode 100644 data/brands/a1webcam.json delete mode 100644 data/brands/a4tech.json delete mode 100644 data/brands/aanke.json delete mode 100644 data/brands/abelcam.json delete mode 100644 data/brands/abient-weather.json delete mode 100644 data/brands/abo.json delete mode 100644 data/brands/abr-security.json delete mode 100644 data/brands/abr.json delete mode 100644 data/brands/abron.json delete mode 100644 data/brands/abs.json delete mode 100644 data/brands/absolutron.json delete mode 100644 data/brands/abus.json delete mode 100644 data/brands/ac38xx.json delete mode 100644 data/brands/acam.json delete mode 100644 data/brands/accfly.json delete mode 100644 data/brands/accsxperts.json delete mode 100644 data/brands/ace.json delete mode 100644 data/brands/acer.json delete mode 100644 data/brands/aceri-bcn.json delete mode 100644 data/brands/acesee.json delete mode 100644 data/brands/achtertuin.json delete mode 100644 data/brands/acm-v3002.json delete mode 100644 data/brands/acm.json delete mode 100644 data/brands/acor.json delete mode 100644 data/brands/acromedia.json delete mode 100644 data/brands/acti.json delete mode 100644 data/brands/action.json delete mode 100644 data/brands/actioncam.json delete mode 100644 data/brands/actiontec.json delete mode 100644 data/brands/activa.json delete mode 100644 data/brands/active-vision.json delete mode 100644 data/brands/active.json delete mode 100644 data/brands/activecam.json delete mode 100644 data/brands/acumen.json delete mode 100644 data/brands/acunico.json delete mode 100644 data/brands/acvil.json delete mode 100644 data/brands/adamas.json delete mode 100644 data/brands/adapter.json delete mode 100644 data/brands/adata.json delete mode 100644 data/brands/adc.json delete mode 100644 data/brands/adeco.json delete mode 100644 data/brands/adhua-dh-ipc-hdw4233c-a.json delete mode 100644 data/brands/adhua.json delete mode 100644 data/brands/adiance.json delete mode 100644 data/brands/adj.json delete mode 100644 data/brands/adt.json delete mode 100644 data/brands/adv.json delete mode 100644 data/brands/advance.json delete mode 100644 data/brands/advanced-home.json delete mode 100644 data/brands/advidia.json delete mode 100644 data/brands/advisen.json delete mode 100644 data/brands/advitronics.json delete mode 100644 data/brands/aecbl1.json delete mode 100644 data/brands/aegis.json delete mode 100644 data/brands/aeon.json delete mode 100644 data/brands/aeoss.json delete mode 100644 data/brands/aercont.json delete mode 100644 data/brands/aeromax.json delete mode 100644 data/brands/aes.json delete mode 100644 data/brands/aetos.json delete mode 100644 data/brands/aevision.json delete mode 100644 data/brands/afidus.json delete mode 100644 data/brands/afreey.json delete mode 100644 data/brands/agasio.json delete mode 100644 data/brands/agk.json delete mode 100644 data/brands/agptek.json delete mode 100644 data/brands/agrofilm.json delete mode 100644 data/brands/agsso.json delete mode 100644 data/brands/aguadilla.json delete mode 100644 data/brands/aguilera.json delete mode 100644 data/brands/aha.json delete mode 100644 data/brands/ahd.json delete mode 100644 data/brands/ahio-digital.json delete mode 100644 data/brands/ahula.json delete mode 100644 data/brands/ai-ball.json delete mode 100644 data/brands/ai-wifi.json delete mode 100644 data/brands/aiboostpro.json delete mode 100644 data/brands/aicam.json delete mode 100644 data/brands/aida.json delete mode 100644 data/brands/aiex.json delete mode 100644 data/brands/aigas.json delete mode 100644 data/brands/ainol.json delete mode 100644 data/brands/aipcam.json delete mode 100644 data/brands/air-live.json delete mode 100644 data/brands/aircam.json delete mode 100644 data/brands/aircamubnt.json delete mode 100644 data/brands/airlink.json delete mode 100644 data/brands/airlive.json delete mode 100644 data/brands/airmobi.json delete mode 100644 data/brands/airship.json delete mode 100644 data/brands/airsight.json delete mode 100644 data/brands/airsoft.json delete mode 100644 data/brands/airspace.json delete mode 100644 data/brands/airstream.json delete mode 100644 data/brands/airties.json delete mode 100644 data/brands/airtop.json delete mode 100644 data/brands/airview.json delete mode 100644 data/brands/airwave.json delete mode 100644 data/brands/ait.json delete mode 100644 data/brands/aitek.json delete mode 100644 data/brands/aivant.json delete mode 100644 data/brands/ajhua.json delete mode 100644 data/brands/ajt.json delete mode 100644 data/brands/ajtv.json delete mode 100644 data/brands/akai.json delete mode 100644 data/brands/akaso.json delete mode 100644 data/brands/akeia.json delete mode 100644 data/brands/akon.json delete mode 100644 data/brands/aksilium.json delete mode 100644 data/brands/aku.json delete mode 100644 data/brands/akuvox.json delete mode 100644 data/brands/alarm.com.json delete mode 100644 data/brands/alaterassi.json delete mode 100644 data/brands/alcatel.json delete mode 100644 data/brands/alcon.json delete mode 100644 data/brands/alecto.json delete mode 100644 data/brands/alertme.json delete mode 100644 data/brands/alexim.json delete mode 100644 data/brands/alfa.json delete mode 100644 data/brands/alfawise.json delete mode 100644 data/brands/alhua.json delete mode 100644 data/brands/ali-express.json delete mode 100644 data/brands/ali.json delete mode 100644 data/brands/alianza.json delete mode 100644 data/brands/alias.json delete mode 100644 data/brands/alibi.json delete mode 100644 data/brands/aliendvr.json delete mode 100644 data/brands/aliexpress.json delete mode 100644 data/brands/alinking.json delete mode 100644 data/brands/alivision.json delete mode 100644 data/brands/all-in-one.json delete mode 100644 data/brands/allecto.json delete mode 100644 data/brands/alliede.json delete mode 100644 data/brands/allnet.json delete mode 100644 data/brands/allsky.json delete mode 100644 data/brands/alltec.json delete mode 100644 data/brands/almacen.json delete mode 100644 data/brands/alonma.json delete mode 100644 data/brands/alp.json delete mode 100644 data/brands/alpha-power.json delete mode 100644 data/brands/alpha.json delete mode 100644 data/brands/alphacam.json delete mode 100644 data/brands/alphago.json delete mode 100644 data/brands/alphatec.json delete mode 100644 data/brands/alphatech.json delete mode 100644 data/brands/alpina.json delete mode 100644 data/brands/alpine.json delete mode 100644 data/brands/alptop.json delete mode 100644 data/brands/altan.json delete mode 100644 data/brands/altasec.json delete mode 100644 data/brands/altcam.json delete mode 100644 data/brands/altec-lansing.json delete mode 100644 data/brands/am.json delete mode 100644 data/brands/amamax.json delete mode 100644 data/brands/amano.json delete mode 100644 data/brands/amarine.json delete mode 100644 data/brands/amatek.json delete mode 100644 data/brands/amax.json delete mode 100644 data/brands/amazable.json delete mode 100644 data/brands/amazon.json delete mode 100644 data/brands/amba.json delete mode 100644 data/brands/ambarella.json delete mode 100644 data/brands/amber.json delete mode 100644 data/brands/ambientcam.json delete mode 100644 data/brands/ambyux-dual-cam.json delete mode 100644 data/brands/amc.json delete mode 100644 data/brands/amcast.json delete mode 100644 data/brands/amcom.json delete mode 100644 data/brands/amcrest.json delete mode 100644 data/brands/amegia.json delete mode 100644 data/brands/amera.json delete mode 100644 data/brands/american-dynamics.json delete mode 100644 data/brands/ameta.json delete mode 100644 data/brands/amiccom.json delete mode 100644 data/brands/amiko.json delete mode 100644 data/brands/amirok.json delete mode 100644 data/brands/amity.json delete mode 100644 data/brands/amopm.json delete mode 100644 data/brands/amorvue.json delete mode 100644 data/brands/amovision.json delete mode 100644 data/brands/ampand.json delete mode 100644 data/brands/amsecu.json delete mode 100644 data/brands/amview-hd.json delete mode 100644 data/brands/amview.json delete mode 100644 data/brands/amway.json delete mode 100644 data/brands/ana-pola.json delete mode 100644 data/brands/anba.json delete mode 100644 data/brands/anbash.json delete mode 100644 data/brands/anbe.json delete mode 100644 data/brands/anbe2.json delete mode 100644 data/brands/anben.json delete mode 100644 data/brands/anbentech.json delete mode 100644 data/brands/anbiux.json delete mode 100644 data/brands/anbong.json delete mode 100644 data/brands/anbvision.json delete mode 100644 data/brands/ancarla.json delete mode 100644 data/brands/andin.json delete mode 100644 data/brands/andowl.json delete mode 100644 data/brands/android-ip-cam.json delete mode 100644 data/brands/android-ip-webcam.json delete mode 100644 data/brands/android.json delete mode 100644 data/brands/anenda.json delete mode 100644 data/brands/anga.json delete mode 100644 data/brands/angel-electronics.json delete mode 100644 data/brands/anhkiet.json delete mode 100644 data/brands/anjia.json delete mode 100644 data/brands/anjiel.json delete mode 100644 data/brands/anjvision.json delete mode 100644 data/brands/anker.json delete mode 100644 data/brands/anko-tech.json delete mode 100644 data/brands/anlapus.json delete mode 100644 data/brands/annahme.json delete mode 100644 data/brands/annez.json delete mode 100644 data/brands/anni-digital.json delete mode 100644 data/brands/annke.json delete mode 100644 data/brands/anno-zero-ltd.json delete mode 100644 data/brands/anpviz.json delete mode 100644 data/brands/anran.json delete mode 100644 data/brands/anscam.json delete mode 100644 data/brands/ansice.json delete mode 100644 data/brands/ansjer.json delete mode 100644 data/brands/anson.json delete mode 100644 data/brands/anspo.json delete mode 100644 data/brands/antifurto365.json delete mode 100644 data/brands/antik-smartcam.json delete mode 100644 data/brands/antkr.json delete mode 100644 data/brands/antrica.json delete mode 100644 data/brands/anv.json delete mode 100644 data/brands/anvan.json delete mode 100644 data/brands/anxinshi.json delete mode 100644 data/brands/anyka.json delete mode 100644 data/brands/anykeeper.json delete mode 100644 data/brands/anysun.json delete mode 100644 data/brands/aobo.json delete mode 100644 data/brands/aochan.json delete mode 100644 data/brands/aomg.json delete mode 100644 data/brands/aoshi.json delete mode 100644 data/brands/aote.json delete mode 100644 data/brands/aotetek.json delete mode 100644 data/brands/aottom.json delete mode 100644 data/brands/ap-tech.json delete mode 100644 data/brands/apc.json delete mode 100644 data/brands/apeman.json delete mode 100644 data/brands/aper.json delete mode 100644 data/brands/apexis.json delete mode 100644 data/brands/apix.json delete mode 100644 data/brands/apklink.json delete mode 100644 data/brands/apleye.json delete mode 100644 data/brands/apm.json delete mode 100644 data/brands/apn-vision-ltd..json delete mode 100644 data/brands/apogee.json delete mode 100644 data/brands/aposonic.json delete mode 100644 data/brands/app-cam-35.json delete mode 100644 data/brands/apple.json delete mode 100644 data/brands/applesonic.json delete mode 100644 data/brands/applink.json delete mode 100644 data/brands/appo.json delete mode 100644 data/brands/appro.json delete mode 100644 data/brands/approx.json delete mode 100644 data/brands/aprica.json delete mode 100644 data/brands/aprox.json delete mode 100644 data/brands/apti.json delete mode 100644 data/brands/aptina.json delete mode 100644 data/brands/aqara.json delete mode 100644 data/brands/aqua.json delete mode 100644 data/brands/aquila.json delete mode 100644 data/brands/ar3210.json delete mode 100644 data/brands/aran.json delete mode 100644 data/brands/archos.json delete mode 100644 data/brands/arcvision.json delete mode 100644 data/brands/area.json delete mode 100644 data/brands/area51.json delete mode 100644 data/brands/arebi.json delete mode 100644 data/brands/arecont.json delete mode 100644 data/brands/arenti.json delete mode 100644 data/brands/argom-tech.json delete mode 100644 data/brands/argos.json delete mode 100644 data/brands/argus.json delete mode 100644 data/brands/argusleader.json delete mode 100644 data/brands/arit.json delete mode 100644 data/brands/arlotto.json delete mode 100644 data/brands/arm.json delete mode 100644 data/brands/arma-tech.json delete mode 100644 data/brands/armorview.json delete mode 100644 data/brands/armorvue.json delete mode 100644 data/brands/arnan.json delete mode 100644 data/brands/arp.json delete mode 100644 data/brands/arrow-security-system.json delete mode 100644 data/brands/arsoft.json delete mode 100644 data/brands/arvani-cctv.json delete mode 100644 data/brands/asagio.json delete mode 100644 data/brands/asante.json delete mode 100644 data/brands/asc.json delete mode 100644 data/brands/asdibuy.json delete mode 100644 data/brands/asecam.json delete mode 100644 data/brands/asgari.json delete mode 100644 data/brands/ashmount-ptz.json delete mode 100644 data/brands/asia.json delete mode 100644 data/brands/asip.json delete mode 100644 data/brands/asm.json delete mode 100644 data/brands/asoni.json delete mode 100644 data/brands/aspac.json delete mode 100644 data/brands/asrock.json delete mode 100644 data/brands/astak.json delete mode 100644 data/brands/asterix.json delete mode 100644 data/brands/asti.json delete mode 100644 data/brands/astr.json delete mode 100644 data/brands/astra-streaming.json delete mode 100644 data/brands/astrind.json delete mode 100644 data/brands/astroghost.json delete mode 100644 data/brands/astrum.json delete mode 100644 data/brands/astun.json delete mode 100644 data/brands/asus.json delete mode 100644 data/brands/asutech.json delete mode 100644 data/brands/asw-006.json delete mode 100644 data/brands/aszhonga.json delete mode 100644 data/brands/at-vision.json delete mode 100644 data/brands/atheros.json delete mode 100644 data/brands/athome.json delete mode 100644 data/brands/atis.json delete mode 100644 data/brands/atlantis.json delete mode 100644 data/brands/atlona.json delete mode 100644 data/brands/atomtech.json delete mode 100644 data/brands/atrix.json delete mode 100644 data/brands/att.json delete mode 100644 data/brands/attech.json delete mode 100644 data/brands/attichd.json delete mode 100644 data/brands/attn.json delete mode 100644 data/brands/atv.json delete mode 100644 data/brands/atz.json delete mode 100644 data/brands/au3.json delete mode 100644 data/brands/audiance.json delete mode 100644 data/brands/audio-enhancement.json delete mode 100644 data/brands/august.json delete mode 100644 data/brands/auric.json delete mode 100644 data/brands/aussen.json delete mode 100644 data/brands/auto.json delete mode 100644 data/brands/autoip.json delete mode 100644 data/brands/auwer.json delete mode 100644 data/brands/av102ip-40.json delete mode 100644 data/brands/av12176dn-15.json delete mode 100644 data/brands/av265.json delete mode 100644 data/brands/av40185dn-cd.json delete mode 100644 data/brands/avacom.json delete mode 100644 data/brands/avaja.json delete mode 100644 data/brands/avalonix.json delete mode 100644 data/brands/avantgarde.json delete mode 100644 data/brands/avaya.json delete mode 100644 data/brands/avcam.json delete mode 100644 data/brands/avd552mip.json delete mode 100644 data/brands/ave.json delete mode 100644 data/brands/avenir.json delete mode 100644 data/brands/aventi.json delete mode 100644 data/brands/aventura.json delete mode 100644 data/brands/aver.json delete mode 100644 data/brands/averdigi.json delete mode 100644 data/brands/avermedia.json delete mode 100644 data/brands/avertx.json delete mode 100644 data/brands/avicam.json delete mode 100644 data/brands/avidia.json delete mode 100644 data/brands/avidsen.json delete mode 100644 data/brands/avigilon.json delete mode 100644 data/brands/avilink.json delete mode 100644 data/brands/avios-webserver.json delete mode 100644 data/brands/aviosis.json delete mode 100644 data/brands/aviosys.json delete mode 100644 data/brands/avipas.json delete mode 100644 data/brands/aviptek.json delete mode 100644 data/brands/avistek.json delete mode 100644 data/brands/avl-hd-dome.json delete mode 100644 data/brands/avl.json delete mode 100644 data/brands/avn.json delete mode 100644 data/brands/avonic.json delete mode 100644 data/brands/avosys.json delete mode 100644 data/brands/avr-raiden.json delete mode 100644 data/brands/avs.json delete mode 100644 data/brands/avstart.json delete mode 100644 data/brands/avt.json delete mode 100644 data/brands/avtech.json delete mode 100644 data/brands/avtron.json delete mode 100644 data/brands/avue.json delete mode 100644 data/brands/avycon.json delete mode 100644 data/brands/avz.json delete mode 100644 data/brands/awfa-cam.json delete mode 100644 data/brands/awow.json delete mode 100644 data/brands/axenta.json delete mode 100644 data/brands/axeon.json delete mode 100644 data/brands/axgio.json delete mode 100644 data/brands/axis.json delete mode 100644 data/brands/axium.json delete mode 100644 data/brands/axp.json delete mode 100644 data/brands/ayrstone.json delete mode 100644 data/brands/azemax.json delete mode 100644 data/brands/azone.json delete mode 100644 data/brands/azpen.json delete mode 100644 data/brands/aztech.json delete mode 100644 data/brands/b-qtech.json delete mode 100644 data/brands/b-series.json delete mode 100644 data/brands/ba-vision.json delete mode 100644 data/brands/babelens.json delete mode 100644 data/brands/babicka.json delete mode 100644 data/brands/babycam.json delete mode 100644 data/brands/baksa.json delete mode 100644 data/brands/balitech.json delete mode 100644 data/brands/balkon.json delete mode 100644 data/brands/balkong.json delete mode 100644 data/brands/balzan.json delete mode 100644 data/brands/banzoo.json delete mode 100644 data/brands/barco.json delete mode 100644 data/brands/bardi.json delete mode 100644 data/brands/barlus.json delete mode 100644 data/brands/bascom.json delete mode 100644 data/brands/basler.json delete mode 100644 data/brands/bavision.json delete mode 100644 data/brands/bayit.json delete mode 100644 data/brands/baytech.json delete mode 100644 data/brands/bb10.json delete mode 100644 data/brands/bcs.json delete mode 100644 data/brands/bdpower.json delete mode 100644 data/brands/beaulieu.json delete mode 100644 data/brands/beb3.json delete mode 100644 data/brands/becam.json delete mode 100644 data/brands/bedee.json delete mode 100644 data/brands/beenocam.json delete mode 100644 data/brands/belco.json delete mode 100644 data/brands/belder.json delete mode 100644 data/brands/belkin-netcam.json delete mode 100644 data/brands/belkin.json delete mode 100644 data/brands/bell.json delete mode 100644 data/brands/belle.json delete mode 100644 data/brands/beltech.json delete mode 100644 data/brands/bentoo.json delete mode 100644 data/brands/benyuan.json delete mode 100644 data/brands/berger.json delete mode 100644 data/brands/bersan.json delete mode 100644 data/brands/besder.json delete mode 100644 data/brands/bessky.json delete mode 100644 data/brands/best-buy.json delete mode 100644 data/brands/best-digital.json delete mode 100644 data/brands/besta.json delete mode 100644 data/brands/bestek.json delete mode 100644 data/brands/bettini.json delete mode 100644 data/brands/beview.json delete mode 100644 data/brands/beward.json delete mode 100644 data/brands/bholt.json delete mode 100644 data/brands/bigasua.json delete mode 100644 data/brands/bigfoot.json delete mode 100644 data/brands/bikal-ip-cctv.json delete mode 100644 data/brands/biltema.json delete mode 100644 data/brands/binnencamera.json delete mode 100644 data/brands/bins.json delete mode 100644 data/brands/bionics.json delete mode 100644 data/brands/biovision.json delete mode 100644 data/brands/bioxo.json delete mode 100644 data/brands/bip-2.json delete mode 100644 data/brands/bipcam.json delete mode 100644 data/brands/biqu.json delete mode 100644 data/brands/birdsy.json delete mode 100644 data/brands/bitron.json delete mode 100644 data/brands/biwond.json delete mode 100644 data/brands/bl-ip-cam.json delete mode 100644 data/brands/black-eagle.json delete mode 100644 data/brands/black-label.json delete mode 100644 data/brands/black.json delete mode 100644 data/brands/blackat.json delete mode 100644 data/brands/blackberry.json delete mode 100644 data/brands/blackcamera.json delete mode 100644 data/brands/blackfirst.json delete mode 100644 data/brands/blackview.json delete mode 100644 data/brands/blaupunkt.json delete mode 100644 data/brands/blink.json delete mode 100644 data/brands/blitzwolf.json delete mode 100644 data/brands/bls.json delete mode 100644 data/brands/blu.json delete mode 100644 data/brands/blue-fish-cam.json delete mode 100644 data/brands/blue-iris.json delete mode 100644 data/brands/bluecherry.json delete mode 100644 data/brands/blueeyes.json delete mode 100644 data/brands/bluejay.json delete mode 100644 data/brands/bluepix.json delete mode 100644 data/brands/bluestork.json delete mode 100644 data/brands/blurams.json delete mode 100644 data/brands/bmobile.json delete mode 100644 data/brands/bnc-vision.json delete mode 100644 data/brands/bnt.json delete mode 100644 data/brands/boavision.json delete mode 100644 data/brands/boh.json delete mode 100644 data/brands/bolide.json delete mode 100644 data/brands/bolin.json delete mode 100644 data/brands/bondfree.json delete mode 100644 data/brands/bonvision.json delete mode 100644 data/brands/borsystems.json delete mode 100644 data/brands/bortox.json delete mode 100644 data/brands/bosch.json delete mode 100644 data/brands/bosma.json delete mode 100644 data/brands/boss.json delete mode 100644 data/brands/bosslan.json delete mode 100644 data/brands/botcam.json delete mode 100644 data/brands/botslab.json delete mode 100644 data/brands/boust.json delete mode 100644 data/brands/boven.json delete mode 100644 data/brands/bowya.json delete mode 100644 data/brands/box.json delete mode 100644 data/brands/bp-power.json delete mode 100644 data/brands/brahms.json delete mode 100644 data/brands/brama.json delete mode 100644 data/brands/braun.json delete mode 100644 data/brands/bravo.json delete mode 100644 data/brands/bravolink.json delete mode 100644 data/brands/breno.json delete mode 100644 data/brands/brickcom.json delete mode 100644 data/brands/brickhouse-security.json delete mode 100644 data/brands/bridge.json delete mode 100644 data/brands/bridget.json delete mode 100644 data/brands/bridgevms.json delete mode 100644 data/brands/brillcam.json delete mode 100644 data/brands/briwax.json delete mode 100644 data/brands/broadcom.json delete mode 100644 data/brands/brovision.json delete mode 100644 data/brands/brovotech.json delete mode 100644 data/brands/bsp-security.json delete mode 100644 data/brands/bsti.json delete mode 100644 data/brands/bticam.json delete mode 100644 data/brands/bticino.json delete mode 100644 data/brands/btmax.json delete mode 100644 data/brands/bu-720.json delete mode 100644 data/brands/buffalo.json delete mode 100644 data/brands/buffelshoek.json delete mode 100644 data/brands/buitencamera.json delete mode 100644 data/brands/bullet.json delete mode 100644 data/brands/bulletzoom.json delete mode 100644 data/brands/bullwark.json delete mode 100644 data/brands/bush-plus.json delete mode 100644 data/brands/buyee.json delete mode 100644 data/brands/bv-globe.json delete mode 100644 data/brands/bv-security.json delete mode 100644 data/brands/bvcam.json delete mode 100644 data/brands/bvusa.json delete mode 100644 data/brands/bwa.json delete mode 100644 data/brands/bxkam.json delete mode 100644 data/brands/bytec.json delete mode 100644 data/brands/bytek.json delete mode 100644 data/brands/c2100.json delete mode 100644 data/brands/ca-ip400mp.json delete mode 100644 data/brands/cacagoo.json delete mode 100644 data/brands/caddx.json delete mode 100644 data/brands/cadyce.json delete mode 100644 data/brands/caikong.json delete mode 100644 data/brands/caisse.json delete mode 100644 data/brands/caja.json delete mode 100644 data/brands/calion.json delete mode 100644 data/brands/camasmart.json delete mode 100644 data/brands/cambozola.json delete mode 100644 data/brands/camdeor.json delete mode 100644 data/brands/camera-solar-led-street-light.json delete mode 100644 data/brands/camerawelt.json delete mode 100644 data/brands/camery.json delete mode 100644 data/brands/cameye.json delete mode 100644 data/brands/camhd.json delete mode 100644 data/brands/camhi.json delete mode 100644 data/brands/camius.json delete mode 100644 data/brands/camkeeper.json delete mode 100644 data/brands/camline-pro.json delete mode 100644 data/brands/cammy.json delete mode 100644 data/brands/camon.json delete mode 100644 data/brands/campo.json delete mode 100644 data/brands/camqo.json delete mode 100644 data/brands/camsafe.json delete mode 100644 data/brands/camscam.json delete mode 100644 data/brands/camsee.json delete mode 100644 data/brands/camspot.json delete mode 100644 data/brands/camstar.json delete mode 100644 data/brands/camtronics.json delete mode 100644 data/brands/camview.json delete mode 100644 data/brands/camvision.json delete mode 100644 data/brands/camwest.json delete mode 100644 data/brands/camwon.json delete mode 100644 data/brands/canavis.json delete mode 100644 data/brands/canon.json delete mode 100644 data/brands/cantek.json delete mode 100644 data/brands/cantok.json delete mode 100644 data/brands/cantonk.json delete mode 100644 data/brands/carcam.json delete mode 100644 data/brands/cas-200.json delete mode 100644 data/brands/cas-700.json delete mode 100644 data/brands/casa.json delete mode 100644 data/brands/casio.json delete mode 100644 data/brands/casperi.json delete mode 100644 data/brands/catawba.json delete mode 100644 data/brands/cb-101ae.json delete mode 100644 data/brands/cb-102ae.json delete mode 100644 data/brands/cbc-america.json delete mode 100644 data/brands/cc-plus.json delete mode 100644 data/brands/ccam.json delete mode 100644 data/brands/ccd-ip-camera.json delete mode 100644 data/brands/ccd-video-camera.json delete mode 100644 data/brands/ccdcam.json delete mode 100644 data/brands/cci.json delete mode 100644 data/brands/cco.json delete mode 100644 data/brands/cctv-sentry.json delete mode 100644 data/brands/cctv.json delete mode 100644 data/brands/cctvhotdeals.json delete mode 100644 data/brands/cctvman.json delete mode 100644 data/brands/cctvr3.json delete mode 100644 data/brands/cctvsecuritypros.json delete mode 100644 data/brands/cctvstar.json delete mode 100644 data/brands/ccy.json delete mode 100644 data/brands/cd-cam.json delete mode 100644 data/brands/cda.json delete mode 100644 data/brands/cdr-king.json delete mode 100644 data/brands/cdr.json delete mode 100644 data/brands/cdxx.json delete mode 100644 data/brands/cdxxcamera.json delete mode 100644 data/brands/cechas.json delete mode 100644 data/brands/celestrom.json delete mode 100644 data/brands/celius.json delete mode 100644 data/brands/cell-cam.json delete mode 100644 data/brands/cellinx-sth775.json delete mode 100644 data/brands/cellinx.json delete mode 100644 data/brands/cellvision.json delete mode 100644 data/brands/celu.json delete mode 100644 data/brands/cengiz.json delete mode 100644 data/brands/cennan.json delete mode 100644 data/brands/cenova.json delete mode 100644 data/brands/censee.json delete mode 100644 data/brands/centechia.json delete mode 100644 data/brands/centrium.json delete mode 100644 data/brands/centrix.json delete mode 100644 data/brands/centronics.json delete mode 100644 data/brands/cepsa.json delete mode 100644 data/brands/cesnet.json delete mode 100644 data/brands/chacon.json delete mode 100644 data/brands/chakir.json delete mode 100644 data/brands/chambre.json delete mode 100644 data/brands/channel-vision.json delete mode 100644 data/brands/channel01.json delete mode 100644 data/brands/chapel.json delete mode 100644 data/brands/chavega.json delete mode 100644 data/brands/cheap.json delete mode 100644 data/brands/cheapcam.json delete mode 100644 data/brands/cherry-mobile.json delete mode 100644 data/brands/chicony.json delete mode 100644 data/brands/childrenview.com.json delete mode 100644 data/brands/china-dragon.json delete mode 100644 data/brands/china.json delete mode 100644 data/brands/chinavasion.json delete mode 100644 data/brands/chinawest.json delete mode 100644 data/brands/chine.json delete mode 100644 data/brands/chinese-lamp-camera.json delete mode 100644 data/brands/chinese.json delete mode 100644 data/brands/chineseptz.json delete mode 100644 data/brands/chineseum.json delete mode 100644 data/brands/chingling.json delete mode 100644 data/brands/chino.json delete mode 100644 data/brands/chint.json delete mode 100644 data/brands/choice.json delete mode 100644 data/brands/chongro.json delete mode 100644 data/brands/chortau.json delete mode 100644 data/brands/chowha.json delete mode 100644 data/brands/chrysalis.json delete mode 100644 data/brands/chua.json delete mode 100644 data/brands/chubb.json delete mode 100644 data/brands/ciana-exports.json delete mode 100644 data/brands/cib-security.json delete mode 100644 data/brands/cina.json delete mode 100644 data/brands/cinnado.json delete mode 100644 data/brands/cip.json delete mode 100644 data/brands/cipem.json delete mode 100644 data/brands/ciqurix.json delete mode 100644 data/brands/cisco.json delete mode 100644 data/brands/cita.json delete mode 100644 data/brands/citc.json delete mode 100644 data/brands/citronix.json delete mode 100644 data/brands/citrox.json delete mode 100644 data/brands/citystar.json delete mode 100644 data/brands/citysync.json delete mode 100644 data/brands/civs-ipc-6400.json delete mode 100644 data/brands/clairvoyant-mwr.json delete mode 100644 data/brands/clas.json delete mode 100644 data/brands/clearone.json delete mode 100644 data/brands/clearpix.json delete mode 100644 data/brands/clearview.json delete mode 100644 data/brands/clever-loop.json delete mode 100644 data/brands/clock.json delete mode 100644 data/brands/cloud-ip-camera.json delete mode 100644 data/brands/cloud.json delete mode 100644 data/brands/cloud2000.json delete mode 100644 data/brands/cloudcam.json delete mode 100644 data/brands/cloudlive.json delete mode 100644 data/brands/cmos.json delete mode 100644 data/brands/cms-zonet.json delete mode 100644 data/brands/cms.json delete mode 100644 data/brands/cnb.json delete mode 100644 data/brands/cnet.json delete mode 100644 data/brands/cnm.json delete mode 100644 data/brands/cobra.json delete mode 100644 data/brands/cocoon.json delete mode 100644 data/brands/codnida.json delete mode 100644 data/brands/cohu.json delete mode 100644 data/brands/cohuhd.json delete mode 100644 data/brands/comcast.json delete mode 100644 data/brands/comelit.json delete mode 100644 data/brands/commend.json delete mode 100644 data/brands/communications-line.json delete mode 100644 data/brands/compro.json delete mode 100644 data/brands/compufix4u.json delete mode 100644 data/brands/coms.json delete mode 100644 data/brands/comtac.json delete mode 100644 data/brands/comtrend.json delete mode 100644 data/brands/concept-pro.json delete mode 100644 data/brands/conceptronic.json delete mode 100644 data/brands/concord.json delete mode 100644 data/brands/condere.json delete mode 100644 data/brands/conico.json delete mode 100644 data/brands/connectec.json delete mode 100644 data/brands/connectionnc.json delete mode 100644 data/brands/connectsmarthome.json delete mode 100644 data/brands/connex.json delete mode 100644 data/brands/contack.json delete mode 100644 data/brands/control3d.json delete mode 100644 data/brands/control4.json delete mode 100644 data/brands/convision.json delete mode 100644 data/brands/convo-kontor.json delete mode 100644 data/brands/cooau.json delete mode 100644 data/brands/coocheer.json delete mode 100644 data/brands/coolcam.json delete mode 100644 data/brands/coolead.json delete mode 100644 data/brands/coolpad.json delete mode 100644 data/brands/cooradilla.json delete mode 100644 data/brands/cootli.json delete mode 100644 data/brands/cop.json delete mode 100644 data/brands/copa-10.json delete mode 100644 data/brands/copbr.json delete mode 100644 data/brands/core.json delete mode 100644 data/brands/corega.json delete mode 100644 data/brands/corex.json delete mode 100644 data/brands/corprit.json delete mode 100644 data/brands/corsee.json delete mode 100644 data/brands/cosansys.json delete mode 100644 data/brands/costar.json delete mode 100644 data/brands/costim.json delete mode 100644 data/brands/cotier.json delete mode 100644 data/brands/cour.json delete mode 100644 data/brands/covisec.json delete mode 100644 data/brands/cowkey.json delete mode 100644 data/brands/cp-plus.json delete mode 100644 data/brands/cpcam.json delete mode 100644 data/brands/cpd.json delete mode 100644 data/brands/cptcam.json delete mode 100644 data/brands/cpvan.json delete mode 100644 data/brands/cr2100.json delete mode 100644 data/brands/creality.json delete mode 100644 data/brands/creative.json delete mode 100644 data/brands/crenova.json delete mode 100644 data/brands/crest.json delete mode 100644 data/brands/crestron.json delete mode 100644 data/brands/cricket.json delete mode 100644 data/brands/crl.json delete mode 100644 data/brands/crysta-vision.json delete mode 100644 data/brands/crystal-vision.json delete mode 100644 data/brands/cs-280f53.json delete mode 100644 data/brands/cs2link.json delete mode 100644 data/brands/csst.json delete mode 100644 data/brands/ct2.json delete mode 100644 data/brands/ctipc.json delete mode 100644 data/brands/ctronics.json delete mode 100644 data/brands/ctvision.json delete mode 100644 data/brands/ctvison.json delete mode 100644 data/brands/ctvman.json delete mode 100644 data/brands/cube.json delete mode 100644 data/brands/cubitech.json delete mode 100644 data/brands/cusxy.json delete mode 100644 data/brands/cv-b13b10-odi.json delete mode 100644 data/brands/cv3c.json delete mode 100644 data/brands/cvlm.json delete mode 100644 data/brands/cyber.json delete mode 100644 data/brands/cybernetik.json delete mode 100644 data/brands/cybernova.json delete mode 100644 data/brands/cyberview.json delete mode 100644 data/brands/cybo.json delete mode 100644 data/brands/cycam.json delete mode 100644 data/brands/cyclops.json delete mode 100644 data/brands/cygnus.json delete mode 100644 data/brands/cygonix.json delete mode 100644 data/brands/cymbol.json delete mode 100644 data/brands/cynics.json delete mode 100644 data/brands/cyrus.json delete mode 100644 data/brands/czarna.json delete mode 100644 data/brands/d-link.json delete mode 100644 data/brands/d-tech.json delete mode 100644 data/brands/d2ip.json delete mode 100644 data/brands/d3d.json delete mode 100644 data/brands/d5118-acfsvt7.json delete mode 100644 data/brands/d5118-acnkf13.json delete mode 100644 data/brands/dae.json delete mode 100644 data/brands/dafang.json delete mode 100644 data/brands/dagro.json delete mode 100644 data/brands/dahua.json delete mode 100644 data/brands/dakang.json delete mode 100644 data/brands/dali-tech.json delete mode 100644 data/brands/dallmeier.json delete mode 100644 data/brands/damigou.json delete mode 100644 data/brands/danale.json delete mode 100644 data/brands/danele.json delete mode 100644 data/brands/danmini.json delete mode 100644 data/brands/dannovo.json delete mode 100644 data/brands/danother.json delete mode 100644 data/brands/dante.json delete mode 100644 data/brands/darts.json delete mode 100644 data/brands/dasco.json delete mode 100644 data/brands/dashua.json delete mode 100644 data/brands/datapartner.json delete mode 100644 data/brands/datavideo.json delete mode 100644 data/brands/davicom.json delete mode 100644 data/brands/davislumadvr.json delete mode 100644 data/brands/dawan.json delete mode 100644 data/brands/dax.json delete mode 100644 data/brands/daytech.json delete mode 100644 data/brands/dayukeji.json delete mode 100644 data/brands/db-power.json delete mode 100644 data/brands/dbb.json delete mode 100644 data/brands/dbcam.json delete mode 100644 data/brands/dbell.json delete mode 100644 data/brands/dbp.json delete mode 100644 data/brands/dcl.json delete mode 100644 data/brands/dcpcctv.json delete mode 100644 data/brands/dcs.json delete mode 100644 data/brands/decam.json delete mode 100644 data/brands/declink.json delete mode 100644 data/brands/dedicated-micro.json delete mode 100644 data/brands/dedicated-micros.json delete mode 100644 data/brands/deecam.json delete mode 100644 data/brands/deep-sentinel.json delete mode 100644 data/brands/defaway.json delete mode 100644 data/brands/defender.json delete mode 100644 data/brands/defeway.json delete mode 100644 data/brands/dekco.json delete mode 100644 data/brands/dekel.json delete mode 100644 data/brands/delaval.json delete mode 100644 data/brands/delcatec.json delete mode 100644 data/brands/dell.json delete mode 100644 data/brands/delphi.json delete mode 100644 data/brands/deltaco.json delete mode 100644 data/brands/denavo.json delete mode 100644 data/brands/dentech.json delete mode 100644 data/brands/denver.json delete mode 100644 data/brands/dericam.json delete mode 100644 data/brands/desertwolfblackwidow606.json delete mode 100644 data/brands/detec.json delete mode 100644 data/brands/dev_ipnc.json delete mode 100644 data/brands/devant.json delete mode 100644 data/brands/deviceclientq.json delete mode 100644 data/brands/dextel.json delete mode 100644 data/brands/df960p.json delete mode 100644 data/brands/dgsol.json delete mode 100644 data/brands/dharmesh.json delete mode 100644 data/brands/dhi-cam.json delete mode 100644 data/brands/dhwe.json delete mode 100644 data/brands/diadromos.json delete mode 100644 data/brands/diamond.json delete mode 100644 data/brands/dianwan.json delete mode 100644 data/brands/dico-800.json delete mode 100644 data/brands/digicam.json delete mode 100644 data/brands/digicom.json delete mode 100644 data/brands/digihero.json delete mode 100644 data/brands/digijet.json delete mode 100644 data/brands/digilan.json delete mode 100644 data/brands/digimerge.json delete mode 100644 data/brands/digisol.json delete mode 100644 data/brands/digital-intellect.json delete mode 100644 data/brands/digital-security.json delete mode 100644 data/brands/digital-video-recorder.json delete mode 100644 data/brands/digital-watchdog.json delete mode 100644 data/brands/digitalvision.json delete mode 100644 data/brands/digitalwatchdog.json delete mode 100644 data/brands/digitcam.json delete mode 100644 data/brands/digitech.json delete mode 100644 data/brands/digitus.json delete mode 100644 data/brands/digivue.json delete mode 100644 data/brands/digix.json delete mode 100644 data/brands/digma-smart-home.json delete mode 100644 data/brands/digma.json delete mode 100644 data/brands/dignity.json delete mode 100644 data/brands/digoo.json delete mode 100644 data/brands/dimension.json delete mode 100644 data/brands/dimos.json delete mode 100644 data/brands/dinesh.json delete mode 100644 data/brands/dinon.json delete mode 100644 data/brands/dinox.json delete mode 100644 data/brands/diopoint.json delete mode 100644 data/brands/discover.json delete mode 100644 data/brands/discovery.json delete mode 100644 data/brands/dish-cam.json delete mode 100644 data/brands/diske.json delete mode 100644 data/brands/diverse.json delete mode 100644 data/brands/diviotec.json delete mode 100644 data/brands/divis.json delete mode 100644 data/brands/divisat.json delete mode 100644 data/brands/dixie.json delete mode 100644 data/brands/dizink.json delete mode 100644 data/brands/dkseg.json delete mode 100644 data/brands/dl-cam.json delete mode 100644 data/brands/dlt-plenty.json delete mode 100644 data/brands/dm365-ipnc.json delete mode 100644 data/brands/dmp.json delete mode 100644 data/brands/dmzok.json delete mode 100644 data/brands/dnt.json delete mode 100644 data/brands/dnvr.json delete mode 100644 data/brands/docker-wyze-bridge.json delete mode 100644 data/brands/docooler.json delete mode 100644 data/brands/dod-tech.json delete mode 100644 data/brands/dodocool.json delete mode 100644 data/brands/doma.json delete mode 100644 data/brands/domar.json delete mode 100644 data/brands/dome.json delete mode 100644 data/brands/domecam.json delete mode 100644 data/brands/domintell.json delete mode 100644 data/brands/domogonza.json delete mode 100644 data/brands/dongjia.json delete mode 100644 data/brands/doogee.json delete mode 100644 data/brands/door-bell.json delete mode 100644 data/brands/door.json delete mode 100644 data/brands/doorbird.json delete mode 100644 data/brands/doorcam.json delete mode 100644 data/brands/doorphone.json delete mode 100644 data/brands/dosilkc.json delete mode 100644 data/brands/doss.json delete mode 100644 data/brands/dotix.json delete mode 100644 data/brands/doubleeagl.json delete mode 100644 data/brands/dowse.json delete mode 100644 data/brands/dowson.json delete mode 100644 data/brands/dragon-touch.json delete mode 100644 data/brands/dragoncam.json delete mode 100644 data/brands/dreamstar.json delete mode 100644 data/brands/drh-domotics.json delete mode 100644 data/brands/droid.json delete mode 100644 data/brands/ds-i200.json delete mode 100644 data/brands/dsc.json delete mode 100644 data/brands/dsnny.json delete mode 100644 data/brands/dsp.json delete mode 100644 data/brands/dss.json delete mode 100644 data/brands/ducki.json delete mode 100644 data/brands/duhau.json delete mode 100644 data/brands/duhua.json delete mode 100644 data/brands/dunlop.json delete mode 100644 data/brands/durawell.json delete mode 100644 data/brands/dvir.json delete mode 100644 data/brands/dvr.json delete mode 100644 data/brands/dvri.json delete mode 100644 data/brands/dvrn4.json delete mode 100644 data/brands/dvrusa.json delete mode 100644 data/brands/dvs-ip-cam.json delete mode 100644 data/brands/dvs.json delete mode 100644 data/brands/dvtel.json delete mode 100644 data/brands/dx.json delete mode 100644 data/brands/dygitus.json delete mode 100644 data/brands/dynacolor.json delete mode 100644 data/brands/dynamo.json delete mode 100644 data/brands/dynamode.json delete mode 100644 data/brands/e-landing.json delete mode 100644 data/brands/e-lock.json delete mode 100644 data/brands/e-tech.json delete mode 100644 data/brands/e-think.json delete mode 100644 data/brands/e-view.json delete mode 100644 data/brands/eagle-eye.json delete mode 100644 data/brands/eagle-view.json delete mode 100644 data/brands/eagle-vision.json delete mode 100644 data/brands/eagleeye.json delete mode 100644 data/brands/eaglestar.json delete mode 100644 data/brands/eagleview.json delete mode 100644 data/brands/eam.json delete mode 100644 data/brands/eamo.json delete mode 100644 data/brands/eardatech.json delete mode 100644 data/brands/east.json delete mode 100644 data/brands/eastcam.json delete mode 100644 data/brands/easternccc.json delete mode 100644 data/brands/easterncctv.json delete mode 100644 data/brands/eastvision.json delete mode 100644 data/brands/easy-ip.json delete mode 100644 data/brands/easy.json delete mode 100644 data/brands/easy4ip.json delete mode 100644 data/brands/easycam.json delete mode 100644 data/brands/easycap.json delete mode 100644 data/brands/easyn.json delete mode 100644 data/brands/easyse.json delete mode 100644 data/brands/easytao.json delete mode 100644 data/brands/easyz.json delete mode 100644 data/brands/eazydv.json delete mode 100644 data/brands/ebode.json delete mode 100644 data/brands/ebw.json delete mode 100644 data/brands/ec101.json delete mode 100644 data/brands/ecam.json delete mode 100644 data/brands/echo-star.json delete mode 100644 data/brands/eclipse.json delete mode 100644 data/brands/eco.json delete mode 100644 data/brands/ecoline.json delete mode 100644 data/brands/economato.json delete mode 100644 data/brands/edge.json delete mode 100644 data/brands/edgecore.json delete mode 100644 data/brands/edimax.json delete mode 100644 data/brands/edison.json delete mode 100644 data/brands/ednet.json delete mode 100644 data/brands/edss.json delete mode 100644 data/brands/eero.json delete mode 100644 data/brands/eescam.json delete mode 100644 data/brands/eesee.json delete mode 100644 data/brands/eet.json delete mode 100644 data/brands/ego.json delete mode 100644 data/brands/egpis.json delete mode 100644 data/brands/eguard.json delete mode 100644 data/brands/ehea.json delete mode 100644 data/brands/eickhoff.json delete mode 100644 data/brands/eigeek.json delete mode 100644 data/brands/eigen.json delete mode 100644 data/brands/eight.json delete mode 100644 data/brands/eighteen.json delete mode 100644 data/brands/eingangscamera.json delete mode 100644 data/brands/einnov.json delete mode 100644 data/brands/eip.json delete mode 100644 data/brands/eitea.json delete mode 100644 data/brands/ekaza.json delete mode 100644 data/brands/eken.json delete mode 100644 data/brands/elcom.json delete mode 100644 data/brands/ele-technology.json delete mode 100644 data/brands/elec.json delete mode 100644 data/brands/elecom.json delete mode 100644 data/brands/electriq.json delete mode 100644 data/brands/electrodh.json delete mode 100644 data/brands/elegate.json delete mode 100644 data/brands/elegiant.json delete mode 100644 data/brands/elegoo.json delete mode 100644 data/brands/elex.json delete mode 100644 data/brands/elinksmart-ip-camera.json delete mode 100644 data/brands/elinz.json delete mode 100644 data/brands/elisa.json delete mode 100644 data/brands/elite.json delete mode 100644 data/brands/elmo.json delete mode 100644 data/brands/elp.json delete mode 100644 data/brands/elp201.json delete mode 100644 data/brands/elro.json delete mode 100644 data/brands/elsys.json delete mode 100644 data/brands/elver.json delete mode 100644 data/brands/ematic.json delete mode 100644 data/brands/emax.json delete mode 100644 data/brands/embedded-net-dvr.json delete mode 100644 data/brands/emerson.json delete mode 100644 data/brands/eminent.json delete mode 100644 data/brands/empire.json delete mode 100644 data/brands/empiretech.json delete mode 100644 data/brands/emstone.json delete mode 100644 data/brands/encoder10.json delete mode 100644 data/brands/encore-electronics.json delete mode 100644 data/brands/encore.json delete mode 100644 data/brands/encwi-g1.json delete mode 100644 data/brands/endoscope.json delete mode 100644 data/brands/endroid.json delete mode 100644 data/brands/endurance.json delete mode 100644 data/brands/eneo.json delete mode 100644 data/brands/engeninus.json delete mode 100644 data/brands/engenius.json delete mode 100644 data/brands/enio-bell.json delete mode 100644 data/brands/ens-security.json delete mode 100644 data/brands/enscam.json delete mode 100644 data/brands/ensidio.json delete mode 100644 data/brands/enster.json delete mode 100644 data/brands/enter.json delete mode 100644 data/brands/entrematic.json delete mode 100644 data/brands/enviewer.json delete mode 100644 data/brands/envio.json delete mode 100644 data/brands/envision.json delete mode 100644 data/brands/enxun.json delete mode 100644 data/brands/eonboom.json delete mode 100644 data/brands/eopen.json delete mode 100644 data/brands/eos-vision.json delete mode 100644 data/brands/epcam2.json delete mode 100644 data/brands/epexis.json delete mode 100644 data/brands/epges.json delete mode 100644 data/brands/ephone.json delete mode 100644 data/brands/epicamera.json delete mode 100644 data/brands/epine.json delete mode 100644 data/brands/epson.json delete mode 100644 data/brands/ernitec.json delete mode 100644 data/brands/esc.json delete mode 100644 data/brands/escam.json delete mode 100644 data/brands/esecure.json delete mode 100644 data/brands/esee.json delete mode 100644 data/brands/esense.json delete mode 100644 data/brands/esky.json delete mode 100644 data/brands/esmart.json delete mode 100644 data/brands/esp.json delete mode 100644 data/brands/esp32.json delete mode 100644 data/brands/espressif.json delete mode 100644 data/brands/esprit-enhanced.json delete mode 100644 data/brands/essay.json delete mode 100644 data/brands/essfly.json delete mode 100644 data/brands/est.json delete mode 100644 data/brands/estcctv.json delete mode 100644 data/brands/esternal.json delete mode 100644 data/brands/esunstar.json delete mode 100644 data/brands/esypop.json delete mode 100644 data/brands/etc.json delete mode 100644 data/brands/etcam.json delete mode 100644 data/brands/etevision.json delete mode 100644 data/brands/etn.json delete mode 100644 data/brands/etrovision.json delete mode 100644 data/brands/etupiha.json delete mode 100644 data/brands/eu3c.json delete mode 100644 data/brands/eufy.json delete mode 100644 data/brands/eule.json delete mode 100644 data/brands/eura-tech.json delete mode 100644 data/brands/eurolook.json delete mode 100644 data/brands/europ-camera.json delete mode 100644 data/brands/eurotek.json delete mode 100644 data/brands/eurovideo.json delete mode 100644 data/brands/eusso.json delete mode 100644 data/brands/ev3c.json delete mode 100644 data/brands/everest.json delete mode 100644 data/brands/everfocus.json delete mode 100644 data/brands/eversecu.json delete mode 100644 data/brands/eversun.json delete mode 100644 data/brands/evgeni.json delete mode 100644 data/brands/evidence.json delete mode 100644 data/brands/evo3d.json delete mode 100644 data/brands/evocam.json delete mode 100644 data/brands/evolli.json delete mode 100644 data/brands/evolution.json delete mode 100644 data/brands/evolveo.json delete mode 100644 data/brands/evolylcam.json delete mode 100644 data/brands/evonet-c-vd320ir.json delete mode 100644 data/brands/evonet.json delete mode 100644 data/brands/evviz.json delete mode 100644 data/brands/ewan-ko.json delete mode 100644 data/brands/ewelink.json delete mode 100644 data/brands/ews1025.json delete mode 100644 data/brands/exache.json delete mode 100644 data/brands/exacqvision.json delete mode 100644 data/brands/exceed.json delete mode 100644 data/brands/excelvan.json delete mode 100644 data/brands/exelon.json delete mode 100644 data/brands/exom.json delete mode 100644 data/brands/exotic-life.json delete mode 100644 data/brands/expert.json delete mode 100644 data/brands/export-import-global.json delete mode 100644 data/brands/expose.json delete mode 100644 data/brands/extel.json delete mode 100644 data/brands/extend-lan.json delete mode 100644 data/brands/extreme.json delete mode 100644 data/brands/extron.json delete mode 100644 data/brands/eye-360.json delete mode 100644 data/brands/eye-sight.json delete mode 100644 data/brands/eye-vision.json delete mode 100644 data/brands/eye01w.json delete mode 100644 data/brands/eyecam.json delete mode 100644 data/brands/eyecloud.json delete mode 100644 data/brands/eyeguard.json delete mode 100644 data/brands/eyeipcam.json delete mode 100644 data/brands/eyemax.json delete mode 100644 data/brands/eyenimal.json delete mode 100644 data/brands/eyenix.json delete mode 100644 data/brands/eyeon.json delete mode 100644 data/brands/eyeonet.json delete mode 100644 data/brands/eyeplus.json delete mode 100644 data/brands/eyerely.json delete mode 100644 data/brands/eyes-sys.json delete mode 100644 data/brands/eyesec.json delete mode 100644 data/brands/eyesight.json delete mode 100644 data/brands/eyesonic.json delete mode 100644 data/brands/eyespy.json delete mode 100644 data/brands/eyespy247.json delete mode 100644 data/brands/eyesurv.json delete mode 100644 data/brands/eyetech.json delete mode 100644 data/brands/eyetelligent.json delete mode 100644 data/brands/eyevision.json delete mode 100644 data/brands/eyewatch.json delete mode 100644 data/brands/eyseo.json delete mode 100644 data/brands/eyu.json delete mode 100644 data/brands/ez-ip.json delete mode 100644 data/brands/ez-watching.json delete mode 100644 data/brands/ezbiz.json delete mode 100644 data/brands/ezcam.json delete mode 100644 data/brands/eziviewcctv.json delete mode 100644 data/brands/eziviz.json delete mode 100644 data/brands/ezlink.json delete mode 100644 data/brands/ezviz.json delete mode 100644 data/brands/f-series.json delete mode 100644 data/brands/f7210.json delete mode 100644 data/brands/facetime.json delete mode 100644 data/brands/faitt0o.json delete mode 100644 data/brands/faittoo.json delete mode 100644 data/brands/falcon-eye.json delete mode 100644 data/brands/falcon.json delete mode 100644 data/brands/faleemi.json delete mode 100644 data/brands/falke.json delete mode 100644 data/brands/fam.json delete mode 100644 data/brands/fang-hacks.json delete mode 100644 data/brands/fanse.json delete mode 100644 data/brands/fanshine.json delete mode 100644 data/brands/fanvil.json delete mode 100644 data/brands/fanyii.json delete mode 100644 data/brands/fayele.json delete mode 100644 data/brands/fb-100ap.json delete mode 100644 data/brands/fc5415e.json delete mode 100644 data/brands/fcc.json delete mode 100644 data/brands/fdt.json delete mode 100644 data/brands/feasso.json delete mode 100644 data/brands/febfox-wifi-camera.json delete mode 100644 data/brands/feit-electric.json delete mode 100644 data/brands/feite.json delete mode 100644 data/brands/fen-joo.json delete mode 100644 data/brands/fenton.json delete mode 100644 data/brands/ferguson.json delete mode 100644 data/brands/fern360.json delete mode 100644 data/brands/fhd-2mp.json delete mode 100644 data/brands/fifi-spectrum.json delete mode 100644 data/brands/fine.json delete mode 100644 data/brands/finesight.json delete mode 100644 data/brands/finex.json delete mode 100644 data/brands/fiptec.json delete mode 100644 data/brands/firas.json delete mode 100644 data/brands/firetruck.json delete mode 100644 data/brands/first-alert.json delete mode 100644 data/brands/first-concept.json delete mode 100644 data/brands/firstcam.json delete mode 100644 data/brands/firstrend.json delete mode 100644 data/brands/fisotech.json delete mode 100644 data/brands/fitivision.json delete mode 100644 data/brands/fkyro.json delete mode 100644 data/brands/fla.json delete mode 100644 data/brands/flashforge.json delete mode 100644 data/brands/flexidome.json delete mode 100644 data/brands/flexwatch.json delete mode 100644 data/brands/flir.json delete mode 100644 data/brands/floureon.json delete mode 100644 data/brands/fluesonic.json delete mode 100644 data/brands/flying.json delete mode 100644 data/brands/fnkvision.json delete mode 100644 data/brands/focuscam.json delete mode 100644 data/brands/focuseye.json delete mode 100644 data/brands/folsom.json delete mode 100644 data/brands/fomei.json delete mode 100644 data/brands/foodtec.json delete mode 100644 data/brands/fortec.json delete mode 100644 data/brands/forti.json delete mode 100644 data/brands/forticam.json delete mode 100644 data/brands/fortinet.json delete mode 100644 data/brands/fortis.json delete mode 100644 data/brands/fortrek.json delete mode 100644 data/brands/foscam.json delete mode 100644 data/brands/fossi.json delete mode 100644 data/brands/fostar.json delete mode 100644 data/brands/fosvision.json delete mode 100644 data/brands/foxcam.json delete mode 100644 data/brands/fracarro.json delete mode 100644 data/brands/fredi.json delete mode 100644 data/brands/freesbell.json delete mode 100644 data/brands/freetec.json delete mode 100644 data/brands/frente.json delete mode 100644 data/brands/fs.com.json delete mode 100644 data/brands/fsan.json delete mode 100644 data/brands/ftype.json delete mode 100644 data/brands/fujicam.json delete mode 100644 data/brands/fujiko.json delete mode 100644 data/brands/fujima.json delete mode 100644 data/brands/fujinon.json delete mode 100644 data/brands/fujitel.json delete mode 100644 data/brands/fujitron.json delete mode 100644 data/brands/fujtech.json delete mode 100644 data/brands/fujut.json delete mode 100644 data/brands/fukuda.json delete mode 100644 data/brands/fulicom.json delete mode 100644 data/brands/fullsec.json delete mode 100644 data/brands/fullward.json delete mode 100644 data/brands/fuluva.json delete mode 100644 data/brands/fundos.json delete mode 100644 data/brands/funlux.json delete mode 100644 data/brands/funxwe.json delete mode 100644 data/brands/furbo.json delete mode 100644 data/brands/fures.json delete mode 100644 data/brands/fusion.json delete mode 100644 data/brands/fustes-sola.json delete mode 100644 data/brands/fuswlan.json delete mode 100644 data/brands/futura-elettronica.json delete mode 100644 data/brands/fvc-cameras.json delete mode 100644 data/brands/fyuui.json delete mode 100644 data/brands/g180.json delete mode 100644 data/brands/g4direct.json delete mode 100644 data/brands/gadinan.json delete mode 100644 data/brands/gadnic.json delete mode 100644 data/brands/gadspot.json delete mode 100644 data/brands/gaines-dvr.json delete mode 100644 data/brands/galaxy-note-3.json delete mode 100644 data/brands/galaxy-note3.json delete mode 100644 data/brands/galaxy-phone.json delete mode 100644 data/brands/galaxy-s3.json delete mode 100644 data/brands/galaxy-s4.json delete mode 100644 data/brands/galaxy.json delete mode 100644 data/brands/galpon.json delete mode 100644 data/brands/ganvis.json delete mode 100644 data/brands/ganz.json delete mode 100644 data/brands/gardinan.json delete mode 100644 data/brands/gate.json delete mode 100644 data/brands/gateway-security.json delete mode 100644 data/brands/gateway.json delete mode 100644 data/brands/gato.json delete mode 100644 data/brands/gawell.json delete mode 100644 data/brands/gazingsure.json delete mode 100644 data/brands/gbf.json delete mode 100644 data/brands/gbo.json delete mode 100644 data/brands/gcam.json delete mode 100644 data/brands/gds.json delete mode 100644 data/brands/ge.json delete mode 100644 data/brands/gecko-security.json delete mode 100644 data/brands/gedthry.json delete mode 100644 data/brands/geecam.json delete mode 100644 data/brands/geecamvnt.json delete mode 100644 data/brands/geeni.json delete mode 100644 data/brands/geeya.json delete mode 100644 data/brands/gembird.json delete mode 100644 data/brands/gemtek.json delete mode 100644 data/brands/gen.json delete mode 100644 data/brands/genbolt.json delete mode 100644 data/brands/general.json delete mode 100644 data/brands/generic.json delete mode 100644 data/brands/genie.json delete mode 100644 data/brands/genius.json delete mode 100644 data/brands/geniv-flux.json delete mode 100644 data/brands/geniv.json delete mode 100644 data/brands/genrui.json delete mode 100644 data/brands/genuine.json delete mode 100644 data/brands/geo.json delete mode 100644 data/brands/geovision.json delete mode 100644 data/brands/gertec.json delete mode 100644 data/brands/gf-pumps.json delete mode 100644 data/brands/gi-star-srl.json delete mode 100644 data/brands/gid20m-pvir.json delete mode 100644 data/brands/gifran.json delete mode 100644 data/brands/giga.json delete mode 100644 data/brands/gigaeye.json delete mode 100644 data/brands/gigamedia.json delete mode 100644 data/brands/ginzzu.json delete mode 100644 data/brands/gionee-cam.json delete mode 100644 data/brands/gionee.json delete mode 100644 data/brands/gipcam.json delete mode 100644 data/brands/giraffe.json delete mode 100644 data/brands/gise.json delete mode 100644 data/brands/giucam.json delete mode 100644 data/brands/gkb.json delete mode 100644 data/brands/glados-cam.json delete mode 100644 data/brands/glenz.json delete mode 100644 data/brands/glink.json delete mode 100644 data/brands/global-tech.json delete mode 100644 data/brands/global.json delete mode 100644 data/brands/globeteck.json delete mode 100644 data/brands/gltech.json delete mode 100644 data/brands/gmini.json delete mode 100644 data/brands/gncc.json delete mode 100644 data/brands/gnexus.json delete mode 100644 data/brands/gnomecam.json delete mode 100644 data/brands/go1984.json delete mode 100644 data/brands/go2rtc.json delete mode 100644 data/brands/go4.json delete mode 100644 data/brands/goahead.json delete mode 100644 data/brands/gocam.json delete mode 100644 data/brands/goclever.json delete mode 100644 data/brands/gocomma.json delete mode 100644 data/brands/godraj.json delete mode 100644 data/brands/gogogate.json delete mode 100644 data/brands/going.json delete mode 100644 data/brands/goingtech.json delete mode 100644 data/brands/golbong.json delete mode 100644 data/brands/goldchamp.json delete mode 100644 data/brands/golden-gate.json delete mode 100644 data/brands/goldnet.json delete mode 100644 data/brands/goldstream.json delete mode 100644 data/brands/goliath.json delete mode 100644 data/brands/goodgo.json delete mode 100644 data/brands/google-pixel.json delete mode 100644 data/brands/google.json delete mode 100644 data/brands/goospy.json delete mode 100644 data/brands/gopro.json delete mode 100644 data/brands/gopro4.json delete mode 100644 data/brands/goscam.json delete mode 100644 data/brands/goswift.json delete mode 100644 data/brands/gotab.json delete mode 100644 data/brands/gotake.json delete mode 100644 data/brands/gotme.json delete mode 100644 data/brands/gpi360.json delete mode 100644 data/brands/gps-standard.json delete mode 100644 data/brands/gq1080p.json delete mode 100644 data/brands/gqd.json delete mode 100644 data/brands/grafeio.json delete mode 100644 data/brands/grain.json delete mode 100644 data/brands/grainmedia.json delete mode 100644 data/brands/grand.json delete mode 100644 data/brands/grandstream.json delete mode 100644 data/brands/grandtec.json delete mode 100644 data/brands/grandtech.json delete mode 100644 data/brands/grant.json delete mode 100644 data/brands/granvista.json delete mode 100644 data/brands/great-wall.json delete mode 100644 data/brands/greatek.json delete mode 100644 data/brands/green-feathers.json delete mode 100644 data/brands/green-home.json delete mode 100644 data/brands/greentech.json delete mode 100644 data/brands/greentel.json delete mode 100644 data/brands/greenview.json delete mode 100644 data/brands/greenvision.json delete mode 100644 data/brands/grey-cam.json delete mode 100644 data/brands/grid-micro-corp..json delete mode 100644 data/brands/grisboa.json delete mode 100644 data/brands/groudchat.json delete mode 100644 data/brands/group.json delete mode 100644 data/brands/grundig.json delete mode 100644 data/brands/grwibeou.json delete mode 100644 data/brands/gsi.json delete mode 100644 data/brands/gt-view.json delete mode 100644 data/brands/gtc.json delete mode 100644 data/brands/gtec.json delete mode 100644 data/brands/gts.json delete mode 100644 data/brands/guangzhou.json delete mode 100644 data/brands/guard.json delete mode 100644 data/brands/guardcam.json delete mode 100644 data/brands/guardian.json delete mode 100644 data/brands/guardzilla.json delete mode 100644 data/brands/guoanvision.json delete mode 100644 data/brands/guudgo.json delete mode 100644 data/brands/gvi.json delete mode 100644 data/brands/gw-security.json delete mode 100644 data/brands/gwelltimes.json delete mode 100644 data/brands/gwipc.json delete mode 100644 data/brands/gynoii.json delete mode 100644 data/brands/gyration.json delete mode 100644 data/brands/gyuk.json delete mode 100644 data/brands/gzhou.json delete mode 100644 data/brands/h-cam.json delete mode 100644 data/brands/h-series.json delete mode 100644 data/brands/h.264-network-dvr.json delete mode 100644 data/brands/h.264-vga-wireless-cube-camera.json delete mode 100644 data/brands/h.264.json delete mode 100644 data/brands/h.265.json delete mode 100644 data/brands/h.view.json delete mode 100644 data/brands/h264-vga-wireless-cube-camera.json delete mode 100644 data/brands/h2md4a.json delete mode 100644 data/brands/h3-137.json delete mode 100644 data/brands/h3518e.json delete mode 100644 data/brands/h6837wi.json delete mode 100644 data/brands/hacon.json delete mode 100644 data/brands/hai.json delete mode 100644 data/brands/haivison.json delete mode 100644 data/brands/haiz.json delete mode 100644 data/brands/hama.json delete mode 100644 data/brands/hamlet.json delete mode 100644 data/brands/hamrabi.json delete mode 100644 data/brands/hamrol.json delete mode 100644 data/brands/hamrolte.json delete mode 100644 data/brands/hanbang.json delete mode 100644 data/brands/handy-ip-cam.json delete mode 100644 data/brands/hangzhou.json delete mode 100644 data/brands/hanhwa.json delete mode 100644 data/brands/hanlin.json delete mode 100644 data/brands/hanwei.json delete mode 100644 data/brands/hanwha.json delete mode 100644 data/brands/harex.json delete mode 100644 data/brands/hatake.json delete mode 100644 data/brands/haucam.json delete mode 100644 data/brands/hauppauge.json delete mode 100644 data/brands/haustuer.json delete mode 100644 data/brands/hauwei.json delete mode 100644 data/brands/hawk-vision.json delete mode 100644 data/brands/hawk.json delete mode 100644 data/brands/hawkcam.json delete mode 100644 data/brands/hawki.json delete mode 100644 data/brands/hawking.json delete mode 100644 data/brands/hawq.json delete mode 100644 data/brands/hayear.json delete mode 100644 data/brands/hbell.json delete mode 100644 data/brands/hd-camera.json delete mode 100644 data/brands/hd-cloudcam.json delete mode 100644 data/brands/hd-ip-camera-depan.json delete mode 100644 data/brands/hd-ip-dome-2.json delete mode 100644 data/brands/hd-ip-dome.json delete mode 100644 data/brands/hd-ipc.json delete mode 100644 data/brands/hd-link.json delete mode 100644 data/brands/hd-megapixel.json delete mode 100644 data/brands/hd-minicam.json delete mode 100644 data/brands/hd-wireless.json delete mode 100644 data/brands/hd.json delete mode 100644 data/brands/hdcam.json delete mode 100644 data/brands/hdcvi.json delete mode 100644 data/brands/hddcam.json delete mode 100644 data/brands/hdipc.json delete mode 100644 data/brands/hdipcam.json delete mode 100644 data/brands/hdl.json delete mode 100644 data/brands/hdp-1100pt.json delete mode 100644 data/brands/hdpro.json delete mode 100644 data/brands/hds.json delete mode 100644 data/brands/hdview.json delete mode 100644 data/brands/he-wifi.json delete mode 100644 data/brands/heanworld.json delete mode 100644 data/brands/hed.json delete mode 100644 data/brands/heden.json delete mode 100644 data/brands/heetoo.json delete mode 100644 data/brands/heimlink.json delete mode 100644 data/brands/heimvision.json delete mode 100644 data/brands/heisee.json delete mode 100644 data/brands/heitel.json delete mode 100644 data/brands/heivision.json delete mode 100644 data/brands/heiwell.json delete mode 100644 data/brands/helios.json delete mode 100644 data/brands/hemkamera.json delete mode 100644 data/brands/henelec.json delete mode 100644 data/brands/hengda.json delete mode 100644 data/brands/hengstar.json delete mode 100644 data/brands/hennda.json delete mode 100644 data/brands/hensel.json delete mode 100644 data/brands/herkules.json delete mode 100644 data/brands/herospeed.json delete mode 100644 data/brands/hesa.json delete mode 100644 data/brands/hesavision.json delete mode 100644 data/brands/hessu.json delete mode 100644 data/brands/hexa.json delete mode 100644 data/brands/heystop.json delete mode 100644 data/brands/hfws.json delete mode 100644 data/brands/hhi.json delete mode 100644 data/brands/hi-focus.json delete mode 100644 data/brands/hi-fun.json delete mode 100644 data/brands/hi-jin.json delete mode 100644 data/brands/hi-silicon.json delete mode 100644 data/brands/hi-view.json delete mode 100644 data/brands/hi3507.json delete mode 100644 data/brands/hi3518.json delete mode 100644 data/brands/hi5.json delete mode 100644 data/brands/hicam.json delete mode 100644 data/brands/hicc-2300t.json delete mode 100644 data/brands/hicc-p-3100.json delete mode 100644 data/brands/hichip.json delete mode 100644 data/brands/hidetech.json delete mode 100644 data/brands/hidrokemel.json delete mode 100644 data/brands/hifocus.json delete mode 100644 data/brands/hiina.json delete mode 100644 data/brands/hiinakas.json delete mode 100644 data/brands/hijack-hq-nvr.json delete mode 100644 data/brands/hikam.json delete mode 100644 data/brands/hikari.json delete mode 100644 data/brands/hiki.json delete mode 100644 data/brands/hikity.json delete mode 100644 data/brands/hiklook.json delete mode 100644 data/brands/hikvision.json delete mode 100644 data/brands/hikwon.json delete mode 100644 data/brands/hills.json delete mode 100644 data/brands/hilook.json delete mode 100644 data/brands/hiltron.json delete mode 100644 data/brands/hip.json delete mode 100644 data/brands/hip2p.json delete mode 100644 data/brands/hipcam.json delete mode 100644 data/brands/hipro.json delete mode 100644 data/brands/hisee.json delete mode 100644 data/brands/hiseeu.json delete mode 100644 data/brands/hisense.json delete mode 100644 data/brands/hisilicon.json delete mode 100644 data/brands/hisomu.json delete mode 100644 data/brands/histream.json delete mode 100644 data/brands/hisung.json delete mode 100644 data/brands/hitek.json delete mode 100644 data/brands/hitron.json delete mode 100644 data/brands/hivdc-2300v.json delete mode 100644 data/brands/hiview.json delete mode 100644 data/brands/hivision.json delete mode 100644 data/brands/hiwatch.json delete mode 100644 data/brands/hjshi.json delete mode 100644 data/brands/hjt.json delete mode 100644 data/brands/hkes.json delete mode 100644 data/brands/hnc.json delete mode 100644 data/brands/hodely.json delete mode 100644 data/brands/hofsta.json delete mode 100644 data/brands/hokam.json delete mode 100644 data/brands/holdoor.json delete mode 100644 data/brands/holovision.json delete mode 100644 data/brands/holowits.json delete mode 100644 data/brands/home-it.json delete mode 100644 data/brands/home-life.json delete mode 100644 data/brands/homecare.json delete mode 100644 data/brands/homedia.json delete mode 100644 data/brands/homeguard.json delete mode 100644 data/brands/homeseer.json delete mode 100644 data/brands/homeviz.json delete mode 100644 data/brands/homewizard.json delete mode 100644 data/brands/hondgda.json delete mode 100644 data/brands/honestech.json delete mode 100644 data/brands/honeywell.json delete mode 100644 data/brands/hongda.json delete mode 100644 data/brands/hongjingtian.json delete mode 100644 data/brands/honic.json delete mode 100644 data/brands/hootoo.json delete mode 100644 data/brands/hopeway.json delete mode 100644 data/brands/hopewell-cctv.com.json delete mode 100644 data/brands/horstek.json delete mode 100644 data/brands/hosafe.json delete mode 100644 data/brands/hosftra.json delete mode 100644 data/brands/hoswell.json delete mode 100644 data/brands/hotfun.json delete mode 100644 data/brands/hozelec.json delete mode 100644 data/brands/hp.json delete mode 100644 data/brands/hqcam.json delete mode 100644 data/brands/hqvision.json delete mode 100644 data/brands/hr04.json delete mode 100644 data/brands/hrv.json delete mode 100644 data/brands/hs-ip-camera.json delete mode 100644 data/brands/hs-ipsc.json delete mode 100644 data/brands/hscomila.json delete mode 100644 data/brands/hsmartlink.json delete mode 100644 data/brands/hsv.json delete mode 100644 data/brands/hta.json delete mode 100644 data/brands/htc.json delete mode 100644 data/brands/htcone.json delete mode 100644 data/brands/huacam.json delete mode 100644 data/brands/huashi.json delete mode 100644 data/brands/huawei.json delete mode 100644 data/brands/hubble.json delete mode 100644 data/brands/huisun.json delete mode 100644 data/brands/humcam.json delete mode 100644 data/brands/hungtek.json delete mode 100644 data/brands/hunt.json delete mode 100644 data/brands/hunter.json delete mode 100644 data/brands/husier.json delete mode 100644 data/brands/hutermann.json delete mode 100644 data/brands/huviron.json delete mode 100644 data/brands/hv3c.json delete mode 100644 data/brands/hvcam.json delete mode 100644 data/brands/hview.json delete mode 100644 data/brands/hvr.json delete mode 100644 data/brands/hx-635k.json delete mode 100644 data/brands/hxview.json delete mode 100644 data/brands/hy-outdoor-ip-camera.json delete mode 100644 data/brands/hybsys.json delete mode 100644 data/brands/hyobalc.json delete mode 100644 data/brands/hyundai.json delete mode 100644 data/brands/hzconnect.json delete mode 100644 data/brands/i-can-see.json delete mode 100644 data/brands/i-view.json delete mode 100644 data/brands/i30vd.json delete mode 100644 data/brands/i591b6f.json delete mode 100644 data/brands/ibcam.json delete mode 100644 data/brands/ic-realtime.json delete mode 100644 data/brands/ic-realtimes.json delete mode 100644 data/brands/icam.json delete mode 100644 data/brands/icamview.json delete mode 100644 data/brands/icantek.json delete mode 100644 data/brands/icloudcam.json delete mode 100644 data/brands/iclp.json delete mode 100644 data/brands/icom.json delete mode 100644 data/brands/icon.json delete mode 100644 data/brands/icrealtime.json delete mode 100644 data/brands/ics.json delete mode 100644 data/brands/identivision.json delete mode 100644 data/brands/idis-global.json delete mode 100644 data/brands/idis.json delete mode 100644 data/brands/idt.json delete mode 100644 data/brands/idview.json delete mode 100644 data/brands/ie-link-0.json delete mode 100644 data/brands/iegeek.json delete mode 100644 data/brands/iernut-2.json delete mode 100644 data/brands/iets.json delete mode 100644 data/brands/iflux.json delete mode 100644 data/brands/igson.json delete mode 100644 data/brands/iguard.json delete mode 100644 data/brands/ijack-liu.json delete mode 100644 data/brands/ikegami.json delete mode 100644 data/brands/ikonic.json delete mode 100644 data/brands/ildvr.json delete mode 100644 data/brands/illumivue.json delete mode 100644 data/brands/illustra.json delete mode 100644 data/brands/imagiatek.json delete mode 100644 data/brands/imaginon.json delete mode 100644 data/brands/imago.json delete mode 100644 data/brands/ime3122-admnq39.json delete mode 100644 data/brands/img.json delete mode 100644 data/brands/imieye.json delete mode 100644 data/brands/imogen.json delete mode 100644 data/brands/imou.json delete mode 100644 data/brands/impax.json delete mode 100644 data/brands/imporx.json delete mode 100644 data/brands/impulse.json delete mode 100644 data/brands/ims200.json delete mode 100644 data/brands/imx290.json delete mode 100644 data/brands/inaxsys.json delete mode 100644 data/brands/inc.json delete mode 100644 data/brands/index.json delete mode 100644 data/brands/indexa.json delete mode 100644 data/brands/indigo.json delete mode 100644 data/brands/indkoersel.json delete mode 100644 data/brands/inesun.json delete mode 100644 data/brands/infinity.json delete mode 100644 data/brands/infinova.json delete mode 100644 data/brands/infocus.json delete mode 100644 data/brands/ing.json delete mode 100644 data/brands/ingeek.json delete mode 100644 data/brands/ingenic-v01.json delete mode 100644 data/brands/ingresso.json delete mode 100644 data/brands/ingressosede.json delete mode 100644 data/brands/inisoft-cam.json delete mode 100644 data/brands/inkovideo.json delete mode 100644 data/brands/innekt.json delete mode 100644 data/brands/inngang.json delete mode 100644 data/brands/innmat.json delete mode 100644 data/brands/inno-vision.json delete mode 100644 data/brands/innotrends.json delete mode 100644 data/brands/innovatek.json delete mode 100644 data/brands/innovative-security-designs.json delete mode 100644 data/brands/innovo.json delete mode 100644 data/brands/inosun.json delete mode 100644 data/brands/inpotek.json delete mode 100644 data/brands/inqmega.json delete mode 100644 data/brands/inscape.json delete mode 100644 data/brands/inside.json delete mode 100644 data/brands/insma.json delete mode 100644 data/brands/instar.json delete mode 100644 data/brands/instek-digital.json delete mode 100644 data/brands/insun.json delete mode 100644 data/brands/insys.json delete mode 100644 data/brands/intamac.json delete mode 100644 data/brands/intelbras.json delete mode 100644 data/brands/intelkam.json delete mode 100644 data/brands/intelli.json delete mode 100644 data/brands/intelligent-network.json delete mode 100644 data/brands/intellinet.json delete mode 100644 data/brands/intellio.json delete mode 100644 data/brands/intellsec.json delete mode 100644 data/brands/interlogix.json delete mode 100644 data/brands/interna.json delete mode 100644 data/brands/internal.json delete mode 100644 data/brands/internet-eye.json delete mode 100644 data/brands/interno.json delete mode 100644 data/brands/intervision.json delete mode 100644 data/brands/intex.json delete mode 100644 data/brands/invid.json delete mode 100644 data/brands/invidtech.json delete mode 100644 data/brands/inwerang.json delete mode 100644 data/brands/io-data.json delete mode 100644 data/brands/ip-300ptw.json delete mode 100644 data/brands/ip-402b.json delete mode 100644 data/brands/ip-buiten.json delete mode 100644 data/brands/ip-camera-(android).json delete mode 100644 data/brands/ip-camera.json delete mode 100644 data/brands/ip-chitchat.json delete mode 100644 data/brands/ip-m-p836v.json delete mode 100644 data/brands/ip-phone-camera.json delete mode 100644 data/brands/ip-power.json delete mode 100644 data/brands/ip-pro-tech.json delete mode 100644 data/brands/ip-speeddome.json delete mode 100644 data/brands/ip-t5201-f.json delete mode 100644 data/brands/ip-video.json delete mode 100644 data/brands/ip-webcam-(android).json delete mode 100644 data/brands/ip-webcam-android.json delete mode 100644 data/brands/ip-webcam-app.json delete mode 100644 data/brands/ip-webcam-pro.json delete mode 100644 data/brands/ip-webcam.json delete mode 100644 data/brands/ip112.json delete mode 100644 data/brands/ip302.json delete mode 100644 data/brands/ip3393pv2.json delete mode 100644 data/brands/ip400.json delete mode 100644 data/brands/ip4112poe.json delete mode 100644 data/brands/ip66.json delete mode 100644 data/brands/ip6795p.json delete mode 100644 data/brands/ip_cam_inspector.json delete mode 100644 data/brands/ipbell.json delete mode 100644 data/brands/ipc-bo.json delete mode 100644 data/brands/ipc-f10p.json delete mode 100644 data/brands/ipc-model.json delete mode 100644 data/brands/ipc-other.json delete mode 100644 data/brands/ipc.json delete mode 100644 data/brands/ipc360.json delete mode 100644 data/brands/ipc365.json delete mode 100644 data/brands/ipcam-2015.json delete mode 100644 data/brands/ipcam.json delete mode 100644 data/brands/ipcameros.json delete mode 100644 data/brands/ipcami.json delete mode 100644 data/brands/ipcc.json delete mode 100644 data/brands/ipce.json delete mode 100644 data/brands/ipcmontor.json delete mode 100644 data/brands/ipd.json delete mode 100644 data/brands/ipdom-hz0102.json delete mode 100644 data/brands/ipega.json delete mode 100644 data/brands/ipeye.json delete mode 100644 data/brands/ipfd200.json delete mode 100644 data/brands/ipfd201.json delete mode 100644 data/brands/ipg.json delete mode 100644 data/brands/ipgah9oc2am7.json delete mode 100644 data/brands/iphdcam.json delete mode 100644 data/brands/ipixo.json delete mode 100644 data/brands/ipm-1z-20x-dn.json delete mode 100644 data/brands/ipnawin7.json delete mode 100644 data/brands/ipnc.json delete mode 100644 data/brands/ipnetcam.json delete mode 100644 data/brands/ipnz.json delete mode 100644 data/brands/ipq1652x.json delete mode 100644 data/brands/ipq1658x.json delete mode 100644 data/brands/ipr31esx.json delete mode 100644 data/brands/ipr712m.json delete mode 100644 data/brands/ipr7424%2f8e.json delete mode 100644 data/brands/ipro.json delete mode 100644 data/brands/iprobot3.json delete mode 100644 data/brands/ips-21w.json delete mode 100644 data/brands/ips.json delete mode 100644 data/brands/ipscam.json delete mode 100644 data/brands/ipteles.json delete mode 100644 data/brands/iptime.json delete mode 100644 data/brands/iptronic.json delete mode 100644 data/brands/iptz-h20xx.json delete mode 100644 data/brands/ipux.json delete mode 100644 data/brands/ipvd300.json delete mode 100644 data/brands/ipvideo.json delete mode 100644 data/brands/ipwebcam-app.json delete mode 100644 data/brands/ipx.json delete mode 100644 data/brands/iq-eye.json delete mode 100644 data/brands/iqinvision.json delete mode 100644 data/brands/iqr.json delete mode 100644 data/brands/ir-color-ip-camera.json delete mode 100644 data/brands/irea.json delete mode 100644 data/brands/iris.json delete mode 100644 data/brands/irlab.json delete mode 100644 data/brands/isabeau.json delete mode 100644 data/brands/isbsupport.json delete mode 100644 data/brands/isd-jaguar.json delete mode 100644 data/brands/iseeu.json delete mode 100644 data/brands/isit.json delete mode 100644 data/brands/isotect.json delete mode 100644 data/brands/isp.json delete mode 100644 data/brands/ispy.json delete mode 100644 data/brands/itajto.json delete mode 100644 data/brands/italsistem.json delete mode 100644 data/brands/its.json delete mode 100644 data/brands/itx-security.json delete mode 100644 data/brands/itx.json delete mode 100644 data/brands/iv9000.json delete mode 100644 data/brands/ivc.json delete mode 100644 data/brands/ivcc.json delete mode 100644 data/brands/ivideon.json delete mode 100644 data/brands/ivio.json delete mode 100644 data/brands/iwh-31ir.json delete mode 100644 data/brands/iwigus.json delete mode 100644 data/brands/iz-touch.json delete mode 100644 data/brands/izotech.json delete mode 100644 data/brands/iztouch.json delete mode 100644 data/brands/izviz.json delete mode 100644 data/brands/j5create.json delete mode 100644 data/brands/ja7204s.json delete mode 100644 data/brands/ja7208s.json delete mode 100644 data/brands/ja7216nc.json delete mode 100644 data/brands/jalan.json delete mode 100644 data/brands/janex.json delete mode 100644 data/brands/janusz.json delete mode 100644 data/brands/japan.json delete mode 100644 data/brands/japon-dynamic.json delete mode 100644 data/brands/jasboom.json delete mode 100644 data/brands/jatech.json delete mode 100644 data/brands/javea.json delete mode 100644 data/brands/jaycar.json delete mode 100644 data/brands/jaytech.json delete mode 100644 data/brands/jbp.json delete mode 100644 data/brands/jcr.json delete mode 100644 data/brands/jdl.json delete mode 100644 data/brands/jecurity.json delete mode 100644 data/brands/jedicam.json delete mode 100644 data/brands/jeinuo.json delete mode 100644 data/brands/jen-fu.json delete mode 100644 data/brands/jenimex.json delete mode 100644 data/brands/jennov.json delete mode 100644 data/brands/jensen.json delete mode 100644 data/brands/jetview.json delete mode 100644 data/brands/jetvision.json delete mode 100644 data/brands/jhempcam.json delete mode 100644 data/brands/jialite.json delete mode 100644 data/brands/jidetech.json delete mode 100644 data/brands/jienuo.json delete mode 100644 data/brands/jinan.json delete mode 100644 data/brands/jitech.json delete mode 100644 data/brands/jiuan.json delete mode 100644 data/brands/jlb.json delete mode 100644 data/brands/jmk.json delete mode 100644 data/brands/joko.json delete mode 100644 data/brands/jooan.json delete mode 100644 data/brands/jortan.json delete mode 100644 data/brands/jovision.json delete mode 100644 data/brands/joy.json delete mode 100644 data/brands/joymin.json delete mode 100644 data/brands/jp5.json delete mode 100644 data/brands/jpjv.json delete mode 100644 data/brands/jrc-tokki.json delete mode 100644 data/brands/jrecam.json delete mode 100644 data/brands/jsur.json delete mode 100644 data/brands/jsw.json delete mode 100644 data/brands/jtech.json delete mode 100644 data/brands/juan.json delete mode 100644 data/brands/jubson.json delete mode 100644 data/brands/judge.json delete mode 100644 data/brands/juning.json delete mode 100644 data/brands/jupiter.json delete mode 100644 data/brands/just-compare.json delete mode 100644 data/brands/jvc.json delete mode 100644 data/brands/jvr.json delete mode 100644 data/brands/jvs.json delete mode 100644 data/brands/jvt.json delete mode 100644 data/brands/jwcam.json delete mode 100644 data/brands/jwt.json delete mode 100644 data/brands/jxl.json delete mode 100644 data/brands/jyacam.json delete mode 100644 data/brands/jyuha.json delete mode 100644 data/brands/k-vision.json delete mode 100644 data/brands/k11.json delete mode 100644 data/brands/kaansky.json delete mode 100644 data/brands/kado.json delete mode 100644 data/brands/kadymay.json delete mode 100644 data/brands/kafeoinos-tv.json delete mode 100644 data/brands/kaikong.json delete mode 100644 data/brands/kaluga.json delete mode 100644 data/brands/kamera2000.json delete mode 100644 data/brands/kamo.json delete mode 100644 data/brands/kamote.json delete mode 100644 data/brands/kamtron.json delete mode 100644 data/brands/kanan.json delete mode 100644 data/brands/kanda.json delete mode 100644 data/brands/kang-xun.json delete mode 100644 data/brands/kantoor.json delete mode 100644 data/brands/kapi.json delete mode 100644 data/brands/kapkam.json delete mode 100644 data/brands/karbontech.json delete mode 100644 data/brands/kare.json delete mode 100644 data/brands/karel.json delete mode 100644 data/brands/karkam.json delete mode 100644 data/brands/kasa.json delete mode 100644 data/brands/kasaba.json delete mode 100644 data/brands/kassaba.json delete mode 100644 data/brands/katamso.json delete mode 100644 data/brands/katway.json delete mode 100644 data/brands/kavass.json delete mode 100644 data/brands/kayodo.json delete mode 100644 data/brands/kbc.json delete mode 100644 data/brands/kboom.json delete mode 100644 data/brands/kbvision.json delete mode 100644 data/brands/kd.json delete mode 100644 data/brands/kdm.json delete mode 100644 data/brands/kdt.json delete mode 100644 data/brands/kedakom.json delete mode 100644 data/brands/keebox.json delete mode 100644 data/brands/keekoon.json delete mode 100644 data/brands/keeper.json delete mode 100644 data/brands/keeyo.json delete mode 100644 data/brands/keian.json delete mode 100644 data/brands/kenik.json delete mode 100644 data/brands/kenpro.json delete mode 100644 data/brands/kenton.json delete mode 100644 data/brands/kenvs.json delete mode 100644 data/brands/kerui.json delete mode 100644 data/brands/keshini.json delete mode 100644 data/brands/keuken.json delete mode 100644 data/brands/keview.json delete mode 100644 data/brands/keye.json delete mode 100644 data/brands/keypad.json delete mode 100644 data/brands/keyseen.json delete mode 100644 data/brands/keytech-dvr.json delete mode 100644 data/brands/kfly.json delete mode 100644 data/brands/kguard.json delete mode 100644 data/brands/kiacong.json delete mode 100644 data/brands/kiina.json delete mode 100644 data/brands/kiirie.json delete mode 100644 data/brands/kimpok.json delete mode 100644 data/brands/kina-kamera.json delete mode 100644 data/brands/kindermeubel.json delete mode 100644 data/brands/kindle.json delete mode 100644 data/brands/king-special.json delete mode 100644 data/brands/kingcam.json delete mode 100644 data/brands/kingcctv.json delete mode 100644 data/brands/kingkong.json delete mode 100644 data/brands/kingmak.json delete mode 100644 data/brands/kingnow.json delete mode 100644 data/brands/kingstar.json delete mode 100644 data/brands/kinson.json delete mode 100644 data/brands/kiocong.json delete mode 100644 data/brands/kip.json delete mode 100644 data/brands/kishgo.json delete mode 100644 data/brands/kitcam.json delete mode 100644 data/brands/kittyhok.json delete mode 100644 data/brands/kkmoon.json delete mode 100644 data/brands/klikaanklikuit.json delete mode 100644 data/brands/klok.json delete mode 100644 data/brands/kmart.json delete mode 100644 data/brands/kmoon.json delete mode 100644 data/brands/kmw.json delete mode 100644 data/brands/knc.json delete mode 100644 data/brands/knewmart.json delete mode 100644 data/brands/knowyournanny.com.json delete mode 100644 data/brands/kobert.json delete mode 100644 data/brands/kobi.json delete mode 100644 data/brands/kocom.json delete mode 100644 data/brands/kodak.json delete mode 100644 data/brands/kodu.json delete mode 100644 data/brands/koepel.json delete mode 100644 data/brands/kogacam.json delete mode 100644 data/brands/kogan.json delete mode 100644 data/brands/kohlen.json delete mode 100644 data/brands/koicong.json delete mode 100644 data/brands/komatsu.json delete mode 100644 data/brands/kompernass.json delete mode 100644 data/brands/komplexfix.json delete mode 100644 data/brands/konan.json delete mode 100644 data/brands/konarrk.json delete mode 100644 data/brands/konig.json delete mode 100644 data/brands/konik.json delete mode 100644 data/brands/konix.json delete mode 100644 data/brands/konlen.json delete mode 100644 data/brands/konnek-stein.json delete mode 100644 data/brands/koogeek.json delete mode 100644 data/brands/koolertron.json delete mode 100644 data/brands/koomooni.json delete mode 100644 data/brands/korang.json delete mode 100644 data/brands/koti.json delete mode 100644 data/brands/kowa.json delete mode 100644 data/brands/kpi.json delete mode 100644 data/brands/kpp.json delete mode 100644 data/brands/kraun.json delete mode 100644 data/brands/krissview.json delete mode 100644 data/brands/krypton.json delete mode 100644 data/brands/ksvp.json delete mode 100644 data/brands/kt-and-c.json delete mode 100644 data/brands/kucam.json delete mode 100644 data/brands/kyocera.json delete mode 100644 data/brands/l-series.json delete mode 100644 data/brands/lager.json delete mode 100644 data/brands/lambda.json delete mode 100644 data/brands/lampa.json delete mode 100644 data/brands/laser.json delete mode 100644 data/brands/lau-3.json delete mode 100644 data/brands/launch.json delete mode 100644 data/brands/laview.json delete mode 100644 data/brands/lc-security.json delete mode 100644 data/brands/lc-systems.json delete mode 100644 data/brands/leadcam.json delete mode 100644 data/brands/leadership.json delete mode 100644 data/brands/leadtek.json delete mode 100644 data/brands/lecoe.json delete mode 100644 data/brands/ledvance.json delete mode 100644 data/brands/leftek.json delete mode 100644 data/brands/legeek.json delete mode 100644 data/brands/legra.json delete mode 100644 data/brands/legrand.json delete mode 100644 data/brands/legrange.json delete mode 100644 data/brands/lenel.json delete mode 100644 data/brands/lenovo.json delete mode 100644 data/brands/lensoul.json delete mode 100644 data/brands/leocam.json delete mode 100644 data/brands/leopard-imaging-inc.json delete mode 100644 data/brands/leopard-imaging.json delete mode 100644 data/brands/lerch.json delete mode 100644 data/brands/leshp.json delete mode 100644 data/brands/levelone.json delete mode 100644 data/brands/levscam.json delete mode 100644 data/brands/lexy.json delete mode 100644 data/brands/lg-phone.json delete mode 100644 data/brands/lg.json delete mode 100644 data/brands/libor.json delete mode 100644 data/brands/lidl.json delete mode 100644 data/brands/lifecontrol.json delete mode 100644 data/brands/lifeshield.json delete mode 100644 data/brands/lifetech.json delete mode 100644 data/brands/lifeview.json delete mode 100644 data/brands/light-in-the-box.json delete mode 100644 data/brands/lightcam.json delete mode 100644 data/brands/lightdow.json delete mode 100644 data/brands/lightinthebox.json delete mode 100644 data/brands/lihai.json delete mode 100644 data/brands/likean.json delete mode 100644 data/brands/lilly.json delete mode 100644 data/brands/limix.json delete mode 100644 data/brands/lindata.json delete mode 100644 data/brands/lindy.json delete mode 100644 data/brands/linemak.json delete mode 100644 data/brands/linia.json delete mode 100644 data/brands/link.json delete mode 100644 data/brands/linkcom.json delete mode 100644 data/brands/linkit-security.json delete mode 100644 data/brands/linkit.json delete mode 100644 data/brands/linkpro.json delete mode 100644 data/brands/linksys.json delete mode 100644 data/brands/linovision.json delete mode 100644 data/brands/linq.json delete mode 100644 data/brands/linudix.json delete mode 100644 data/brands/linux.json delete mode 100644 data/brands/lionvis.json delete mode 100644 data/brands/lipetsk.json delete mode 100644 data/brands/liquid.json delete mode 100644 data/brands/litetec.json delete mode 100644 data/brands/litmor.json delete mode 100644 data/brands/littleadd.json delete mode 100644 data/brands/live-reporter.json delete mode 100644 data/brands/livecam.json delete mode 100644 data/brands/living.json delete mode 100644 data/brands/lizvie.json delete mode 100644 data/brands/lloyds.json delete mode 100644 data/brands/lmou.json delete mode 100644 data/brands/lof-v.json delete mode 100644 data/brands/loftek.json delete mode 100644 data/brands/logan.json delete mode 100644 data/brands/logenex.json delete mode 100644 data/brands/logidebian.json delete mode 100644 data/brands/logilink.json delete mode 100644 data/brands/logisaf.json delete mode 100644 data/brands/logitech.json delete mode 100644 data/brands/lokanta.json delete mode 100644 data/brands/lonestar.json delete mode 100644 data/brands/long-plus.json delete mode 100644 data/brands/longdream.json delete mode 100644 data/brands/longsafe.json delete mode 100644 data/brands/longse.json delete mode 100644 data/brands/longshine.json delete mode 100644 data/brands/longteam.json delete mode 100644 data/brands/lonrock.json delete mode 100644 data/brands/lonse.json delete mode 100644 data/brands/look.json delete mode 100644 data/brands/loosafe.json delete mode 100644 data/brands/lorensen-01.json delete mode 100644 data/brands/lorex.json delete mode 100644 data/brands/loryta.json delete mode 100644 data/brands/lotus.json delete mode 100644 data/brands/louance.json delete mode 100644 data/brands/louwice.json delete mode 100644 data/brands/loveday-smart-home.json delete mode 100644 data/brands/lowcam.json delete mode 100644 data/brands/lowes-iris.json delete mode 100644 data/brands/lowes.json delete mode 100644 data/brands/lox.json delete mode 100644 data/brands/loxone.json delete mode 100644 data/brands/lpr-hdcam.json delete mode 100644 data/brands/lsc.json delete mode 100644 data/brands/lseries.json delete mode 100644 data/brands/lsvision.json delete mode 100644 data/brands/ltc.json delete mode 100644 data/brands/ltek.json delete mode 100644 data/brands/ltp.json delete mode 100644 data/brands/lts.json delete mode 100644 data/brands/ltv.json delete mode 100644 data/brands/lu.json delete mode 100644 data/brands/luatek.json delete mode 100644 data/brands/lucem.json delete mode 100644 data/brands/lucidphone.json delete mode 100644 data/brands/lucky-star.json delete mode 100644 data/brands/lukavi.json delete mode 100644 data/brands/lum-700-bul-iph-gr.json delete mode 100644 data/brands/luma.json delete mode 100644 data/brands/lumenera.json delete mode 100644 data/brands/lumens.json delete mode 100644 data/brands/lumia.json delete mode 100644 data/brands/lumiere.json delete mode 100644 data/brands/luna.json delete mode 100644 data/brands/luowice.json delete mode 100644 data/brands/lupes-electronics.json delete mode 100644 data/brands/lupus.json delete mode 100644 data/brands/luxon.json delete mode 100644 data/brands/luxonvideo.json delete mode 100644 data/brands/luxor.json delete mode 100644 data/brands/luxvision.json delete mode 100644 data/brands/lw.json delete mode 100644 data/brands/lyd.json delete mode 100644 data/brands/lylu.json delete mode 100644 data/brands/lynstan.json delete mode 100644 data/brands/mabio.json delete mode 100644 data/brands/mace.json delete mode 100644 data/brands/mach.json delete mode 100644 data/brands/macrovision.json delete mode 100644 data/brands/magic-eye.json delete mode 100644 data/brands/magic-vision-box-series.json delete mode 100644 data/brands/maginon.json delete mode 100644 data/brands/magnus.json delete mode 100644 data/brands/maizic.json delete mode 100644 data/brands/makecell.json delete mode 100644 data/brands/manhattan.json delete mode 100644 data/brands/manse.json delete mode 100644 data/brands/mant.json delete mode 100644 data/brands/march-networks.json delete mode 100644 data/brands/marlboze.json delete mode 100644 data/brands/marmitek.json delete mode 100644 data/brands/marquis.json delete mode 100644 data/brands/marshall.json delete mode 100644 data/brands/masione.json delete mode 100644 data/brands/master.json delete mode 100644 data/brands/matchpoint.json delete mode 100644 data/brands/matecam.json delete mode 100644 data/brands/matrix.json delete mode 100644 data/brands/mattex.json delete mode 100644 data/brands/mavell.json delete mode 100644 data/brands/maximus.json delete mode 100644 data/brands/maxpixel.json delete mode 100644 data/brands/maxron.json delete mode 100644 data/brands/maxvideo.json delete mode 100644 data/brands/maxvision.json delete mode 100644 data/brands/maxwest.json delete mode 100644 data/brands/maxxone.json delete mode 100644 data/brands/maygion.json delete mode 100644 data/brands/mazi.json delete mode 100644 data/brands/mbx.json delete mode 100644 data/brands/mc-cam.json delete mode 100644 data/brands/mc-electronics.json delete mode 100644 data/brands/mci.json delete mode 100644 data/brands/mcl.json delete mode 100644 data/brands/mdi.json delete mode 100644 data/brands/meco.json delete mode 100644 data/brands/medialink.json delete mode 100644 data/brands/mediatech.json delete mode 100644 data/brands/medion.json delete mode 100644 data/brands/medisana.json delete mode 100644 data/brands/mega-pixel.json delete mode 100644 data/brands/megacam.json delete mode 100644 data/brands/megapix.json delete mode 100644 data/brands/megavideo.json delete mode 100644 data/brands/meiego.json delete mode 100644 data/brands/meisort.json delete mode 100644 data/brands/melchioni.json delete mode 100644 data/brands/memtex.json delete mode 100644 data/brands/menetec.json delete mode 100644 data/brands/meraki.json delete mode 100644 data/brands/mercury.json delete mode 100644 data/brands/merit-lilin.json delete mode 100644 data/brands/meriva.json delete mode 100644 data/brands/merk.json delete mode 100644 data/brands/merkury.json delete mode 100644 data/brands/merlan.json delete mode 100644 data/brands/merlin.json delete mode 100644 data/brands/meshare.json delete mode 100644 data/brands/messoa.json delete mode 100644 data/brands/metrocom.json delete mode 100644 data/brands/metzler.json delete mode 100644 data/brands/meye.json delete mode 100644 data/brands/meyetech.json delete mode 100644 data/brands/mi-casa-verde.json delete mode 100644 data/brands/mia.json delete mode 100644 data/brands/mibao.json delete mode 100644 data/brands/micro-digital.json delete mode 100644 data/brands/micro-view.json delete mode 100644 data/brands/microdigital.json delete mode 100644 data/brands/microlino.json delete mode 100644 data/brands/micromax.json delete mode 100644 data/brands/micronet.json delete mode 100644 data/brands/microseven.json delete mode 100644 data/brands/microsoft.json delete mode 100644 data/brands/microview.json delete mode 100644 data/brands/midas-link.json delete mode 100644 data/brands/midaslink.json delete mode 100644 data/brands/midconer.json delete mode 100644 data/brands/mieke-ipcamera.json delete mode 100644 data/brands/milesight.json delete mode 100644 data/brands/milestone.json delete mode 100644 data/brands/millennial.json delete mode 100644 data/brands/mingyoushi.json delete mode 100644 data/brands/mini-hd-ir-speed-dome.json delete mode 100644 data/brands/mini.json delete mode 100644 data/brands/minicam.json delete mode 100644 data/brands/minking.json delete mode 100644 data/brands/minnray.json delete mode 100644 data/brands/minolta.json delete mode 100644 data/brands/miosmart.json delete mode 100644 data/brands/mipc.json delete mode 100644 data/brands/mipcam.json delete mode 100644 data/brands/mips.json delete mode 100644 data/brands/misecu.json delete mode 100644 data/brands/mitec.json delete mode 100644 data/brands/mitra-utama.json delete mode 100644 data/brands/mivision.json delete mode 100644 data/brands/mjpeg.json delete mode 100644 data/brands/mjpg-streamer.json delete mode 100644 data/brands/mnet-dvr.json delete mode 100644 data/brands/mobiwire.json delete mode 100644 data/brands/mobotix.json delete mode 100644 data/brands/mocam.json delete mode 100644 data/brands/mocon.json delete mode 100644 data/brands/moja-ip.json delete mode 100644 data/brands/moko.json delete mode 100644 data/brands/momentum.json delete mode 100644 data/brands/monacor.json delete mode 100644 data/brands/monita-cctv.json delete mode 100644 data/brands/monomat.json delete mode 100644 data/brands/monoprice.json delete mode 100644 data/brands/monsterip.json delete mode 100644 data/brands/morphxstar.json delete mode 100644 data/brands/mosafe.json delete mode 100644 data/brands/motion.json delete mode 100644 data/brands/motioneye.json delete mode 100644 data/brands/moto.json delete mode 100644 data/brands/motorola.json delete mode 100644 data/brands/motos.json delete mode 100644 data/brands/motru.json delete mode 100644 data/brands/mov-cam.json delete mode 100644 data/brands/movo.json delete mode 100644 data/brands/movols.json delete mode 100644 data/brands/moxa.json delete mode 100644 data/brands/mpcam.json delete mode 100644 data/brands/mrsafe.json delete mode 100644 data/brands/ms-3000.json delete mode 100644 data/brands/mscamera.json delete mode 100644 data/brands/mstar.json delete mode 100644 data/brands/msv.json delete mode 100644 data/brands/mtstar.json delete mode 100644 data/brands/mubview.json delete mode 100644 data/brands/multilaser.json delete mode 100644 data/brands/mustcam.json delete mode 100644 data/brands/mv-power.json delete mode 100644 data/brands/mvs.json delete mode 100644 data/brands/mvteam.json delete mode 100644 data/brands/mwr.json delete mode 100644 data/brands/my-connex.json delete mode 100644 data/brands/myeye.json delete mode 100644 data/brands/myindoorcam.json delete mode 100644 data/brands/mymology.json delete mode 100644 data/brands/mysmartvideo.json delete mode 100644 data/brands/mytech.json delete mode 100644 data/brands/nadatel.json delete mode 100644 data/brands/namai.json delete mode 100644 data/brands/nanocam.json delete mode 100644 data/brands/nanshiba.json delete mode 100644 data/brands/napco-security.json delete mode 100644 data/brands/nari.json delete mode 100644 data/brands/nas.json delete mode 100644 data/brands/nassicam.json delete mode 100644 data/brands/naum-pro.json delete mode 100644 data/brands/nbvision.json delete mode 100644 data/brands/ncp.json delete mode 100644 data/brands/ncx.json delete mode 100644 data/brands/nedis.json delete mode 100644 data/brands/neewer.json delete mode 100644 data/brands/neo-coolcam.json delete mode 100644 data/brands/neos.json delete mode 100644 data/brands/neostar.json delete mode 100644 data/brands/neposmart.json delete mode 100644 data/brands/ness.json delete mode 100644 data/brands/nesuniq.json delete mode 100644 data/brands/net-generation.json delete mode 100644 data/brands/netcam.json delete mode 100644 data/brands/netcat.json delete mode 100644 data/brands/netcomm.json delete mode 100644 data/brands/netis.json delete mode 100644 data/brands/netiscom.json delete mode 100644 data/brands/netmedia.json delete mode 100644 data/brands/netsurveillance-dvr-h.264-network-video-recorder.json delete mode 100644 data/brands/nettoly.json delete mode 100644 data/brands/netvideo.json delete mode 100644 data/brands/netview.json delete mode 100644 data/brands/netvision.json delete mode 100644 data/brands/netvue.json delete mode 100644 data/brands/netware.json delete mode 100644 data/brands/netwave.json delete mode 100644 data/brands/network-digital-video.json delete mode 100644 data/brands/network-video-recorder.json delete mode 100644 data/brands/neufusion.json delete mode 100644 data/brands/neugent.json delete mode 100644 data/brands/neutron.json delete mode 100644 data/brands/nevalley.json delete mode 100644 data/brands/nevenoe.json delete mode 100644 data/brands/neview.json delete mode 100644 data/brands/newvision.json delete mode 100644 data/brands/nexcom.json delete mode 100644 data/brands/nexgadget.json delete mode 100644 data/brands/nexht.json delete mode 100644 data/brands/nexsmart.json delete mode 100644 data/brands/nextech.json delete mode 100644 data/brands/nexus-cctv.json delete mode 100644 data/brands/nexus.json delete mode 100644 data/brands/nexxt-solution.json delete mode 100644 data/brands/neye.json delete mode 100644 data/brands/neye3c.json delete mode 100644 data/brands/ngm.json delete mode 100644 data/brands/ngteco.json delete mode 100644 data/brands/niante.json delete mode 100644 data/brands/niceborn.json delete mode 100644 data/brands/nicecam.json delete mode 100644 data/brands/niceview.json delete mode 100644 data/brands/night-owl.json delete mode 100644 data/brands/nighteye.json delete mode 100644 data/brands/nightwatcher.json delete mode 100644 data/brands/nihon.json delete mode 100644 data/brands/nikodem.json delete mode 100644 data/brands/nilox.json delete mode 100644 data/brands/nimbus.json delete mode 100644 data/brands/nip.json delete mode 100644 data/brands/nishimon.json delete mode 100644 data/brands/nisuta.json delete mode 100644 data/brands/nitedevil.json delete mode 100644 data/brands/niutek.json delete mode 100644 data/brands/niv.json delete mode 100644 data/brands/nivian.json delete mode 100644 data/brands/nixzen.json delete mode 100644 data/brands/nlc-cam.json delete mode 100644 data/brands/nobelic.json delete mode 100644 data/brands/nobitech.json delete mode 100644 data/brands/nokia.json delete mode 100644 data/brands/noname-chinese.json delete mode 100644 data/brands/none.json delete mode 100644 data/brands/nonwee.json delete mode 100644 data/brands/nooie-360.json delete mode 100644 data/brands/norden.json delete mode 100644 data/brands/norelco.json delete mode 100644 data/brands/northern.json delete mode 100644 data/brands/northq.json delete mode 100644 data/brands/novate.json delete mode 100644 data/brands/novell.json delete mode 100644 data/brands/novicam.json delete mode 100644 data/brands/novodio.json delete mode 100644 data/brands/novomoskow.json delete mode 100644 data/brands/novus.json delete mode 100644 data/brands/nram.json delete mode 100644 data/brands/ntse.json delete mode 100644 data/brands/nufebs.json delete mode 100644 data/brands/nutri-vision.json delete mode 100644 data/brands/nuvico.json delete mode 100644 data/brands/nv-mbw.json delete mode 100644 data/brands/nvr.json delete mode 100644 data/brands/nvsip.json delete mode 100644 data/brands/nvt.json delete mode 100644 data/brands/nwp.json delete mode 100644 data/brands/nwsvr.json delete mode 100644 data/brands/obs.json delete mode 100644 data/brands/oceantools.json delete mode 100644 data/brands/oco.json delete mode 100644 data/brands/octopi.json delete mode 100644 data/brands/octoprint.json delete mode 100644 data/brands/ocular.json delete mode 100644 data/brands/oculus.json delete mode 100644 data/brands/odesys.json delete mode 100644 data/brands/oem.json delete mode 100644 data/brands/oemcameras.json delete mode 100644 data/brands/off.json delete mode 100644 data/brands/office-one.json delete mode 100644 data/brands/officeone.json delete mode 100644 data/brands/ohwoai.json delete mode 100644 data/brands/oltec.json delete mode 100644 data/brands/olympia.json delete mode 100644 data/brands/omega-power.json delete mode 100644 data/brands/omega.json delete mode 100644 data/brands/omenex.json delete mode 100644 data/brands/omni.json delete mode 100644 data/brands/omnibase.json delete mode 100644 data/brands/omniview.json delete mode 100644 data/brands/omnivision.json delete mode 100644 data/brands/omny.json delete mode 100644 data/brands/omp.json delete mode 100644 data/brands/oncam-grandeye.json delete mode 100644 data/brands/onepixel.json delete mode 100644 data/brands/oneteck.json delete mode 100644 data/brands/oniv.json delete mode 100644 data/brands/onix-usa.json delete mode 100644 data/brands/onvey.json delete mode 100644 data/brands/onvif.json delete mode 100644 data/brands/onwote.json delete mode 100644 data/brands/oossxx.json delete mode 100644 data/brands/opax.json delete mode 100644 data/brands/openeye.json delete mode 100644 data/brands/openipc.json delete mode 100644 data/brands/openmiko.json delete mode 100644 data/brands/openwrt.json delete mode 100644 data/brands/opexia.json delete mode 100644 data/brands/optica-video.json delete mode 100644 data/brands/opticam.json delete mode 100644 data/brands/optics.json delete mode 100644 data/brands/optima.json delete mode 100644 data/brands/optimus.json delete mode 100644 data/brands/optio.json delete mode 100644 data/brands/optiview.json delete mode 100644 data/brands/optivision.json delete mode 100644 data/brands/optris.json delete mode 100644 data/brands/orbit.json delete mode 100644 data/brands/ordro.json delete mode 100644 data/brands/orient.json delete mode 100644 data/brands/orion.json delete mode 100644 data/brands/orite.json delete mode 100644 data/brands/orllo.json delete mode 100644 data/brands/orosaurus.json delete mode 100644 data/brands/orvibo.json delete mode 100644 data/brands/oswoo.json delete mode 100644 data/brands/other.json delete mode 100644 data/brands/otima.json delete mode 100644 data/brands/otto.json delete mode 100644 data/brands/oude-camera.json delete mode 100644 data/brands/oukitel.json delete mode 100644 data/brands/outdoor-mini-speed-dome-cmera.json delete mode 100644 data/brands/ouvis.json delete mode 100644 data/brands/overcap.json delete mode 100644 data/brands/overmax.json delete mode 100644 data/brands/overseer.json delete mode 100644 data/brands/ovislink.json delete mode 100644 data/brands/owl.json delete mode 100644 data/brands/owlcam.json delete mode 100644 data/brands/owlcat.json delete mode 100644 data/brands/owluck.json delete mode 100644 data/brands/owlvision.json delete mode 100644 data/brands/owsoo.json delete mode 100644 data/brands/ozero.json delete mode 100644 data/brands/p-link.json delete mode 100644 data/brands/p2p.json delete mode 100644 data/brands/p6lite.json delete mode 100644 data/brands/pace.json delete mode 100644 data/brands/pacidal.json delete mode 100644 data/brands/pacom.json delete mode 100644 data/brands/paisan.json delete mode 100644 data/brands/palmvid.json delete mode 100644 data/brands/palus-f.json delete mode 100644 data/brands/pana.json delete mode 100644 data/brands/panasonic.json delete mode 100644 data/brands/panatek.json delete mode 100644 data/brands/pangolin.json delete mode 100644 data/brands/panoeagle.json delete mode 100644 data/brands/panomera.json delete mode 100644 data/brands/panoob.json delete mode 100644 data/brands/panorama.json delete mode 100644 data/brands/panoramic.json delete mode 100644 data/brands/panoraxy.json delete mode 100644 data/brands/pantech.json delete mode 100644 data/brands/parolo.json delete mode 100644 data/brands/partizan.json delete mode 100644 data/brands/pasillo.json delete mode 100644 data/brands/patronum.json delete mode 100644 data/brands/pci.json delete mode 100644 data/brands/pco.json delete mode 100644 data/brands/pcs.json delete mode 100644 data/brands/pcview.json delete mode 100644 data/brands/peak.json delete mode 100644 data/brands/pearl.json delete mode 100644 data/brands/pecan.json delete mode 100644 data/brands/pecham.json delete mode 100644 data/brands/pegatah.json delete mode 100644 data/brands/pelco-sarix.json delete mode 100644 data/brands/pelco.json delete mode 100644 data/brands/pelconet.json delete mode 100644 data/brands/pembroke.json delete mode 100644 data/brands/peoplefu.json delete mode 100644 data/brands/periscope-app.json delete mode 100644 data/brands/petawise.json delete mode 100644 data/brands/petiszobaja.json delete mode 100644 data/brands/pheenet.json delete mode 100644 data/brands/philco.json delete mode 100644 data/brands/philips.json delete mode 100644 data/brands/phobe-micro-ink.json delete mode 100644 data/brands/phonescam.json delete mode 100644 data/brands/photonisvip.json delete mode 100644 data/brands/phylink.json delete mode 100644 data/brands/phytech.json delete mode 100644 data/brands/picotech.json delete mode 100644 data/brands/piczel.json delete mode 100644 data/brands/pilot.json delete mode 100644 data/brands/pimfg.json delete mode 100644 data/brands/pinetron.json delete mode 100644 data/brands/pinnacle.json delete mode 100644 data/brands/pintu.json delete mode 100644 data/brands/pipc.json delete mode 100644 data/brands/pipcam.json delete mode 100644 data/brands/piper.json delete mode 100644 data/brands/pir.json delete mode 100644 data/brands/pisocosina.json delete mode 100644 data/brands/pixart.json delete mode 100644 data/brands/pixeye.json delete mode 100644 data/brands/pixmy.json delete mode 100644 data/brands/pixord.json delete mode 100644 data/brands/pixpo.json delete mode 100644 data/brands/pixus.json delete mode 100644 data/brands/pizdets.json delete mode 100644 data/brands/pizero.json delete mode 100644 data/brands/plac.json delete mode 100644 data/brands/plaisio.json delete mode 100644 data/brands/planet.json delete mode 100644 data/brands/planex.json delete mode 100644 data/brands/plantron.json delete mode 100644 data/brands/platinum.json delete mode 100644 data/brands/plc.json delete mode 100644 data/brands/plenty.json delete mode 100644 data/brands/plexonics.json delete mode 100644 data/brands/plustek.json delete mode 100644 data/brands/plv.json delete mode 100644 data/brands/pni.json delete mode 100644 data/brands/pnp.json delete mode 100644 data/brands/pnzeo.json delete mode 100644 data/brands/podofo.json delete mode 100644 data/brands/poe.json delete mode 100644 data/brands/polaris-usa.json delete mode 100644 data/brands/polarity.json delete mode 100644 data/brands/polaroid.json delete mode 100644 data/brands/policetech.json delete mode 100644 data/brands/pollo.json delete mode 100644 data/brands/poly.json delete mode 100644 data/brands/polycom.json delete mode 100644 data/brands/polyvision.json delete mode 100644 data/brands/popp.json delete mode 100644 data/brands/porta.json delete mode 100644 data/brands/positivo.json delete mode 100644 data/brands/posonic.json delete mode 100644 data/brands/powerbizt.json delete mode 100644 data/brands/powerextra.json delete mode 100644 data/brands/powerlead.json delete mode 100644 data/brands/powerpack.json delete mode 100644 data/brands/prada.json delete mode 100644 data/brands/praxis.json delete mode 100644 data/brands/predator.json delete mode 100644 data/brands/premier.json delete mode 100644 data/brands/premiumblue.json delete mode 100644 data/brands/prestel.json delete mode 100644 data/brands/prikim.json delete mode 100644 data/brands/prime.json delete mode 100644 data/brands/pripaso.json delete mode 100644 data/brands/pristenek.json delete mode 100644 data/brands/pritech.json delete mode 100644 data/brands/privileg.json delete mode 100644 data/brands/proba.json delete mode 100644 data/brands/probe-digital.json delete mode 100644 data/brands/procam.json delete mode 100644 data/brands/procctv.json delete mode 100644 data/brands/produttore-ignoto-%23!.json delete mode 100644 data/brands/proelite.json delete mode 100644 data/brands/proimage.json delete mode 100644 data/brands/prok-electronics.json delete mode 100644 data/brands/prolab-security.json delete mode 100644 data/brands/proline-uk.json delete mode 100644 data/brands/proline.json delete mode 100644 data/brands/prolink.json delete mode 100644 data/brands/prolook.json delete mode 100644 data/brands/prolynx.json delete mode 100644 data/brands/promax-usa.json delete mode 100644 data/brands/promelit.json delete mode 100644 data/brands/pronext.json delete mode 100644 data/brands/proscan.json delete mode 100644 data/brands/provecam.json delete mode 100644 data/brands/provideo.json delete mode 100644 data/brands/proview.json delete mode 100644 data/brands/provision.json delete mode 100644 data/brands/provisual.json delete mode 100644 data/brands/ps-link.json delete mode 100644 data/brands/psi-robot.json delete mode 100644 data/brands/psp.json delete mode 100644 data/brands/psy-link.json delete mode 100644 data/brands/ptcl.json delete mode 100644 data/brands/ptz05.json delete mode 100644 data/brands/ptzoptics.json delete mode 100644 data/brands/pumatronix.json delete mode 100644 data/brands/pyle.json delete mode 100644 data/brands/q-nest.json delete mode 100644 data/brands/q-see.json delete mode 100644 data/brands/q-sys.json delete mode 100644 data/brands/q6-wifi-smart-camera.json delete mode 100644 data/brands/qavi.json delete mode 100644 data/brands/qbus.json delete mode 100644 data/brands/qcam.json delete mode 100644 data/brands/qcamera.json delete mode 100644 data/brands/qeye.json delete mode 100644 data/brands/qgs.json delete mode 100644 data/brands/qian-yao.json delete mode 100644 data/brands/qihan.json delete mode 100644 data/brands/qiozdio.json delete mode 100644 data/brands/qnap.json delete mode 100644 data/brands/qoltec.json delete mode 100644 data/brands/qtech.json delete mode 100644 data/brands/quadrant-technology.json delete mode 100644 data/brands/qualcomm-incorporated.json delete mode 100644 data/brands/quanmin.json delete mode 100644 data/brands/qube.json delete mode 100644 data/brands/qubo.json delete mode 100644 data/brands/queback.json delete mode 100644 data/brands/questek.json delete mode 100644 data/brands/qvis.json delete mode 100644 data/brands/qwe.json delete mode 100644 data/brands/r-tech.json delete mode 100644 data/brands/rabbitstorm.json delete mode 100644 data/brands/rainbow.json delete mode 100644 data/brands/ralink.json delete mode 100644 data/brands/raspberry-pi.json delete mode 100644 data/brands/raster.json delete mode 100644 data/brands/ratingsecu.json delete mode 100644 data/brands/raycam.json delete mode 100644 data/brands/rayline.json delete mode 100644 data/brands/raylios.json delete mode 100644 data/brands/raynic.json delete mode 100644 data/brands/raysharp.json delete mode 100644 data/brands/rca.json delete mode 100644 data/brands/rds.json delete mode 100644 data/brands/real-hd.json delete mode 100644 data/brands/realink.json delete mode 100644 data/brands/realm.json delete mode 100644 data/brands/realtek.json delete mode 100644 data/brands/redleaf-security.json delete mode 100644 data/brands/redline.json delete mode 100644 data/brands/redragon.json delete mode 100644 data/brands/redrock.json delete mode 100644 data/brands/redvision.json delete mode 100644 data/brands/reel-tech.json delete mode 100644 data/brands/reidubo.json delete mode 100644 data/brands/reigy.json delete mode 100644 data/brands/relicam.json delete mode 100644 data/brands/remo.json delete mode 100644 data/brands/reobiux.json delete mode 100644 data/brands/reolink.json delete mode 100644 data/brands/reotech.json delete mode 100644 data/brands/repotec.json delete mode 100644 data/brands/reticam.json delete mode 100644 data/brands/retina.json delete mode 100644 data/brands/revo.json delete mode 100644 data/brands/revodata.json delete mode 100644 data/brands/revotech.json delete mode 100644 data/brands/rfid-poker-table.json delete mode 100644 data/brands/rhinoco.json delete mode 100644 data/brands/ribbon.json delete mode 100644 data/brands/rifatron.json delete mode 100644 data/brands/rigoo.json delete mode 100644 data/brands/rimax.json delete mode 100644 data/brands/ring.json delete mode 100644 data/brands/rinin.json delete mode 100644 data/brands/rinnin.json delete mode 100644 data/brands/risco.json delete mode 100644 data/brands/riva-flex.json delete mode 100644 data/brands/rivatech.json delete mode 100644 data/brands/riwyth.json delete mode 100644 data/brands/robaxo.json delete mode 100644 data/brands/robicam.json delete mode 100644 data/brands/robocam.json delete mode 100644 data/brands/rocam.json delete mode 100644 data/brands/rohs.json delete mode 100644 data/brands/roidmi.json delete mode 100644 data/brands/roline.json delete mode 100644 data/brands/rollei.json delete mode 100644 data/brands/romai.json delete mode 100644 data/brands/romi.json delete mode 100644 data/brands/ronin.json delete mode 100644 data/brands/rosewill.json delete mode 100644 data/brands/rosh.json delete mode 100644 data/brands/roswill.json delete mode 100644 data/brands/rovio.json delete mode 100644 data/brands/royal.json delete mode 100644 data/brands/royallite.json delete mode 100644 data/brands/rpi.json delete mode 100644 data/brands/rraycom.json delete mode 100644 data/brands/rstahl.json delete mode 100644 data/brands/rtt.json delete mode 100644 data/brands/rtx.json delete mode 100644 data/brands/rua.json delete mode 100644 data/brands/ruang-tamu.json delete mode 100644 data/brands/rubetek.json delete mode 100644 data/brands/ruisvision.json delete mode 100644 data/brands/runyan-gate.json delete mode 100644 data/brands/rvi.json delete mode 100644 data/brands/s.vision.json delete mode 100644 data/brands/s3vc.json delete mode 100644 data/brands/saance.json delete mode 100644 data/brands/sab.json delete mode 100644 data/brands/sacam.json delete mode 100644 data/brands/saewit.json delete mode 100644 data/brands/safecam.json delete mode 100644 data/brands/safehome.json delete mode 100644 data/brands/safer.json delete mode 100644 data/brands/safesky-cn.json delete mode 100644 data/brands/safevant.json delete mode 100644 data/brands/safire.json delete mode 100644 data/brands/samgane.json delete mode 100644 data/brands/samsco.json delete mode 100644 data/brands/samsung.json delete mode 100644 data/brands/sanan-cctv.json delete mode 100644 data/brands/sanetron.json delete mode 100644 data/brands/sannce.json delete mode 100644 data/brands/sansco.json delete mode 100644 data/brands/santachi.json delete mode 100644 data/brands/santec-video.json delete mode 100644 data/brands/sanyo.json delete mode 100644 data/brands/sanzio.json delete mode 100644 data/brands/saocom.json delete mode 100644 data/brands/saphire.json delete mode 100644 data/brands/sapsan.json delete mode 100644 data/brands/saqicam.json delete mode 100644 data/brands/sarmatt.json delete mode 100644 data/brands/sarotech.json delete mode 100644 data/brands/sartek.json delete mode 100644 data/brands/sas-digital.json delete mode 100644 data/brands/satvision.json delete mode 100644 data/brands/savitmicro.json delete mode 100644 data/brands/savvypixel.json delete mode 100644 data/brands/sawyobi.json delete mode 100644 data/brands/saxxon.json delete mode 100644 data/brands/sayus.json delete mode 100644 data/brands/scada-technology.json delete mode 100644 data/brands/scancam.json delete mode 100644 data/brands/schlage.json delete mode 100644 data/brands/schneider.json delete mode 100644 data/brands/scout-cctv.json delete mode 100644 data/brands/scs.json delete mode 100644 data/brands/scsi.json delete mode 100644 data/brands/scv3.json delete mode 100644 data/brands/scw.json delete mode 100644 data/brands/sdc.json delete mode 100644 data/brands/sdeter.json delete mode 100644 data/brands/sea-wit.json delete mode 100644 data/brands/secam-cctv.json delete mode 100644 data/brands/seccam.json delete mode 100644 data/brands/sectec.json delete mode 100644 data/brands/secu-first.json delete mode 100644 data/brands/secueasy.json delete mode 100644 data/brands/seculink.json delete mode 100644 data/brands/secuon.json delete mode 100644 data/brands/secuplug.json delete mode 100644 data/brands/secur-eye.json delete mode 100644 data/brands/secur360.json delete mode 100644 data/brands/securecam.json delete mode 100644 data/brands/securia-pro.json delete mode 100644 data/brands/securicom-tunisie.json delete mode 100644 data/brands/security-cam.json delete mode 100644 data/brands/security-camera-2000.json delete mode 100644 data/brands/security-camera-warehouse.json delete mode 100644 data/brands/security-labs.json delete mode 100644 data/brands/security.json delete mode 100644 data/brands/securitytronix.json delete mode 100644 data/brands/securix.json delete mode 100644 data/brands/secuvision.json delete mode 100644 data/brands/secvision.json delete mode 100644 data/brands/seecam.json delete mode 100644 data/brands/seecom.json delete mode 100644 data/brands/seedary.json delete mode 100644 data/brands/seenergy.json delete mode 100644 data/brands/seesoon.json delete mode 100644 data/brands/seetong.json delete mode 100644 data/brands/sefica.json delete mode 100644 data/brands/seif.json delete mode 100644 data/brands/seimem.json delete mode 100644 data/brands/seisa.json delete mode 100644 data/brands/seisatek.json delete mode 100644 data/brands/selea.json delete mode 100644 data/brands/semac.json delete mode 100644 data/brands/senao.json delete mode 100644 data/brands/sensormatic.json delete mode 100644 data/brands/sentient-pro.json delete mode 100644 data/brands/sentry-360.json delete mode 100644 data/brands/sentryview.json delete mode 100644 data/brands/sentul.json delete mode 100644 data/brands/sepcam.json delete mode 100644 data/brands/septekon.json delete mode 100644 data/brands/sequrecam.json delete mode 100644 data/brands/serage.json delete mode 100644 data/brands/serang.json delete mode 100644 data/brands/sercam.json delete mode 100644 data/brands/sercomm.json delete mode 100644 data/brands/serioux.json delete mode 100644 data/brands/sertek.json delete mode 100644 data/brands/ses.json delete mode 100644 data/brands/sesco-security.json delete mode 100644 data/brands/seteye.json delete mode 100644 data/brands/setik.json delete mode 100644 data/brands/seven-systems.json delete mode 100644 data/brands/sgs.json delete mode 100644 data/brands/shamim.json delete mode 100644 data/brands/shany.json delete mode 100644 data/brands/sharx-security.json delete mode 100644 data/brands/shenwhen-neo-electronic-co.json delete mode 100644 data/brands/shenzhen-reecam-tech.ltd..json delete mode 100644 data/brands/shenzhen-tong-bo-wei.json delete mode 100644 data/brands/shenzhen-toptech.json delete mode 100644 data/brands/shenzhen-ycx-electronics.json delete mode 100644 data/brands/shenzhen.json delete mode 100644 data/brands/shieldeye.json delete mode 100644 data/brands/shindai.json delete mode 100644 data/brands/shinsoft-co.json delete mode 100644 data/brands/shiwojia.json delete mode 100644 data/brands/shixin-china.json delete mode 100644 data/brands/short-8ch-nvr.json delete mode 100644 data/brands/short.json delete mode 100644 data/brands/showtec.json delete mode 100644 data/brands/sibel.json delete mode 100644 data/brands/sibo.json delete mode 100644 data/brands/sichuan.json delete mode 100644 data/brands/siemens.json delete mode 100644 data/brands/siepem.json delete mode 100644 data/brands/sightlogix.json delete mode 100644 data/brands/sigma-electronics.json delete mode 100644 data/brands/sigmatel.json delete mode 100644 data/brands/signet.json delete mode 100644 data/brands/sikvio.json delete mode 100644 data/brands/silent-sentinel.json delete mode 100644 data/brands/silicon-labs.json delete mode 100644 data/brands/silvus.json delete mode 100644 data/brands/simi-ip-camera-viewer.json delete mode 100644 data/brands/simicam.json delete mode 100644 data/brands/simshine.json delete mode 100644 data/brands/sineoji.json delete mode 100644 data/brands/sinocam.json delete mode 100644 data/brands/sinovision.json delete mode 100644 data/brands/sionyx.json delete mode 100644 data/brands/sip.json delete mode 100644 data/brands/siqura.json delete mode 100644 data/brands/sircom.json delete mode 100644 data/brands/siricam.json delete mode 100644 data/brands/siricom.json delete mode 100644 data/brands/sisview.json delete mode 100644 data/brands/sitecom.json delete mode 100644 data/brands/sjet.json delete mode 100644 data/brands/sk-tel.json delete mode 100644 data/brands/skilleye.json delete mode 100644 data/brands/skjm.json delete mode 100644 data/brands/sklad.json delete mode 100644 data/brands/skone.json delete mode 100644 data/brands/skvision.json delete mode 100644 data/brands/sky-genious.json delete mode 100644 data/brands/skyfield.json delete mode 100644 data/brands/skylink.json delete mode 100644 data/brands/skyreo.json delete mode 100644 data/brands/skytronic.json delete mode 100644 data/brands/skyview.json delete mode 100644 data/brands/skyvision.json delete mode 100644 data/brands/skyway-security.json delete mode 100644 data/brands/sline.json delete mode 100644 data/brands/smallcell.json delete mode 100644 data/brands/smanos.json delete mode 100644 data/brands/smar.json delete mode 100644 data/brands/smart-cloud-camera.json delete mode 100644 data/brands/smart-hd-wifi-camera.json delete mode 100644 data/brands/smart-home.json delete mode 100644 data/brands/smart-industry.json delete mode 100644 data/brands/smart-net-camera.json delete mode 100644 data/brands/smart-pixel.json delete mode 100644 data/brands/smart-security.json delete mode 100644 data/brands/smart-zoom.json delete mode 100644 data/brands/smart.json delete mode 100644 data/brands/smart380.json delete mode 100644 data/brands/smartcam.json delete mode 100644 data/brands/smartec.json delete mode 100644 data/brands/smartek.json delete mode 100644 data/brands/smarteye.json delete mode 100644 data/brands/smartfrog.json delete mode 100644 data/brands/smartguard.json delete mode 100644 data/brands/smarthome.json delete mode 100644 data/brands/smartiscam.json delete mode 100644 data/brands/smartit.json delete mode 100644 data/brands/smartrol.json delete mode 100644 data/brands/smartsecurity.json delete mode 100644 data/brands/smartsf.json delete mode 100644 data/brands/smarttec.json delete mode 100644 data/brands/smarttek.json delete mode 100644 data/brands/smartview.json delete mode 100644 data/brands/smartvision.json delete mode 100644 data/brands/smartwares.json delete mode 100644 data/brands/smartz.json delete mode 100644 data/brands/smax.json delete mode 100644 data/brands/smc.json delete mode 100644 data/brands/smonet.json delete mode 100644 data/brands/smp.json delete mode 100644 data/brands/smtkey.json delete mode 100644 data/brands/smtsec.json delete mode 100644 data/brands/smvi.json delete mode 100644 data/brands/sn-ipc.json delete mode 100644 data/brands/snapav.json delete mode 100644 data/brands/soar.json delete mode 100644 data/brands/soggi.json delete mode 100644 data/brands/soho.json delete mode 100644 data/brands/solar-ip-camera.json delete mode 100644 data/brands/solarcam.json delete mode 100644 data/brands/soleratec.json delete mode 100644 data/brands/solosecurity.json delete mode 100644 data/brands/solwise.json delete mode 100644 data/brands/sonoff.json delete mode 100644 data/brands/sony.json delete mode 100644 data/brands/soohao.json delete mode 100644 data/brands/soospy.json delete mode 100644 data/brands/sorrano.json delete mode 100644 data/brands/sotion.json delete mode 100644 data/brands/soullife.json delete mode 100644 data/brands/sovmiku.json delete mode 100644 data/brands/sozo.json delete mode 100644 data/brands/space-technology.json delete mode 100644 data/brands/spacetronik.json delete mode 100644 data/brands/sparklan.json delete mode 100644 data/brands/spc.json delete mode 100644 data/brands/speco.json delete mode 100644 data/brands/sperado-cctv.json delete mode 100644 data/brands/spetslab.json delete mode 100644 data/brands/spider.json delete mode 100644 data/brands/spigen.json delete mode 100644 data/brands/spotai.json delete mode 100644 data/brands/spotcam.json delete mode 100644 data/brands/sprint-cctv.json delete mode 100644 data/brands/spy-cameras.json delete mode 100644 data/brands/spycam.json delete mode 100644 data/brands/spyclops.json delete mode 100644 data/brands/spydroid.json delete mode 100644 data/brands/spytech.json delete mode 100644 data/brands/spytecinc.json delete mode 100644 data/brands/sq11.json delete mode 100644 data/brands/squira.json delete mode 100644 data/brands/sricam.json delete mode 100644 data/brands/sricctv.json delete mode 100644 data/brands/srihome.json delete mode 100644 data/brands/sspc.json delete mode 100644 data/brands/sst.json delete mode 100644 data/brands/sstech.json delete mode 100644 data/brands/st-(spacetechnology).json delete mode 100644 data/brands/st-nt280e1.json delete mode 100644 data/brands/st-team.json delete mode 100644 data/brands/stabo.json delete mode 100644 data/brands/stadis.json delete mode 100644 data/brands/stalwall.json delete mode 100644 data/brands/stanley.json delete mode 100644 data/brands/star-eye.json delete mode 100644 data/brands/star-vedia.json delete mode 100644 data/brands/starcam.json delete mode 100644 data/brands/stardot-tech.json delete mode 100644 data/brands/stardot.json delete mode 100644 data/brands/starir.json delete mode 100644 data/brands/starlight.json delete mode 100644 data/brands/start-vision.json delete mode 100644 data/brands/starvedia.json delete mode 100644 data/brands/starvision.json delete mode 100644 data/brands/steinel.json delete mode 100644 data/brands/stem.json delete mode 100644 data/brands/steren.json delete mode 100644 data/brands/stipelectronics.json delete mode 100644 data/brands/stopcontact.json delete mode 100644 data/brands/storage-options.json delete mode 100644 data/brands/storex.json delete mode 100644 data/brands/storm.json delete mode 100644 data/brands/strawberry.json delete mode 100644 data/brands/strongshine.json delete mode 100644 data/brands/stuart-cam.json delete mode 100644 data/brands/styco.json delete mode 100644 data/brands/suba.json delete mode 100644 data/brands/sucam.json delete mode 100644 data/brands/sucjar.json delete mode 100644 data/brands/sucura-networks.json delete mode 100644 data/brands/sudvision.json delete mode 100644 data/brands/summvision.json delete mode 100644 data/brands/sumpple.json delete mode 100644 data/brands/sumvision.json delete mode 100644 data/brands/sunba.json delete mode 100644 data/brands/sunbio.json delete mode 100644 data/brands/sunchan.json delete mode 100644 data/brands/suncomm.json delete mode 100644 data/brands/sundari.json delete mode 100644 data/brands/sunell-security.json delete mode 100644 data/brands/suneyes.json delete mode 100644 data/brands/sunivision.json delete mode 100644 data/brands/sunkwang.json delete mode 100644 data/brands/sunluxy.json delete mode 100644 data/brands/sunnex.json delete mode 100644 data/brands/sunnylux.json delete mode 100644 data/brands/sunplus-innovation.json delete mode 100644 data/brands/sunsom.json delete mode 100644 data/brands/suntek.json delete mode 100644 data/brands/sunvision-us.json delete mode 100644 data/brands/sunywo.json delete mode 100644 data/brands/super-focus.json delete mode 100644 data/brands/supera.json delete mode 100644 data/brands/supercircuits.json delete mode 100644 data/brands/supereye.json delete mode 100644 data/brands/superspring.json delete mode 100644 data/brands/supervision.json delete mode 100644 data/brands/supra-space.json delete mode 100644 data/brands/supvin.json delete mode 100644 data/brands/surcomm.json delete mode 100644 data/brands/sure-eye.json delete mode 100644 data/brands/surecom.json delete mode 100644 data/brands/surip-cam.json delete mode 100644 data/brands/surveilist.json delete mode 100644 data/brands/surveon.json delete mode 100644 data/brands/surway-technology.json delete mode 100644 data/brands/surya-net.json delete mode 100644 data/brands/sv-b0w-720p-hx.json delete mode 100644 data/brands/sv3c.json delete mode 100644 data/brands/sv3p.json delete mode 100644 data/brands/svat.json delete mode 100644 data/brands/svb-international.json delete mode 100644 data/brands/svbc.json delete mode 100644 data/brands/svc.json delete mode 100644 data/brands/sve3.json delete mode 100644 data/brands/svec.json delete mode 100644 data/brands/svi.json delete mode 100644 data/brands/svision-co.json delete mode 100644 data/brands/svn.json delete mode 100644 data/brands/svplus.json delete mode 100644 data/brands/sw360.json delete mode 100644 data/brands/swann.json delete mode 100644 data/brands/sweex.json delete mode 100644 data/brands/swibe.json delete mode 100644 data/brands/swnhd-800cam.json delete mode 100644 data/brands/sy2l.json delete mode 100644 data/brands/sygonix.json delete mode 100644 data/brands/symynelec.json delete mode 100644 data/brands/syneye.json delete mode 100644 data/brands/synshore.json delete mode 100644 data/brands/syny-snc.json delete mode 100644 data/brands/syokudou.json delete mode 100644 data/brands/syscom-cctv.json delete mode 100644 data/brands/systemmax.json delete mode 100644 data/brands/systoda.json delete mode 100644 data/brands/szneo.json delete mode 100644 data/brands/szsinocam.json delete mode 100644 data/brands/t.one.json delete mode 100644 data/brands/taber.json delete mode 100644 data/brands/takaovi.json delete mode 100644 data/brands/taller.json delete mode 100644 data/brands/talos-security.json delete mode 100644 data/brands/talos.json delete mode 100644 data/brands/tank.json delete mode 100644 data/brands/tapo.json delete mode 100644 data/brands/targa.json delete mode 100644 data/brands/tas-tech.json delete mode 100644 data/brands/tbi.json delete mode 100644 data/brands/tbkvision.json delete mode 100644 data/brands/tbs.json delete mode 100644 data/brands/tcs-avd-ip.json delete mode 100644 data/brands/teamme.json delete mode 100644 data/brands/teamvision.json delete mode 100644 data/brands/tech-world.json delete mode 100644 data/brands/tech.json delete mode 100644 data/brands/techage.json delete mode 100644 data/brands/techmaxx.json delete mode 100644 data/brands/technaxx.json delete mode 100644 data/brands/technology.json delete mode 100644 data/brands/techpro.json delete mode 100644 data/brands/techview.json delete mode 100644 data/brands/techvision.json delete mode 100644 data/brands/techyo.json delete mode 100644 data/brands/teckin.json delete mode 100644 data/brands/tecvoz.json delete mode 100644 data/brands/tedun.json delete mode 100644 data/brands/telca.json delete mode 100644 data/brands/telco.json delete mode 100644 data/brands/telekom.json delete mode 100644 data/brands/teleste.json delete mode 100644 data/brands/telesystem.json delete mode 100644 data/brands/teletek-electronics.json delete mode 100644 data/brands/telview-cctv.json delete mode 100644 data/brands/tenda.json delete mode 100644 data/brands/tensai.json delete mode 100644 data/brands/tensky.json delete mode 100644 data/brands/tenvis.json delete mode 100644 data/brands/tenvus.json delete mode 100644 data/brands/teruhal.json delete mode 100644 data/brands/tesco.json delete mode 100644 data/brands/tethys-innovation.json delete mode 100644 data/brands/tevah.json delete mode 100644 data/brands/texhnaxx.json delete mode 100644 data/brands/thethys.json delete mode 100644 data/brands/thingino.json delete mode 100644 data/brands/thinkvalue.json delete mode 100644 data/brands/thomson.json delete mode 100644 data/brands/threeboy.json delete mode 100644 data/brands/thrifty-tech.json delete mode 100644 data/brands/tiandy.json delete mode 100644 data/brands/tic.json delete mode 100644 data/brands/tidetech.json delete mode 100644 data/brands/tigersecu.json delete mode 100644 data/brands/tigris.json delete mode 100644 data/brands/timhillone.json delete mode 100644 data/brands/tinosec.json delete mode 100644 data/brands/tinycam.json delete mode 100644 data/brands/tipo.json delete mode 100644 data/brands/titanium.json delete mode 100644 data/brands/titathink.json delete mode 100644 data/brands/tl-sc3130g.json delete mode 100644 data/brands/tmezon.json delete mode 100644 data/brands/tmt.json delete mode 100644 data/brands/toa.json delete mode 100644 data/brands/toaioho.json delete mode 100644 data/brands/toguard.json delete mode 100644 data/brands/tomtop.json delete mode 100644 data/brands/tonton.json delete mode 100644 data/brands/top-sky.json delete mode 100644 data/brands/top-vision.json delete mode 100644 data/brands/topcam.json delete mode 100644 data/brands/topcony.json delete mode 100644 data/brands/topica-cctv.json delete mode 100644 data/brands/topmountain.json delete mode 100644 data/brands/topo.json delete mode 100644 data/brands/topodome.json delete mode 100644 data/brands/topsee.json delete mode 100644 data/brands/topsicherheit.json delete mode 100644 data/brands/toptech.json delete mode 100644 data/brands/topway.json delete mode 100644 data/brands/topwelltech.json delete mode 100644 data/brands/torno.json delete mode 100644 data/brands/torv.json delete mode 100644 data/brands/toscan.json delete mode 100644 data/brands/toshiba.json delete mode 100644 data/brands/toughdog.json delete mode 100644 data/brands/touralle.json delete mode 100644 data/brands/tp-ipc.json delete mode 100644 data/brands/tp-link.json delete mode 100644 data/brands/tptek.json delete mode 100644 data/brands/tr-d4101ir1v3.json delete mode 100644 data/brands/traficon.json delete mode 100644 data/brands/trantech.json delete mode 100644 data/brands/trasera.json delete mode 100644 data/brands/trassir.json delete mode 100644 data/brands/trek.json delete mode 100644 data/brands/trendnet.json delete mode 100644 data/brands/triax.json delete mode 100644 data/brands/trident.json delete mode 100644 data/brands/trivision.json delete mode 100644 data/brands/tronitec.json delete mode 100644 data/brands/truen.json delete mode 100644 data/brands/trueview.json delete mode 100644 data/brands/truman.json delete mode 100644 data/brands/trust.json delete mode 100644 data/brands/truvision.json delete mode 100644 data/brands/ts4001.json delete mode 100644 data/brands/tseeu.json delete mode 100644 data/brands/tshicom.json delete mode 100644 data/brands/tsm.json delete mode 100644 data/brands/tucam.json delete mode 100644 data/brands/tuin.json delete mode 100644 data/brands/tungson-ages.json delete mode 100644 data/brands/turbo-x.json delete mode 100644 data/brands/turing.json delete mode 100644 data/brands/turtle.json delete mode 100644 data/brands/tutk.json delete mode 100644 data/brands/tuya.json delete mode 100644 data/brands/tvc.json delete mode 100644 data/brands/tvpsii.json delete mode 100644 data/brands/tvt.json delete mode 100644 data/brands/tweety-camera.json delete mode 100644 data/brands/twg.json delete mode 100644 data/brands/tyco.json delete mode 100644 data/brands/typhoon.json delete mode 100644 data/brands/tysvance.json delete mode 100644 data/brands/tzmezon.json delete mode 100644 data/brands/ubee.json delete mode 100644 data/brands/ubiquiti.json delete mode 100644 data/brands/ubnt.json delete mode 100644 data/brands/ucam-247.json delete mode 100644 data/brands/uche-camera.json delete mode 100644 data/brands/ucloud.json delete mode 100644 data/brands/ucybo.json delete mode 100644 data/brands/udp-technology.json delete mode 100644 data/brands/udvar.json delete mode 100644 data/brands/uhi.json delete mode 100644 data/brands/uipopo.json delete mode 100644 data/brands/uk-plus.json delete mode 100644 data/brands/ukc.json delete mode 100644 data/brands/ukiyoo.json delete mode 100644 data/brands/ul-tech.json delete mode 100644 data/brands/ular.json delete mode 100644 data/brands/ulkokamera.json delete mode 100644 data/brands/umanor.json delete mode 100644 data/brands/uniarch.json delete mode 100644 data/brands/unicad.json delete mode 100644 data/brands/unicorn.json delete mode 100644 data/brands/uniden.json delete mode 100644 data/brands/unidvr.json delete mode 100644 data/brands/unifi.json delete mode 100644 data/brands/unilook.json delete mode 100644 data/brands/unimo.json delete mode 100644 data/brands/unioncam.json delete mode 100644 data/brands/unioptek.json delete mode 100644 data/brands/unique-cctv.json delete mode 100644 data/brands/unitech.json delete mode 100644 data/brands/unitoptek.json delete mode 100644 data/brands/uniue-vision.json delete mode 100644 data/brands/universal.json delete mode 100644 data/brands/uniview.json delete mode 100644 data/brands/univision.json delete mode 100644 data/brands/univivi.json delete mode 100644 data/brands/unotech.json delete mode 100644 data/brands/unv.json delete mode 100644 data/brands/unview.json delete mode 100644 data/brands/unzano.json delete mode 100644 data/brands/uokoo.json delete mode 100644 data/brands/upcam.json delete mode 100644 data/brands/upupin.json delete mode 100644 data/brands/uranium.json delete mode 100644 data/brands/uray-encoder.json delete mode 100644 data/brands/urban-security-group.json delete mode 100644 data/brands/urmet.json delete mode 100644 data/brands/us-auto.json delete mode 100644 data/brands/usaginc.json delete mode 100644 data/brands/usavision.json delete mode 100644 data/brands/usb.json delete mode 100644 data/brands/usg.json delete mode 100644 data/brands/ut-alert.json delete mode 100644 data/brands/utalent.json delete mode 100644 data/brands/uxdsecurity.json delete mode 100644 data/brands/v200.json delete mode 100644 data/brands/v308.json delete mode 100644 data/brands/v360.json delete mode 100644 data/brands/v380.json delete mode 100644 data/brands/v380pro.json delete mode 100644 data/brands/v4l2rtspserver.json delete mode 100644 data/brands/v600.json delete mode 100644 data/brands/v89.json delete mode 100644 data/brands/vacron.json delete mode 100644 data/brands/vaddio.json delete mode 100644 data/brands/vahti.json delete mode 100644 data/brands/valtronics.json delete mode 100644 data/brands/valuecam.json delete mode 100644 data/brands/vanderbilt.json delete mode 100644 data/brands/vandersec.json delete mode 100644 data/brands/vandesc.json delete mode 100644 data/brands/vangold.json delete mode 100644 data/brands/vantage.json delete mode 100644 data/brands/vantech.json delete mode 100644 data/brands/vaste-achter-8mp104.json delete mode 100644 data/brands/vastsee.json delete mode 100644 data/brands/vatel.json delete mode 100644 data/brands/vatilon.json delete mode 100644 data/brands/vcam.json delete mode 100644 data/brands/vcatch.json delete mode 100644 data/brands/vcenter.json delete mode 100644 data/brands/vchod.json delete mode 100644 data/brands/vcs.json delete mode 100644 data/brands/vea.json delete mode 100644 data/brands/veevocam.json delete mode 100644 data/brands/veezon.json delete mode 100644 data/brands/veezoom.json delete mode 100644 data/brands/veho.json delete mode 100644 data/brands/veilux.json delete mode 100644 data/brands/velleman.json delete mode 100644 data/brands/velpro.json delete mode 100644 data/brands/velvu.json delete mode 100644 data/brands/ventech.json delete mode 100644 data/brands/veo%2fvidi.json delete mode 100644 data/brands/veravista.json delete mode 100644 data/brands/verifly.json delete mode 100644 data/brands/verint.json delete mode 100644 data/brands/verizon.json delete mode 100644 data/brands/verkada.json delete mode 100644 data/brands/veroyi.json delete mode 100644 data/brands/veskys.json delete mode 100644 data/brands/vesta-alarms.json delete mode 100644 data/brands/vesta.json delete mode 100644 data/brands/vevotek.json delete mode 100644 data/brands/veyo.json delete mode 100644 data/brands/vgroup.json delete mode 100644 data/brands/vgsion.json delete mode 100644 data/brands/vguard.json delete mode 100644 data/brands/vhod.json delete mode 100644 data/brands/vicom.json delete mode 100644 data/brands/vicon-security.json delete mode 100644 data/brands/vicsung.json delete mode 100644 data/brands/victex.json delete mode 100644 data/brands/victure.json delete mode 100644 data/brands/videoiq.json delete mode 100644 data/brands/videosec-security.json delete mode 100644 data/brands/videotec.json delete mode 100644 data/brands/videoteknika.json delete mode 100644 data/brands/videotrend.json delete mode 100644 data/brands/videotronik.json delete mode 100644 data/brands/videra.json delete mode 100644 data/brands/vidiline.json delete mode 100644 data/brands/vido.at.json delete mode 100644 data/brands/vidstar.json delete mode 100644 data/brands/viewmax.json delete mode 100644 data/brands/viewsca.json delete mode 100644 data/brands/viewscan.json delete mode 100644 data/brands/vigilant.json delete mode 100644 data/brands/viking.json delete mode 100644 data/brands/vikviz.json delete mode 100644 data/brands/vikylin.json delete mode 100644 data/brands/vilar.json delete mode 100644 data/brands/vimar.json delete mode 100644 data/brands/vimicro.json delete mode 100644 data/brands/vimtag.json delete mode 100644 data/brands/vimtech.json delete mode 100644 data/brands/viofo.json delete mode 100644 data/brands/vip-vision.json delete mode 100644 data/brands/vipcam.json delete mode 100644 data/brands/viral.json delete mode 100644 data/brands/visicom.json delete mode 100644 data/brands/vision-digi.json delete mode 100644 data/brands/vision-gs.json delete mode 100644 data/brands/vision-hi-tech-co.json delete mode 100644 data/brands/vision.json delete mode 100644 data/brands/visioncool-cctv.json delete mode 100644 data/brands/visionhitech-americas.json delete mode 100644 data/brands/visionite.json delete mode 100644 data/brands/visionlite.json delete mode 100644 data/brands/visionstar.json delete mode 100644 data/brands/visionxip.json delete mode 100644 data/brands/visiotech.json delete mode 100644 data/brands/visiotys.json delete mode 100644 data/brands/visonic.json delete mode 100644 data/brands/visortech.json delete mode 100644 data/brands/vista-cctv.json delete mode 100644 data/brands/vistacam.json delete mode 100644 data/brands/visualint.json delete mode 100644 data/brands/vitek-cctv.json delete mode 100644 data/brands/vitek.json delete mode 100644 data/brands/vitorcam.json delete mode 100644 data/brands/vivint.json delete mode 100644 data/brands/vivitar.json delete mode 100644 data/brands/vivotek.json delete mode 100644 data/brands/viziuuy.json delete mode 100644 data/brands/vlc.json delete mode 100644 data/brands/voger.json delete mode 100644 data/brands/vonnic.json delete mode 100644 data/brands/vonninc.json delete mode 100644 data/brands/vonnision.json delete mode 100644 data/brands/vonz.json delete mode 100644 data/brands/voor%2fkeuken.json delete mode 100644 data/brands/voordeur.json delete mode 100644 data/brands/voyager.json delete mode 100644 data/brands/voycam.json delete mode 100644 data/brands/voyo.json delete mode 100644 data/brands/vpl.json delete mode 100644 data/brands/vr-cam.json delete mode 100644 data/brands/vr360.json delete mode 100644 data/brands/vsc.json delete mode 100644 data/brands/vsonic.json delete mode 100644 data/brands/vstarcam.json delete mode 100644 data/brands/vta.json delete mode 100644 data/brands/vtech.json delete mode 100644 data/brands/walkertone.json delete mode 100644 data/brands/wallcharger.json delete mode 100644 data/brands/wanscam.json delete mode 100644 data/brands/wansview.json delete mode 100644 data/brands/wapa.json delete mode 100644 data/brands/wardmay-cctv.json delete mode 100644 data/brands/wareshare.json delete mode 100644 data/brands/watashi.json delete mode 100644 data/brands/watch-bot-camera.json delete mode 100644 data/brands/watchdog.json delete mode 100644 data/brands/watchguard.json delete mode 100644 data/brands/watchmeip.json delete mode 100644 data/brands/watchnet-inc.json delete mode 100644 data/brands/waylens.json delete mode 100644 data/brands/waymoon.json delete mode 100644 data/brands/wbox.json delete mode 100644 data/brands/wca.json delete mode 100644 data/brands/webcamxp.json delete mode 100644 data/brands/webeye.json delete mode 100644 data/brands/webgate.json delete mode 100644 data/brands/webo.json delete mode 100644 data/brands/webvision.json delete mode 100644 data/brands/wecam.json delete mode 100644 data/brands/weldex.json delete mode 100644 data/brands/wepra.json delete mode 100644 data/brands/westcam.json delete mode 100644 data/brands/western-digital.json delete mode 100644 data/brands/westline.json delete mode 100644 data/brands/westmile.json delete mode 100644 data/brands/wetranstek.json delete mode 100644 data/brands/wevo.json delete mode 100644 data/brands/wgcc.json delete mode 100644 data/brands/whfi.json delete mode 100644 data/brands/wi-tec.json delete mode 100644 data/brands/wic.json delete mode 100644 data/brands/widix.json delete mode 100644 data/brands/wifi-baby.json delete mode 100644 data/brands/wifi-mi.json delete mode 100644 data/brands/wifi-smart-net-camera.json delete mode 100644 data/brands/winbook.json delete mode 100644 data/brands/winic.json delete mode 100644 data/brands/wintech.json delete mode 100644 data/brands/wireless-charger-cam.json delete mode 100644 data/brands/wirepath.json delete mode 100644 data/brands/wise-group.json delete mode 100644 data/brands/wisenet.json delete mode 100644 data/brands/wisevision.json delete mode 100644 data/brands/wish.json delete mode 100644 data/brands/wistino.json delete mode 100644 data/brands/wistron.json delete mode 100644 data/brands/witi.json delete mode 100644 data/brands/wiwacam.json delete mode 100644 data/brands/wlw.json delete mode 100644 data/brands/wodsee.json delete mode 100644 data/brands/wolulu.json delete mode 100644 data/brands/wonsdar.json delete mode 100644 data/brands/woodie-view.json delete mode 100644 data/brands/woonkamer.json delete mode 100644 data/brands/wouwon.json delete mode 100644 data/brands/wsdcam.json delete mode 100644 data/brands/wtw-tsukamoto.json delete mode 100644 data/brands/wtw.json delete mode 100644 data/brands/wwgc.json delete mode 100644 data/brands/wyzecam.json delete mode 100644 data/brands/x-price.json delete mode 100644 data/brands/x-security.json delete mode 100644 data/brands/x-view.json delete mode 100644 data/brands/x-zhang.json delete mode 100644 data/brands/x10.json delete mode 100644 data/brands/xaimoi.json delete mode 100644 data/brands/xanboo.json delete mode 100644 data/brands/xblitz.json delete mode 100644 data/brands/xblock.json delete mode 100644 data/brands/xdh.json delete mode 100644 data/brands/xelpon.json delete mode 100644 data/brands/xenocam.json delete mode 100644 data/brands/xenta.json delete mode 100644 data/brands/xfinity.json delete mode 100644 data/brands/xgody.json delete mode 100644 data/brands/xiaomi.json delete mode 100644 data/brands/xiaovv.json delete mode 100644 data/brands/xiaoyi.json delete mode 100644 data/brands/xin-ling.json delete mode 100644 data/brands/xineron.json delete mode 100644 data/brands/xinfi.json delete mode 100644 data/brands/xingchuang.json delete mode 100644 data/brands/xingling.json delete mode 100644 data/brands/xinsan.json delete mode 100644 data/brands/xiongmai-dvr.json delete mode 100644 data/brands/xipcam.json delete mode 100644 data/brands/xka.json delete mode 100644 data/brands/xmarto.json delete mode 100644 data/brands/xmate.json delete mode 100644 data/brands/xmeye.json delete mode 100644 data/brands/xonz.json delete mode 100644 data/brands/xpcam.json delete mode 100644 data/brands/xperia.json delete mode 100644 data/brands/xpia.json delete mode 100644 data/brands/xseries.json delete mode 100644 data/brands/xshcam.json delete mode 100644 data/brands/xtendrobotics.json delete mode 100644 data/brands/xtremepro.json delete mode 100644 data/brands/xts-corp.json delete mode 100644 data/brands/xtsy.json delete mode 100644 data/brands/xtu.json delete mode 100644 data/brands/xvi.json delete mode 100644 data/brands/xvim.json delete mode 100644 data/brands/xvision.json delete mode 100644 data/brands/xvr.json delete mode 100644 data/brands/xxcamera.json delete mode 100644 data/brands/xxk.json delete mode 100644 data/brands/xy-ip.json delete mode 100644 data/brands/xyclop.json delete mode 100644 data/brands/y-cam.json delete mode 100644 data/brands/yale.json delete mode 100644 data/brands/yamla.json delete mode 100644 data/brands/yanivision.json delete mode 100644 data/brands/yarsor.json delete mode 100644 data/brands/yatwin.json delete mode 100644 data/brands/yawcam.json delete mode 100644 data/brands/ycc.json delete mode 100644 data/brands/ycc365-plus.json delete mode 100644 data/brands/ycc365.json delete mode 100644 data/brands/yccplus.json delete mode 100644 data/brands/yctechcam.json delete mode 100644 data/brands/yeekamo.json delete mode 100644 data/brands/yeesee.json delete mode 100644 data/brands/yeluor-360-2k.json delete mode 100644 data/brands/yeskam.json delete mode 100644 data/brands/yeskamo.json delete mode 100644 data/brands/yhdo.json delete mode 100644 data/brands/yi-hack-allwinner-v2.json delete mode 100644 data/brands/yi-hack-allwinner.json delete mode 100644 data/brands/yi-hack-mstar.json delete mode 100644 data/brands/yi-hack-v4.json delete mode 100644 data/brands/yi-hack-v5.json delete mode 100644 data/brands/yi.json delete mode 100644 data/brands/yiantime.json delete mode 100644 data/brands/yicam.json delete mode 100644 data/brands/yihack.json delete mode 100644 data/brands/yiliao.json delete mode 100644 data/brands/yinxn.json delete mode 100644 data/brands/yipc.json delete mode 100644 data/brands/yoics.json delete mode 100644 data/brands/yoko-tech.json delete mode 100644 data/brands/yoluke.json delete mode 100644 data/brands/yoosee.json delete mode 100644 data/brands/yoteware.json delete mode 100644 data/brands/yotex.json delete mode 100644 data/brands/youluke.json delete mode 100644 data/brands/ysa.json delete mode 100644 data/brands/ysee.json delete mode 100644 data/brands/ysxlite.json delete mode 100644 data/brands/yucheng.json delete mode 100644 data/brands/yucvision.json delete mode 100644 data/brands/yudor.json delete mode 100644 data/brands/yunch.json delete mode 100644 data/brands/yunshian.json delete mode 100644 data/brands/yunsye.json delete mode 100644 data/brands/yuzun.json delete mode 100644 data/brands/z-bravo.json delete mode 100644 data/brands/z5s.json delete mode 100644 data/brands/zatel.json delete mode 100644 data/brands/zaunip.json delete mode 100644 data/brands/zavio.json delete mode 100644 data/brands/zebion.json delete mode 100644 data/brands/zebronics.json delete mode 100644 data/brands/zee-cure.json delete mode 100644 data/brands/zee.json delete mode 100644 data/brands/zeecam.json delete mode 100644 data/brands/zeetopin.json delete mode 100644 data/brands/zekona.json delete mode 100644 data/brands/zencam.json delete mode 100644 data/brands/zenith-cctv.json delete mode 100644 data/brands/zennox.json delete mode 100644 data/brands/zetronix.json delete mode 100644 data/brands/zeustech.json delete mode 100644 data/brands/zgwang.json delete mode 100644 data/brands/zhejiang.json delete mode 100644 data/brands/zicom.json delete mode 100644 data/brands/zigxico.json delete mode 100644 data/brands/zilink.json delete mode 100644 data/brands/zintronic.json delete mode 100644 data/brands/zivif.json delete mode 100644 data/brands/zjuxin.json delete mode 100644 data/brands/zkteco.json delete mode 100644 data/brands/zmodo.json delete mode 100644 data/brands/znv.json delete mode 100644 data/brands/zodiac-security.json delete mode 100644 data/brands/zoelink.json delete mode 100644 data/brands/zoneminder.json delete mode 100644 data/brands/zonet.json delete mode 100644 data/brands/zoneway.json delete mode 100644 data/brands/zonx.json delete mode 100644 data/brands/zoohi.json delete mode 100644 data/brands/zosi.json delete mode 100644 data/brands/zsgl.json delete mode 100644 data/brands/ztcolife-mini-wifi.json delete mode 100644 data/brands/zte.json delete mode 100644 data/brands/zulex.json delete mode 100644 data/brands/zuum.json delete mode 100644 data/brands/zvision.json delete mode 100644 data/brands/zxtech.json delete mode 100644 data/brands/zysecurity.json delete mode 100644 data/brands/zyxel.json delete mode 100644 data/brands/zzlink.json delete mode 100644 data/brands/zzmoon.json delete mode 100644 data/camera_oui.json delete mode 100644 data/popular_stream_patterns.json delete mode 100644 data/query_parameters.json delete mode 100644 docker-compose.full.yml delete mode 100644 docker-compose.yml create mode 100644 internal/api/api.go delete mode 100644 internal/api/handlers/discover.go delete mode 100644 internal/api/handlers/health.go delete mode 100644 internal/api/handlers/probe.go delete mode 100644 internal/api/handlers/search.go delete mode 100644 internal/api/routes.go create mode 100644 internal/api/web/index.html create mode 100644 internal/app/app.go create mode 100644 internal/app/log.go delete mode 100644 internal/camera/database/loader.go delete mode 100644 internal/camera/database/search.go delete mode 100644 internal/camera/discovery/onvif_simple.go delete mode 100644 internal/camera/discovery/oui.go delete mode 100644 internal/camera/discovery/probe.go delete mode 100644 internal/camera/discovery/prober_arp.go delete mode 100644 internal/camera/discovery/prober_dns.go delete mode 100644 internal/camera/discovery/prober_http.go delete mode 100644 internal/camera/discovery/prober_mdns.go delete mode 100644 internal/camera/discovery/prober_ping.go delete mode 100644 internal/camera/discovery/scanner.go delete mode 100644 internal/camera/stream/builder.go delete mode 100644 internal/camera/stream/builder_dedup_test.go delete mode 100644 internal/camera/stream/deduplication_real_test.go delete mode 100644 internal/camera/stream/protocol_comparison_test.go delete mode 100644 internal/camera/stream/rtsp_auth_logic_test.go delete mode 100644 internal/camera/stream/special_chars_test.go delete mode 100644 internal/camera/stream/tester.go delete mode 100644 internal/config/config.go create mode 100644 internal/generate/generate.go delete mode 100644 internal/models/camera.go delete mode 100644 internal/models/probe.go create mode 100644 internal/probe/probe.go create mode 100644 internal/search/search.go create mode 100644 internal/test/test.go delete mode 100644 internal/utils/logger/adapter.go delete mode 100644 internal/utils/logger/masking_handler.go delete mode 100644 internal/utils/logger/masking_handler_test.go create mode 100644 main.go create mode 100644 pkg/camdb/search.go create mode 100644 pkg/camdb/streams.go create mode 100644 pkg/generate/config.go create mode 100644 pkg/generate/diff.go create mode 100644 pkg/generate/insert.go create mode 100644 pkg/generate/models.go create mode 100644 pkg/generate/writer.go create mode 100644 pkg/probe/arp.go create mode 100644 pkg/probe/dns.go create mode 100644 pkg/probe/http.go create mode 100644 pkg/probe/mdns.go create mode 100644 pkg/probe/models.go create mode 100644 pkg/probe/oui.go create mode 100644 pkg/probe/ping.go create mode 100644 pkg/probe/ports.go delete mode 100644 pkg/sse/sse.go create mode 100644 pkg/tester/session.go create mode 100644 pkg/tester/source.go create mode 100644 pkg/tester/worker.go delete mode 100644 strix.yaml.example delete mode 100644 webui/.eslintrc.cjs delete mode 100644 webui/CONFIG_GENERATORS.md delete mode 100644 webui/package.json delete mode 100644 webui/server.go delete mode 100644 webui/web/css/main.css delete mode 100755 webui/web/dev-server.sh delete mode 100644 webui/web/index.html delete mode 100644 webui/web/js/api/camera-search.js delete mode 100644 webui/web/js/api/probe.js delete mode 100644 webui/web/js/api/stream-discovery.js delete mode 100644 webui/web/js/config-generators/frigate/index.js delete mode 100644 webui/web/js/config-generators/go2rtc/index.js delete mode 100644 webui/web/js/main.js delete mode 100644 webui/web/js/mock/mock-camera-api.js delete mode 100644 webui/web/js/mock/mock-data.js delete mode 100644 webui/web/js/mock/mock-stream-api.js delete mode 100644 webui/web/js/ui/config-panel.js delete mode 100644 webui/web/js/ui/modal.js delete mode 100644 webui/web/js/ui/search-form.js delete mode 100644 webui/web/js/ui/stream-carousel.js delete mode 100644 webui/web/js/ui/stream-list.js delete mode 100644 webui/web/js/utils/toast.js diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 699c63a..0000000 --- a/.dockerignore +++ /dev/null @@ -1,52 +0,0 @@ -# Git -.git -.gitignore -.github - -# IDE -.vscode -.idea -*.swp -*.swo -*~ - -# Build artifacts -bin/ -dist/ -*.exe -*.dll -*.so -*.dylib - -# Test files -*.test -*_test.go -coverage.* -*.out - -# Logs -*.log -strix.log - -# Config files (user-specific) -strix.yaml -test_*.yaml -config.yaml - -# Temporary files -tmp/ -temp/ -*.dump -*_output.txt - -# Documentation (included in image metadata instead) -*.md -!README.md - -# OS files -.DS_Store -Thumbs.db - -# Development -.env -.env.local diff --git a/.gitignore b/.gitignore index 6de6d7a..79ce4c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,7 @@ -# Binaries -bin/ +# Binary strix -main -*.exe -*.exe~ -*.dll -*.so -*.dylib -# Test binaries -*.test - -# Output of the go coverage tool -*.out -coverage.html - -# Go workspace file -go.work - -# IDE -.vscode/ -.idea/ -*.swp -*.swo -*~ - -# OS -.DS_Store -Thumbs.db - -# Logs -*.log - -# Environment -.env -.env.local - -# Temporary files -tmp/ -temp/ -*.dump -*_output.txt - -# Configuration (user-specific) -strix.yaml - -# Node.js / NPM -node_modules/ -package-lock.json \ No newline at end of file +# SQLite database files +*.db +*.db-shm +*.db-wal diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 8543659..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,111 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [1.0.11] - 2026-03-19 - -### Added -- Project icon assets (SVG, 192x192 PNG, 512x512 PNG) for use in app stores and integrations - -### Fixed -- Health endpoint now accepts HEAD requests for Docker and CasaOS healthcheck compatibility -- Registered HEAD route in chi router for /api/v1/health endpoint - -## [1.0.10] - 2026-03-17 - -### Added -- Device probe endpoint (GET /api/v1/probe) for network device inspection -- HTTP prober for detecting camera web interfaces -- mDNS discovery for local network devices -- ARP/OUI vendor identification with camera OUI database (2,400+ entries) -- Probe integration into frontend with modal UI -- Added Trassir and ZOSI to OUI database - -### Changed -- Removed CI/CD pipelines (GitHub Actions), replaced with local Docker builds -- Removed GoReleaser, unified Docker image for Docker Hub and HA add-on -- Application version now injected at build time via ldflags -- HA add-on reads /data/options.json natively (no more entrypoint script) -- Optimized mDNS discovery timeout - -### Fixed -- Removed experimental SSE warning from Home Assistant Add-on documentation -- Clear probe-filled fields when navigating back in frontend - -## [1.0.9] - 2025-12-11 - -### Fixed -- Fixed real-time SSE streaming in Home Assistant Ingress mode -- SSE events now arrive immediately instead of being buffered until completion - -### Technical -- Added automatic detection of Home Assistant Ingress via X-Ingress-Path header -- Implemented 64KB padding for SSE events to overcome aiohttp buffer in HA Supervisor -- Adjusted progress update interval to 3 seconds in Ingress mode to reduce traffic -- Normal mode (Docker/direct access) remains unchanged - -## [1.0.8] - 2025-11-26 - -### Changed -- Updated Docker deployment to use host network mode for better compatibility -- Modified docker-compose.yml to use `network_mode: host` -- Updated installation commands to use `--network host` flag -- Removed port mappings as they are not needed with host network mode - -### Improved -- Better compatibility with unprivileged LXC containers -- Simplified Docker networking configuration -- Direct network access for improved camera discovery performance - -## [1.0.7] - 2025-11-23 - -### Fixed -- Fixed channel numbering for Hikvision-style cameras (reported by @sergbond_com) -- Removed invalid test data from Hikvision database -- Fixed brand+model search matching in stream discovery - -### Added -- Universal `[CHANNEL+1]` placeholder support for flexible channel numbering -- Support for both 0-based (channel=0 → 101) and 1-based (channel=1 → 101) channel selection -- Added 6 high-priority Hikvision patterns to popular stream patterns database - -### Changed -- Updated 14 camera brands with universal channel patterns (Hikvision, Hiwatch, Annke, Swann, Abus, 7links, LevelOne, AlienDVR, Oswoo, AV102IP-40, Acvil, TBKVision, Deltaco, Night Owl) -- Hikvision: replaced 10 hardcoded patterns with 6 universal patterns -- Hiwatch: replaced 4 hardcoded patterns with 8 universal patterns (including ISAPI variants) -- Universal patterns now tested first for faster discovery, hardcoded patterns kept as fallback -- Improved stream discovery performance with intelligent pattern ordering - -### Technical -- Added support for `[CHANNEL+1]`, `[channel+1]`, `{CHANNEL+1}`, `{channel+1}` placeholders in URL builder -- Modified 16 files: +2448 additions, -1954 deletions - -## [0.1.0] - 2025-11-06 - -### Added -- 🦉 Initial release of Strix -- 🌐 Web-based user interface for camera stream discovery -- 🔍 Automatic RTSP stream discovery for IP cameras -- 📹 Support for multiple camera manufacturers -- 🎯 ONVIF device discovery and PTZ endpoint detection -- 🔐 Credential embedding in stream URLs -- 📊 Camera model database with autocomplete search -- 🎨 Modern, responsive UI with purple owl logo -- ⚙️ Configuration export for Go2RTC and Frigate -- 🔄 Dual-stream support with optional sub-stream selection -- 📡 Server-Sent Events (SSE) for real-time discovery progress -- 🚀 RESTful API for camera search and stream discovery -- 📦 Cross-platform support (Linux, Windows, macOS) -- 🏗️ Built with Go for high performance - -### Features -- **Web Interface**: Clean, intuitive UI for camera configuration -- **Stream Discovery**: Automatically finds working RTSP streams -- **ONVIF Support**: Discovers ONVIF devices and PTZ capabilities -- **Multi-Platform**: Binaries for Linux (amd64, arm64, arm/v7), Windows, and macOS -- **Easy Integration**: Export configs for popular NVR systems - -[0.1.0]: https://github.com/eduard256/Strix/releases/tag/v0.1.0 diff --git a/DEDUPLICATION_TEST_RESULTS.md b/DEDUPLICATION_TEST_RESULTS.md deleted file mode 100644 index 4234f23..0000000 --- a/DEDUPLICATION_TEST_RESULTS.md +++ /dev/null @@ -1,185 +0,0 @@ -# Результаты тестирования дедупликации потоков - -## Запуск тестов - -```bash -go test -v ./internal/camera/stream -run "Dedup|Worst|Multiple" -``` - -## ✅ Тесты выполнены успешно - -Все тесты **PASS**, что означает, что они успешно **ДЕМОНСТРИРУЮТ ПРОБЛЕМУ** текущей системы дедупликации. - ---- - -## 📊 Результаты - -### Тест 1: HTTP Authentication Variants - -**Проблема:** Один HTTP endpoint генерирует 4 разных URL - -``` -http://192.168.1.100/snapshot.jpg -http://admin:12345@192.168.1.100/snapshot.jpg -http://192.168.1.100/snapshot.jpg?pwd=12345&user=admin -http://admin:12345@192.168.1.100/snapshot.jpg?pwd=12345&user=admin -``` - -- **Реально уникальных:** 1 поток -- **Генерируется:** 4 URL -- **Потери:** 3 лишних теста (75%) - ---- - -### Тест 2: HTTP with Placeholders - -**Проблема:** URL с плейсхолдерами генерирует дубликаты - -``` -Entry: snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD] - -Generated: -http://192.168.1.100/snapshot.cgi?pwd=&user= -http://admin:12345@192.168.1.100/snapshot.cgi?pwd=&user= -http://192.168.1.100/snapshot.cgi?pwd=12345&user=admin -http://admin:12345@192.168.1.100/snapshot.cgi?pwd=12345&user=admin -``` - -- **Реально уникальных:** 1 поток -- **Генерируется:** 4 URL -- **Потери:** 3 лишних теста (75%) - ---- - -### Тест 3: RTSP with/without Credentials - -**Проблема:** RTSP генерирует 2 варианта одного потока - -``` -rtsp://admin:12345@192.168.1.100/live/main -rtsp://192.168.1.100/live/main -``` - -- **Реально уникальных:** 1 поток -- **Генерируется:** 2 URL -- **Потери:** 1 лишний тест (50%) - ---- - -### Тест 4: Multiple Sources (Popular + Model) - -**Проблема:** Разные источники генерируют одинаковые паттерны - -``` -Source 1 (Popular Patterns): - rtsp://admin:12345@192.168.1.100/Streaming/Channels/101 - rtsp://192.168.1.100/Streaming/Channels/101 - -Source 2 (Model Patterns): - rtsp://admin:12345@192.168.1.100/Streaming/Channels/101 - rtsp://192.168.1.100/Streaming/Channels/101 -``` - -**Текущая дедупликация:** -- Детектирует: 2 точных совпадения (50%) -- НЕ детектирует: 1 семантический дубль - -**Итого:** -- Total generated: 4 URL -- After current dedup: 2 URL -- Real unique: 1 поток -- **Эффективность: 50%** (должна быть 75%) - ---- - -### Тест 5: Worst Case Scenario - -**Проблема:** Один паттерн из 3 источников (Popular + Model + ONVIF) - -``` -Popular patterns generates: 4 URLs -Model patterns generates: 4 URLs -ONVIF returns: 1 URL -``` - -**После текущей дедупликации:** 4 URL остаются - -``` -http://192.168.1.100/snapshot.jpg -http://admin:12345@192.168.1.100/snapshot.jpg -http://192.168.1.100/snapshot.jpg?pwd=12345&user=admin -http://admin:12345@192.168.1.100/snapshot.jpg?pwd=12345&user=admin -``` - -**Canonical analysis:** -- Real unique streams: **1** -- URLs being tested: **4** -- **Waste: 3 unnecessary tests (75%)** -- **Time waste: ~6 seconds** (assuming 2s per test) - ---- - -## 🔴 Критические выводы - -### 1. Текущая система НЕ работает для семантических дубликатов - -Простое сравнение строк `urlMap[url] = true` детектирует только **точные совпадения**. - -### 2. Масштаб проблемы - -| Сценарий | Генерируется | Реально | Потери | -|----------|--------------|---------|--------| -| HTTP auth variants | 4 | 1 | 75% | -| RTSP with/without creds | 2 | 1 | 50% | -| Multiple sources | 4 | 1 | 75% | -| Worst case | 4 | 1 | 75% | - -**Среднее:** ~69% лишних тестов! - -### 3. Реальные последствия - -При типичном сканировании: -- **Генерируется:** ~190 URL -- **Реально уникальных:** ~80-95 -- **Лишних тестов:** 95-110 (50%) -- **Потери времени:** 3-4 минуты -- **Лишняя нагрузка на камеру:** 100+ запросов -- **Плохой UX:** пользователь видит один поток 4 раза - ---- - -## ✅ Решение - -Тесты доказывают необходимость **канонической нормализации URL**. - -См. файл `/tmp/dedup_solutions.md` для подробного описания решений. - -### Рекомендуемый подход: Гибридный - -1. **В Builder:** Уменьшить генерацию вариантов (с 4 до 2-3) -2. **В Scanner:** Добавить `CanonicalURL()` функцию -3. **Ожидаемый результат:** Дедупликация 99% вместо текущих 50% - ---- - -## 📝 Следующие шаги - -1. ✅ Написать тесты (done) -2. ⏳ Реализовать `normalizer.go` с `CanonicalURL()` -3. ⏳ Модифицировать `Builder.BuildURLsFromEntry()` - убрать лишние варианты -4. ⏳ Модифицировать `Scanner.collectStreams()` - использовать canonical map -5. ⏳ Добавить метрики дедупликации в логи -6. ⏳ Прогнать тесты заново и убедиться в улучшении - ---- - -## 🎯 Ожидаемый результат - -После внедрения решения: - -``` -Real unique streams: 1 -URLs being tested: 1 ← вместо 4 -Waste: 0 unnecessary tests (0%) ← вместо 75% -Deduplication effectiveness: 99% ← вместо 50% -``` diff --git a/DOCKER.md b/DOCKER.md deleted file mode 100644 index 7e158fc..0000000 --- a/DOCKER.md +++ /dev/null @@ -1,246 +0,0 @@ -# 🐳 Docker Setup for Strix - -## Quick Start - -### Using Docker Compose (Recommended) - -```bash -# Start Strix -docker-compose up -d - -# View logs -docker-compose logs -f strix - -# Stop Strix -docker-compose down -``` - -Access: http://localhost:4567 - -### Using Docker Run - -```bash -docker run -d \ - --name strix \ - -p 4567:4567 \ - eduard256/strix:latest -``` - -## Configuration - -### Using Environment Variables - -```bash -docker run -d \ - --name strix \ - -p 8080:8080 \ - -e STRIX_API_LISTEN=:8080 \ - -e STRIX_LOG_LEVEL=debug \ - eduard256/strix:latest -``` - -### Using Config File - -```bash -# Create strix.yaml -cat > strix.yaml </dev/null || echo 'dev')" - -# Default target -all: build - -# Build the application -build: - @echo "Building $(BINARY_NAME)..." - @mkdir -p bin - $(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BINARY_PATH) $(MAIN_PATH) - @echo "Build complete: $(BINARY_PATH)" - -# Run the application -run: build - @echo "Running $(BINARY_NAME)..." - ./$(BINARY_PATH) - -# Clean build artifacts -clean: - @echo "Cleaning..." - @rm -rf bin/ - @$(GO) clean - @echo "Clean complete" - -# Install dependencies -deps: - @echo "Installing dependencies..." - $(GO) mod download - $(GO) mod tidy - @echo "Dependencies installed" - -# Format code -fmt: - @echo "Formatting code..." - $(GO) fmt ./... - @echo "Code formatted" - -# Run vet -vet: - @echo "Running go vet..." - $(GO) vet ./... - @echo "Vet complete" - -# Run linter (requires golangci-lint) -lint: - @echo "Running linter..." - @if command -v golangci-lint > /dev/null; then \ - golangci-lint run ./...; \ - else \ - echo "golangci-lint not installed, skipping..."; \ - fi - -# Run tests -test: - @echo "Running tests..." - $(GO) test -v -race -cover ./... - @echo "Tests complete" - -# Run tests with coverage -test-coverage: - @echo "Running tests with coverage..." - $(GO) test -v -race -coverprofile=coverage.out ./... - $(GO) tool cover -html=coverage.out -o coverage.html - @echo "Coverage report generated: coverage.html" - -# Build for multiple platforms -build-all: - @echo "Building for multiple platforms..." - @mkdir -p bin - - @echo "Building for Linux amd64..." - GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/$(BINARY_NAME)-linux-amd64 $(MAIN_PATH) - - @echo "Building for Linux arm64..." - GOOS=linux GOARCH=arm64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/$(BINARY_NAME)-linux-arm64 $(MAIN_PATH) - - @echo "Building for Darwin amd64..." - GOOS=darwin GOARCH=amd64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/$(BINARY_NAME)-darwin-amd64 $(MAIN_PATH) - - @echo "Building for Darwin arm64..." - GOOS=darwin GOARCH=arm64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/$(BINARY_NAME)-darwin-arm64 $(MAIN_PATH) - - @echo "Building for Windows amd64..." - GOOS=windows GOARCH=amd64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o bin/$(BINARY_NAME)-windows-amd64.exe $(MAIN_PATH) - - @echo "Multi-platform build complete" - -# Install the binary to GOPATH -install: build - @echo "Installing $(BINARY_NAME)..." - $(GO) install $(GOFLAGS) $(LDFLAGS) $(MAIN_PATH) - @echo "Installation complete" - -# Development mode with live reload (requires air) -dev: - @if command -v air > /dev/null; then \ - air; \ - else \ - echo "Air not installed. Install with: go install github.com/air-verse/air@latest"; \ - echo "Running without live reload..."; \ - $(MAKE) run; \ - fi - -# Docker build -docker-build: - @echo "Building Docker image..." - docker build -t strix:latest . - @echo "Docker image built: strix:latest" - -# Docker run -docker-run: - @echo "Running Docker container..." - docker run -p 8080:8080 -v $(PWD)/data:/data strix:latest - -# Check code quality -check: fmt vet lint test - @echo "Code quality check complete" - -# Help -help: - @echo "Strix - Smart IP Camera Stream Discovery System" - @echo "" - @echo "Available targets:" - @echo " make build - Build the application" - @echo " make run - Build and run the application" - @echo " make clean - Remove build artifacts" - @echo " make deps - Install dependencies" - @echo " make fmt - Format code" - @echo " make vet - Run go vet" - @echo " make lint - Run linter" - @echo " make test - Run tests" - @echo " make test-coverage - Run tests with coverage" - @echo " make build-all - Build for multiple platforms" - @echo " make install - Install to GOPATH" - @echo " make dev - Run in development mode with live reload" - @echo " make docker-build - Build Docker image" - @echo " make docker-run - Run Docker container" - @echo " make check - Run all quality checks" - @echo " make help - Show this help message" \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index f75165b..0000000 --- a/README.md +++ /dev/null @@ -1,553 +0,0 @@ -# Strix -[![GitHub Stars](https://img.shields.io/github/stars/eduard256/strix?style=social)](https://github.com/eduard256/strix/stargazers) -[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -[![Docker Pulls](https://img.shields.io/docker/pulls/eduard256/strix)](https://hub.docker.com/r/eduard256/strix) - -## Spent 2 years googling URL for your Chinese camera? - -**Strix finds working streams automatically. In 30 seconds.** - -- **67,288** camera models -- **3,636** brands (from Hikvision to AliExpress no-name) -- **102,787** URL patterns (RTSP, HTTP, MJPEG, JPEG, BUBBLE) - -![Demo](assets/main.gif) - -**Check if your camera is supported:** [Browse the database](https://gostrix.github.io/) | **Not listed?** [Add it here](https://gostrix.github.io/#/contribute) - ---- - -## Your Problem? - -- ❌ Bought ZOSI NVR, zero documentation -- ❌ Camera has no RTSP, only weird JPEG snapshots -- ❌ Frigate eating 70% CPU -- ❌ Config breaks after adding each camera -- ❌ Don't understand Frigate syntax - -## Solution - -- ✅ **Auto-discovery** - tests 102,787 URL variations in parallel -- ✅ **Any protocol** - No RTSP? Finds HTTP MJPEG -- ✅ **Config generation** - ready Frigate.yml in 2 minutes -- ✅ **Sub/Main streams** - CPU from 30% → 8% -- ✅ **Smart merging** - adds camera to existing config with 500+ cameras - ---- - -## 🚀 Installation (One Command) - -### Ubuntu / Debian - -```bash -sudo apt update && command -v docker >/dev/null 2>&1 || curl -fsSL https://get.docker.com | sudo sh && docker run -d --name strix --network host --restart unless-stopped eduard256/strix:latest -``` - -Open **http://YOUR_SERVER_IP:4567** - -### Docker Compose - -```bash -sudo apt update && command -v docker >/dev/null 2>&1 || curl -fsSL https://get.docker.com | sudo sh && command -v docker-compose >/dev/null 2>&1 || { sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose; } && curl -fsSL https://raw.githubusercontent.com/eduard256/Strix/main/docker-compose.yml -o docker-compose.yml && docker-compose up -d -``` - -### Podman - -```bash -sudo podman run -d --name strix --network host --cap-add=NET_RAW --cap-add=NET_ADMIN --restart unless-stopped eduard256/strix:latest -``` - -Strix uses network scanning to discover cameras. Podman blocks this by default, so `NET_RAW` and `NET_ADMIN` capabilities are required. Must run as root (`sudo`). See [DOCKER.md](DOCKER.md) for Podman Compose and Quadlet (systemd) setup. - -### Home Assistant Add-on - -**Installation:** - -1. Go to **Settings** → **Add-ons** → **Add-on Store** -2. Click **⋮** (top right) → **Repositories** -3. Add: `https://github.com/eduard256/hassio-strix` -4. Find **"Strix"** in store -5. Click **Install** -6. Enable **"Start on boot"** and **"Show in sidebar"** -7. Click **Start** - ---- - -## How to Use - -### Step 1: Open Web Interface - -``` -http://YOUR_SERVER_IP:4567 -``` - -### Step 2: Enter Camera Details - -- **IP Address**: `192.168.1.100` -- **Username**: `admin` (if required) -- **Password**: your camera password -- **Model**: optional, improves accuracy - -### Step 3: Discover Streams - -Click **"Discover Streams"** - -Watch real-time progress: -- Which URL is being tested -- How many tested -- Found streams appear instantly - -Wait 30-60 seconds. - -### Step 4: Choose Stream - -Strix shows details for each stream: - -| Stream | Details | -|--------|---------| -| **Protocol** | RTSP, HTTP, MJPEG, JPEG | -| **Resolution** | 1920x1080, 640x480 | -| **FPS** | 25, 15, 10 | -| **Codec** | H264, H265, MJPEG | -| **Audio** | Yes / No | - -### Step 5: Generate Frigate Config - -Click **"Use Stream"** → **"Generate Frigate Config"** - -You get ready config: - -```yaml -go2rtc: - streams: - '192_168_1_100_main': - - http://admin:pass@192.168.1.100:8000/video.mjpg - '192_168_1_100_sub': - - http://admin:pass@192.168.1.100:8000/video2.mjpg - -cameras: - camera_192_168_1_100: - ffmpeg: - inputs: - - path: rtsp://127.0.0.1:8554/192_168_1_100_sub - roles: [detect] # CPU 8% instead of 70% - - path: rtsp://127.0.0.1:8554/192_168_1_100_main - roles: [record] # HD recording - objects: - track: [person, car, cat, dog] - record: - enabled: true -``` - -**Smart Merging:** -- Paste your existing `frigate.yml` with 500 cameras -- Strix adds camera #501 correctly -- Doesn't break structure -- Preserves all settings - -### Step 6: Add to Frigate - -Copy config → Paste to `frigate.yml` → Restart Frigate - -**Done!** - ---- - -## Features - -### Exotic Camera Support - -90% of Chinese cameras don't have RTSP. Strix supports everything: - -- **HTTP MJPEG** - most old cameras -- **JPEG snapshots** - auto-converted to stream via FFmpeg -- **RTSP** - if available -- **HTTP-FLV** - some Chinese brands -- **BUBBLE** - proprietary Chinese NVR/DVR protocol -- **ONVIF** - auto-discovery - -### Camera Database - -**67,288 models from 3,636 brands:** - -- **Known brands**: Hikvision, Dahua, Axis, Foscam, TP-Link -- **Chinese no-names**: ZOSI, Escam, Sricam, Wanscam, Besder -- **AliExpress junk**: cameras without name, OEM models -- **Old systems**: NVR/DVR with proprietary protocols - -### Discovery Methods - -Strix tries all methods in parallel: - -**1. ONVIF** (30% success rate) -- Asks camera directly for stream URLs -- Works for ONVIF-compatible cameras - -**2. Database Lookup** (60% success rate) -- 67,288 models with known working URLs -- Brand and model-specific patterns - -**3. Popular Patterns** (90% success rate) -- 206 most common URL paths -- Works even for unknown cameras - -**Result: Finds stream for 95% of cameras** - -### Frigate Config Generation - -**What you get:** - -✅ **Main/Sub streams** -- Main (HD) for recording -- Sub (low res) for object detection -- CPU usage reduced 5-10x - -✅ **Ready go2rtc config** -- Stream multiplexing -- Protocol conversion -- JPEG → RTSP via FFmpeg - -✅ **Smart config merging** -- Add to existing config -- Preserve structure -- No manual YAML editing - -✅ **Pre-configured detection** -- person, car, cat, dog -- Ready motion recording -- 7 days retention - -### Speed - -- Tests **20 URLs in parallel** -- Average discovery time: **30-60 seconds** -- Complex cameras: **2-3 minutes** -- Real-time progress updates via SSE - ---- - -## Advanced Configuration - -### Docker Environment Variables - -```yaml -environment: - - STRIX_API_LISTEN=:8080 # Custom port - - STRIX_LOG_LEVEL=debug # Detailed logs - - STRIX_LOG_FORMAT=json # JSON logging -``` - -### Config File - -Create `strix.yaml`: - -```yaml -api: - listen: ":8080" -``` - -Example: [strix.yaml.example](strix.yaml.example) - -### Discovery Parameters - -In web UI under **Advanced**: - -- **Channel** - for NVR systems (usually 0) -- **Timeout** - max discovery time (default: 240s) -- **Max Streams** - stop after N streams (default: 10) - ---- - -## FAQ - -### No streams found? - -**Check network:** -```bash -ping 192.168.1.100 -``` - -Camera must be reachable. - -**Verify credentials:** -- Username/password correct? -- Try without credentials (some cameras are open) - -**Try without model:** -- Strix will run ONVIF + 206 popular patterns -- Works for cameras not in database - -### Camera not in database? - -**No problem.** - -Strix will still find stream via: -1. ONVIF (if supported) -2. 206 popular URL patterns -3. Common ports and paths -4. HTTP MJPEG on various ports -5. JPEG snapshot endpoints - -**Help the project:** -- Found working stream? [Create Issue](https://github.com/eduard256/Strix/issues) -- Share model and URL -- We'll add to database - -### Found only JPEG snapshots? - -**Normal for old cameras.** - -Strix auto-converts JPEG to stream via FFmpeg: - -```yaml -go2rtc: - streams: - camera_main: - - exec:ffmpeg -loop 1 -framerate 10 -i http://192.168.1.100/snapshot.jpg -c:v libx264 -f rtsp {output} -``` - -Frigate gets normal 10 FPS stream. - -### Stream found but doesn't work in Frigate? - -**Try another stream:** -- Strix usually finds 3-10 variants -- Some may need special FFmpeg parameters - -**Use sub stream:** -- For object detection -- Less CPU load -- Better performance - -### How does config generation work? - -**For new config:** -- Strix creates complete `frigate.yml` from scratch -- Includes go2rtc, camera, object detection - -**For existing config:** -- Paste your current `frigate.yml` -- Strix adds new camera -- Preserves all existing cameras -- Doesn't break structure - -**Main/Sub streams:** -- Main (HD) - for recording -- Sub (low res) - for detection -- CPU savings 5-10x - -### Is it safe to enter passwords? - -**Yes.** - -- Strix runs locally on your network -- Nothing sent to external servers -- Passwords not saved -- Open source - check the code yourself - -### Works offline? - -**Yes.** - -- Database embedded in Docker image -- Internet only needed to download image -- Runs offline after that - ---- - -## API Reference - -REST API available for automation: - -### Health Check - -```bash -GET /api/v1/health -``` - -### Search Cameras - -```bash -POST /api/v1/cameras/search - -{ - "query": "hikvision", - "limit": 10 -} -``` - -### Discover Streams (SSE) - -```bash -POST /api/v1/streams/discover - -{ - "target": "192.168.1.100", - "username": "admin", - "password": "12345", - "model": "DS-2CD2xxx", - "timeout": 240, - "max_streams": 10 -} -``` - -Returns Server-Sent Events with real-time progress. - -**Full API documentation:** [DOCKER.md](DOCKER.md) - ---- - -## Technical Details - -### Architecture - -- **Language:** Go 1.24 -- **Database:** 3,636 JSON files -- **Image size:** 80-90 MB (Alpine Linux) -- **Dependencies:** FFmpeg/FFprobe for validation -- **Concurrency:** Worker pool (20 parallel tests) -- **Real-time:** Server-Sent Events (SSE) - -### Build from Source - -```bash -git clone https://github.com/eduard256/Strix -cd Strix -make build -./bin/strix -``` - -**Requirements:** -- Go 1.21+ -- FFprobe (optional, for stream validation) - -### Docker Platforms - -- linux/amd64 -- linux/arm64 - -Auto-built and published to Docker Hub on every push to `main`. - ---- - -## Use Cases - -### Home Automation - -- Add cheap cameras to Home Assistant -- Integrate with Frigate NVR -- Object detection with low CPU -- Motion recording - -### Security Systems - -- Discover streams in old NVR systems -- Find backup cameras without docs -- Migrate from proprietary DVR to Frigate -- Reduce hardware requirements - -### IP Camera Testing - -- Test cameras before deployment -- Verify stream quality -- Find optimal resolution/FPS -- Check codec compatibility - ---- - -## Troubleshooting - -### Frigate still eating CPU? - -**Use sub stream:** -1. Find both main and sub streams with Strix -2. Generate config with both -3. Sub for detect, main for record -4. CPU drops 5-10x - -**Example:** -```yaml -inputs: - - path: rtsp://127.0.0.1:8554/camera_sub # 640x480 for detect - roles: [detect] - - path: rtsp://127.0.0.1:8554/camera_main # 1920x1080 for record - roles: [record] -``` - -### Can't find specific stream quality? - -**In web UI:** -- Strix shows all found streams -- Filter by resolution -- Choose optimal FPS -- Select codec (H264 recommended for Frigate) - -### Stream works but no audio in Frigate? - -**Check Strix stream details:** -- "Has Audio" field shows if audio present -- Some cameras have video-only streams -- Try different stream URL from Strix results - -### Discovery takes too long? - -**Reduce search scope:** -- Specify exact camera model (faster database lookup) -- Lower "Max Streams" (stops after N found) -- Reduce timeout (default 240s) - -**In Advanced settings:** -``` -Max Streams: 5 (instead of 10) -Timeout: 120 (instead of 240) -``` - ---- - -## Contributing - -### Add Your Camera - -Found working stream for camera not in database? [Add it here](https://gostrix.github.io/#/contribute). - -### Report Bugs - -- [GitHub Issues](https://github.com/eduard256/Strix/issues) -- Include logs (set `STRIX_LOG_LEVEL=debug`) -- Camera model and IP (if possible) - -### Feature Requests - -- [GitHub Discussions](https://github.com/eduard256/Strix/discussions) -- Describe use case -- Explain expected behavior - ---- - -## Credits - -- **Camera database:** [ispyconnect.com](https://www.ispyconnect.com) -- **Inspiration:** [go2rtc](https://github.com/AlexxIT/go2rtc) by AlexxIT -- **Community:** Home Assistant, Frigate NVR users - ---- - -## License - -MIT License - use commercially, modify, distribute freely. - -See [LICENSE](LICENSE) file for details. - ---- - -## Support - -- **Issues:** [GitHub Issues](https://github.com/eduard256/Strix/issues) -- **Discussions:** [GitHub Discussions](https://github.com/eduard256/Strix/discussions) -- **Docker:** [Docker Hub](https://hub.docker.com/r/eduard256/strix) - ---- - -**Made for people tired of cameras without documentation** - -*Tested on Chinese AliExpress junk that finally works now.* diff --git a/assets/icon-192-transparent.png b/assets/icon-192-transparent.png deleted file mode 100644 index 90b2a5b4f7c3e480a3b15447fb2d79d2675292d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19532 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 ZN5`^ITILh_j*8}4{$4mj!NP86M)t->Pd=dMFh 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 z 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�HJ;SL& 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 Y!l?a - - - - - - - - - - - - - - diff --git a/assets/main.gif b/assets/main.gif deleted file mode 100644 index 4ebc192e5e6ed92637576877f8f3424dff62a6e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260899 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 S!f_Y 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%0AM>I9=OxPQb7!?3jIdjr5uiAnY|iKS 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%0Dg1TKY<0Os zAXOqLD-NV&1Ga3az(vG(Yi$`s6{2CMXjzyeX2$Cs0Ag^s;%C7!@5;3s8v6s)u67mXR`X;ZBYM3 z&=q9UWhzkCrYYy6e{o8EusPXE;oi4p?L4nbf9Cgsc1Ue(sJEN>Su|b{qjLz7)PQp}Y{81;7(CMw-;VA%; z2Y}pN+sqBC9uS;(SB)+&x22BM&s_8p{b_tpyxQ6Ibll%?(WZLk2QW3R0ZD9l9n@2m z(Nj~`Q#aMqaMVK)=xtW-ZME)g59;mA=cU@G%FDr-HJeVPhArosgW|7P@k$^d3$_(QPu{M2U+jt`JMh7hZ6 zg%=N9b8cUK-Cv(VZx^R@|8gDtbo7lTFmy#@Nb%v2Qt*(D6@0!mQ&MB%`hDYIS1?wE@jQ_tY5Wrc30-)cq} z)&+o~q;D64fvzusOBY8lf}>sh!v>Gx z-;KrAk9q(4{=MhBnGtXzb|g{Pls_2V#`vjo$@ApxE&eC>7)O*O-l0DpF(BYTr+4jQ zXkf7$u(a!*4- z#!LGqrVN1>=t!VB2Qaa`?aeQv+hMLB{KytXGYz| zWuwPS&Ke8;Y>H6Ka&hQhD7pRHbjEaNAU)^hK1=lD6j3jYmrw@e5M%GvAFCM2$@?HRidA@s_pI5x?skbC6MAKP+&FpJP0@(7G|xM?{8-aW0BPn} zzn(F({+_;0657bt+{k@&+Q7C^@P4DPVWW6vqm;fu7W(l;^GDgE9~B`#9N(?iykF-h z4|0W|@6IUQSdv+gy$@ZPwmn|k@Vf2PqLdVZ9x+|#L;eyO`SCsE*Vy}C6AiznW`51k zf6WQ~UeNr#^yv3W$nUlHzc(6w|D5^#oBo?7^k=K|*RbZV6zH#}8KoDdD7#^EzSp_5I7@RsQH zEwRV+Es4-AF4(UhT^nbPu1o z7u&c;nB9v%*&{aY`7f&2XI^0xQ$-5@)mQw>8LsDiR>|(`6LEW`r#V;TS`-U14+PY%e!hhMHADt*0z=DJFY*mwN2pDwKb?$18r0xiQw&SOAt*Xyt|^QgP=sCV|L zzvJYHDt!Fy`tk7Nh5p(2<#gl?pw=e4mMf}*bQ&kP_4yX+-2 z3DKm-$P5)g!oQ)yfj~pny*DPy2CwDJ-YecRap+7CRF>#0uxSFuX|NdowqaUmR`RGV&FshhQY{wN>9_anBjSa%V#OY8<@UU0VEEq{0{}1v z;(@0a1NQ$F6v}l5exCCT4;Lpd7Z)EF7ysF_0_V;Np6dL0q4Vd3PsPoRI28|%2rrL_ z0I#UHpr|ZDR30I!Dt19rLJW0LTtik|Nm}Bfn52ZLq=>MTu%LvHfVd#Pm;j#`Ki>sD z-V40{k3@NS|05or|Chx0c%}GxW%zk6^7F{?^IZ`TP!L;Va@|NGZuHGE!G$q!nbOmH#7|Q>jSHs7U;mBxO|OWUne-R#cT&yn0#j%4KEb zB~>{&^@|rZE=p_4h-=A+>BxxPxF~+(vXs8!r8~;<_mr=gT~)k?R7Oi)H58FI7Cv<} zh?((1shp3 zRpWNkS(=?$o|#=e z)$H8r^z45$HN7%1y)r(%GBUX`Jh41Du|geN>i)ji@qMvJDeOFn_(3j51FFmuLx@SIiOy{>v=Qd4d)_l*X7)t#@O&|}ZkO%%Z#?XoY zasK~djLy$F9SQ$~F}jktVE@4wPqdQ%4~!A>EpH%G?)fRkC@UDu(NB_j$x`<5Uij_* z!We}kMHZPZJ2C%*F$8PNe|CTVZ;at~^DE|Y&3|Kz+lw2=xc|l&-c$VMhjy%IA6r$6b%y-a!+ zGIYh1aH0QB^ZmIxw;wA;$NlCr%2WT1IzXvhEMAP~Rg%1(Xzf~iCqDous&$zr3+gzg zDsV`$vLnC{Uaf+=8VzD)vC8eVM5+Lc7S%65i~N%5&bGNSd4po)7^|Gkdx|kcM5wyRym?z$j}pHZOQEJ8zEt@T_)&krETeDa%#9(>g`-CE_<|;a~}mIAui7J z4neQY0KQTHb`{?J*PyXp9O`+uvUSv#^ttXJRF}TGsty#a#wwpSA@wUyNGBUB6kRIo zRvs=}e5sJVzsPazSD2(e?DR_u7b8D`jW@gk~_;aMauP^O5VbrK^J1&6dp@}-|Q$R5pkfhD=PpG zLJOXEiTN4@4}N3YKggEFVF&`5YLIH9i5kZA%a0Y3hz)$H^8J@t*eMq&tUHUl6Z2Pd zBOxrm?mZ40!rxDeV}hXv6bfH6%2)DMd4sHXny0X)TnZfV=qe9-CTCNacc zu9#ml4_JH&0ZVbSQbpRTol)xD^MX66IXo=k z(aI=Fji-t>WJ$mM>DfJ8{N}G4n>IIt1e%Eao1#HOB>q45bqh_;8tJLQag0~BwB+w1 zL_RINxyt&cj_;exbEEJUWpFb5E~Xnpp9y>P1R5^9p<3`PV@yZ0LK#4Qo^T$W8!aBB z-@uT1M?`BVN!zfq;Zywp|0Wy!IIT*B^0ApeaG{TmFIQ0{MDqGrb!rx$mXhPU!k7iZ zfV@&wkXMU5cXM@_8k@8pKHz{o#vpWl&U5&ya9S+!j}~J683x2#IqGkTAaeF_^Ys{j z{Lh<;@lRV!IGJ%M=LN-1F>IiP&h@%iQO9a1*3+34;FSX7gmyBM5Av>Hw?0CNF_BoZ zPUZe`m(&DC#d@G};1w(&$W%c^VLdcti$6!L8-GDi&kdkpl|!k@z5K|*1q!DnyKTr< z|HtYLTD!noZHi;?DJEW|^HX@)-ogb5_Jm?C91@IF-zA0%RNMBq71l7*6#si} z^Iec>u0ZQ&SwHob_fdxWBl(;0>6=NOt)_T2vS+x0!zaNpn-A{Tr^N*aj%Vkjemw9d z#lK0^F|-iv;8X6lXz@wD$hXldp^_+#SP6%wS4C=LC^5aUwp;==5f0aoxF2h%F9Hic zCDa(|8Eh(`ah!BPolfew(Xg!rh`B|=)v7?%6{z>F)9Q8Uq7_g5eO!!_zQ(0gxVrvp zE^3miaL}Rl9qUzSy1ofiJxfwv-Tb=RSk(E?Jux(w!SZy>+K56qDXzPD}!ltXG-9RVs7qbKK@-~Z(U3w}EM6m?q4N_hjJ=EfPE`Zw`zr%EjY96Y{+5&JOIgtMq>^aS4J89`1FZ zjF}T&2rP;6zirh~>P&po>+n+I!6l>kFUcNzOW}t5-4>cpQnFqxUwWa6v|8DE(_y$$ z9rgC|6XUP+v@T9ZtUwr88UHn7)o@j9a=$;I|LgnR)5`;g`vYOnG7`jSO`HFKiZ?FH z=I&e5yOuV1)dr>0UkqntWMI>VYr~cL){S2r43VJa1via0OwtdA3yjMP&HFa)*B*?J zeFKpg&WB)D?D!AII*lv7yyhr-5#ycMb>bq|#$MqIHvd{89{$V58Ig**NQ{t-e^IW{@#OR}) z&yv+YE$?2N6n^oqdQx!NUHHmWrs!_%BKc1UtgiiU|6=_$-T8>eLUUXL0XVLPcB}{M z0)GOj?H+xLA@nHb0xY@9UTEe0N!{9yl6_Whx@4Ac@B`UT2jA0cw;43+@0k2KXc=nw zS2dvYQ~2VGH&dFs4JR5jT;|Vd|FT`VGYwjph9~Kta(_cSHMeoSfeThAW9>J^w;s^5 zk0OSH4<7nA7*MVg(@!FgBunW#qm9cy7cqweZ`9`wfA3_xdAzo5UOURN6`aNvwLkMF z^xtae2`=>C==1505LOG@-<9e#<&Z7q=T?%zAm*@xn_;_^0Z;wIczFV^`-h+;L)la! zevNuw`rvcM!W)4PkWmR|9E-SI5RUAOkY5W|sES}Jz{pfZTnY#m)sH}R+H-U&!gzwE zEke)fM;=2W)TKfgq(ZLghxCp{@;HSU21FOU3Dc^Ij*^e6G>Pir4p&W$L`(Ub6-0uo zBAGfvuU3WsU45?X6asO=T2^7L18^!!(V9T)j3m}xCD^ARDts(TMI{8dhNbH><8T4t zPEL`8HLPE1bbv}sWj2nv8F#dbGja+Kx4|}u`149eV+b3*e-%?5zhWwn*}(}x(tVopg9DQ3N!P9T{IYBIDQ7e0%|%< zC4ofvzZ|bhuzMPz&&|CH;P4_VmxQsOkXZ*PkP{o$F)9P_%*!E*myDlb6JZJA9})H>xVOu&`^_g)^9e6phQ>;@f9cwcJ6J$gO4f6ohgp4_@0%J>+?7CI5EA{O$Lr$*HO_X&=u` zTj0T3RtQv315X;SYTBKil89!U6 zn$f8m(Z+JN<84O&^WdI+uD<<@;kPda*SUrsyqlnZ3>;nO9It*i_x$;XwAeC#<#|41V!j#)iaCIlQrLNE z;;%`0XAR&VZ8(I;IW5Gr7R%!3gUsSN_KzPys|e;9DHhALEaNnm(-00d6vPJwO{SCx zpy9iy6i`zh(35py?lmwA8Vg7n7cH8wU0(xpP!Ah zXP_WE#LvrW*{U{>&j4s-8gDwhOcecP^7)q&o1zUH7AA(TG<@9t92+|3YtsR1of=$Y zl68Q_z;qWTaSObI{ODlAmRG~6e+cti{-{PR<9h)w25_Kap-H52$BhJw)l{o9tfwEZ zG6d|KRK=A;))6$@-#Mrgn|?Va0VvN_76$D?v0)4<`_XI_6lhx^>jZ{v4Z)Tac%d8f zQTB7C5()YT&9)l$`2-Cn-G;WK*zR_-60O*l;VhOitO@+pj&W5ZUFDXPDyvPVsX)j8 z-2kGd1~HET`JzrMIhcIlz!Nxl`Zfg2U*=)DPdBBKLMT ziSMZCM8aE;Jq=;qysPAWK_ElslrBs)Upi|3zcGgTn`Wi|6JwxoE!zJJV<;K68XmQx z1=>v1+f0vIjIG->JQb+N`JAq>8H?R@>~<+a0XiPy1QSgW6r{+FhsG-DR6?j{H2- zJA6(thIN~B(Enfz*^CZ)$bVyuV(&2P|H2rq9k{yx!WdI+F9o`it-D?mT9bmh((1Z0 z)LY(8b&&+Rv(?ix)w}b9x(hPA^D?@Nr@C|Mx=RImzF2pW)q5&}dZMj+s!lORP)E(w ze=vs2QBU(J#;9v+4f+qpxRY@j5ps$#TKfh1hOPUqs`q`*=$oi(9;@q{IqLhO+B{w1 z!wu^-*iWbt-^+_x`y*BoOwXf`$j>bg|#1f{KV7 z<_}H}A&3r~trtmp4rh{>D~Q01FVRLSZ(s7hIXes9kHM5_RN+z;LS;C-`u-69g zyf6;MhrE~yEb-NP7&C-rsUl6&2KKf&eZhh#O6Eb^STn9L-BaM{x+0`W&?T+K?WJK0MPAJ*q_s@73k3~m%Pg! zc~^u0_h@YL9X}dMVM8`-hJ|znc}Xyx$}x;$sfqttQvCBtBFLWzdxe3lky%7S;AZxT z7~(JQ_*HG_hb9Bo)vAgrItP&x;-zD#?3hgJ&Ri1mix zAH%aKEDsI~f6-mkQb?x{&q$K@R|LI}iLd#t?+Tu5*1LmeF)YuiTk^X+k^t6eGDG-4 zcjV*qJ7kD6ilZxZY^7?bhR9GLldxR?DkY7nxK9B*-K{DNMCi--5jp<6K%8;L)_M7b z_gp8kkIJ0-iES1GibqK;rIY2>V6D<0_g}thL;lsf&uP19ElM~c_x|dL@v;Aqf5;I?C#Bcg{q0sBhq^GE@=dhZGm~MuOZA*%Z$9L^8@tn(cpSkkG z0uQ}`vzN*F#ldDD`aV`X6f-7$wPgNj(;R(jUdgc7v}=DUcpWS7V9TL9MecDsVGjcP z_)a5~4i>cBcKViQblWV*a%bb)1|mhp;t%(a-k3YKhk)0~m7mIkPryRfdzgi`m%=l> zmit~SeRn?i2_2VdI#;^14XxmmHkD`R#=k`Oo5w6J_hsJ9e57%(^lkc+5aG(Sw5Fw{OP+h@%c_2Ij1h{cvcoeOcTo{GG0 z9KPI=%rqtF@qZ|0>4YX)%d4HKEGqbV>{rZu8+zA}Q&Vc-hJw-6fuvUk$|dZ7uOr?~ z(!cdyx?8)|4>Pmg)K?p2R77h*e2a~gKSU)B9Igxxbe!Q9-|XkOedJ|$YsWMmZKS+x zYNP`zksrJjBm4K}O@-)W)7!h-pL%2yhLZ-VYI)`Ntu7v&HD$NuFuD0a_;|q7@RLB& z$bEC&3iBr^b>$D9W(r<1fB51j?EAgy;HLcjcWwr2Ovjh#WaT zrT5&_wBO?9JMI}wPn+`NpaI>=$2UIhDBB=+#H;44_Rp!<4jtTTza4h&->6ND8@vp+C(tX_WLUM2?G97jomH2 z%IWN)oq}~CN6ObH883(L=H^>qtMTWYlt_~x!Z#kA-`M6-)o!ToYQy0~z@OvYxfe}2 zLF$1fAD$8HV0OGrju>I zhEj95y<4!`mtKK<#4bZu00MkVB9&^(9_Gg&TV}4mjqJ`%m=7#-y6q&Wf2)qrz!>HF z{jvCfUJxf_utRa73Hp?9DTL>F^wkBe)1MAwOp6TxQYon|5lf8XIW5!iB0@y<^H`o! zbcAv-XC!RoVFYinW#HKch0T`FB!|GvGM9?J6ypzq(dJJ03P zwqd;x7toq>CV_?N(iO6i zU-Osr{C&qbKD$)pQkGCc0Q<%4tnkiaZK+?31-mm3(gN-~y~kBUGzD|+glJ>W^-)kL z@wD3TSNWv3(k<#`pE>+n?{bV4w5ik$5~fI6VlxF;af(TT6()}li!jt?S&a3H(h;}m zYSQfd_A)qv2|5SBvbg>||2_jDT#vb>>|+beURq%+1;t%&JrnN?x63v!H`Bf8eYaP@ zj8T;X%d&zaNLerlLI<0KP;(#)^*@X|ly<=&c$}l+Hsckh+X7pD^avF~4ongseI?r_ z^8WTVBZlYZ<*33`oSqMIe+?_HO=NWoB7L+8-#Apm0L?5wj2298ZI>A3OD$K}m*#XH zW;ccJ=lx^+hhetO-o3B8x6Pl<#P;Y8HNjT4La5yArYo-+kElBSGhEzIGfKo%Fm?0G z9ivv3@AJ$VuUcSPZKb3#nY3^B9YZDof0T;n!}sUUS4bjT)Y}aHEEDI9ccL!h6 z0v9v*7*u~Qwu9OOWBq1qbTBM(N=TFAd)r*q#Qc4z$i6czsGnc$ZMTb?YrUm8-< z?fj3Ue^>Ct39_qY*IKo_N5GywApHI5VtT@fmGT@8SIvHLht4<}U^L0W5hA{z84SZonQvVdU4Z6lDy7dR2$-2_^-Sm04w=d0&$Dip%w{CFzPPD^3!xj;A% z3t;QM)25A=4b&iNUUKkZ+f`YS2z9DUW|hF z;G_G@VtMuQ5cF9Y$QzRdSwj*|IYf)KB`r(f_9H_MORe}XOW;22nP`x8xMh_i|B zv2XvXKjZneuMnK?Tl)3cvw=Cw(Z&XuPuCWo*>KmsYktl8`DMMUi)gJxx1(R#n{`(L z%4%ZtpLqFYJ2zMVYp*9Nm@Dfw+)X16g%>3JYvi2WedtA#(|!)Swae4J0RxjWt;Nb& zSI%_2*u7>nCxoh%2SKcg1A1rmzc!wm5es8Gx{{A?2lGXOG*o=&xiixuxK=PNRSRdl zq*i^K7GjBiuL^Bb!Rp=X;ar69jLm{pyT>8Mc2lbzUH;Dx2BFSV zw!%pDCQV`%?!H3~OpO{TlRF5}Sew6C)Tt|kl82_@v|x(;9#;!IAtCxL3)Y^$21YJr zkc2-7_n!LBzoVV5)ZQ1aN0+q1TF9w>sprP@<@nm0{&00>K`&UmSO_2TTin*+i5|C7 z^-m?#af8n;t3#Gm)l+e$_q?ObgVsV@_7+s=LR1*M9v>FXOun`a^I2KuW7%NDt`La+sTvVg-B|-yUC_t`hDu~cPQ|KVArM<>577ARk zNwTYf%T&whR?|73reZ#=Q0XS_+$I+1Ccaj!U$IRgZ<_?RwfOsObMldA+*sw7L76>*E z{i;AJ7<9!Sd*;p=`q3g6?ZJ zCO-hqjRx+!z~n{)grH@~1rhr-(p^Z97ySCux*JwLT-K(9KvK22(v*o6HTOWhzqH;J%r~0IR7!- ztDE6o2<%*ExWCHHzvKun8k2S5?Hvn9oh&SvRN72>-*y%n%>2cNxr+@CC)1n6v*HVDwEF| z_5lG@invjv#-NpqAB%|o*o~bPVAntDtz5vl>thWgqqq=}Nrl)6ms=zxxHp!$L7hR6 zgmXtpH<&^m6vVnBG&{l~{Q(gF0GvApa$0`tu_t@wVgw`)=gJIm0Yr5GAs$q0(=d*E z1pJ7`W*P>5LjynEV^vA*!dLaT;L#qP;D-PHcp z_=zf}7GOUb);*x^79$wbi8bf>2>c28GKQUwVkVKn5PbHy`^rJyl{m_syMX z)M~+Gl0=>O5*`A;VJz@m`q7mbY@Hg;bq#z?BV0j6+8JqjgNZE&&uqfTCQO6yT{Y@h zjCG?9Sc?wu$qzKElsrO5yGt>Ks7U$}8PDv6TLcL8Ni%ZN!hKF{IaKU$vyS;uS91Zx zk@Q~ADVnJsVrx-UuL{r6Ha_yEipCjNs=$3M5W?t7ot+FaDi94!BvW>OQ<$+T8fS+{ z2ti}vsrQ`lQWh4Z;3L`lWUzDrgCYR8e1pkjEgC+?fT82ryu%pJRE;3y2q9tM3kBgS zVR2k=$g?n@Z~-pL`x{pPlN$oI_^iE2Dsn=RL9_tUT|27J!=Su|ZC%5;tpU89up(4! z1r^)(1$YRI`=v+-!VlGT$8(W^QcrYr5#go<*j5zC4bI3FFg_u}6=mi;#Qt7@j#>crgi7jR!6dj%y&rZ9LTPW_&QZD*6sqVTr?GKUUv zod_IEiixhqzUUqM2#xZ#Fcvw)a$SYcm0OEPig6t`n4V!|Whek;8u;wj{?l@0NT0DM z^TXf*Yck$KkcK_q2B9euMg$4>#;{zd=%;|VGd$zBtg(E=o5EBq9|d>$s!U(fcr$6d zX$_Y)E$28^lI9lqOrPBhFw3=O%wGi=3bM>tl556*Tr6bG&{!@^SLh2j2LJFzT(bH}OivWm60M54x>#s7{CqAgO2bK_raD2D%AS1n)r3Aw()Zo%{+97ghseefT5?2$+S2DA1qffHs7j0(_|Bw_-ld7=Fux7@Y+Mh z^%8~`V?!Yrqa`={Upq7R;vOvj!ZB%tZ;Fo}=*~{Gh6mDYSp<7`1=+`r?P)J(TgE1u z*JcIuap;o8X_wESM^;Q&QSeL#B!2QHNhnrD)?+QqEDRj-O#oM555K^ECCs3iW&^Ka zI0_tY@*a{1k%5#T$W#U|B+}Q$mfMjaj*oQ0N0>8%WeRRIhxOMQfV0$a(j1=|%$5~z zLpBWTnr$M-nAp6CPssW>=xI-QuHC4&t*l?%Jv_KA4BtdlTQYkj?>Rg9dek=F1+ zvoWv%A{<>HS6RR)NQ1cT6*~*D^YcI+BO`rNAGV^I+{lcAosjQlV=~aEOU2>t2uOht zyTBgSehhGT4|_@t<=?mZYc8flKYWM?w-^KGyG3?3uQnk-9@J<)Otc%GEwtUf6%|SE zF?bzr^lEO zyYL!>0AM_GbLWZ^3zwi$O~LVbc}_OQr%cHMKPK4LyP;<78@Rg*N@1= zTORtfCaG{UM4ZwNgGmzeHE84!|N4!x#Q{wMCv)_NwMd_W5>6>+ZBx25narRzeV1$l zEMLPuw6Xkh9w#l#&S}H+Mc-5qE**nt<0E$IwaG0g{g$ws9w?DzG&oY#v4d9MNP={vP_hCiRf;z{7Qmk26*cRv)F#uQ*x z4A3!a(sy}U-AIOs>e9$0b~{F}6e;rlu)w|;G}vju>!(LAa=i(|7Gr_cyiE9=+SV1Y z&?OZf<;xySTniS62qe#N(HQ#O*~fzXTLUIOW>%J(MvhoAMcujNga@91GsvUlTf#uM z$s;dR467-UxM2TR0_?4UW@mVS`5J^k6$E({)P>X}T!*DyPB2HCzpGqXoHNf>4(!%n z%-;=nr~3C|KyFS){zC>K1+gwX5H}~tlnlEHwUHkGVo>n-mePu35L&9yp z?mlc4%9Cs{lp;=OeY$npo$w=6R)q=A1)Q|59qqGH3MI&X<}C(9VQ?C()=g$_D)T6`wj*+ozJ5Y7AFKSVM6)+1*Aio<7f zxJrXG75(*X>vOpuYfbJG&s9iCb`$T>eY7(xH6$61)aH>hY-&?xF zY!VJ4!K=&RBqiK4X~T)P{0UdRVi{rO#FiK9f)DJ;LlI+VzLZ{$`Mt{E<*oY$5jcXd#I z$?N&p%e&1W3VEl3& zAf4=7TriDO1T7Dq1WA`5D7H^|7apwSDiB1r!hh6i>naWkXGK1jAsF4}Q^?A;F{`L( zFT)Cc!PhEO0Ce8zY`z25B>@5-$nEYE^yUq2^LF_LMWqzJ#>y3&Ou1f#9apmbrhc-% z7Kp1X23+#mEs5gSQyYN0*Jjg_{R6JtRe7h%Zk!CJWr&xXvJdIR68(uvuU+2RKd4JP zp=O7+HOzaUDSmP4{A<|u`4Gn|3vP?Rt|!skz~35Y`+2KHuFDvWsC<<4)3&Oy z@9uHFZJ#u#*A^INelEOhL@vo%G?VwC_2wCZ^_@QLC&eN5-Aoq|X*FSy_DjYuH6Dxu zLs*ovdT;O-sTRXEW7x2~tGD|U)-T2At~}%^{5DuzIn{XU09i)S{&&EA9xk02Nz|K>zpwVtq^t4ILo4@%u9!fyR6L z7b>t^Z?~Ta=^b3|-r$3<-7*uB>0lTHN%Acj_z2E(_XDSy5M0utYp|#b-Hu2Jm!|;c zzGX0^D|r!fQo@C|(O|D>zSlSF6Qo&-t*7W*nl=;?|5L2|>jj9v%WDtwHW?Dxf zY+_XmM7N*mfw(8-W;j6fE-JCbpCy%|TCTEc&6Bl^>h}^n#-hA8olOsK7`J}Q4CJ+B zz~4?5GCC#@AA85-r#g5F6#BU=_BgYcyo3HOWs>#LS;kC#GNh@Y*kBmBqvcjdi# zBK8L7QDv2~qJU6XjcvbO2xp*%UBc^_C*W&-4ADj2!uQ@VUDaqd{)3G|!KY+h$p!Jy zi>d4$-&Y1=h#53$bMaSju14j|bN?63C4$e*wPq(WZeS>P_hXVodew9v2-}x_8BYNI z1Ij0$a9GeCdAt(8{Z0S0628`}5Iog^Z+xZ9DEf_=?yZS~15B)x;WfORl>^>Y@UhAr z1sgBLw-4LQA1n3PTVJbwTl~GH(kPUVXaPBiD94a<_*ca1r%wZ3&vEqV*(8%tX2g6?d(|5yDU(brlZ*|X{T zMeoDC2KckPf0c+{)gPYkYc?bpDtms^b!k1-X4sgNtEIrt6%}x%F~28(D8%!Au)b2< zH7;IzpTKuM2Gsn-ugcxBqvn-cwI#MilxL5Fkq=f?>4&P#EtSN7&hX z9oztF(m7vc;3;nQsAd6jTeI%=7vbCEm<%fxGdVd-qPUdOcpu&%?3ZD6zm-f!g%Y0U6$nI{Fc2xJII8Oz9G^8pciT+T) zX?S?j^!vyQ8a%$Y?5Z5XT$NV4qA6fCD)=~bVQ?ZnFhFW}RAZ=!tiT(7v~+p7**fR6 z`f4Diiv4GSy0%e8%DuR(R~dI(ZqF&(>oCehB;@IQ55r>lvrz4zh44!K)4cajnNOAO z@8JlLb*JW8shkqoqMx+1)?5#XaA`Yu%>(*Q6yw6i-HVCo zI!R|ZH!>pi28&++E8Cy?6CQ;x@xKfV!WnH4a1{%u?%hnB+1^a01t1of34S~1fJcdx z_KM;mtqwAzG;aYp!>jf5z~e_yfv(uzT7uf-L^^n#MNI26=Qn7xenHsZQelaWfx`(u zFUj z4!}KAXvP)bm1&BZ^|$mN8JO~)!vsArErIsAC*(6RK|&97F!AC1u3b+N@;!Y|4WOry zc27k&gU7w}XE~zbC+CXho0~#GKH_sO66=&_(-C7A9Ue9hB~E#i$o5=DgIAIZwD0^D z@V@&)eC-H#NJqy{(M$XOy;!mNx1Bl?D5$1v zdNfOSkHp;nxFuq5aWs*@6PRBb*fdDvC zU{@-l1dg1O&jsurAK(&dDJwUaN^!$n2{_HQSez!$TU8XKP2?N=vxV|S$XBYXF0tzy zir4u8EWwHQ)WS6g+FF>#?{ z4761|TBKyb`5{`gp62)z?Vrr@^aeXJGLM@mf?#_GS)>X#nVY>EoO4O!4oJp$=c4+? zlO1_X{T%T~PD!?u!0G!}=L$uUaoS1Ziq!Z*$GHDcPIZJh1P0gqd_nUeTi71%em19? z#dvbVJP(akAKYiUhMP8sQ|eo!cC)EZ)3o!jx;h_lRahAle4$Ifthke$UB6s{r}(MQ z;`KwviXFVh?1jm31HdU#9Yk^}j>N7|#_ce|o5qqpjW><4nIe{>CWmb?wz`V!x_7+- z!DMCMa!l3I+yRRRCVeel%INNW?%`MZi;~=!bWDKYl#ZkE6I{R!T}pH-b}F=dgF9S6xFE# zqcjVRExh4etWGXY8()AQ&u$23JgCE|q!p z*9lkw){=Q5v)#L6)x0U%dkh^Lihp;XmLpErfT9AzJ7}0*uf+*zE}DYM&16T^k1})` zlJ%aZYF~tu5-57!l=8W_u%p*H7J#e$SpGbm7AfU=-xGCV8$*LpZFv_W%j#Jcv&fVz z!;UPNs;@o?pr20H?p@LLo3%T~h)lt$bH~Atp!$B4urHXPaGbAQ3hL&H^0@~NCg+X4 zEew;KuO9U4S#T&DFx-k*bq!3NC0{$cC1?&iD4}feQ&yL%*lLgGUP|VQJae(`CE}7d zhDlBFS8h=*?DY#w$2%SjkKmncXzCI07g#(2P6Uf zl5py#{Z|S}hAjzMcG*FkOE_@3>@7g>dM}4&`dRM&U;=xza6D}9vrNj{hsR{SZ_W@$ z+rSQad{wLl(MoFzZyZ3mP{68AV^uF^x!LQf=#o)-jD=MI^w+)d9b|2AJY4lWWSN31 zA}Nw2?>SSD*(Sw$FApsLsz6{xJ}}`Q}v!OYNfpk zlX{huDZnW}UaXmzs|okZmAxz$osdm!!7|;83T9g7!B+jUvG=9cCM7WtzHpq0DSp|} zi$~MEc(P2ZO6pb;Z>Dn}Z^$6`PqrylvbKRKk^8OgW0T^u_&G2cP8AV2QXuxOmc=dt zy|*M(Yb7zZ!WRKtyQ>x6pVcssQxz1IxQ(-;7uD~^DR|?wy#fBd6b(>Zk_pGREnHHs zf6R?9wJz*>1}R3ZjDpA6A6?(z)<_0b4llSjCk@OR=WQ}-`?RJ5j9u~UTGi~PN{$CG zBR||^8!ln5zdVbg>8I3wtEM|GL5XzibGDymQcKn@=sO$E2>Q;^^<7r2$r4h*=)MJ* z+&KTjr2mChI*!`+-(7S5;%!tL+owVnXa&wl=JaKQT2(s+4axzX!mVt)mDC{*Dk|co zmxj&?FvNrOivsj2w%h|4Gl#{zgUVg60-)PuQDqU+Jv*bM5x33(qcu+DVgCu|{@VI1 zy(6}hWAPQ!3xlg(!>KuK=Uv=xw3~Q(nOz|oCzU=R?V9k9-3}?~Z`K*uepd-|hjBl{ z(n#6FkjbV|FxBZMonJE4bvHFctG3&-|3&rrb2=(`Fujk!E>Z-<)%vC4+4*wKwWJ-} zFzk#|W6%n~(3AS1*jngumH?irjIS_J2`Z=>&031UC}`A~?qw`Hun8?QG!D`zdsyQ* zz<1BMyAFKl>=}egEkKbw}Hzh5@0$aaT(X0 z%}wpoYT%x#RdSf*j!ye#0L2z^d*@gHxOiEO(kc&ymF2qu5B(Wpzi^r%V@uFQLl*|T zt8eU(Bql&tDhQa2rl^4F$d`b+xXK77P7BG13J07C=|v7RfJ~C14n?Sfq3^wmt5O** zVNrT1am+_DQ6ul-Tv&CG0EvFOQTL8dUI_RxSwEy#QMCcz0QgfxLU!Qvw_<<&#_6-* z6gpmBwmM@P$ENciK)KpPe|SRfA^j z00ZfuldHFHVDuZ_&a_dys3x|b*^Q<&*v2SE#{KfsKlH0!;z@}{pCsDTt`-f)8t(Kx zKIpajk5S);)#tJ`9&UQk##ruVHEf~iUyQ|YV=r9jQ@FTe*Ga*sV)X+O<)_sRl8#NG z(~L2be&K)?{Vd^^i%fu>`%fZ&hVzHTc@I1xtWk69RSHgPm+g6>Gm)n)hFRafUhieE z1?JQ8xw3ERs^uHJkGrOI0t04ZBcEAn`8|k?iEg`A*``iw^KXwlNZwD(ZoB?Q>p6Y@ z@`zU8Y9wu1%VWJQ_<~lj`ukv*_DX}+4T)d3gtbG@`~q|Q@>SCg|CbzUt{ri{Km3Ar zq;cEjf5gZrZS#xmQ5UpN_VdCswQs7o-z?P*t!%#~pnbdjSMYz@F`I2MZ?pqHwBPB{ zy1Ux$zoUKcQQN(L+J0Oeq%bYAkdCi}PVD)%SYucImd)5dj+7d6WsOpdGAsO;SRp`Q zg;!PJ4_FcrWK)t3+<J!xnSr-4m0X6Flu#yvB)Cu*3=XSL&_t#p6+KYv@( zTPm#MMr2)m*I0+^>lu>2GDc$c^s_cApNX*;S6PdtP(e3 zvxlzJg1Z~JW1dUbKkzIzz-4SkU;UvI`CLFr+0}5%M5+6-s7F?AO|!`^MXi6Z+71sT zuwBIrx^3aqkcU)jcBCT?J;hMoz*(4I(X6Iyui!q}vBRl4+^X1wRNln%HH^IYm^@B=Lu zZ*SG<(@Yi)Z~nxovN&kHWW<~G*J)u5b#S^{TkeAA{`+^k*FCP{W76YCCf-?CT_iw< z`dg5dfrw$C_9*|9UuPC2YIktRHXh*DNc!^oT}vL_V}Fb%x-h#G)q|4)L?5?`BgeDp zZn1GrQF_~5w29;C<3}n5n8i;A&F*^tHJE5Q#zL|v{c?XqRW$~A`V-F6*@F$*=ica$ zVn#Bj;)W7OOIeyfK2)kw#TT&ZUZjN2^y+#)$ETfSdm6?>(kL^jgeIw@@ywZI0%f#{ zuI)F`%4PDF();$mSgj6RdHAa)lS$ykJMSORinv_x5rzs!GuV$h*D!tgu7|VN8Oz|t z)Mj9PRke`hPub{50))ri)H2C3o;sy-16rMJe~CAJe!Ax~$`YOn`}x zB13!+pgI1c%7yK4rXJr>pc26LL;u3JH>|p-dnaQd7Z9r_$dH|)17Ff*Tl%z#eX>&) z#zY*NWTFGkUH|v@Z7JnU469)r?tu+mu!)v z(C(;Qm*1YkITOj}cT~5O`-XNy!q9^&w+(MkeqCMt@L#F%@!a9QDdX9HtU%>)%yw15OA*jSZ%=Ee>nFl8nTfk;jYr>LYbNG8{Y*JoHPd|bqjyKGd! zhCM+#TY4~|Pa)vGtzi!1?THEw>zKdT!6|gJfj$Ac*LlN&>s~i)Fss6fJH99=oSaj} z|H5Sm;j5~Q%?OiZWXm9ykA= zeeW&7{BaUEP>*Nq5FQ|rqbkf{0A`iQ@*C!Exe@CePJ&pRWTM*WWPx0i1gSg; z_VPxjz)4`K)6){M>r1(%Yz>~D7BWr1BqJ*rUN_{~1*YG#w>^#(MK1Q~G)2Wa;sFY_ z2geDL;lzxwv@%h`ELKm&tKK1Z={gc%_F*nh#cY>>7;>@bdSZ5ZNFf7lL^Rc@dR(Ja zK;g}x6peE>rzLd9iXcVfHMBxvRj0}kuTYn8p@hs!_-p>7Ui0*2LPkKi^yz}JIoB70 zP_K&~5^u&yYZh1aO8s!6@h$_}1(h&|%UFpw!x)_Z5HGTdA|%Yqp;IuFbt`%)8mb1+ ztsrFkVAfB?jAM;7B4h93%VAzsiF5u;4Mj>O$*M%_qz~3`4RiN z>q(W%RA>Z|%_m+p4t+QQlbAjuo@T;@yY(&gib22F*Q5dLZB9N1YOur~s>Cs_a3Sp; zkWx08Wu~F3mtogp1^?uiC~4!;mq3lZuDfQg)kMz`3s{252oDg49}8-GO92c+M1@~` zgJ?8*Cy9G;^Ot@}xL!nc|JaMb%`wxxcQ+9|@+L|ZbXK*C6o9nFBW<>cES-*;>!195 zX*^%P1*>a1*~s}U#Efe=3wlY%TTsP&cOHm`E%?%MODjGl=zSXS7|sxc-j6*D3J<#O&^$NW2$#f9W}E z>}!dI-ezcw`lM68^orjsEKLKnn`$c%@L=;V(V zU}Q0N;z7c_oAsMCg-+JHr;wLb)=X%86;fI`4T8-&D%In@UH?i<_*6>OrAM!KMm;0{rhokteCz0Du-U{{rCcF>} zNEzadpE$9mL+`O72F(lP)6hjw9Ivg2Diz4S zB>mEZF9rkeU)WyE=xiD4ygc@`t)_htExcFHnU4bIP^pKn-NSS89l;MKm| z2~pPR&0fe9fAVa#o7_If39>?g8|1jY(uFZZ zu08V0TVqJ)*ux?$dmIPipnt^#1Agi8$BxML-Q(x1jQkqsnoa%aq=!%nm9u~aH%Q7j zviLjw=H#BlVgg2=&|qf0TvZs$29$WpI_f)Cq=d>@#9~_Ya&1F--It+%h()$|AZBR= zo~%gGWO2J8K}i{8HQCCpSE7$5@h=-aMN^%vfJ;6`RM9zGX<|z#1nFumNEVu7j>y0w z?L6VVbi^#{DesfL@r1J=iha;7``54RlNe+X*7AL?z*;4k@p@-ij%$`nyrs@3jV^pV zO+${7(Hg7{gC0oFgc(tPi6;SqW((+9^HU8u03D`4$GMNfW$dpBV$L2Sqb%a`9uiEN z&3Bq=R)V0U4?<<|=$QU0BvY)DRb~eU?PT?sC8|j?xK|{m5L&1_?M8oNqLP_Gi zXhhqB@TfG@MgV=&4i3WI=<8LV0Bx&qW^n^TcWJ7fHqdU`jp3^jJv0R7{+CX&iiim~ z=6v)1vw!uA|4fuv!n_sYR?(5Y(MC9~NTQq^O)hyCMQXZ}kb_S7ek_0gJA3|Ffx_#gQhlFW|0z!2I9b2zzI-@F+$IZcffl}e z+QhX?qUhv97XvkGz`S4)w~>M_(hQIqVJJtOYxrpw+MQ5zwp+LvP101z*Yui(c|^GR zQlD8DyZKEGi}-Mh$9?8<>=wxymU-cpB7GKccFTtvR*!SdiUl#$aH~cQYq1Ke?Io+$ zJ!`t7aYwFUw}#EDJ)2ivHUs506D_u%9QCI5^rrW0*IVoorR*BLEUptlePeciTQIx1 zx+{C=I23pf1sY%N-w%z<@#Na45;w|#dsMqxd^YK1dOxNkB1h47bWxR`_E=5ZZLox9 z<>_#$`0RpMKbcrzDN==!$YMPw(I;4jHQV&$GNEg{v5R{xFM&U!@De4?egC|nreiwX zkS)SsmhDtN&8An;Z;PhpvcO_(2is#hL||Z!=z-dZbA2dKB-1T@fba{oW!HN`!iSyY z4fk0t;ZWfH-eP$Z_#7QJ?s35bEwzEJsYP9`v4M5JbK9)os(m+S6bGz*$4;1 z!9nT$+e1-wUz&MqKBXkz{7f~3XEmZ~=~ z0|+KR^aVNGh0gjLE#ALy){Y9CqKPqC#ZusGA1e_Bm7E7;pAXoWq}Y)vR`EGjTO!$K z20P;2B=VX}zG(NHpNyVnBEDvNL9~@}BCz#rlOQR+(O%>p3HY5ZGEJv2iO4n&em}ez zTa@#4II_{heV*BZmn+yn^CDu;mZ8*6Ed-VIibLr#KuWE!i9cdd9KVCKFc<5q5I?jP z>y4C1L(A($pkp4OiDVJgUO^J4q`8U2DXE${U$2I?f(@*&4OQ)_^vMEa#~xWEx>6z^ z>kMm;Nu4?oS1EDk9iw0NA~6fdNHpL(D}OjqY@QVf#zF?se!b>GQ>|#fcg~NmJwReuq+WZp?R8(eF#8@k^2)-==ny^~liw5|f zm7O@I^D$WvFEx`iXB7C`4eQwidkcI`?Imu}BFrAZh*%L%y!}e%m6r<_ZYcR3Wu>Y? z5Z=$D@{=_rbkb!y!l86LPWM=}FE(!sV1>Pjkd%la$BD&e;yTnqh!QD3^CT9tdK4sH zTbwe{6<_%xo`SvnAy_nI*{&(7tFL*nEwWwfX0h(gq_(dyXgn6ec=4blSe4v zYyvTe@I%JlT#t*X)f7Wvy{@n#c2OtQ+9h?6pG~iEl!?s1!j5R7nCXGR1)<|Tl)%}t zm>|7Vo;I>|=#$q~JnOkC+^cft_fv(k`(A(&*9_m&WZW{z_u2x_BI{U-u6PJ*Tyvo> zqz^7Th7M)cD51AnM1;yv;$HgYR)8DrvmGi8A?bp99@6rV ze_7NVBT}oD0rn?1=1D?>SZgVkT(gA^4p@X=8-L%Jcs^?pO|J!EQoVy~G4zzRwTHe~ zn6z9^O@!?v3rU9RY3Zs~W#-);$eP z{`2BL)(`Y0N^f`0=yoc^bvC-+uS2|P>gpPc>gwt58u;Tv?@}(jecV0KWjgjq`L%w} zCw=qxU5=k`zsT$A_}197uKypG^os$u|9<}Y?+4{S?5SR0j3vjMF35nMxYzsc0$t3& zLS#G=sOK*Ga~hxg!GjY93&&|YAQH-h#H|b<*kvO3yZF0a}tuD)LtQs zP+S*jqTT3+28(g0J=njK1cb}xbvf-%6^rU%p~o+k6<%Wz;9TY^PYSlc|ho+_TUkZ)6i%%K0` zzM{~1cm26o`=E!A32DhS79KMoEbO$sb7}gD&bv)<0_522$K9B(vQJ`_{O_RURX*B%Qv&_o_;=ILCG2XFRGtZR1zl)Rx@}%3A^uSQ7LjRgY-07#JeUD2VJZ8? z1X`gMAs*~Z&SzJ3K!wchE3eU>|Agz8kAZ~c?dP8*BJ*YZnZOe2Tq#jLi3yxzBKDX- zx2uU5)c$SO={j%rkX}I+Nko#s&s)ERf7VSWYkV#%;yrISk(?~3R6-Cs9d|-H(Z6-X zeYRpaTiUwNAo=X$(L81M&X{Z8xH9i)T%YYuRimAbHP>!n6**e!;zxXxHyo8(7y|wDYq%fRdR1zS8rN*RiuCW7_8T_Hc=sG_aaSC zb7k@jgLxBzc$1Z`=gFAIP3~VmHdGo}8~l;iy1USyijcVL)*3qYF!K?6gi`08yOUB` zqo$#rR8DKt=dzZw(ETm`;z!1rMm>jFBM-Vh%*6B@{odRB_}{(mzkmK}E-n3o5lL)N z3!?eqxAxL|94f;^3e;$NhRoeriHbXQImshIG)Q_OZq%v6BS|vDV)2&Ptpd>`nfhVR zR28#G$&?3A4?NSg=99`T)J9!I(shryy|a|Q4ole^fs(y*tW+$#vv*G`ltOQTIeqdf zk{v$9*y<&}&1U)fBgvu?Q%*KL^z(5rUI_OBTOaOuW}h@;OXe7X?(C&#hZj}=gbKZL zl4T2%RI`OW8`P)pB{AQD$8tq!%!yKxFWWjW$Ku>N{ytl$c_ngzMUjeH=e5>cBAN3E zN4Zoeic63*2F0S7`+TtIxomUO)=%`0Rn2bFgJR|mf?Hy)p)HKMXr!~U1mX+zwX|IK zLYjqMMRSsAutl?j@InaXm4uXsM+SaA)GNJ1(8t5BRen7zU1i8kBc&@PaO8_WZ>)ms zL*KIJe8z#*j-0wf)lFc|i23zwWLrSUq)3T{qC5>IR=5UC)jIU6c;tNR+7r2eLd(h) zH+Ds6*{wK=US|;jXP92ZYi9f|{Cu|JEYswT1|t+dsB?lxO-GAwXT8>MOIsSlyGe_| zbh4wT7|5lVx5s;Uua?ks?JvcsA#L1Mf#Hb_`RxpKpA>Y9!K|RC19DQ{rml6`f9$lm zN1Xno{3}O6vrhN|(@I9+oob@dB>RvM~`(52t*oc3o$<1(5qWA@2{p{K(i~(Or-MNQH zBYx2)=6exS9^a5*Q=X}(1>W)9kt=oy_=qn^lQ;>`iW)oYg{z91{&9989|H%?gG0q{ zu95GFpRYQ*3-rUEr`%qPh3Gs=f_8H@hiAo0X*MLP%J!xBNB46U6eKCM(8!{DOTls| zQ?0D_V?KYlq?oHdt5OD?i@k)(wNARvsT<8E!5b|3co-qj{ho45qmJ`ggV4)E*2-(T z<-n%u(Z8}e90ma#?$u-OS}L+@MeMwTHxwQDPEP`E+oVg9Ydjlsb@)_uzMV)ZD19*@ zH3s7uk}eiQW3v1M2Hs5epOR&Q9&FEtZK1}0RLwLOZ)9A_Vu5fzN;33~1YK(Yh#Tss z7#$_0h8~o$3u47gFQXyuFPB7~6(;HJd1oW3INlr0gC4VdF!wBqa8?dQhsg&Elb4p* zB@JnBU}3)U;M47__exx_;=ugC1M2kj1? zl|PqqeUI!rdlJcML93iy13VEFVQ5bMOz^LwWKYPSH$K%-Cv$8f`t4wFD%1@Y{nASm zRUv7*oCUc!y(k*TQlw#~XG*t?6KtanS<0PFxfYX~IHW^|?k#}bYXQR74akr!daB7o zhFDv)d7BwJy<)OlB<#pi{7381pDi!ZyE<6pxXExe@;iIwuGuBL0^h(fyiL&WsrSE0 z)r`K&-o66YI8gH_!iu+JR)LEO_P1`m z6)EjCgT5s5#AQ$<|D|10w?cser%e!Ix_~=$Vun}D(si)~bbA7cpfp*y~&b0^yycq!5Gv=ZgZfqWM_`ktd7aih7hBLWsU(YzE><-rSdffmo{nPE<~ z3<$)p$ZKZ9#q_M*H!y#AIp=1v#qASP!qq*TD1`{PqnncunB}h>cf$MD zXQE!kESzC&zTawQbKI>QWOYagv$b|XPN}BacBi)8@f}grGk6S zu)7f+XHUd=H{^ z2+t!C_`tra`q1XYg)O zhMvUGk^ABgN!DT`KUof~GU5q$>-GxM*QX4y7Q!87hP!MY!85D_M{`lm@%`b&3(^3q zOl!FY*eFvlnCj<~wt@wQiHRLRW%l`!7SrN%LtjTv`5bEHC zecOfZu-Lwp;(6iA_sr~i&aRR3IM%=x`B--#XqXf8QU?}J^8vgSD> zCd@sGvS-G(-v(I9I<1NF5}W|Y;Q0Rbf`K1+LM0Qcc_9MXIQJ>fuO=!pldwQfK!NlP z`Cr;XQKv%-yf*kX$iC!tQjkVi=<+WoPDj{tRp@22yQ3jdK{Dn6%VxTjn)|FptD=t&Y0^@&%Vk7Vmq3QB>H7s(EHb+A2vgipcf50UXK1@3BB0VYvPfv`W~m z1R6P(384bnpcp5PBt9Ru90C1-iIw%U@*;9YvOx2RT)em_Ibzhn9wf{Q zbAB8ETes8jqsS4CIeiG+LhIL0g=PPt!VZaiB0&34RE{u-)r*)T$_$rNH9ToQy-Nrs zHJ$u8v$_ulG~rxdVW6`pJ}L>=I1b6Y060{I6cH5Z6PWo1jNA!;ivWDM3vs^+n#Vu{ zvpMH^!M#s_2|pp7C+tiDIgkmN!SETW8vTw377<+vR8Q1aWW*PEk-`3`X-^`9@$&qWw7WbyY z<0f>E7gT`1=*42CvD;p{yz#`EIa8<#qDOWI>zT0mk>Gv^4Kh`8d0M&^alRxuZ|({P}&y z)xWAj`qrykt@x@p(6#@jOBw6-uV^9fPcHfD2_nA3}Im zvnr9ST;r+**=VlKtlOq5SO2Kq7Iy%BCN#m(x2_B|oc@S{UQbI|xL1VYJnRMggu>3h z1-;73L3)5D#v3zla4r*oCa6rOZ=jG+7_fj}X|u_`>)B8LXSoZ{ggNj})5NMhAfgK;`A&YPkMy8P@G)dr=ZQy*(ydTxzUgpNvNKMVS z1x=>{BC=pT1g>@BNl^g3AGeg-C?Fc=d7)`t@Oob8ER`o1&9%pbydwe!o%q67 zn%?pH5Sh;pPq+oW;JU2)c^EeFDp$RbRKoQxhC=K4<1T?t5a-*aE(es=Wv&0iB!A5I z`@sauT!nS*vU>LdNA{X2Gq8^=;Ft!`{5Y##0~9aEwcJot(92cfDR^BK`X4XPVgvWj z5N)dGZLHD_PtEjj;X(vkgL1H3m|Y1*joD|JwjY zU^qEE*iaTgNfr=yBGg-bb;~P!8O`Z{ErBi+>D#!4y0J-*$#| zsU6ikuj$gI)zAn$x%a;8wda&Z{!l%x=TCy8B<+Ku3Y;SmzPzVOH)l>af_i zr`P&aGr(-X=iwpW2a^b#i@T)!t=F8fBM;{!PEUZYe*5ny1{@|W7uzr>hvD1|fsSF^ zyiq*N-GnD7$RuLSH2-+~R3m8WWO~qtUNnIA9E~MnT)l3vrHLR5WkIbh(Dnw{d%~~~ zo%@Lo-=qQG8sSyyA68VsV}S|S2u5E$kc}rE?o$r!54U`kW%DAQb)^Velm{DW0F4oS zcWS5FMc;fsf;lM#jE{5Kvhcj#WvwGZ?u-LIeB`mCaXpK@Qef2<(QBX{$mdIh=I^o^ zW^qZtd9)FnjSXY)?J?`276cabnaE{?0{v^}O-lu7e0sZ8Fe&rLLIlONMST8~1q?l@ zFE^UJi@Clm@_kR@k|uI=VB11?I9D6Qs>aWU=R%}R+g3^3*6Fiq6I0*8?{q_6%rl`% zk57P*(D@VGYSS(xq#U{>C|vP#b~-hX$Ci&qlK;en#>2UiLLtwIs@)eq^v?0stG17= zb9yg=TwfL~WvL4AopNauyUNnEy$j60&iR7{dM;V9o&YVi29{a#9ixOk5FP5Mf-_W} zxW${ZywGjJkkGfjrx2zbOS3vZ6YlZ4GY6V`k-1~Q{ME_i9*H$K=w;J7nQ`B3NN~pp-a}=i}w6WnwLk^gBV)%OHwap zAA;ZMLzib~mo$%-utCf9DNC0^m#tNvS=Nu(K)@yi5#Qk&zVe`a1PbbtUlf%2ntpB4;JAWF+wG%GqwVoAs-=U$5Tzx_S?~ zMpjv)*sa9}ttDoxCD*T|s4&8URtNl6vyWF=JJ<4p)*oc7KdfJW^m_fyd{c(_I)Eun z3tGJ&BvYKR@w9%U=JiJ1>(xWh2JN-fiL>osW1~G|^LhPdSIO#u=w{Pb^og)-yL0U{ zacd}JYovZ_?Df{GuUl`R+Y>6=Z|%0<1#N$r-%1sK_8)ZX2))G!s*lguUb6f8CFtvF z#@F?duko+zPqb}czil(^>SI;5&k}cjW$gT}-}&=;=kM2@f6!glGrIu$U5?;guF~V3 z38S^mjjucPqTf_@=B;+dGIrs?--I&1i9Gv;xcBX)%G#INUFbcL6Ls4(Xiczm2TuL2 z^yd5No$qI0Kh)0rP`Ce~8T>;#^M~%UANr*~4qt4M?CQ~HzUN}U%NW<)tKT|!{logr zp6$+_J?y8$nV-PYt$Wb=6M37S!=BljTDf~$R+&EpQTtx@`#!<@S2OpoJ=?$jWzB%pF#Ch};DZy5Z}PK))HC~PnLANC zt2f^O?mSz`$NmNoH_osfTnXNR6WHv=IWF&Vl-nOZ4nC~RJbe1>u;$HS-Ok}N*q_GZ zGk==x|FnKSyhP%VCa^}{+se+YJF&p!-S}Pb?^lfY!CC5eJ0`~^0*4jz=nd@e#F@Wu z?fG@65BmAK(1_wDb2f?07nu!-@CMh5EhwGusQ}y54_lc;lmoZzS*BJsQ5k zdV$HYkooWTvwwfy{QJA}?;niUirsC!?{Obi%*aJ7r>k8MmE4GEOh_g1)4SoD)*y5owZc}Rx6_$A_ zKC@Hn=c^nZ+dZzX7=xDrMK65L7PqC&SI9Yfj0|=4FgEU9vfEBQB7qIrez7nJr(1WSS{^ zX?E`#`GVnf&6iF;u1~8Ytc`%KGTQ}L!a~^85(GHYqIDpvQ|9GH!7+XtR6w6>!9qk4 z<;(1hT)c`iA$WEE)1Sy#L1&?$D)s%Fd%{+xNJ3Hf$l) z5Wjr!*h0p_mheKH!C?XAK1$~~VD!w*)GDxDoN!L&^T-AYRByk5$_AC`-?cONu@!`a z8V1xU@d56n_y4lPH%h~=O(s4H>Rb1H6hdl|KP4h}&b%bjPuDz0;B~=(M6k4>N1nf5 zGDp#+BOP>Uv@dO_P=2()G(XsX29|=H81cyulO;Em-OXnWDmynvdwlAKq%JMbH$yGa zDZogF_0(10nIVyD_Q?ri7msL9D5qTh$JKd7HSvdUK0rc3NeERsp?3&X5Rj@MHS~@k zC|yGjO+rm*5<1chy<-qWq-ZG81dWRHsvt$sh>E~ZVcGxg*^52rxtKE-b1`$~J2US* z&*w?>b%>&`${*hUWf$ch`TJ9+Vaj-z1uBM9v_Qv@MF3%4YNzxi#ff|HEzhS6ZG8dn z+K4(Hs7TUhKI?--vFbR%Did57EZvVxdnUdJE}1eJtpA*`zbh{4R5?N945}te@-UC5 zf65NA)2XUVw_@04<8bf<=Ym;2jTK)x2>Rn!o3Fm-j*%r?8i}ci{OYlMs8g`^&`ncQ zC|har-b?2ohlaomK`u3+n+Dv50*O}WFpaR@FY`7x(*85z-;z^as8&q-1?Gjic+n@v zaTi1v`r~VSOV}-|t|#LJr|90q-)~Y$3NM_E`x!BSC;I8KDHME|}Z86>$( zm2&Aw<08rX$MKGDyFj?Sm2$^I&tOWA2w_J{4V0hN8}YoT_g^1R{Q4mJA!_aM(T&Y@ zosmY7r!C_LB1y2%<|7=7QWS1wu3XhD(L~ng#)_3utoE21UDm;OSLD>&_Mq)(NrJO9 zNw^tbP8$b{CTIbz6M2u5{W$Odpz`)r{x2wmIz0Olg8KYQDlFhg^pi1F@?qD$RfN!U zW8q0OjKd+thEB}Yh)PL!z#SMYrYb~8<3F6ps1+9aEsZ$d>M&A%0|eLCgrCITxVllc|AlFZ?sfSnj` zm}-ZRCEgSCmO1g5O(gANg32B?4}=PP4*w3Zd31v>@$yxkl33afs~@NN($>+a-&sBh zr?w&nLPdI-S%#(8!ckVR(C56L!XEKmbJ6|BKoMfJ!~Zh$yTMa~ieI^tAQp0aCLEp_ znj*@7Kzy$s#nzSS@vV}DB4!+)A(?Z(K+yxEr)Rv|Wz$ZsHPhKOwb-;fQ~FqYIhZEp zP2r1*qhAfKXKe)Ib78xI@Tx{(sEGb+Z&Z_rT_LK_-0XwP;|v%31~>*_^>f0$KSr{# zYaDoU!2AbTqT^!r4J3Ot92GBjgreAUEZht7Sb7xy^@ibAr>-k{tzYER@?<}c3=M}r8 zYA)Dn)2pTw-&WbU&S1fRjpbcilH@m3f$)?;cPHoV;O&N))jZ2*eHPZ38-JD{3m-b5 zCc$>!(3xnADF63HT03NJw)2H$YjI`!{%^a~DByRga&8=3^E&K|>o(W7d9zEr$R(kG zqrNW!XDgVAOesb)=s?!ApZh|rV-rP~{~2+ZV-K5tdi9mSQwqPpWblrY5!VZ}T`GU$D-Zht!Ml%b$*2b|wHTQL6XbjC4JfxGkD-d? zWHw9d?W%o^R-O7_oKx76C=NeJ%6*Bp?Ct(eNThz$zjoDSl?Ze#CGK!)PhvQ zN8JgF8`yv%?L>P`OI~RV(Xe3p4F?~jb=6*!Xsi_0u+uUaORT=jj-1y=L}S6V$6p^{ z`iJ@KiOE`sSGQdF7x|cH4Yhk%VO)IkT*?F2vQk5FQF@H*rWmj`&<1ob=#-&TYV1sX z(%M_ApqK9likAB>O_S>~4@=!@TI2zIAMI(t{v;A7@kF>F3bphaGMiEX3dNyQgxQ$| zf1*X*W>vro()^m+h=ITDCt7f!w=Xzla0Ny(D+`dsB`P@8UW3Xm24XgGJb2V{V= z_Z8un_88DIxEuPp*JCGQEe#bkxPI5q9dRr$$&P<>^88$2Az*E^KGlXPhRKL!3DwT_ z26I%%SF*G4IP&}F2X`Yb9lv%gR^=Yq2zmK)e)Uh$P5r?Z%>A0K@tzyne_sw^VBfng z{z)@-{udWB@L6^GYufpL1E-7w*-YSV+kqwT=O8y7`+T)~L{QO^rg&rW-Nqzm0@>M? z){Z^Hbv(`CosOI>t@%3nlB|9r^=VWx4oylethqvGrY^HXUrp4i!k+0cFoW|majdrO zezAjv$y#A_FMHWv@((9tmQo_&_+NY~%HA(q(YpU-zC4M|Ic*s#Bfo6fBmK+Nu15`B zeRj!Davr(e@}*)u+}XXM*zn5E!$hUub^>LLYwomvL`AKDe!kuT9C zDGqIfsJ47L?@6D**tkI^g3g&6d`}~dR+=svujspzV}G0)*O+F7#CiABAWLxQMtU;< z%od+!p#i=(585Ws#b64&2?ZCN+PhTxv|PNyJbefwtHPOfn_{g>BQZ6YoT6Pqt4&Rj zA?W11P7cr1pxu0~w)r^QmcaWpCCHDA@x;Yn7`nNiOQZT2Iq*8n$>^5HSDZBUrs(d$ z)#~}wE#XF%eSM|2?U5L;4uyPIl+m*B@!IDe?ZzY*lkVa$u-}K|D|*jmun!tKL2riX zv>ItGcRHQ@z-0xRu2Q<+U(?;iD_BBsRK9D8;}@qMx8Fx+wccS@fRqV(b%C;`q$}J-{y)-WuH=LS$(^x$e%Vh>iM%K%Yf-$jq#{G@jOp)ATyU^IA(c4Q!s<2Yv6D!T{N*lb>fl40cI{4!>wmi*h8pjNgRf|iu1ml9rlsyeXflzV{L!Lb z{YxhjZ3?k{)mSh&LYy3aGMUazU}%QeYE;?#<=)qL7&cF5L!yV_@%Ql+puB>Mc=>%o zZVZ54r-#U1BK6B@N?dkqTH3IdK>4@_OLZf^4!}12YX4Z()S|maG z)TiWrNy%R~&`Dm?-JYBiv4?oT8Qpz+6L&TqNdTiwYUR^;!M_clAVa1OI%_(*3rAoz z@_m5W`x~v4gT|y>AhVseRpVyspP!Ux0P99JYurg1pcL=qM8Ac2XOFVxT1mDmNrMvc zJav$W`P4HxN;-nh5so`9rxlZJ8~yN7SZz$}T}tQ$5EYH97h}{Hw=+z&`PMkT%8@Pe zTM72cM*bSJLWGQ>S{~h2GJgr(HU;bjq0y$`I6h)IbrS!|(SJg1XhXA6Y@m){{+8EkYT%&!Z~)}-4lmKvD0&B(`Jb5hMT*Gcr=Pcx8*Ulc0c zD@k*f`e-}-c7UVn?imJbpKgCo415nwf1kh_F+Up62pkSi4W1|d0?htqbGX&!sH5Z{ zEmr4aKil0iQyAlLzYY=|Y%cQDF?kCXckOLFbpE~9?448w?Cp6xw-ZFiDRY33GGL>c z?^I5mOZznc-{%j1%jS{>obu~zpikf5SaBi@2;t(Lj{Te;6X$hxoXf7w7ZlDMxjH?p zW5@}vt6VY2JupbBnJd$ADOjOY++HAB)D@>X=i{ByBT%ut3N_bUTJ2wwKR7uAxnv(N zwES2smy(C1caHTfwpuJTp^>rdjdceu9Rm=OMMY0G)02Y_zh#`CuDI5Ex>l%l+KV;y z{#$HFbt&R?JIgV7qVUUhV9Rw(fbpe{!(fu@NFn~YJZn?M;`m_Gt7%ugcsGhTV-m{6 zXRCGc0RQ^c(1$HNRCIAHaGA2=n&hOLsOqHBvO+up%x0St$w&|Rd_l-S3>uhnzGe| z*QBHXsv5Ky3u37ByaSLc1dfUxTqrhaPkamv@HpUHZ6U4*eWk3lL4F9Vky4@ekA)&2 zA819u*YJ4$MlcgwfmIK1cmxu@{xLlQ|N9lT+4M0u7@z>jK8LO(nOw7HUY3*hq*HJc zyLHwGybq0&0tz5;Qf#(<1TK3lr|f&61vk6syA(-0#0vR9nUW&11N>q`Nq4$wf#kkI z0rG3oSgixuk#vaqPw8Yj#43wh^QYS6uf$(-F%XO?`Q!-Oy6<;IWl?xrw zDv(Fmue!*tCn=JW1v_aq7Lsd9k(Y{Gxjn>r>RqRiAmc=ilTz+X)JM}2PfMP{AR_1j z6m5!3R6*eSpM&Xn;87a%&Hyl`4ex-bH^+klQJfkGu&G9(phIEs9ypLtgomdFkwE5n zoLhE7=s3unoTBeUqcRS3lESex%J7unF!LZQ6`*-Ws@poy84tERZeyuJIFmyyOn#gi4xojA*RSTm1O>JWHvB^W@@L2E{rOeu950i z1c~RSXKTbmi|{xp(4G768*DU;Sda%1tBS|5U@lTtU^sc zS3e5WHvyQ>1D$uV)+8WsJjFl{0L0RnW3jC-QkeAsRy2X_*8$EQ03adR8H4S-AK3E- zs83FGreIabDWLTL=a8?@=s~S%f#wKckKq29c~1&Z51?8C0-9h+&Ot8)_d6dnbg0w4 zf(0_`1)1vsRK|mVo&fLb*x;nEU@}m5J;1sL2*d)A%E2@DCE6o{=_vv2u!CvAKpqHR z!<&PlJ9{520RkndFcg5^4`k*95F&xhC@4oFkQbk7dR%3V1t&!0R1;)dR@aq>qJ#>K3585> zkeTPc!8+Bw7Ym#}SpIgF2wkh=q8{98PnH@FUXe)A=s{~DgX&kmE*}N*y+rf945_dG z3M2->-X^0;QiXj3+U^975X{ZK}8x7E+Sh7`ev_ zDWiw%1N{<_ZK*QJRT*!2~H$g7QyROH{qYKr$hjRGN&J90m$JIbW{&ZHFd(C z0pZEc8i~s=kPGEM;o@Y|641v;kTy8%F7A)1-rxGlD6L0PnnciAeJYF?Rqp_Bq#j-N zJe1mwtxrpKCjMP^z@o@0KqA0}n!KF$PbDf~a`Zo3!r%HgKY%Fg)Z>4v_l|C}M4O=i z@{Or5sQ{mQfWq_SjTiu*#;;?ZrZ>&eCNJ;qJFLt(rQXs=yzf``h$UuuFwJz{C;tWb z&U#^(-)Z&^&gLC3no@#46m+1_+dJQMLPaP%z`0O>&g1l0?(kclFa3*EPc)T`KeU7v zt9$t=eMhA-w%@nbqs!rvu#7-zLl!(YP3XM??3;h4Q)mUcR3l2SWfGE{6V4_nGQ!Py zNl3--nBH1qeO=Y{EsD*J%vlhqT79KTrG@aW+3+pp(?Z6q5Xk%6RMqWmOF9td+jxJC z?@onQm)y#(=hHnoGt3U5)5NJO;m8maoUz$%r26!% z&Ly#k_?*=zQXqq4uc2D=j{B)mpo8yVI$c?F*E&t3OWB^M$P5|Wt}860heh~$Pq}f* zjuYP9I?4Dl4K~P8h`;iCZ}zeG+xB>^sDq19Fhudb_Q@gLS(Wj<`~PC(SJrGF4eyRL zq|9%54#DGL66W#5oZR#T*$UKk39F#(8wurjbdp5zPLzQ}X$kelS;D0>bdn_PokO8; zO(%T1UYL)~t#sio>Vy#Igz+F68T~0o0si+o+YJW|2OK?<9Q?XKgprpqm}zD(5f*`h zj|v#3|ELk*Wxj1J6t-bKmTz+8GnNx8hnPoc&J5yceRedyap57_(knv0{ ziWpa$p^g4q0xnOl18$<2XOy;XMFnXVjn>+S zkR1XO!E20`SsQ&x0Fz}$C&{0};Ra+)*+`ct$DrLpr!@cY$Mqd9wmg36@JAqaIHTAj zW`ymlAnCR8QfnvOR_{=#yjT=JsDnG126TD+2~+k<9nUk-8_WbVg@*0wvi9DuPnO#I zz7O#|?qeRmmEQm7Q`z_aEoH=?biTseHn zdkWq4UcoW=n%D79m^O9uy*_$vcISJ~-zUpYUMmjscTTB%a0{FMy;$D)M(cH}@(sWv zZS)`qKW@2;&$qnm{R;!P9~gGqebwkm1^1^P7p`fwjd4OP23sWQzditkKbS0u%3RlVSlgnDf6|ce*r*GoV@yS zzOBdetzvIj)Mi_+O!#1=XjW7gF8@W>nhjXtcs;fFY&B*$J*vOwX?6ni8a^0B*2t0#YH*csfT=D0j5695P~_0d-&Q)S$QnOt{>4=MuY#Ga<$iOR3pn0y1b#O=1t3-eE!!E9G*HU0DHq{v@p~nE zODWT(YlCf}c-a4dlyse6G#ooFC=Bbkbxo`WymNW9WB#J`$Gu$ipxbXu>yuJW%!uek zt-0p8uy2yr3@6`&-}RqFr2r#2F}{`K>#U>J5AK(XiOc#=nB7v&FI^Us{0}moA!dwA zcB2tpz?dA0u?1wxZE*`QjH0f;PpBvtmk;!R?fU6S-XrZ2guuk4Qson;rt*22gk3|& z7s>^FZuJ*Eg;Tx;Dy5Y^UlhEgO>gpkzzqVIk?A}gYIjubKZq0K&o`M4t5&JlbCc9s z+Iq*6K4CBZF?=||s3maLesT>cR~6*AjdPAZVpX9}Psi>Ow8>$)RFcg0lj^h0uk zxsM(IAbbL(5d@qA?}6O&ezl)Nl0aamSURaQnxRvsy< zh?J36l9oYANXm;!Cbj~*25KtT)KyH?R4mn$?Jp~PsUrhakP%3Q`wH?&^76^@ z@(Jq57+uvsV=b>6dTtiR4pu08YX>`9S6lm=_D;9mJp+7h-}Cnm@e2s^4T`-PlgVR$*pF?gM;Q5k93X zHHMfRS``;ig}GfCc}0< zU9Ih{%}?qZIx1?P=2Z8mRShLok74U3v5nKot?$wwzt8WQDeIZ78knyhT&^8iYZ%{X zeZA2!{i)~8M(@;W-{jKE(f30`V-rI!D8rp|ui6$y+ZV>3EWYktem}JGacp(r_3HB5 z)uj)s%X6zMORK9ZtE+2ktDn|ZH`ms_tgUVTAFZryFRgAbtbCbY-kM+9nqAs@x489Y zVQX@3b8PnWs|$VnJo3M_sXVO=IRkWz^!9sc<8jxsfet zmA3MvgtHf%1!-^Q>+@@2)zT){DqE9~Ed#C$KW|n?-ShNdYFJz{ z+qL_l(YD27y7%eVIg&LKHA>;lONDugKkC@hj+W-_VtR+h-m|y%zOnzp^4^M?poI$C z%#L%IQu_u3|K=Y*sV8DSZ=Pv1S|&9=Zb{x`{l)O>5vtlI_sv#a{DM}4nrv0g-?zSx zq2~}Z4)~Yw0SlNd;GA{3U2*NT?mztSBLPP8?{!_DgV}MdOI)?HiV%+QSw#kOl@Ge8 zd0TGb@9TL0yYKynR#!LlPy_*nAUq>2x4Q#MZLObsiD1O#znNYrp4% zr8G!>#!BO)KR=U}wgmG=hvF7)p|upZ>!$j>ymOL$u75aN{RjTtn%2&`N|srL{-K!G z54~SGV&7(VEibcAEv&|#b41K&3IApPq8X|Fd&b?DW7DwY`^@JDj#oqSbFMOGqy+ z<56V9f`y_r264d^YQhRa7`NYVxt6%xC<1XDr*C^eKWM(|GGCI>6a4$;m8tLCFOf~% z$e=!B{+GeB#;;hub|8fc7|7s=UDN(0cE#Zlk|1h^IbSG_yFZlSW3VedBF;||+k@FO zx1EaFKeA$78m$5e=?T4mz%YNO?f0x()Io$lQ}lmox#50MyIOa`CGgs+*%obplV!H* zrSQ4nKP#AIuE?|1R(D%poq_ln9>JKnsb{%KRHfC8tjphyKO2es<=m_lo(kpNp-Kz6`_oKAfZ#4@q`u3eapYeP@ zhwJ|R)++h<@Ah-P1Z`^NfMw~AmxlLTes`MX#8cl~QqJO{M^WVbl>8u z?m5TdLFVkh=@Z9$15byHAD#W(fBEL+34j^VO>um=#tDo)Vi!ET@XS$HauQ#d5ordB zb-^~&M5Y2F-M@yxB{g&``xKGpT$0RIin;;pC(;^A>HpV+PWWo*$>cb%2eF|fQ$MUT zk3G{rm_Xvr^rnOutV~8kdL>d-!-c_`e#1gXEXiG&pV-RAhyJ_4nqgn+~`;?*u^VqfOMjN{m^WORn|Kr1`?G?Y)u6q7<8931 z&&uPosfMe6CaieZJsHg40CSObApftQM2JPB!KFz`+Ld2b@a#sTug)pr9AW@V_>j@% z$#)N8e$^nLO(w>rZ^e(-g|4D#Z#YiAFY5hOhs^dj3t0!!%IViAPd8acO@636wQDd# z_%Yu%ovG&i-DqObtd+S=Cn@#236Fg5; z&Q>S27MHon+3pyQw!7IaZri4Fu@^ja%yf&#AJgQ%!`~Mc?jXm1GV?>cMZyI9x6Yrm%af|lQ;@8VxuKamU$!-sCFk9Jk z`O`Z;-5&Yu^~#RKFjvLIb(vnX)x*07JnQipx}$-sN4-&MGvg!L*u<}3 z5vD}g5&+x>Yn%z^173;_{IfQ$TYbGwe<_7`3zDLPv1Z6MO5!iPl5%BpMhH0UGf~D4CEq(PyFfH)@`8OtdXIbdxyv78QffiRhwY8^yBB(D&QXaKVySiUITqp%TBYP@C zJvE>b?>xZ~z2?3<_cf=^F|?&UtPC=`G`wZJX#FSHYzyHMo*hI;#ijTa5tY+-rje?( zk_YSZJ6@p$Z@TI)Pw!gBo_-+0o;Dg=?Af%8mR0CKZE_rNwVxaL*!mzsWXzcmewIA@ zH0^0?6jaY8;pc4gtQyHyKFEVlEBZyfetV(LegmX$e(XWyUf#gI8@ub`JPh$PaeCiZ z<-d<>XE-&IHk-xAAyt2R-T=U0PE;42ZslNF{d&bgOtQqnMyq^pOSA!O@_~V5KZU_^N`FCrC;8QxVPaxZmg{Df zp1uXGM?M0R#QuoU4t`PB-Ik4}3Jdk3Y0RBG;F6xnm!k3X8ZSg3 zvHM9Z?@7`6@E;G*jek{aG}5)xLh=g5lDT8YjkMM2^Q$izF&!b&1XYD=68`E7*ff9( zOYeTaM?WZJe{L*35<=TUFgTb)M2S#n5P`s&%@)UF-T8}&eb#4LE3&a=b8aRV-sAi0 z-H}oqx>W6*M8PUbvS7Cx!Qbim59)QGmd{Oi0V!Lf2FWxa9Z#P*aD63+}eMGi{rpqMelNV^UOu5IQ6 z0PXTNTAr0L8lD)9rQQ4^`WeLV6~GvcV%R0!4;5zN_~A(fL)Q_B(J1MoKe2m}yr*E_ zPb6?O7JBXof8Yq$M}x=VEPWJOyFo>^9$Kj1J$)ie8JL~Z@BTRgI{Aa;0VVO%s7KAS zco7JDp&l&ThJ6mpB$WgugF$0x#@csDca&IUS%JzX;n1jrEi|nP+im^%Z~~kq8SgD#U9#)z;B{$m+|WsSse)=u!9L&C~DnNJXs+&lPjKwR8*RE=<& zK80l&&3sH?F{A-Wda(?W7&L_$mPrg_XqFyiI1Yg;BSFoM(|&h@SpC4_e}K_QO$E_;&n&%AIqlk@L$b=LnN?T#|FT!@Ei!T=^rgG56jh zrI7zHIg~FsBcu0fg$aM^383g8c1g?E^aM5rcG4(;lYvkjlFPgh#C{SCJRv-i$UWu? z>G_f?ej}InA>qU!clIcEW%evr4guw^Zs=g zTJQvE?G{{<4)I(d+Q7BAC6S zE)&o&|MfB=JLr!decBluCI{fvCoun6zq?H0i$sI}t$S7exK|UBoPc2Y_J?QV1hz+F zN@x(vAix}tS?1u(D-3-31o6WYnkuE3e+=yJDZ)g=&`)Y*}`RIKLxc367v$WWx$P>z^>o zAwc|WkjfJ`MpL20a9Rkfq0$z4dG4ZVByM?DD>r^8(Fdh5SvAATE(n7!7v2i6auzn4EChbI(xF{ z;OeRe!z>8QyX*2!NS08~)}N?~cL9u|WMCMH|1TQtfrPFhBaaENFeFf{hju~_b_W5> z@@xRHw#M?ZtRm>$^jPk~z29aCZ;>8Y4f20RGAg;iqlCdqBz0A#8a0`_mtEk8*rw?} zusQ^A3I$tv*JEF=_M znvtFA0=I{=Fg|0kj`3O=gX~b7t$qND;Ve4<#uwYnYwKD6p`M;&NmgD^rvF%=ukXA> zhT{n^Jq;G?Q zlSmuZl3I~CaK0WFd+`pAWZCiu%amqe*I~>VFWxIdo8Z7>gnH#WItmh2Pol-?J=ab0 zobZH&Qh;ytV0vEAnsr(?EVO5x);v>T49-$rR%ca}a1pXqW@{r7Xxu3bf>aj6W+omo zs7f#UAA*?&0r^YH_?FlQV&&xVWcY#|JY(#CI;hqE76A(<$5qlmFrGB$>)>A$#&ZO` z3Q6mZWx!5$HK1Qid&1`Yp27YbT73P?2F_B41aJ3&p&Q_D6hUom`8hb)mK;+x2rMRw z?2?#75Fjfy&-JIk5@h2LLH*p5;SYf27H`%?cI7LPX&&hj=j-X|2A3aacHox#OPm@( zh0gB7Zn?nS5IkSuj9KMl{{lo-5Rk}437Yzbq^Uvc0LTv%OL72Al98Q26#0&X)xk+v zfXtpA^XI=6R%}gzNfO@?TyOb3OBjcb8B@;4FuN;2AU5|+tl3CAG&^+F_~6Vn8;>KyB{?U>xy~g{0|m4^^GWh0_=&lA z9m2mIOZMk;*PZ84!E;{GdH z=LrIQWh(@QrrDd)i&E(ilUGV^IR~c+6zVn=Rb|g-Ed=>F2N^Bg3wl1^a_})vXCb_4 zHXwb8`^HiVv?TmYV9By+scvN{0?Ou& zQH4XsJef}sY^$58XzYrO{6ijw)wqduns4hDPmbReo8<#*O~DVj-|)&5u?$h`EOS98 z2*wBkbdVV8LS$LNf{Uqa`ota#mia^C<39k#0ys-IE5kmVF@XRT@q&LxHP(GzCD|`p z!T8Q(Bp6pFn8^Unmy`%<4V)n^&( z8rv8DvX30Rc+G^pB0)C+sylaKuZYlFg3xUg^8x|}s6IgEGSl_Q72k&^T7DBx`#^ij zVXg;`&;w6i7$Y807u|pmEAZl9U^sC|9!K@2fT;heMqtNj&wn6<4n=ei#crM*N+cXg zDF$v-99DH7$|<_{94+TEc!q=iQAF*6ZYLXS(;!?gzl5-Lx&p102&(rge`hH ze5kgZa(4&$Eq3jw$dhHC+^7zLChx(>j*vs-4l#tC(98FZ%(RFQe@>-ESE2t=pN%6L zfAJsRDLCcA0x47`dBCML#6>rC*UUVKTMsyig7v*?3G@6r)Eh}Xi|XtahWtcHPr+f{ z7c1?hwtm!yM@lhXH{tKrVRfD~!UHsqt&*)}7&ZZj94zc|(0{bGuK{6@FGL!2hiB9= z$M{`n;r&k6>#=|h=K0Ko^Y*&aF)RB)(=AhuzYQZGqYO^jbS-_QMRJ1vj$Nb3J;TBK zEzFZL+#{qLWL(dTGLRO z-7z;lWOt=eAKBt(0`yb9Snl>Yol^(AcHrBuvfwrUnz=(aU*?6sl8E1~-|=`6|L+XM z??m++N)0r9cuBIozu~<4ES76(Sl7t${I)y>Qjykvlj+LYPxaheSKFp%xHg~Mx+5Mc zp*mE@tvvNo^4Q#?^S0BUi|XF^b9%w@d#WK}XaA&Me^fH?Th}|@@LgDJofN>Rqpl>PhsL9VHt0F$JyiY_q(UdJe8Ulaqoxin<;*)~WX^+E~CH7$lC5qs!{^Bj$ww*5rqT_yPfTSWk0_hT zKihm_ruY)5Vy-kM)@iQt)=0%dZO*6D;__OGilydu?OCU#)^{TUJ+I4qTdT6u5fzj^ z_}YiJ8K=vg5_j@? z^~OgXcQsW92d%oN4r*Qk_8;xc#Gl&eC2U2^I#{JXopZlAJ>zh@cq{asr|bdef}e2d zjI)1E9oJ&90w~hKy5Y9ETS(hTguPFg+A|yT$#E`s^tsp($~lKK(k=G8J=G>C%0i9F z+Z@2P{AcHbqr=Uo5$UeMeOs4q;)E=bo`JU4Myl@mLX$F|?+nZ@`bf7$ZrDVm_W0yS z^%)iEWeAUExyuXJ-{vJDB+4Sv(xYo7)zh6hPR`EsCGI%?{p(#U=k$Qixx^UB?G^3( z598xuRo@%%vQlZg{0dQ6GC85NESW9hjpwZg*WcuNKhU(xOyRzAS^}<1=q;h+dwZ4( z6bSED$8{#5f~Eon!Ef`l-?V#X5io9NlDr;_&BwyU0!8%%UuHaTu!i=6 z)9F6xi*17BMck5*cr+=k1+Bj76uENPCqB6INcsyyfB0I0@8Pcu5q;MKP2S9M5x>zU zZ_gf^Zhe;n??M26qWb$ER#*x>>j4bg@4a~tZggh z`_dR+gO6z&I%go}ZLDMVZv>2p_b>)NxvXr{=VV{VjeU zjJ}B6a0=2+kKqHB=~I6LOA7xrn4;d04?+Z5PcdRVq6(^QEl30w(1sROLAJU+WF~MA zDL>sv<988BVVX(d*??2DIh!RC{I2Dl1B|YIqRENs{|5g$PgcR?Rw$-`1ZpS~T9=-n z@+v2IZ=V>8%MG*GU`-yKOBr0XOk^oS88Hz2#zxDL`o(hI{1*sv)I=?FSP2dL7gE;M z$c_|mgSR|;<14yP5E;xseV%P9pZomARI$;9pbKk&)5{c~U%w%@Bgq``KrG8gkA>-w z^6*^DM+X2pqeH8Hfg0!mPTc3jZ$JEHBvX` z>17!|q{LG5OJ72{2gVtelARgzL5cM8E=iym{G1|1>h)EZV>UyAi9ju6N-d72Krv2V zu+xMhGV(4@c-{NbHR~ZQ7uNhcz+}m+o$F>LSeCDq#ZMdD9`owAEcuN)UYnAvRP`5pAy$yW=4qu4az+RoMwUB0>jxW?ZNgvG4yjOhgUv zO54^s5#c?Esm%bh_8-hqaiY3Xi3aL>r7&B)JNcaA6Zi`QoKgdX9KJA;J5!Zb#&L`9 zkTR;i+>yO||GNOy*3BoG0F4~~%Al_lUM6!Dw zH0jR?V2RKsn33VgC_EQexK*`M%r8>>jeE?HL+(zL)3Nw8HC212Dl1Bk8~j>NLaV;O`dqyyi=7>S z;j27Q%WZVv)srx9h39D+?Z_NgyCJ^w5_%*OnPTGEg%FRtpd=%^Vb6qe{snuoeuYi){Y!YJ^Kc)x^9GiQ3ovP*X1htL<4P?cS+)IHKC3# zuYu^_JrL}yVLrJCXU_k~G2~uN{Z4Rw;Ck!ow^ll+Dm6(P{Uhg2R}F^(h1vWG8K%*7 zMr4?qodWwIAQ2{S#^BaN+LP~r2~Lg-CvZ&|8NkZi=fitwIifj^O_uMc<9g_WlXj!v zqpVn!?&ytZm{7A^!W)!~h3UjbX-EmJf5I1@)3$UMwCxF-YB|X*myu4k8Q`Q59AZhkwfpG@R z$~{1xzkFXP;!%w)SIZcFelCZibl*ILUJ!r^0@F`rA+Z>vUa8F9W87I^y3c%C)O=cy z2`(6`$Ms*QEFNdm2{u$6iNfl|>|Dv1$FTyR=k$?*DG(zJ*sZpsxCH0)7uP}e)X7{w z1K*cKO1p8j>KYH}KQK(=}5@RhRykrA??PVLowS^OV(vWXN< zB~CJhSpKL9FS#zAfilWPz5HXCnQ%OuPp6M38g-H$OOn6?6eG*7bVcrzQ10a0fHXxi z&Dp8SuM_$cGT0>rAJ>zbL85>18Vu~amO)B_wT?XC&t8_oM|*a$r!aH=y7+t35UB?Y z!%P(G0f%JqohLZ|nL*di>j~u1SNZg4DM)Zi_BAQ+TC$)dznTAWPpBL|ERNy2-&J`6 zlJ|Jv3A-7dFw~93%Q@j}YVbM5cDT#U?e2!AHLkX`js^mUl;gneA0f%Gh0w@{!ctivQ zow7cn_YyT~ZHQ)Np+(|Viv-z?NV;kE{EfZzxQdes|cXy8m0y>s+F{|S zVz|A;PaMNAjXt?63LG0~35+Jx-&1pxV7RdB6T@!LMMlg;rOsgr9ak}mgBS(H zCdWUMjNBUm?v`uD24}#HvC$AKbWD5$GZ5m~GY=FMBF%2%sVaS^THbkQiCuf68HX&`nK zy3iKvOuRNfYr}1pQBBI0Us@~{KdmmcaC&@uF#BIT zpeeKPi_!T(JnwUh$9d592B_P*%Q885Nw#?@`edo>mCIPg^6LsG@^9A{Q1L$ZrQ}o> zf%i*iZSHQvg$!;yZVeX^&iBg?OPmQxF4@1Go1cole6<|7u`pn)PhQ>P)=re5mV_Y}X}=wbh7A zo3|AYEIcPx*48Fh=&yUy9@WsPyYI>`o>qu7J$0)YSedMIZTPt8tH0)TvbOYU4HhZi z19cg(Uu3-N)f(YhyS2jlVu9`YQeXVqT=NG1-PN25M`hYi2#HUR^j1W!f2xM8i{1Go z5qb7WGVPO8(I@HpPcq$~WJf>A&3=;q@=4+7lOp|RB-dvpiO^n1-Y$bcc3}&&6HTy1Or=$@f6k{x7%^sqxk$f$MB(kpwA*m!=Maf<$ji29t=b!hw z&UxQ+UFSK^bKjra@IvL1DvOVVMo{ zw%z8#GGUG9+ap0?b2Ubvq=QM_mA8{VuQrDt2E1uXv>2`mLv-D31i3y;OHQQ6MX6po zY<5-EO~GYV8aX#jF2~{t@m7;(X$JjCmTqxH4j@ z*=d{96r_8cx-nzILIQ&r@h=jj9kcV!fJUfvLS_=Wn=0Lwc#BPIuV~$r4$AxLM{i`S z$W8Y4PhT=lQlT^dzNhTrb9F(NYElsRrnsI)U>2t&QVuVx{_2XtB|VH{TVo_i*D#4A zHC3(_Z*C+V**t>HF`p{{?L0|bN~8KBlddOxD;P6qQ=(sq0HGt84g5j76(DD<2y-wn zq<}6hC)XtPB834ma7>Dmj1R~COrd-YX=6gwBzE=9_`kIsjR;Jc^iNszPs>QAtag(d zna=ow{wmN7&`IxWfwxoG8ZSe9=5&SLaH&`(n)-tA-rz9*v;fNGP&wMgr(JffiQ2c5 zy@%JmUWoX|GE)6(5-ys?U#Fzsj!d#(4Er&G_!m1U{_sb?wb{&Mkx7FQma>T!&yQXt z9z9NEe#*w9_KF^sY@iI1xw^siruh;yPMT@&Um`u}KK*GEieAIUr@npZ7!*#qlG3)u zb1`@@u^5^}=S-r*8XyRF&=HbFsgi!j;@pLLQ0QdhO>`0{1Y)9`q;{O7Te)+^o-~pS z47Xg53frX6ZSS$|CteDutEFFFtMsc8HICku)BA2*T>nfPq_QWjN#H^tYokwmRqOvUE@=LhWxYFw)-u4;mz&?Qh@p(U0*RZ8S0* zq6{+@)-t}@aW@@!(Zt(2_D5$!r@m9AV-syiEHRk?p?l|VZj0MKJ2T>xcnwK6rre;6 zr9ZR&`cVn&<1bsdmSLB8{!e3K!}bli^K|mv*Eh0R?IOS37VHTq*d%ss4%f1%=sh=j zn0i#f_Gb+QblKy17FIAHcJ;#RplSoZZPvUbdW0iu95~eW@y2DeUjb=9Xl(Q;_7{f{ z&`9Fd_~2K8;{99UleeqsL{jkEqD0%8^cNfS?eSv9HLz504Lpyebf zVwiO&8pPMkcHJ^+Y4sw8p7AtzASa!t48B;;)ct7?dd?@p)%k*9`Kzd*)^=Ge z;n$YsNX`Z~oA&d^PG(g7C%1}aG7&bRm36ab_7k6;tBd4`on5ggZLaviCVmSPxRP^Q z!fofDY`@g-wUhdq9K}0NaPk{K2c@fj)W6TvIy?>f`A1`8?up-Y{nfwCoflXVws~&; z4fjDE1if$d`z-;F@t~?*dzl5+y)<5J(-8De`}f8ND+ilu^Lw4wg<7ZcCC{U-25gK6 zym%IbJvxl0+5Y`a&}AI|IoR8pxNF4Ce8!3zQzsKFaTNnblc_tLO9UF12^y8a=Ny4b z6uR7oN)n4aMA1+(S8Le*t=j43_qx_W->7rV zwF}OVEwVuyx3{O)H$;r~zSI1G~i?u)BRt z;{gqI8ZFR#C(b*>j?{p$VoV~rQb(S2Zhu8b!$viN1 zY1!1=_m$QoI-e+(!#Zqbx{0Y4`cFfr%f3{Ytbk;XRVGwKEEx5pBO+tZS9lKO+u!@! zblv(ot+-YD8xr#P`R|7DF~#-u$7cp~DvTEhKI$(V}3taL45+b?hhmLuXF<@Q)k z@;(zJS=oq9i9-F`IDv|(88AfdWVDgwd<6*-FPpzALTejnRrq+VN_*Cuxl0o7+6R)|=DF4yD8O`N1N@=$Ow(Ybah;QZyRyNZL;XT6E^v{@ih(`sp zX;tRKwE`=JTjxl~)!>x$!-@pE9uM<6<{ns?330>3o;&NXQ|3w5c}Gi-O?z2Z%xYii znSD?Gi&=z|_rZ#>kCXX6$_?YWxrupT5JxR{I=Pv#D3K6h1lemd(siyv?9i9UQz}D6 z?Cz2oMEkfBQkZf-I3KfTA5x0dbn98vf`ym;GoeyTCVgb_MCh59s%bd63S0(U^ zKa4VE5%sY&xl1~AT3QZ8eoRsc$7A31+Imy@Pp6(InTFVtGH7t|;=Ng3g6>#3{2GEF z{)jYqp0PvMTP9~aH5w@)6hC^xf~9gJhLk@z@eE56a##Yc@@`rYj0S1{dE^f0?U$t} z_;a_M$X!K`DSup-3`K3>Kxa;RTs{Zsv+wysU4F20uPWSqESyokTvqqam!8Vh<8`%*>lDtI~z6h3ocAVRVSP7w=?^bak%*v^hs=@)>m!E%^+`~ zA94m9e-IOj!!%x(wn5C{l}q0&JmCU!1ig46r?UO+ZYA-DsutxL7lWk1Z@{BY@*P=m z9W)W{#CYr+p5325*LAX}f(gwcQR^t@&)-(ftvLHd-sbtJ{Y%ySr*&V>g*<s)|GeUt;MyY2K@KeZ=?QOca_C3b(FYwc+f$u7ln-ha-m9W_rR zYFd9gJNrx<{%5S^QMa@kV7=Y^&tyf1&_fCiX?`v5G|L^gK?Z);7TdWXXq*y&cH?WF zOVF;ZN1zs{sp*!?(#s6jexu3YB7@8dtJh3M0c>xssCJDR&?lj4gKbq;l&1{*g#c5& zk@xJre^sA!gvoAM{aimw6g7Ql$@`ru?%YLtaN-zWZ{Bys9q>Z6mvOzio-cU_+m~ui zFcrn#;#{A^P4mY#=PFoI1(v#5 zxBR8QZ6JZ^a*EWN1hEu7@;H9S+@+~uo5p<6|w>gTmy2Qwa|+05U=3f>&NKnS^A?|M4Zqjx`33NB7{HFSTc zJrE-nSnVM8Q%`~s)jM!=k7Q$Kf6;T)DsUKkC8B~g$r0odY?&T*%qr+iH9U7opX-rZ zpWwq#P_RN@{Oy`PWZX}q&%qQO^#-H8#G_j!we?sTx3#CdU9@d$|dccfM9eFrVYRAw5X@t>uH!7Yhqh#pMrprLx4*8BkTB?C-!Hh&#a*p(TxxWM3UrUfB; zwZQuPbpT-~RnI&B!}E`rjb6Rz9_>12I0*pqT|yt)@v;x1%%u1$X*240%-rW3bE3i| zldiXek3LO%{_X9n{pw>yJdD2OLd5m5#OqeBM%aEmQZJ?r5I{$*9Kx2+;NM}xvb5(^Z$Tu{&~cT~xMX-e9=jhe)ds+{(X`0j0Z5wFHcMRTs^N@} zof+VJA@I7Bwc-fPY^u_n0gz_zmnrVQfOIpr?ZF7fq1yoA&c#-W_Ubmb1cjn+TBSaL0gKmXX^P6! zOP5&P?GxNt9+F#SPx+ain=W?fzPRtbxjO(MhHZ~T$>6Ocuk&d8D-The(x{c>hXL^q zHGk30uhP!zJ6~}gP|YR!=?Jp^%)ffwJ1F}zqIOW~RxEB+&Q7%2M4N_=l@O5kH5>QN zIYoX1#q;;~3FjtaNPx4BeP?oM5s{uZgZghOeQ6w7R#=S1MwBah%J{pzah(O8zIUiy zR^E9}xMN?8m?t$Tp1T>Kz`J5%KcLp$qsL3t)Au(w^Cv4&v9XufF8iA+_p&=XQL?Dv zn`@+c0q6K$9unYOdc1}b5sNEJ&1WN~u&^EDFBIc;sU87VgD?a$*FNoR=CmG;AQ#=8 zbh9s8qZd=a!bO^{BM93wosdu+nWgS}vQDB3nDfit_`TLpgi*g9O1QejH@YOJaiU}nO z`7^6yS97fJ$GEtZ!bIJ`d)BK&9Vmb@Wv2rsqB3a)-hj%YK?%p7n%#K*SwKL4fsh%M zqdbFzW6_-fXm2nG*{%1Dw-F!nACg45?Hd0BZFj3z(m2M6+TQ=!S@x{Y5HIiwDnBpX z{zugCwl^=Z&?%tF%@6SuTU>CYYK=*wn`1Q!9_U0EEMEse3JmqYK8P8bXTGn_+<;_T zy@nMrV4>PB5U*Ykf5FpgK9Tmm-P0NTAMR|gmOU$6n#KX6%|NM|1@U*T0{Pd7I{q~I z4HICR3Kg*ubI9mYe)~k-ZWg;MAffVcF0F-b zj=C1Ce+$;L&G8~rn5VDsqazIE4xdkhD!wwU7znaMM`jby*DMoWm2vllPK8f>*%8uWD4Dw_Vp15Ro0Cs0d_?Fg+F2GZjdB zYE(69XK+tLq(HTAw<}Oh*eB$7uKBXtz6rmD(Cu|wB1$FfA{n_R9?sK zew9`sgj_$RV`E$_ltn@XrPL~JUKASIwnrYya>g)*nJ_Z2*R6X zbJRE$-^$xSAC5egzN`8ap{^~UO0sL_gR2Q`?VnqDa(LFX9%yd$ZPyajWc=d^NuWhn zk^dEmLMOTCbvE1j@v2Sd*tu&sgts`vXgDUdINs54y4&LPK*PDZ#koPlhS-&!thX}BM>xSLYAf!praW>nYaPUrX_q#JicEQloL4rTW8iiOX{ zBa~Y~X58LUvEC01;SsS}v;CfX)1FaGD^r6a-2VkQ61AG=$Wpd4mX6$5BGyt+rja-w zM|r1`@v=?cZjwuuHvul87cKfmXh=co*_?VY80t0aQJ}pX6;3|%) zIqc{aO9PqWJ|TMp#2P{BRv81=cL9;0THNnAxMB`LZ;@ur4C?e0h9cVywdeSiX`ED9>%yhnYL? zKHsM?PrESRSCIh}{nUra91QOV)XK-9=litgXlUgKAKU}2=x{oGhCY#{cFY3r$ka@$ zaXig_mp(0@XgZ4yKFR<;D=IdgT6Bk~GufZI`3Sdh7@rW!KM%MtcGG9R?|jFSf;!FQ zdw}^qG55!+?D91qAYPM+a#v*L?lhk=x=*W=SWTtYCeulp(@s8>rL%H6|9R1iuk1Cs) zsuO@(2LO{EAM2D5?ly;OYzy$V`lYmltt0-bZ!7!yJYz!Ju#)!vH~Q&bdqXv#G08xt zu}{YzuyrmnSN5;o*{G)uGfyQ5HJg&&&IbMuGi5xU*-`$Mzap>;5wJ4??yHAkv3TH zm&QV4jke>B!>;v;A7j&|;qt4|0l=OKuLW_-H)0#iGW~tB1#^06Ks!JvJjC-w*I&Iw z;&}>Hy`Si++$tK0L!hEklcV$fBgX`~!lQ>Y{q+$znkI#odH2*B3`)0SlWzVO zE#aD&UV#kHeb;Om{Ft>VKbEX-x#Pzv93h^Pn@4oWj5p zA#8!A2QeNXqM+~JxJXC@$>_!xFs!_c?nvMhd9|{=jdNtJ9@;+7_A$MC-eXX|P(^Ym zMFVeAXS^ddkgtxdm*hDfr+*yc3C#`zO=JI39Q5?4x zw2WX>N^Jc7u+W?7rDv9Jt~|gGa>>(gx#Im1A>zB9B3GyIUeZdFTu)QazmgtKj;hrU z5Q_eQ`oek#7+}+e(fA;bUCEqIDg9EEv!<2A7WuIKu_XJ%S;7>Axy&yTudbLdoMVfv zTNO^J{>_$qNB8gcG#t+W{yC3}V>`Ruox!~iPPs9T80Na>e>(T~l+)iWq6`AM-TQS8B&=7l0-yvoWF{qSql9G?zB4k z@uJQ;8F2~=<7M;sq-54IDfe6UDiohe`@hO)2ir&si)w`-RR_}KGs9wk)>vRsv!T{{ zkhsBo(`A+Fw3z>EIjOZ-Umkp6bSITqyB^9GIV+D8K;xhZ{t*9VyljRRr}JPjR5|_B z*PGZTI~$*UD&7qqNBh%_)53;C@@z(i?h#g>%diQ5z4@&~L+;6$eD90}aw&3m#OLjA z3#|c`I2L9gBL4aaYszz0)iXu@a~>cFb@RF37S*ie+Nrb&SEDP7c;}ok@NdWO?NLp# ztJn?32S_!?<-j*tB{2$GeJQRd&&x}=xw9WSr^mM$t;)ZHa8)YK8CQU=w0P-;0&u^2>k7vOfv5Nhp%6!IcYB?eO zpp1i2N2Lwlr{|syCy9MxV@EH=gl$;y%CcT&d639Th$uBY9RpKO+bAPE@meN0fD*Y+ zY-vsqA4lfA1daz$hm(>$?PRwf5s6%TNRv|houFuD;Z+2FNcZ=h%=9#|ubBYpWz<9e zNurR`D96EhIs3VmDWCLGPIJdd0I`~2Mxxeo zH|rJbIpJMWg3fprIAq2Ex#!r2tJ}%Age{Z!OuEFkYz2E)W_~p=L}Y%|@L9|p=e5X{ zd!NDFZ4uCV3Q)^+d7%ldrM?-wLl@OJ^DZNd(j#^f8;==(lVZZY8Uk$9vGheQ^gD@5`a@HOl*NcX;0*yAN~M|< zR{$?r8bPe(jqTZ`Ib0+2F|J@p_&-|o#PU?$_oh@O*A+)vx3mIN4~#K#5s7geM2~hS zM6bmmMKPMEN%fN&v?3v)Y`X><{ z1&$N7CL2N0B}59LJT5kT%QFA z7z&g2D5HYwTf`8s0cVnqD-&Y~CP5Mz${iWtC84j%J$l*O8G!`=PQv!k1hyCRo8(r8eh4WmdiZK=kAqCyao4O%LTj61KNj|qdkK`BYay?yxevL7q z&p1TBQgkeS-MK7Yfc*MTLT??L!G|WqPQ(s1e75=|YkNrku0PzzSaN3q6?_D1W#Aqv z-%(L60L@aALoSa^K|%t>zk(97F0GIEiga z0})nY<{Xh);$SZOFIUC?&eZ`RyP2uScci2W;U>OMa>}4cd7Jm6j475*(Y^fpgFzRGW=*E1lLx`hAlukRqnM?Z?!! zO9o!AWbg{FRqBXPhw6?w|xq0m)3kW1; z1dfZnV+&^H-a=nkZ^XfcuD=A02oBk*h-%;L?qSh!By^rIbKaoDBHz_uUtla%C^b09 zsO65{<_#oE!@( z&Eqa2^<{TWfEX9Ok$`V&Y%2L=kj;$IN`+(b=npbS+#=*Qo_BEw#zci%;9-?0k!%kk zS~ki{3}qvNmr?u*xX2<|RMC={A!4hS8Iaj6w7JgCZe~>OA*za0 z&dv}TTLQ#)bH)7!N%2NfkdXY+@NDFIJQDJ9QOp$uQRoIAGYcw_AvO4S&5L6BkA=p2 z02Jg-5DHw|bDFF|fF(d`{(C!E#$u>1R_Xmfsgz^aqx}+I{eD^Tm*u|!CA!k5>$Zf*&%AE)yV@E4vKSJv3uS zqQFCZu1svq!@rq4*5`<^3`v{j6#_y?bHlG;GmdS)Y@QMP$z7HW(!? zdP9$Vc>0mZ3Np_^EcDV> z3HBbrG!Gs$m6zX-TN5w#r5jm771=}zo0M^+^dS0C?9F)Ia;gZ-T-aa50oEh<5jFi` zov?3Oz1zdfb*feF5!>iz4QSF%M2eX0h>ohTucGG4Gx!7axoT957|l!)3uRRLxlrsz z=Y9`w)=sC=nt#CtV&BK)dym+6ywjf{!FL`4FV}_VQM}KYe?7Ub_&Alz--`TXQQRz8 zY%Q5=yBp)LVqQb#KYCOidJcSPN9==#Xn`4GzO211RboNaR6Y2kcCgA;zhCUBE_E2f zt8k_ixm?Qvn)j#`xEe_;p(QkVm(Hrgsp6(@L@Yo+HO(i{G)i2yE7s;5_b1QDM z5Cvuk=a=OO1jXSTOT&HZQ}5NpH1Y4W3{)M*94bTF*YnDikL$HQn_ze#t&f?}=gIY? z_vxed30-PLygEKg-ROq8oVu;PdovD0FyQ)f#yifyB^1juaE{lEX47B##8)!}n;F?Z zw#MJ4FK+c3HRMW9@>(A8T13rQ^6;ICNG}F4noaX;tsjP3%iEe`-rBq)nsME*lD{F9 zvTSiLm*kLV;>KqnKVze2r~i!C<}#lJUyJ2AKDz^6dkzhUEgKUNK5TlfkyWlyfSswv zTRY-g(>tE_@)}y%zwqhm=KpLx*)$w5zszOSorUb|f7n`u@;W`cLE@OP{iUwI#bW)= z)~%w&wX4~wx&`g|R%!UH+mIc`<%W~qjALh>&JZdr!$)H!S2eZ7;sH$LG20X}E;naFUrd|NIu4U{{gZ&C$UG zeR2^}+9TG#L{(Vfh+UO2$-fkUgLK3K82vPe^>>bVdyjxc#KO{`CV@-X;L;;IAFeRV zn|YT-nw`XcyS~!!e4p#N6KZ=d>`GI<#k%?>6u*xmuVa+P)u=o-6rZ=iY~Ys0<&So_ z*P1~XD@fy#Xfs~i#KWQ(CHj*5=t+YVqD(Z6$Mo~QL?#pBi8X(J1@~<#Te%0HLYPz~ zS!6NRx7^RwU#TU7p`>X8>_taxWE@QvTupM>(ZASCZcIA%jWLm z;IqzSh}pmK^oI3n9#0Nll$V`*Zpo(>6(Wrng_$E?GWq)O`wMySdbB=%iG*e|`94;P z>|#17z(u}01MWsfpX=s$iS(hcFt`VqVY|%Na|lAEeZrOTkg0dblx~i8c3)b)ESu)Pl9qUlu&|H=Bbr7a^={C~uS;4x!j?-CiMT%NC5ihz z*Y`buT1H|ofyxjMk%(aQGkoBEE{RrViQc7dNt9TzBO9xvM6-v;ca)%QDf<|+#3og6 z3@^USB)uRopY}#<5hY)JMqFHu`_%1T>LIea6bX!j{OJ*`Jq&mnEB>-ytUn%fAD_C@ zBO1{ll~O9)j1~zB6v}0wB_{Du2A->*S)#d&)1bS{9*?X?in9k0bkJAa(Qd|VeqA>l zFY;e>{%vxODs02dzKMtBdXCU6o{!OUcLc}2!3?ua z`3x*aEa0KFIPptm+_R?_c)prK{unCqgX3p{kc9G)#2-`$KWqwEE^$~u?%}|f>w@*0sB`E7@41Ijv07=DS!?9 zS-V`~GBavZizeogc0Vc2{(Cs75VVO>zqdzH)2=sCi#~eC(M^;1@_z?(h9`%wU3Zxx8;A(tfg9COOECD-~dsVz%lVb0=_f2wKK^_|_H+9PgAE}cz( zDDIeCyFwP~MSY$;D%nBRVxD;+qeS$XgnPC6hL?coj~p;FiG}A+=4+N}*XpjEt>et# z2YZNdJJ#n#J(n^>qoU{)Q~_%?j<03VT$HGFqR@iJR4HzsJL;ah_QR7N#Ox9h#KLI# z;rZx1=BXWtuSoC-WP0(C^O0t()E?*Tp~uJho5*^+_u+297QPTd5DIcZR-%e?P^~vq z*w5L3P(a}#leW~-|J3S4%kMo`!S?CZxP~slcBul+$Z8B$WDO-MIv}`P%At%GgI%vk zqC(qC9}9}08a+fUmS7opljcI$S*rNFN9V2fPK+nV?uvLA6+YX>K8XT|Qy=q0`T>#lZlM_uy0|A|6))Ic3J*#S>@MTT^|;5& zEVf$8@vtX(PU;H##lC;X6OSZ068DUTFQadGaJ1qtWO|^J%O0KJ5v2^rKqXZ5pzoV! z%)H#EXu%$6D+>A$nS%0&%PbS+TJ9`6t>=sqAgcgyMUG z2+YScD*E*csVAj^tsa8hgOCi5IUg&o*`7(7Q-ZkgWSP!~s#_`v_mHPe#&YiuEw?^C z|7TI#xwL>1TYda-q;vlDzxg*hpWfd3^uF`cr+=T8bQZq+yZo(l;ip@$X}*UR(E)z? z)jV2Ye)$Q&SN}y*0em9~lDh!7y|i`9s@mS(WzHoh)V|5?e1=`P7dm3E#RVhiq*Anm zzkk8QE>tgU@xQzq6Cru;WQdA5Y*(Zh7AA9~u*@#_0GPzt#l= zzG&pF!Czh$IQSvKp9s1CjU+x zmu>{yuzt+g9#}BCxbVg0*-xLjO}-o3@-gaG7d&LezhMf@?CcU67_>dNP>j1vwfMT? z$-Y&W&V+`$P1i5C&juC0fBD4x4(R%Q_2hT3-ocHSgPUCkw@wbIdWQ)yhsj-s=_iL- zdPjLNM}=KSB_~H^dVi{7{yggX^WVvzCcVEcF@K+T{p~#Y>(<5bm5FhXi#he;KNjzW z3`!h7au=Ffs(G#`yby!zKng1d!05pX$R5EYk9Qiq{Y)&MUj%tG{{3JcS$N?g2-S{0 zY#W`&;SIU!#=vrb`dXl95$=%EITw&Eqfgw@1?!}to0bRCL@>9ZT5?EFSy4|Gu7F29 z#I*w9N52)>My@nLg;N~1eagel{^l{louMPL<<73Df4AU8429iI-KOe6vT7*GnSJyi zqeO}J$6hG#>(2)xn7M@=_JB;2CJsbZ@>7IX$KlTEt9yEPUi$bxJSi}^#{HkT7LQcb zm?D^dA7iI1Qu0c90PA&}^8jlsqVjjS;(ifi8kQ}eZ)S9%zQ6)!!} z*4#xRhj1lH+nuClA@qCRE*tw$@T+CWgn{3b?FklO!J(vs5=pyUKjM2D4k@>yH(pRN zE_b4z?UjEJI^Cmp1T^O6nGKcdO^OoEpUAFQ@||SloQOUd$M%+zx$`B>uTNllE5G_A zk?(tFs;*XU`#ySjKjm_5%7BwG##5We%=GAxPE29M7NXr$dG$q~^lc#bIAZN@*xf9PZN-*ZgdItcWY(Aj&PD$Up( zJF$7Wx9I-h_G!zgq2pk8qHFn2|H*0m<19J_y| z6fi>U2J%lva>tJx?S8|unILG}j~AFPpc!~hT}r&PEtGk}=;iOihVW$(ceY32INpbd zSP5*IDZ#N<^!wy36>kslgCydQBSegnSs9y)oDN)aGLdUNt}hI1a4(|gx}~=#qRc84 zl`YNnMHzowj^{Y1TOqb}n8@XEsP_p^6IkKs)rp(NOPmt8d0iLvie}mVbxMOTE%wRk z_JDK)A9J`3&tRb3B;8dMd`>7?;^YvrL0=}osjCtzu_IYPkDQq35yaWDj7a)2%C!{m z%R~zV>!^f;meLjtCFAYKmr$nuUlfh3U#a5yIYP;I@Dau!1>H*UlS*ObYZ_)TnadJ1 zK_j!cMz{mc8}SukEbxKr4kNS_f5u`sNuJTe8d&ai4;I|3Q+zYWZ!R!ciVLW1^^PEv z0!(F(2Mcr_Vw4rOg?xD>xu^vgxj7ni*i8TeBTZ+TB zHKm7ja7dcX8KF~D?pzXFg&3Yo#0H(((^qB1Us6asawyc)KPir##YD|n)EU=5ULphC zgXp!2ga<)hVksYLwG^hu{0u{i-ijIvG|Thg>9pLHXc9vC&D6d9Mc5nVr1J*L7H?&m z?<0CV1=f^7+YBHT_VM}`y*6;7eNbsQIXci=qW9uqUN%f>8zt~{k>%5llF$N~S--xA zeN~75NhLu-`LRdlIqz85b@G@0oQ*-;=y;eX?h6m6rxVSr3?AVqExyep&cYlQGN3#h zvQrAuAsgl2R0GSsd}T#jBM5Z2Y)S&O68AN!dH?ALDGC@T9**K+J~h`C)(|Pua_>Yj zHG|4^WE&cKNvvsrswemhA!-W{Tzd@EcAf&{>0TC-Eyb(-X1{ks&_~))FiG^-%Ih#Mv4&0Qkp0V>@hN2Wxo@Ja+@{0#&Aa~|&gOFE#7oV(shV9DwMOC!gVvV@Spf>*abnK`Ki2|qaT z0*$R1>X&lCytavgUYmH0$c^CWvGc94;Kyi zrmW;>V=JFe8WXjU?a=Fi1H%JggMs|iz^r5KIX0oNraL7YJ{SHmW8wqW37Bdinwe??_o#{rxv@IC~* zk_gB^i0RJ4!g_(Mva(IRW^aM!OJv@RMKjtYtfC)yWGRhHa^PBm%Q`|VtG!;A+B&jv zr7y-^%nZ>_gumhiuaJ4&knko0pHMPngTij8$!ULpi0eLG%ZhxbeUZsEWRfMwNc{w9 z>1P?PP67gu#`&8JUur!!kpL|Oa}~rw zPzhobCJ|3nZNG3GX8@T@g4{0smgAp-+J~B4g&)(%Go2mqM)Fkim8|n3w<$|op0TbmC@cUce-$|!`3UpA#cbFTm?U`WSIB~8vBHm_frrqqI4x(Q_Xo=LrRHpb zWDCpE>`ziTG0$M0mMAf!+h}76(@c2N+nnV`CJAS96H8%9Uy7?Ht*~cKW2CawxMB4g z;0Q<5#~I)eE-yxq?r0q85`b_EK2c;D8DZpqqHH42E#ae7o zRRvlH?k%RldVqhn%@IAU=0n9wf?V%#(BGB;>fjvs8-S}a%a>KS;Yf++VaYszbHNf6 zn+bRL4R2ot9g^XZ`LGBa=nWGrp*N|ah&F5onnJ*CD0`>cv&S-V1}!4)v_3E=!>zv~ z(v)Fk+PObsL4~ET%~tgK|7^YN!u`o zKX8Xq`OHexDOR?95%fFLlWpngk41$3Hsn49zPJtfoXh%P60%jw@u1N>1jSBtd^8px z48se)AcH2!p{H=bQ#|Da*E`$Ze^zX zeuR0ZLVe$rJXXLuH$n!9!Fz>mQ_q zT2%_>*ayIZ0}3?>ryN-~<$?Wm?TeY$6|zH3tB2A9wU4^t-%2^ZHI`%qj@+Hs8EOQ% z$BvY2j68sjmYp4~FdMCcUO4s|mFCrd)G;bnX~fpd!x}&8m#c5!jbG={O-nE|TfJCQ z_liwjSG^zK7)|`BHpb;+MA+wM@5k%&@@%Q$yXN(NslR&GG5TL1X0CW_(o1(v>eYw& z(YLOzo<|ejrV$3~2*KX3>W?qJ&KZ9ps{ifmYmv(F?;Ybvb^XaY=YurE1}sq(HP%!2 z`a93WaWqE2mbjWW-tWpV`UfTc+PHXFH`aMP**Q-PupJk?^@ji4#Evxa=iWud=GP7L zZxng;R*T1e5Z|oTy#cT4A@$$XiyCps;I{k51*LIE*vW>KH}f5iV`nEf_FgOHPHSJC z`5QeYR$}D(&rb*yabHHz|gusHg!{Krvi?ckX>>-kCjn z&Yao*?z5k>_Om{VBXeHaZo(mRX7BRCC574FUGD;KPhy|UnT(%>me0%B8NEB1o=KdQ z6*dV|STw!8AogIYOn;iDK5_oFDGSGvU*=p^=3*VktfugLTF{&d$6SfRoFM(lLdt_# z;_d0drZLOQqZU8kxq42A*)0_bFDiL18jmlP|C`KMT}b%0(Adfpp$r}x<=!`)juJL% z&s?E%Gc5zaOtVbkcwzU~@0(&5`(wv*6_yik&pFS|b^M$1TU~7qdbfS@UR7bHFw^9n z=Q6M7id)!<)#`L~?1GWq`<5pYQ{z%`2+mb}4}lD=mKyLdf@TPfDvYDin;Ib$<17kh zf|HH;yWyi89F1GDr0#tl2RdZ-{g;0$-#n>sj+IN}Q~P#vF|R*}hP?-QErQ?889+Bf zUr*k8G9U7Uy7J_Mjn{|WCm+}zeo#VI)J`%@A)vix99NxL{I|J?Bx$;Sz#d>(upYf?~2^jS@% z&eX$BQD*tw46VhhU0H*E!LTkSuzUJKLutS(%FrPyGz`m;!Zb6A;8UMG;}o+QVZdiF z&It1V;J{hUJTLRU!1n@vC~pihLQ0UZ&uAf`^>dxg3T`A0Ro@CZVMulgw8f0k9sB(Y zij^0|n1+Dnpbj(-353G{R&7D`{X|F#fxo0hP)NrLVfaZISa zUg9{NOV8TjomjN-nx|x}xY&t!V8G&r``49kUQ#(182Ehe3?hzra;=ELz8U;`V>@Gv zeHX#*2VnVzU|y(alT|+FilI`~8=vUF_xtGUr=M5)XcqTvQC- z|9q?lb4ZCxUP-k|QtThN-=etTF6rpl$$4ojwn_TODsw=$qVt7F;77Aq>x-HP5qk{~ zvu(6xd&<`j-1i=nhvW|CzI%4jqketgUS9ZdjS|lUlk!-kdH1LCZa(|@u4VJ`>C-6g zy$KeBvre&piPJy4wEp9&kjOi4fvgIZ(DX}U87}{lnLRlboWoUXU3lujcW?Ko$S#!i z)VqvnsJP2#YEr;PT;+4ShjO0R*uqay@p{LPCGp3*Wo)VAlotH_-v?!J|AKlv%F{?&%04^2>XjcU-s#aEJvJrbTa=#k&Snw;Dx`V&!jp4! z7Kw+QbTJ8$7#Aa&z23oWsDr`Zel^JTCRQ-VD7j^%+;>BJTQpASl7Eq=BG_IB(jEO2m|7;|5{Z^ui}!nBR{as*DtlTqQ`Y zed~{YLI1Y!B9b0M|H;6%O51<^#_Mlyc!db=@YSL4{qg_qKDfWQykHm$V8-6>8Wov9 z9O^E={SmjN_TeXg@tbWk8jgNYz6Zh?vHQ`K&}C)J`bRx%5l<5l65cE~rF)r5(aCbx zz1cjEjQI!9DQY#|9Jg^MLLbot-7Rle?2!qA*^y`>;d3q%XDT7(m}+y~hx@^isf@W} z+NBzw*T#`%@_vr#?pr=*3ZvQjm6jBYgs;Fj&Ro4NC*9|ICHyQGQtK=i(&hRlz6$|H z7VKtv5KY)W7Pm=}KW8UONC+(PgY<}0793{LbN9@JvLR*_l{#Pr;!e^{vQhTH*9a?< zq#JHCQleDi%iZU3 z*$cqHYDd3eo|tN?_uPm*b_HyNNk4ay==eZhu}>%%0u=Tlt6JlGnXu)9@IpR_eZFeZ z*X#b9RXdGbrW+Tp0Y93bG2;}r7+~`W#v&&rV>(AO6|A3uB0n2AP3?_E?$JJhC8j}% z8|Re#kY*xkJRsepJSgXKg3xz70ZBEgIvtV`F*weSQS2eF9D}*PlO0kM#yR(t-;S7* zTVpmVv(>Rckqpe_gT^L!cXJ6JsL{UQ^<^@j@|TM@@dPJ$0SmK2;z%jYNiV-Ao0(o< zA$t8{BV$3o@K!H8w0p&g#OyNu;D(e`O*+1g-Uu2a^nM_g1Qh~j= zj1*ewAgB`=YU0$1+*1fJnkzUfhMf`q6>TZm(UR)Z;mhk^mU7XJ)MnXK&EKP7#$GcG z^F~z*U(pCK>{@rwo+NXY;mvgvn^kXz918b$P>@3{z=B~$Ms=4YZJJ6(K$AG5I&R?Z zXd*M5eMY!!wO=rRlWDkn^VNmCew_@*how&I!t_Z6U2Cc{WOOQ(BtuVEwahs$&hqmq zeaAfIf*6$B5@ZoMH?BZydzk4VrF!b}(d^+Ko1cKOuwaLc#=Us&ka9BDS45vWB_0@^ z)MK01H4w|Sm*vFSpi^GPto-hIw(Hg|%WtjZkqhzAbCzc3H^;#8`>$AHh`z-&E=$O+ zSE|wMMa)Myrs#>XwO@+B;rrzlf+2M`hM* z=ayS93}`x19O3+^%<@*o>hAUa^Eu{9@{>t{L?)K(entc56`xd^$$8RlqTT@7mpd*w z4~HFiY!H(Wup&K_rDY-U_*_Pu1X36k&mxSt$#GZDl}}p@MA!AQV!SZa$LO?&AIWWP ztyCNzW2`eWxU&vaoD`q@Xr{z5JGvHDkGUC+-!dRJw(5Usnz*3WuQPjQ^tp`c`O;-k zCh+fvx|Ad95gx4jWgQwZ#{J)~E~24oY>u5x4c9LWST`k@M;f#FqKrJ)aHTb81sYl` z(qW_CJyns80$$F1_Dl==gq=6@Nf zj@*P5+Lx|#1s`Q@7;VH9`-u}RhYU+e*}N9fxm=Yg$@JgGm8F(jz+9siRX6&69O&g* za3^tGyT}g?GJ@+Dz0c}tROPWW5;>|h5^uJ>T_fkY>|fX8F(26WD5l6b*#5cIk2Q>$zTW6#P>Cf=ou$ zVV)ivA_t_O8oez9JuP+4gR>+m)v3(M#oFAA@qt*f3RE9eEs{MEzNI9`5ei8*ATs}K z?yC4qxI;}0>HxoUhf5EoL@de&@hkeH!Hz>oPpcSatK$Q?8*8iMi+obTG4-t2glPU0 zd)gxoGQ-qN@^xi!B>DB@OC^YAu=h@443*wlP?8dgk!ey=7PW5o3;E9S0=gCO@-1^=UXx1GNaUCo|A5H21QqsV`6CdImK1Mu5_AbfUA=~ArgV)+;Loql z<1c~MoJuTQz;~j}vFw99^fdD>08iR7pCd{;2&5&W%o9;e2o5;oJPi6v4CYi?#EcEb zwONp+EaFZEBQ^%J7%UUyEseP>LAm^i9+oMWtHoHwzY2)WM~NKorBBOdq>Nc+UhhV9 zo-MFUEhqQjhjLad^Yn&)eYT_>KgiB_$dLPRF6SXjY3X*V)tr%4`IuGiY-REFVPe?u zYLCdUs}3k@l|9yxo!EbEVINggXT)e(%|wxyEL+ zty}wT`hQxy780W$w}`$fw|Qk-S*d4TX=^(=J1DAC>%Yzn4;+lzDJaE*u929-b`qlj zgptLB03tY?pDCphA{0aL#?_*Rn3K4fRWKzA&Et`PmUJ>G0-yNf<;Zb^ZR1PZE%_nQ zgcK}^QEG<~o}Qr3$tcxf$b|<*Aeg4R5~F1j5gp8)mJCM9&r$;jA7_ElXeKx$Nv{L1 z(8275DG6LmX2;hb;E#xps@w`EtfpwN3O*@h67NqgGd(ZV2nka)1dn}76Cq&gZ#6f_8)Z}2NhvA+XRzWpg6!1kCIO-@#V8z<#DCz0k z(!=qRXoOp{!23LPx0(WYEysM_c7?EQGJ*nD)w){fo$~$C!1_c+7$yLbP?L>W-uD8#?Xcv#`D+zD6 z8SiW+s`4-Cp&ua@6PH#KL;9BW(5t*P@ru+{eX^SY4roA3JfqRWsR?fj7!9l9^@)sU z%gUmGajzHHezxOCp$STnVLtuA>MN!@%f{=H7cg4%ig%Ylw&nv;AVq=sw7S4ECh? ztd9X5Fe#5+O72fG-+}P_s$mG+VRjfwi97=RD=3vdV+!wpd?D{|BA6Y{D8}`TF&!zs z{NT_Xf?lGJCpAgtw|F4u*;fX1UrQUV3|4pt4#vcvmJ+;aAYZh4bHmvY0E}$L%g{i! zNBU(^DZe~Re)GC{D}(Ke30~-uULT(bz=!gs_=^T$2MSnvlOc|i`Pw_MbRWaVlg;4C zYYIeyy<*BMCQ$eh=sLunTSVze9@vA3-AO>`_2z!CQ$Lx%}^2vrWj~75%J>e!=zJUiRKRQ|9#W{A+ z#I~C$!AIt0ED6!H)|j2-fM~`WmYRZprNFV0fe1q58Mf2X6;4UOxhUNZyVblzxQYWt z4FQZT!QnvN7aTh6dF~B+gkYTV8ks>1M?lLfHm`3p)-o6efVnySz?BRFiGkrbWib+1 z$vr8w-nT#i7zJsk3v*@%LYaBU@qV0OI8~z{7!-oX;2cZLi9yC_@L9F+>K7G@Q|`MD zjG!r<;a#hI5+WCw;8cd2kQA{+w*qZYDArrD6d29PXbK@9U$b4wAh5Be;W(iUh{RMn zSj6 zlap(WYUb@aV*(NbxZ^A97@{YW-#$yi;XMM6DDA9k11|r`3=shNUK_1U<`}R$8Wf_X z7;tI(zZCZtFL>we*O4*|F=eZM#M=$)H|{>gN4hY2XE~I;q%DPCJYzyf^AphZRJj1c z(m4HPAoF&?&4dU{ve+cSog6QLBRIOO*r361ObQlVGJfY%?F|r?9B+gMv%x~5pSKmL zeDiQwaTxjPkM`*Hc5}oBa%@5*iXkTbr$azs;36#& zod}yK@uO|4fAEK65*#?4RNE3FNWacc2#CliD!359YVVbQZ@At~K`aDC*#Cghodv`# zLew2Xt%E|!RBn4&9ys8XL+p?y*q7H)EnUQT_>u#EhXFXze)H1dBmKALooMW zleB(OVi5pFqf)|%M)3M1pED2maB}9glCwYou@Yt+|5N$qf03wbaF>;ufoq0t9#OR9 zfeQD#&9P>VC4Q&_yEtsY`ZgAQUv>Go;2cm7%49Ri?C!+uOHH&vJ(*?B8@-s~q4m35 zEFl`uUJ#!I*-G@~Oli&~c%xE+hX}8pMd0yfiOk|y^&~A5a2l-rs(NvApc)oQj_5xU z;?@inx5zp*NMM%@kr>XEa;UOx2$38uRJ^t(`|CegX?{H2-~r@#a7J1iQ5o}x=Mk(t z&QUMQWr^@egzfYw$!TwDrk>A6-}|40kKeqOSR$>5l`vr6 z9Fm`BRkw_0<=s^Oe6jTA*1uPKjUqgyXZv*U(mRUqL)&m3uHW1byYHns^gB9Fu)y_o zKKwdJt@d$<(PW?Py_ERqS!5#WyuvLE?EUk+mr@>2mBvieEr`3HGUZVk0q>(cs16$xp` z>T0M!MOjww`G&fzhwo);&w!;x2 zzGk`q_Zn4Nrj*iExBR{Jo7D1!mPF*vAefG3bLawRDi~UEh zU}#rWpXf4puXgFyu4B(@pT|#YKSZpwj2cgoA5#hLE*%>+$TeJIdLTb1K>B03jd|_y`VINM#W*B_UBcK_O{DK}q;o z$L9Y#1pohs|MTYmevpF0W#MoII9wSHSAoM-|2GRN3ku2$3CV~ENs0m}LeIe3*vQ7j*v8z*(i&xAXQ+=h&~Y}V)Ce)*Co`iighB|j5%fR0UoiuD~On-Dph zD4DbWWs6irvup*cGlXNI#MMGkpAwNr zYka*YvDur{c{8swq_8ul@L57pYuZ^XWNCdtVNGFfML||cc3OTWF*_wWBLSZl8$*nV zPKm-Lgoj3lh2ZXmhNVRWmBjdyW3JWX-5$p~KaI2c@4iWEqS4C?R2RvhJKv8xt#%&YHBZ5U2!98Z2amEJa+`+TAJ+b zvE}V|%iGh-+q26b=T<(>uYO!w`?#|9Y4yXWwGW>@{D0%)hqbK_YwN44YpW}(|C^VW zSC?m3mnK%`MwVv=R;GJbrYNf8st`IryqMpzncR~IYN$Mif5#$$k?MXRfFpY4#lO2Q z47$o(Ihc(wNfWYatr^afxzy+}+*&(Yr0hFVZq?>z$)OB-etBq8%rvl(*}Rn)ykM>d z_LgZGZf}@*gs!%JVEwG|N{Lo@>(&yjlH~@yRLk087E~MS#_qKFtex5x<^FW!fz6Aj ztFLeeBjaCkA3Jb!H1%vA?yQ+nCf0iXnqeJY;AlSQJp7cNtc@0{1+I;~Y_sXMmlOGI z+u8nkrvB0b)9U5+FAL4SqYv$tL4kE=Mx%!DS1*2ipp>jZ?YlbmHivFQ9o}`lJoq$R zWKv=Ox-)!Y`oF*r?_R%}*5#h_-1OJU_!^#@U>suC%Mw^ymcRHYCzCqpH5*L=Qwe?=RR`_c7N>ZTwu zzn8{w0qL{>Jojxwo@d#z*2W|DFTr6MheNhPT$MCZ4;# zpOVH-M2_e@DDDzZo!fP)&qg9uVf`N(kyR2W0LQZm`Ed7O0tJiu50#(WIb1MG?E^K) zUG=3IM&n+x>)Q_f`6>FnsjH>`RBv;lpn}vkV)!v5xUJRbw<}U4?0(Ctm9$ck#$D z+hH^0bK#4l2?;u=M|;8F)pp~erW#2;^Hdo>Jfu=}|4_&Cgt1TKZX8=^YTi!ufp)`* z;_1oH1=xSg#pWAXDi4LkN9%V3N_%9^00Mf9qKEaR8cBPpHj9ig6+nWLo>(JuOto|I zj`>_lYwBHuiR)O1^U(>96c%E_P1PD)mO?9p?e=nSrzffC7dOfJ8x!xMYthZ=PT@K=vV1 zqU3x4kK11YFomC>*S{`m(Z3<{yB#b);*B|T?{hx^_Z$4#%f_?UAi!2b#_)X-(Y6M8 zet5`SXFrFOQ6nL3HEiv+pIbauBXx0j*#6#r9+|yX#=>gEsdPWT-nRC_)!`B6&i#Vs zj9Phrt5LW2`-L52wTh9$qh5dZizw`M$^@%1ANWD>kZql6(eRj`&Oym!MxFX2tMOZI z2c?T+A5WNlkaun!lu<9|T(nYuhb?V8>$RP-r03X&7ao+;PHyP1^xEI;ZhN>&@AB6> zEE$a|r93$8_fP%a;BX(_UPuSk>mEc+rU2C{f3eFLFHMr}`T59*$IUU_oTnNQ zTWfB@GZlO%zgo;r)|jnvy3ioMRx$Il;%C{J()T~>w4R)WT(+b}R1R@_)lY$Nov9K( z$6)2kc~8U6Jtk`;2xg5ms4`)p()_)mcKSJN7lNUAb9-$e=__h@^9-9s00MW#4#l)1aIxk-jtbk$8tuW1g+;&N@8Enq7Vl0{2S z%g@PnGOc8_6mrxUDXnT7umpS!c%1f5EQN0?Uicd6vgh$)4P$d34+>8=;te4qcg_`> z5pFc88|AQfx>k#pp?g!$!mDW|0d37T%(~PT*j?9Z?nS(X0mVNx499!EkLz53Ss8LV zZAj<_=ae`_1r}3|yqdN1Rqu`%(!itIxDUUmjXJj)lMi#Bk0p4Xwy?iR!(KkDSJX?X zoW0&&E$mgWn_6tvc20joXj{V!!nMA@I+F;Vsc*i<+vR}^ur-}2Hq)SvFrWLkE(rPE zSOVYUINfl3@pQ~Y@<@f?zvBa4QgD>`X$0aCyJ|W@1@p-(=L@?giqujls#S+Dy)Z}E z*CX0dM>=xa3D1>sJjgK5K;S%z7mogtsAIp!2%cRRsKXnj<6lodP zsN`7p;&_SQa#fOsa)9rE0q#0-)~sTJh^|wL!99ExOL4VmEv`lM{nQOqyKm@(U{GpP z&N5ev$%uf#TlV5gSZ}E>pD-GwJA^=n*Z6>WhfJPgc1J8bb_M(`b5#F`fl?@aAz7R9 zTGJFcEZNBUtz43BqjNp&*2VTao|6WxKVi))zu^Y^YN@P7uyuML=MT>B+F2aWv=^y@ zzJCXAS=4-UylHQ`4*79*H=`W0wP?!GY^uBOoffaLdHy9USkCnNvR!1UX@$s?`n{?6 z8&l%WyO>{wlPa{hd=q}px?ghAl+?hJ1a4|avMe1v+bwdM$jLG*?>`=#e9o28{9T}s zM8^~~iqf}qDdI6d9Fw)7VIqQhp`GzCr~90ku`B*Qusm3?DpV_aHI}YKW)S=lCxH=u zx!A9LrswczQ_p>CE>TaobFjiE^g`NNi&%6u$HhoolzGhJoM{c--|~=$W8vt+%)Lx^ z(uUAO+-53dJ?n2(`O*-#=1Xrx7ER|rqzyt(hsXOuT6n(1S*c@!Xwe1Yj27fWp~kuqE}2>-_ZusE!0`=?_6!u=T#7LQIKOUD42w*T->V-t62`WJ-j7}lugQHDH7QsR?C(0kXTU*9atbp0aAGHbjR@3)R;vuOr@K(Qr-+>^+SwxL0ev9OrgJD0$B z*9)SrOk$)r%-gpiUz9cDsn9x3kZ0B9WCTp$B66%5*0^!APa1h!8t@$fzCwyb8na&6 zguDaCHidCqMF6a;k=zK(ZxWj!zzxnU&VyxvXtFOPT-(RMo>2mnDGEQaY>S*;M6x#x zbwhO9^W+(_Y zENiGZ<5(i=zksaIkW8t4APyg6eW-Q`9}|H}q-tII-JjKTp`75S4{$$U8#?NHb+aqH?W{ z^BEelj9+G3TjiP#=c%RUySj=i3KV#K&NtF7@X;>3?po*kN+I^x zg5*s%mRiNyiIT7qGnmg8NfX0OCU_woQ#3|lCk<5ja13zee>#af6_Q$%t6L$MB{U>K)!I~cYC zD%6!rJI|yHy(Ei0PHp=d~kh8 zKX%>0KMV@-4Mmf$B8@=n08suoC9&_I z{ok;_hF?~3u`-4MT;hzup(yaLBN!A=8-~&6Q_jBHC>ct=ERK{4#WP((-~!CS^N(r* zO6zWQ)&;$Tne{}!PBRstRLKO?$NfTL)XDLSe z7*0dV@RbRrB@YWM!Y4UAxW(%jB}g=-Y!N5uw6E zhT6%ryfeLEbO^N$)yu9143ePx2?#lA*~yCb(qfhWnDmnPGtfQ>VlXWykfxUu&>pc}l{ z>}CM$m;`WDuR7zNR(J#`i^MS=>cxuZfOI@hie%M8Fg>JR^lAeYP&h`ag1S&IB#d#l zX+DweNFEaO5gCvmcJ~Ows@)8JK-P6yQfvGB;#XgW)IK142zD0(ObG;L_km-d!IB*{ z^3S#p2A01ZW-(+h&wTZTvV4dZdj?ioijD<*#>;sh!{pH{qjOEC=uSx>%QqD4(Im(E zTVM{x^W!g{XEqWYud)PF^PVr8eCx=X>_~%uCK(RrqxZW@xZa#kTJt4^TcC%Fy+>cWhi4_fp@XZpo^mcKAK*bL450|m<+FP9T(f$^e^MaT)hoiz zrPbhgGMXcq;WXZnvx)0L=qaIC(zmrptXFc_tor`3^;>B7ic0p#JS#Z5Op^8JhwVE4 z>Cdz9$d@eW)A7iH#N=so^<64|^XGBFPVrlhpd4^Rzrx8|e~&z)pgxV`EYYC1Imlk~ zrne3!{rsuDEMxsLT?MKQ1I*fabn|0z`=I{oV*|qS1$4GSvGO6pZjPEQ7j6uFL1>6& zX>ic8pSLN)Og`s})+>Xce0hO0kfrS5-)!;E12@@6^iKM0SOzYi42gOd)W!@6dyIan zAK{Jat7f;q*QI9NHA+i*`wKZp85?c0RRVg9jdYC_16ln?#xA7-%1EsjjBz-&@k>#V zV`Y%WJ}{Ctwpe~CyP5SKzTWKsGDKq0odypnbNs}z58>H+nHXk??Ej>Y1)LMShpA*aP5+9|)Bfjk|M@=)V(^#OcUuDyq5B}Y&H-D0=W zL6T4~Vj9Z|y5#-XxP&Sz@jb`6k#_D)m^#qy66>t273`3 zACQ4Jmgy30?i4-MzUu6R0W&f(^64X6?A$Bu?8;XtmO?}41cu+-w!hfb+YwXX6tnU- zY>;Vbn2#Pa`n}`LJAFIiZgybCD}2l_1EeL`o9kV5h~Dt`t&kn5OWzsCmC7Gj+2wW=22(bsd)(u zmgsdKz6H+jw!Lsz;S6L40NYc(eexD|FcNjdw4wVGwt#^JK0uBF*g+50M`jINDZn(0 zwi73lHWe^O(|j6!jfz!dq(HG~Mt;Ei&W%{PUd|t~n-d_OQewrNbIBZuO*#_B+V-Lk zUjnBDXaM;pKW~kLpaIM4>e8@1bV&v&eVoMh63LXB1ABy$U}t#Yvt~O_x|4^|rc<%3 z8NVO!V4!sJeHmhYMhwV^brL33#qbfcZSTWCoBSfv z%6_0Nkp^IY84Z0-{b_qqHszP%Ealb?wMNP()sV!Hs|-uvki<+#?4W<^h5jzs_>GN2 zjw>G;I~}%50S+L_=f9Kr^%-!~TPgX8-GfOge=nP@x=*jI#h@ zf)=vZ8fK)_6nrH*l?)rgV|q~T_fcZ^d4EgnvqR?pB=tfoXzNFq5ajfccrR4tA8eQN zpQIB65DfL|!kEw{_ahY^c6po%8N>|97wJUjQjh<>=ylS;9fS!domZ{VCrlaB?{)Za z4Mx2ZQvF)+#8-i+ajI>6k<+U*PF}vHjPPUD&YoOI)F z1_Cwc2WAewK|dGrXj>E!;VNR^_9E%q#rxpJae7r!NU4(Kd8w&O8(4T#JJn4;?Bm^3 zX3GPo#A?De@Y$1KvCBsO(v$kSwzKerLtohQYnpVG1OKGAHL<#M$EwKMM8@%)khaAc zd-fp@OCjQEWKb*2PO zYUPu=lazE8tNY#v;bD3_!vp2ZY|T;&B02gy^W)&w_{NH7kA?F+8@y}VH*oO?jJ zpVZMtiq7~8{!dP(BnmzFke(_X(7==YwM>=f=Ht}$5H}<=NOygrar4xQ@Y(2^_~k3k z9~!rcBQqM9D}3+SvAq-p1QXZ@)92hSNYEYq^@#o6+p3Vvg1Jf)YR)g$XY)CKD}p_I zEWQW5`1VsY@E%K#u=2d|VI^SE4%84gfBSG%eao{4-r_ZV*w5pdIq+tv#5ITdth8sR zB55X|r}X)HgRTz|C}0_oA!Gm8x9oWsBn9iYTQqivzONm%UF1)H8ve2T_?>}5^wm-Odrs;las!s{zO>N`9#0B^8NFR6cxb1n#EHQ#UWDe-C? z>S-#ylIf-ON$6Q3QJa3;V_gdjv;>O_ zF-kHFo6P86>JQ3}vf%zsfL)wLz{;@i@b=!;nkT;J4z!Y)@>Q~tLR&7J!SOnGasWa2 z%>)erlAsiw!hR1il(=Y&e9ASL5LsTGrx72o8=;b9-n6Nq(6z!g!_^lO^wcDdG$^Zu zW{Il*Cd#9l46WdTxnnU(*?-p!6N(ENhx&N#X$|V&xQJ0uX9BPmf7JBgPTK|=0ztVhx-cVyMksbko^axWfVOEaBm0x8F@Hw2}+W(0G;Jb7-n z87x%4r(R3x6H!PWH~4*Iv0w5-l=n>3`WVk9u2%zmhXd=Ok$?#PZ4KpmQ(bB$+j#kx zn?)Jv676OjL>4Ui6(pYR!qjYR`#M@453=~}ZEt~<;Ga!Ln4XZJYDSwyoJN6{lD+BA zd=r!#ke_+fsA5UaE!W|icAt#o3EKRfkIVM|SbzaJd9gw3V#38qm#tdk&-z#;r4|{r z>ZXT2)jY-AbY+mB#>2G24n&0ll2EjkRKgHS!0DL>W4#K=n>cMX5n!RW@`AzIvfu*m zPLt(x<3#gj1^%L21A8cIr!US$QBsue?#+R~uMrEc6uH56-MU`;g$rG)tKTC;bJyZ( zufG1ieJ8r@E9a51>FZB#mBN`Y8KFnj;A18%o=Fe$l2Y`FS+hCj$C(5^|DtD45}V}7 zoOl7f9?dm?P0`3$+ttB!A3ht75$sxnrt|j;ng^#{>GI)=zSblP6$|DZK+t*$j^M$cboVd-7uK2a{bDS_jB;)`=bdbx7-#=6fnr^=i^jfItenVF-xR&viv#oPsFd{tROvmMXpO`f|-mdrs&>febnqe)Wx(*QLx-{BrV7y0S z1qjX zROvQwTX92p6iE1Z8KRQH{0^AM_Aa;+W&RnH#Ju9E$r5{V^=^!>$h{q>qv7S+ zP*Rb_uMZ%i%$@G2k)Z)S;yOnRXWt8r_>3EYTr62b;`~R?ID?@PgvP`7iE z>e9dyeY}q$oc^2_qR(PGWx6t5o{0BI4HzepcIceMj&8FSR)iy49=egB42ZVudHa_j z(9FDjU{I6_w4@Pa(9CYc1VAgxM>PoXi1Dmb9gfA{t=FFeJdPv3v80#~DTZ%d5iiJ~ zScE(g54v~61+pZlH0Wp*Gu)tp5zUatiwzc?qHzEqA2#J$b1~})EQXRGK;%e|2Z~_g z%}C%@tL}DMioF0y8pB|KAv|wm#_c2s;GyY`XSQWNc#;7ol_27n6a_HvFhW>S2!1)B zSS%Eb6J(bGALbYkEC*hk14X%*mdWVFSOPhkQ(n2s-~IzO?dZ*S5h70FcN5v}AA=e3 z;A=+=U`}o#I_a}@-&P5zh>lCS?8tV^4Xj{fld4a89SV7PJYY%TTr49*G!x|bb(S}E z0*?xwTUtsd=)3ak{1ueQwzV(|gD_pEJdPsz9We>*n0`f=c|^g%_=L0*0su>BPd6(o zeoHuF=J-Rng=GoECz}|Z7i>y39U|N~A#|~&9`0nD#K+5MiTTA418i$!sIMwatAb9z zZ;lB#92}cO7}SRF=~xiagQY{g1f0b;U$!W9y!$jDHUT2@#bVnP;Cqx3i%1EBFuSAE zEtPu*I|Oc^kUcBKXRUQw{GE#?Z?9SEqhAiavQ9UWw0{_V~Qe!(FHARlF^trK=Z1DO_;xQd;@9&McZi9;+a}9D2aFL2oAemsk=AfKKPa+Uh6u1C zG^a3a*b-=CX6jZ`F+_h-@_2w`?LQgN&!nK)uwtwxvlI;HaD|}Vatk#8O7(l zPs*NU!U-oXElCVZpUftAygiwm-KOM`g5f`HqxC2LVXckz%997@DzgmBXh}Tl|9pYr z=!@7$=6{8j{#!t&K-i^a5AQmL**=kNhU_ul9?w_z1W2qjJpn5x=soZLsK9y)E;E1e zh3_@xhHnFdjh=sJx}&!;E$VLd^I*bt7U;Wz;e9NXcxGJoK42wmo0%poKSH|CKDc%GcS^Io_Jy=M#`<5_>AFloPxZ4vR=SxjWvCN50S+y5Sz@vdQse^6 z0V(kehm?J-$s;*K?yQt6$08rKRS@)A_iMF{6EhGjhIqohwzv)uppP}%A}Eu>EN8=x zG$CyY1RXTc5luq972bUvB^!JN#-GH!;Au}^|L)olV3WZ*7YSx%Yo`FRw9HE2SZ5)T zePvM^g()JJvisic{|}13>krS}g?k~)8q*d*hZ5kQiiE^=gxK3x97wG5aOj-`uY&>C z(|sMd5GlW}I{z76eC)@}8*1D~AFtn|C8q+envqq+;Ab%x+d7!s*RX9PV3?V&b_zka zwd+Qc(5@$7c&1BwR%`HDZ|p5smJ>i)@O|X0NxQFM%BPXUq)&5xN8VYL2%}kf-o;|0 z2Vuns1c~M6+t%g@i~2x29&@QpS-somQkK}&(;=TaKDR$i^H06gF5qpJ^zES@*bv^5 zwMK--_OZsepH34W@=tM0&bRnOB3Z`qhHrd2G}b0hl)>I$0#3{6w^jJ}z46zVdzczx zC{+LrWCPnW4d1stJbyf(-~MRAUcyIhia&dF>ayYFn?0B;Li7`@=Te4`+tI#fM+4*@ z%oraHN&?6&PW=c#NDUoTTLf+>>k~O`pVQh0tPKtxnF1%#unH!Bo|$Z&XxB*k^jG9z zCROii+vK(Ym!r*vJqd_B`(^Y5*XPrhsjxuRv&X>gN0*;*g=4uVN4aXV+~BiEA^a)W zCihR+(XY8&aJ#|Zuqh$rG+mSX`k4vOhbwxoS^m`C+P@io3LzhBDm;GV#2tOwr65II za0KF*#8e>uC_ni5_b=G-X{GVc5=esxMvIt^2^1QnI{r|mJ=nDWA#CcCs0~;9`DgLX zqoO*Wd6|Lg^V8=nL$q~f&^^H_KZ3F0A;vZ{>gm&J4zt6`v-+{qfb?n8gZ@$AS^KQ1 zrGH0PeS*|~nCjl}pOFmVp9m$!9+exNl&o#uHy>)OGrKBa>I^k;c^f(=@^$xQDDG{r zb!m_rj_Ze;RhSR>^6absTdv*PkY$mO{o$sR*jd%7uX?dxt=(revO)plVZQ}JkA!~> zobnInAB*@A@=BR&+%tcov^8jcKJJE*Cv+h}Wg*dIA!*8VuR=K3^F`YtIHZo6T)JTO zBrC8Z!;ioHqScIfE_>n3=7N$pEo3N*j)Zp2fMbTB#wX#z@CqpaOQjKNn$0}vkYPIn zjVoZ$$D!qwv{2s#os^3)P7~)dwQEMzlp zd{{_72=(wkWMMXR%jDb7MB;%hSXdt}u_J?3mqp!SS=tF8C7opFA_hvnwakA5tTRq7 zW~Bh2Uldsa|5%PeRVPWA^>&i~ZACx(@vRTq7o z!GoUW!B{-_6`tU2-Yt`BLcQ^3%{PS?;ve$BbPQZ;%lQtvG|dKDulQZSSLh6z<@)Gu zfz#vjXx8Ut0S|3a%vL8I-oIb+CDP*rXMirrrpcBqy_=K^*aC_u@L}F(peDieCI_@I zn}*B=B&mreYzdIJhFvCvIvbTme0#v2EbPW=-wo!Oj?8|oMA;fxc_#oD2uMyjj*3cx zZeQww)6V*WTqZ6;uvvNmB_Z1DEww;v04rqzX8VzMt8u;PFzbVU9)S7A63?*uvOYxu z#5AdMa2xYdYsU+Ye+f@6ZyryAd$o3EfL^&J)FoRlBxSP!i}8xq+&AvJQTqzOa%|PA zGthM2Giu}p%M*G|Pe3jOa_yV=0Z%|?MY8MpUyf>-*fLN|VEKY;4Zh`Jf#RXwXU0cQ ziL*Fiakk;3cjL%Vc5U!S+3fr93TVCBs>uu8nHhK>-}ApQv4#UYgm~b|h%Xmgm*Gb$ zb*+6e(L?jrHlcouhbMM}WZOey?jzz~gqR*pIdO37{N}t*-Vxp6kmwtM2|6Jsbhk`8 zzkU-sli0iIA@y4>JWjzToGcY)Ak{&EhU;YM=L`mA#kB}LpA0(~c;Vrn>#%uEsRiff zXJo{KC5|4w84+80`%n2plWzhYWPVDp%`tf?F8^|vH2=(AzE{l(4$lhwa&mUdI?Vc% zK?&*%ur&1@ZpP7MR=@v@l1|F~FM;~^!aC0X**_nAH$UW=bWpJSJS1!SHa_&zzrPln zp~d&VqHF?6j>Xk}`5SX7^zdd#Eb9->fy-Rj3f>IjSKbaey?*xP?Z1OR1710v^$ZWP zOiyiv?excOmpDfB4W5(C+pddCJ!bN?%66+?`fru#XY7lg7#`(#38#_r7|9Y!-6Sm zXu!H+} zlp|Ghf(O11)wozH1}tx=kJatJz5lLDOU=6*_UF?F_{*0U$L|OC7HJ>fZ0x@m83Fw& zn|NZpJ$_;2?(yF`Q%_TWuYLda`@SD_#edppEKe`+7UScvEF6HfIcE%2x%l*FnBw^h z2|D8A2A(h8R5?Dh+R$V^@YV7=_brTCK}hi!zIPVD0*Ku%n*OtwL~;g3nWQ~3bH3GM`0t$PU4<$X{YzvK(rUGCL`-;M zVD^~YZVbR(cOhu@qb-*W_Rxd`i4R`V*I8H0;!|3@iU}K*k=iyaCHPlT8os*{%?*E1m28<`Vlb;BA#N zf1P6XI3AO)-Liiq@7m*))8D-@dPD^Di!Z(NjHc+!Td9e@M4a*;t!7Z%b1$`_OqsXU z_OOz`z7YfdRv<;`4`y|+HrkVt&liKx#feWL|1H*%mhMU*yW+ZvU0{q3Mz`%$xhvT0 zeyb9|vSpaf`>#_}DN354079WMpE43a-&6FDLyhCvIW}gK6Lw}hi$i(H-6o;~Tt0GW z|8s&{an?|fFw^}eazD=UXkp z0BPT8S$46*u;Xrv(|^10JuLG;AHziiK0xgTt`7{f$6e&khT}KT1cup@xh7D0XIF8* z2y$TkrO?pMek!cUzemgZ=otIA?fD7sZrdAQvb4Wb_j&i&E|?XL8x?933XCQB)HhnY zPmfPO`=Zbe?9ie!_*x zsaMN{_hcgvAtU$h%Olm)=O(lyl_9=9@@$!+zt$s9_{ZsdbO$5Ub6xx#T=8b95(N+P z>oh;w2}~(}Ww)jPaup`!uQyi6K6ZxOf@A>YFoC$_{g7MX3dpnN!3x@Hj@pn!;F*FT zAJ#IUBh(Y=zXQ%91k$f3cjOtFDVzkonsfnG=C6AO;)3dER$~fi*aQPUpg3b2Nu&D! z5zv{wpzkAf;?$UG>=qYl)d93Fjfs{7H}}Y6Pd!cfM?Isj@5q`VS1+yh;7PuHo$wLb zaW+2$*ArEiDh0Bk10o#fIAuz6^!#M*>@n?Ol7YL=rTEUDd8ZZoj6lxB{C@;&2D6vH z{rkmvNIbYSn`L!w7+Cr=0?kk99fPcq>h1MBhaUx+2R3(-C~&5x=rpNn7%QP;XP!~x z_0EJO2p5>en}&ud2DEf-tgKFYXqQ&1jPLDTkXu-|7~v1r;w)|Fkrj`T;D;J+sr#y;g=}`v`LhLV{Kd z+zYufDGky5Ip;Cut5%uFHBVuDPd4Ch%^;YdVCDeXIt;7kDYh?-iJh&eVHE$+YeZoyLD^6m$K! znuk@Q;1K6Ndhd$9bMeW|_=BdvD)j9=oyQ?5n4W5>R?xH%>lz>8eB6dhVmQuug4_E* zB5Da8=Ork(;Sr8LWMn+EDNuG}NK;`h0YO+Hbfx@afuC23JbPSxKS-}rX)#Dh%Bl;~ zFT`?q2+t2NA^`j1YlHs&k;;XT0tzaQyW)*;4fAr^_EW>n?kj)U>(=PuD$@bq1Im ztwCg6tq}D}XG~Za31|Jeq9Et#P@V;RBFxtJ_UEhh;pcNu-cDsr5K#zBbOt6pU7fW{ z1DMTuA?yoM2tOs9tagWiy1fj1KuSW6Ko!mNQ%H&VxV|HMq$IATJIs;q2-I=-(HL{` z^N%Ui!7l5<>XL3ELC{rJx&V1LzFO`(SK#`T_T^KEr`)P~(}VK+MVU!<+FR~K5d-#! zJZ6aN5k!V+-AiDH*37OS6m+qQEo$ffotCpTf9>sVS?E|pbW8Z-;A9hfdGzVL$$R%h z8I-s(P5C*)7v@6@osB2V%&&2U2!~X6u^QB~CHM2&-ZTG1>vge;$OwzEmV3YM9#dYh zuS|WnWGz;l^lT;E)Uto@-ez0Nbq&EdzUAbs&hJN~&wiYGVL7#a@AtFyXFt<-ExBOb ztxoahyewO*8S(pDFAbls=AE~iBkKNn<^6oE^o7;D;r&0i;-0VHc>j9PR(E^Q+vju)3$y6M+#Z~mSCVzy>qv{7bxY;Ja! z|7TWr_s{4H{^ko?{`&p%ZKfx8`3n~ehQQ)lb}+z2QZhhf?InU!fem;t)aM)3 z4N>T4Bzp=lIhvojw}JbWPLh+srh~_IR8!B0SY~TnlW|J!Y7lZ?J`M%|U4RQO99F$BBqjH6t(lyHO9h>7b!EPOeZTa?oBS4!Lw#^hoAEAUOv zEZYj|uPw0WYLR8O0$;hPLb*!8kVmP1L^WCDNJc~cSdn4OK#Kv<5gr%~AoV4)_a2oc zZPw*!)mZn8tvtvY0}NiJTFMi2HYu>8PJ_nFmm4pe)_Ihib4vOkL-_VY zC2i`mJjkR+#&WTf{DW;;SMAV|Gir1NSI5y=WZOT7SQ=ch{82*e0Be`gEGCHL3MvM| zw%%deKra)pc@CK z!|yg_PIs)h%RAiaOdjem`{=V4lC%#6u45F@UjMi1@7puyR!gOPm?PCFmo$cX++*Uj zX8q7NkKph>{!wuQWI$<`JdY+w1M4Y~0T!JDk1EtxfEJU=|1N0M9hy9+1TlCG7 z*Z}MR`S<`GyTic^bnZ1c>fi;#A*!?y#j;|2`_`DNMQv;aRmTiqY$mv`Hec}|dS7$c zT3d(>?TTOHjWf~sh^|kAw^WtKr)=H84Hd8buK|SFsSs*;Zv!0D4~!$)1R?G`_L`blT5etC8a|2N>v&o;bw zHn!m2?ZH*GU#s%2DaZ2oi)UU>72@i1ew1In_^D)k@poI~w|Ae4UAj%2UtJ0WdgcgT z?PBnRm&jW}c{`xu8MVA?wEmhX&B>{}UyJ42YMfQ|!tJGjSN`Qwk-wtq|2~V{!bTVB zXjH4*tV*n}Jo=^FefiI;#T<*9-@iwG^a-fNVRv3m<~%R&^<#Dawm00(y7SXMdNb(woojcxyC$DJj&3lxbK|0BZuFgd z8podZ;Co)L)MR{iHH&$hdcA5p@^%sS!N(&FpoWI2n0%LpL7}@PiWvFv3X!L-=#22Kc=5j zpL;F(eb))j=J8i;CnCaodtYO7_}WX)0wzUtrd96E=;+Lv=sb!7#I-@zm6Yb9nMr}P z@F}~mI(E==Gpb=aH}^(5k<7iVEVT`YJev;I5m*l;&4I29cKom%AochtK<#vTq9EuX z60~Bm__YqK>A+7H1trXX`yy#8kL|kaKd(N8;7<--6Ji>~Q!Uw1?qzIKy?vHPRa{Bn zf~fA?Er)$@fcg;0wdBXrn%(lf*!??nD>&6;2+WD38T2vkG%MN+9dy;p(EOYMjAnv5 zob(EWv))d86YCb*>a@^0gdu~hNDD$Fisb+}QPh6#1{$`a{tZK$Z>Av7!Kk*9b7Pat zlZQwUkgo_+V&jPaOFQr+XP`0ObP}BRj{|N5pPH~UtP|AOx*Y_;qRHMku-W)&JkQ_6Eg>bYSYW0&V?gdX|5l#HxY zMGB?KA-XYNX!8BdG9EN5c(u}2hM;GL6`JwyXo2wxL%f44o;PY$M!`37#8GyLTN#jZ z41s^tta=J4n{i*82`T~GlyegGK~_8t7{yeY;KU}1$XY^jqJxfWqUvaM zEB0N4zkuwO&yylvH!9S_b7NVbf7xJCg+~$&({eR3_U(oIUa7yQ$}$8tgM`k%7JD(AVMpn zp^RSozG0j`K?dxs+G5x+eLExn zHBt=Q{6MzC00Sj%H-iR>)jNXAC0zseNLM6tEonk49n4&_^<{sCcPnzK9ac1pIv3G5 zhxT5!>;Zs9-D?Hf$+(MrM#Ix$dWJAoviZiR9T<=z(Y)EA*o6mO)+ujp)Wx zS5ttLQ3)u+yvw&Lh3!V*Oocfx+#Emzf>+Sp2wz5FJa@ljD1m8JjAx`)vE~Z0AG|d?(dQv^yyMmfEF!k_1P}jb?mc zv0)M{uSGK+O0sMsTTFt#Y_Lg<4BI0YitR{dTa*r?D~1jpl=~2>Wh;qfB2mE&mM_V`R#5%BI3`ULD?MosZ*fGR-$bJw zbY}z4f12&nZZ`ubLz7Q}I>1)Rr4F9P;NHB0;0$Z0BSiMdF9;J54bWr#F{dc`2 zvrUTdIB5lFt>&Eh*%@4+gdjQA#cj$gT$y(*5z`>73+}X_Y^G#UPsX^Qddh6C{RaDa7-}T$q*?3 zYi5U?KL60TDf@Jm`6~sZ?QMpw*+#0kooOAzVk<*;>>g>6jGLpADt?-mGx$@JUD|p% z(kW!`yBrHOBQqLD6hl`{W3;j;Y5+#t0@bF1(SCmK^c)p<4sDgvX+bhOvPy+A88#4r zyX~lzo0)ZMr`R*Qy)JOFDHnrD((u3FTDCi&@xLK;fF;}rz7K#TSlI|G3|4RUU_p72impaK&1t}jT}FlNeX2}8 zuY#J8w4TofTgIeWCAT;d@)y}hzo^Gg`lIyH4zY;R)=8P8$%Kj2EFeJSpTAh-3cHR@$&ZguernSM zcgY%W%)Mg7*Vi@5p{E{S<}fel1X#3MpZ>A<;`sYKjQ*PBkz=(l01N%BJl@0bCskjC zXmOmU7l3p7>>zQMht7!~3Wd`>!B3CEb^C}0`V5g=!-{FkEf3D)^or?QS33wSN9nJp z&LjgoM7lnAptqZEH|tQGchHB;9FL#=aUQvt%U5-t?u}V1m;Z+G z;QQSAjlEowncq88b|R`|;`6r*5gF-p`AZ&LMNiA z&jr;Rhq@5@1D+fa!x%NDq{?tF95X~*$6>{Zmit2!^BR z)T|pyMh~*Aa)o?heHU*0d6^}mLSML*JjA6Ho(ipcrBa?e^GcOT6T7I!RPkh8c{6t; z0^3kiPinQ)>ULEm(s{X+U*LXMBS%l*&v~*WePqG zPVLnTxVB_3nzlBdZCPdyXL%a9kfi|B(kUTJd(z;WqS5U zWbcdHV#%Z>auvkRsdNEu^yly&08C|5ztXZkk5p8GWqLk*g^JWP!wCXh(V_R}qLbLy z{rsDHq<#MbLMw%af~eKsEVfjEsWZjhcsT_%)u*d`@;()wMG*ye`b*N!n?kSs`k5lh zq&i^g^8%FZznmv06(hG_p$HCZQB`215j7hW+EKPB5PdYDqaBLPE8tuS%JZAQs+v51 z{me{r#3k8Tx+6XYYEgqtnYikB85j4~55as&?~O`ny%idnGJgS88Ov3dsU-WZ)$OP5 zs)sJ7>_jcxa!&1uxT+|Qh{9L3JK*K;CDmvou5{@Z;B0hr_)SJtq2+`8+V+&pk!P0`u(!Vt z=c8|`irK~1`GH}Z+F#RHzRaA9H(Q#gf?Ibnz&*dAUlyK=TS&r}~3{ei>OL7R?yknzHkyA@3%{hl@|p1)a($ zA}856GtX&6(3Sxvdp1&k4h-UonWOcO!u+(2Sv*k2iHs~N$TXTGh+cKF*C{H@O`anXWSpJdi;6C{&ME6(b>0_S zRD6A7PL(X<;+0oaa?9wex|eycWT3*)`sA;gnva0O0}n3Cr9eNF#S{E8zOx?8(H)H9 zndbw!SEMW;RvC&n?S?q;rsR1;fk(jO6JYF5Uru<*G)m2PR{H5iA0hd2x5y3wyBeA4 zpyE{=RWeP1bD=+t9t?z2if{btCMs`xG0&5Naqe4=#x7zP(zW7BTZHLal7%SMfd@p4 zSq5KA-&2nJrpS?_73t_pqYDSJp{+GTO^-==N$z$sh~_Me*2mXUffbc4S}GKSi@-C9 zJ-5o#>k!(lul;7mszmMk90(tqF1II^Ikhf$6>jIpRnUD3Q+j38W>9cih?Mw+ZmW)A zku+gCdeV$#)ge0WuQ4k<&vvw+O*7I)sB(+kUaLVmDz=p&Z3ZXVJnlq>Ow3{}TMC?D z50NR|)e);(_Jk=y;nH07)p2f?rNirMaeKecrNDVxbV1&UWFpS>2-&dd8Zr%DOu1X- z7*<@LGc*Hsy1;YvxBmo&HgbgFe$G0@*FGKCKXWQ#Z*SyY1wBf*R_Q!xN}In`d!RPm zuv`f{VGHQYQQ~Wz@i?`Bk!h#xLu$*`UF)V4R)xq{P^kg zGYv;Xp6mxKVg$^YtBk0=VDJR@j$FsL!EimaAeIa_d+)ga#6F1FpA?W-0Xt{8PfU;& z-+SsqC&by;?x{3Im-4(&ARE1kFBx(~1K4?5k)hAU1z`ui_qb*I0()6yy`tr0cG$!f z%2a%xUC)52^ISFTbjaa76-XYj5rBR0fp^{h0#N?vBej__M~wphxh!X1HN2#(x2cp? z;5hIOzs_uS=vyvyq8T?%*1ZC~CHpl3{rc>57|_j}5Xh&{nnPcwtm@{)flXAzhXdd2 z8gdGfnhg6Ld{5ruq%tGQe&Y$Cj2qO?P4R*64}F#pvN^|{XPV8)H=&u9skDfw^9Eua z^Uwpgy)LD+!4V;O?=POoMZ1k|qc_;v6vexRi8tjw^U)W8HT|F6cUy!5Uj9mbE9WOv z6C#+&>%Fr}&ONO4j@W!~ndCc^(_ag|C0hxxJ!+jhsK)uYTJNBn{dfZ3dP~tPeqDGu zrvPnTO&T>hqb4$)cX$yf|D*{>oC><6eqa{Mhj-Z)tn#5so?Te)bht%)!fakan|8>7 zWgBh846m>X zGhBrZ~0yiJR0ekE>kQ41WX5YlP zaR*uW=aD+pfB39%6`pWx#Zk4A9{a@IB@}-vnE{jl;y3^OV1Fm&A4lcRjOr ztrT~2-U3!VcKP>rh2sJ1af-MhSNBNZAueii8d2tvvm6KhzQl*BqA^7Uo?z+_vR@B%y&m>89{CrIe91$NqS1f!1V8ZvI6UMfH2PPQsPU4}Hy(m9 z1hI`5eaS;FH3=!N3OwPXMOTN=SbYgyL9u6OiT7wh*939(LXporF-JVNxQ7o+q zr<)*+@)ReF5v50fzYB2-1q5)jkoJDXH(tuFf-2HtfT(a4kG0H{LPcXSh241gc`rp% z110++MUQ52{-ynD&JPr4hgHJFly_HgNlnT@4(bR4DdPf(XL=f!(Lzh2>OrfLEkl}x zYl`3zNz*ljL(Q5*1MP=J;)h10RoB#lR;B+#Lpf^-$A%%`1j%82t@T9RKVo`c^`Mr` zN`oWBko}l2QB6T_t;{ufn4!3Sv-U{?c2;H zS05ODdtl(FuN~km`mIUxiyoxYK*6=i$ZJWrC0_ruICePRcyL(6xL8|mzsPEVw5x%- zPZI7*i@98jfk=XCZoJVxag#PZ0o73*yf^;-1LNEl^fxif=5_6TYo>RLtSklfIir>z zTFkKGe6{{W?L#~Ry0^xxfnlMc?Sg^c^>vG0F`WcMZ2c(e#HiU>FWb+f$g{-;cU$yd zCYiiiGyapW9<)|ml4SA8&_JMtpr2&8-eRdLVPsrFDjqdNB-!Q`XYZfUpXgw?UtnJ`MMSLR;Fw@iqBYfs$XGWqEVQxT5GFrx zJaoWb)lhBUhLf_lWs8KK?Ycf=#07gmRkXxdS)BUmfvdoHm?fH*N|$>C(Nxwnx4 ze#{N!<<{@*^7(+rUvJyp1NvW+wFZk^c1PS>Ms+(&Y!|%5P@~R|jC5TOcs<*2a7^^j z{@;oje$2oFlIwq@hvb zuOQ?W~EZL9esnE}TrHbT<@vu$CZ=#1mPTvaA6w?V?j=(%O^raqGjv(LllM4y$!5FS5#KQ}EhluMfn3Axk-7zf6y zcY_*%n8-Q2+7@05!w@l@Ogz+lP?6mgo}g=o>LB1xDW?7xlDh9wN*M;wp1q~Gbi;bliZDmK)2i>R~HV7Q3^RY>ej=HdfH+c=1oEGwR zu1}=H^w_eePEm9Kf-y9KZP&8rK~j-iRNdV1&z*ne6|gG<@yaOHl|pw`;huRsDpo4^ zSOl)8ouUGegZKAn*onnP5Rhk@Hpyp+@6*fqwJIgkrRgLl(b`p1F!iC0gtobI~vUufNH>vV;`X;-%YW_^H`4sTF(rkteYT zkehhL@7>Mnp}nil2wB%hNg|F9Jkz|*izP^c&0an}Rpw|-{f~yj`?Wh0U9Vm>3o&#N z*{-qGcgWl@aNfR2xU4JEg7P|9!6*E>bz#In+{goARLDsx9^IPc`!o+jn8FDqSV- zEj_;XJrx`V5Hk32?@=G{-XkeFMe4zBBIpybyfPx(E&Rsxp9f%U<267TC6%dCz`jSAns(q?_IYfeki+-( z+uZxApuy+R%P0ugGx_ZpOd8ce&*({)eN);%*9NI%?s%C&?(`@S6 zDJFs9=q~hPCCn{QM!q}z&IA!az)t~8Rf5HsWJLN7zD~eQ>}_yl;K)O$p9TpxRw2+p zFg-~7WLhP|`)(1L_V5dsp{dY%MXohK&MHuj`+@lQCZofe0<9xF@AB{P_|$fjGo$=D zGm`u8zUi^oR@2oLL9)#DgilwUbg|^qYX>(jkuk6K6 zTy`h+qxtD|V4TIjQB}J!=g(ta0q>R$0{pRrz<_b%;LhX!#x?EUd(q!te5Yv zyUgVjVhLzEZi*vc@bbOS4ql5bGe-#4nFGwz;YI-L+bHNY=A*B(CN4kBN3a$Sv%n%B z3rJruyc4$*B{WYEmamAG|Kh0i6OW_ev~&M8vUVAifJX6#qh&l;4eT zu-&S_W&`DZkQZ+O@M_^RKM!_mXN5R~e0paOEf2z9oR&`p#vB&lb9RG(J)JKf1!b&t z$~J+X2Q0}Xt7QIH@l|x@s~~7^x(*$n*WUo*UBbhFlvgk4Z_`C~P6uMI(7znSHX5z; zbs@Q% zw(+sntC|rvRgp+-1X#;_&F&QE{0Ib`fhn&VlAUfepOJ?t25P-5Z#o?%>tRGt|MCK{ z)@{|)et*)Tf7id{Q|2(x$`~v#ZKyBsx#^6-uKCcZBdr4f!^ihmD1C6q+b=K?)u+D~lr;X4QV-hfl)ldp_D`OpL;{Q}!6#OzmgIM|q!Fa7H?t59hh+dYs- zo8tr+cG1k>O`{GhC_X2?t5k;K#(4=KAI`f~S^e^&Hh+E39f&k~ zlPmV3z+K8()@Vp+-Dr}hErlbY#4y^UmqcKMf;^M%!1du0on7w{XW!^oU&+Uiq5H~q zbNp(T9=IZLYBb;qF;9NXUOMKfmz&}BWpRR*WGiQgOCsB z642l^jM=aPNW3xr-{zON7u}3Kpz1|M(|9E2Rknj39ClpE0e*Tfja2&EOIU1X_9y|6 z(K1ekiS$D0^4ZhYYb@5#D@YWoTXrSNP!yV$5E9nM9 zrwhjRK@NhOX_gux8TODkaCOIo?X}f=E8Hs3xA<&9OpuPufe@vEs8Yz=gqm;+6I#r6 zH_zK}PWSEgm&Eig)JQ*rH4zVrSF+7YPojUceG51(0n-@=+ByTkF!>;|MA7C=9}&Cs zT@4KX-i0^(7?XLK=S>;7zMvcD&&^7oF@sq`obt`wre*jYeTJ#i`;wU6LI(m>CBr9j z)1H!1eM9nQ+|K8gwG5_seKtykav}NP3~n{v&v?h{?eTIwSM{B}#E~R$s+=xF-f~3b zZ+3M*BI2DxfDX}SX!+#=mQ4)|o#|vpRP?$K7*r*`3$$0?pP+cKyGrU&HvE`Y*U6Ov z$1r)qMVD@>MAa4yR<{Q%@Xf#>{`BIfMf=WcQE<0Yn3hgwT3=(k0lWzTZ+o(k#bb_C zDhZb63(Gg6yGvB+!Sw7zS?76ViJLT*wq2z_`3OfMA1#^0B@a;9vr;}zQ0sK*3!VJb zU*>yf=WHHJ?@uy7! zAQz&U0zPvh#^;Dis!J9AKz0{dN$m1Wy6$n!&_$*6*EyhMUY)g`D=62_bFF1^%qxG0*=E7}j2A)1Cazu?m)JSX_1aIk0wx~u}? z0b%=N>btXMLoTd6Pf$3o;NWAqzkMCohsic#XPxY4Js^nXy+RL?^qQt~^#;xf9O)#! z?tjAYXJgnF*|^uIa@fck(H_sZbJteK8FpN;u%woj#&ZZY45uL_zDYmt9MIKBHh4FX z`R8IMR?4a>=33LM*qRSZ9!aV)^RBJnx2A>Ag7=u2K9}S*IZd4%B7VUH&59jA?)M%zHxy3ymy@~u)=bE;B;Qr%x_w#-= z9#8w`|MT(t7s$<~OKB^ix=%j*-!*tA?R!kzlTTlezdQQVek9+2^7&`p@2B7XecxY~ zAz60jBos5-FHR>(mOcI5t%>`VYX#_ga#kQB*E5ts=B zRthY~tOy>VoBpejl}dnWX0lF|$j)E2vyHU7Mx6t%^Z&V%EMmyOupx$^$0XeNbwSgZ z?UP>vanFa1yS|F@8Jk%<_9ODVoD_vqaKX8YzpwL9VH;hdOPCdprd{OOZnAdi#A_Qa zIs?Gth^=Nbj5kC(d$c(C);8Kwpr^nf3E=}k*2W7Ikx;H{D8W$iT?h)_6PEWL*`Nw8 z8A5g!8SSST7VjtLHp4!9nvYAI|iLdj*Uapdgw0PnsYoJ)!d2vrnbd*U`d<6$IDW5M7!`M-w=;3F+7_ zco+bF10Vz0$Y&M8D>R`mo=_}{!M6$)QKLMHp-O^*kiL2Xo~Gk;DRA!pT2;ZuK@NJ?0X=>q5#%M1}?=TEO_u0E;@&U zI>Lkh1f+jo6~9PAt@$wSmz}N-7jB6Z4pjgw2EqyhQ87dMyIlBp8p<6&3riH~;6aE6 z=zV6Quem5Rk>wExM;oCBxf)StCF#jVpBLmP@0%D{f12G}Ue zf>d2m$iQ#fwpY1-aRF z4(yc=PC)iu$#+non3|)$^F#*=e9Stdj4_wxR3bT<%dJ50T zoG#&}`6obkhSE4zAy;AV#(pp;a>>!%zA|MDO*B*Eu|j!h z)E~A@IyYtAQ+O%<=8Hg({Uh^IG-hik0;oqUW+PPM(J(fW&u14Xj$OGu3Y!O@{-EK% zc`@hMB0otP)m~W%nFz)9eZl6a+aaLKO_J*s2#Zd$pbIFr5^{rGV7Oe@R8|vuO}s;WE(0P^sZQlI#t)eynxdch55@3ZzCFZNex#t8vgUH zua73Qrrx=BQM5+mPFr+C^W%DU>YW!t4SSwFR0Zq{7iGo1b6@DLF{bhQ;XD7M>pX*+ z`ogUrLLdQBL8L?I2#BFbFQFqvKt)kN1E>@cL3$50p-B59A_4|cqzR!($Iv@OlwJ%) zK#B$|G!2(`-nk#|%>Hs_e>gMyoH=Jd&tB`d+R9!}B$d8OdiUP*UCUd+u3I&n=(YEd4qA?myY8uI9>8^QsolsvUOn@P6gzqlyFb zs-Lq};Nz+yPx4$SU$-oy@&`Ye>%}w9)-jKNx!d zaO?dejs{=320x32fCmjh$qgap4PiqK5nByW9F5U(jaLNT$F>Am4%HIp>JTsLe!JGh zZ&gDcU>vl{^&ILXhsy7THSz4dJJx((#9v2psN?0V?L2CN$u;knHHrw7T@q+6OMaI= z)Kt^bEPLDx9cr9s+)=)(3;F zR=c_O!=&2X+*)aicE)UtfLyDFK>61ft&Ll)5^}9QFPd8CC_v~3WNZ6IOS@Tl&_OxH zWUIVjt9>H54OP*hCeYdE&_3VNIIh(J-|jfH_;4UcX?JK;vuIYfXb~Q6V?NbXK|6=E z+I3qx(8H87^Bth$4+#0T-sB)L#|rh94?GV#wJbX}!^ z9&vQIa?~=W9J;HvD1VZBmcu?k%ggz~tF5+sI0bty=T%#JQT{pfwP^*O&1+#3taPYo zHxq1XeDL9#c85Q-|K+VFL`9v5K;LhN-aCRF5`uNPbB)<~?V`y8ro)|>3NrX_7X;cX z^0ysla3~Nts zp`4oEZU}Z+Sakbu55AlqZmbx=igqT?SYcv zp-&Y(%Yp+Og2M{iEerC4J-NO0P>S335ZID3?^WHTT@$EXb1XO%XGtAx?Ux>IDfMdk zZpmn~NbW3hq(TKd8=zzOVd~kDPSyEQtk>9&d8)A&`I|hI>wF)2r|Xa9z{!ijt$FJC zhvQE<-pe|Tfk%dBTd9KoJ`#q<`}WE=~i3D9lJ4cx(W5)dx(70B7Ij8>jzwiX{!f;)KLl2oJ%P zIX(#yU^{9wKWBJgvn8`W{3o@9X2){5|2!Sz6#+|bmS7iSUV(fk!@B7(B+=(TI$TvejaB@dBY-&wBlZ->K?L94rs#8ZK>B?imim@~i@xaq)jW@_|w_LCWckUks-J|(CEtLNL!g9+#F#6*DotoWlSa7k69!Y81e z&-8UH_f{i5Iv+%03h@C8 ze-~R=0Awvh15&3o=rr-i;8XY#a&eKikKjcw2Vx9&7T|Avrd9Qshzrpx5sG>W%!GH- z(>g(8boeeBu}fK18AZhpplCkOLmy}sk6=Ijh0P*lAHdD{j)9VuVO@CWd^*B{45;}B z??ca>f1J~ehknDe^W1hAA)?|buwER2A6F@A80Qfp4)}`Oyh{#Nxl{e`$1t9#Q?rjVVyp(pExeUKUllZ^bI;90S|5cSdv98 zngk$tRi#wB;dS*JtEAjtHlPz4bQTYt0w5$_ul1nkSi}J}FvM3KWI6`Xi`{170?_HO zR9!^zlU3h72x}p<;dK-PKYa*>Q_#pPpD^YOtc|X@U~C$ADZ{aJj%x|pM&inN7A5Em zD@i~NV#FaEpwE=3>z>7+i>b~%j4uv}D99!Lp&5&Bc=^+_<-$k~B}2Gr3|l`QevFW=!sleH6iRfs*r7r;Su9Imnh55+7APo z0u}>%>-y&TNAExiy|m%c+$ZnP^aU;y{4HVW2lEVhFVLWP){%Sd3SdkKg7fhS`t6}Y`%=h(8={`ho|c;#Grl-m?5&i zY(LjSz8E`vybg_GgBQ5*U1=v>(nFOXkSE;_4{wlZq9K+Hee{iD93b!}lu>@_CpAi8 z742AYvFZEpsD}N@xU^BG9{SU*e-``QNS$~tu8&$VibBt$ z>NQCsoN*CIX|Y8LeJ+S*K}b2CKB4YJ?hE(lr*~cZGbG(!uO)P7NXI_=r}S|K-Kc!p z*Npykc~nUFgv|ESXnpj*sHo`x&VbbXu9z?Q5&eHvwk-|;>TJwnIsC0Id6n<-CLfI| z2TEEOJI?HVsgEe8YjcQauYDMmVnqM6Tfe1Q5G{>+5tMvYHE(SDdCX_{#D_Oleayw` z6Qlwyi9!Ng%QFX%@2Fkcl`6qNk%Sy%2f*?_`eh*r0gw4u^86=diMipIhrFV-1f$=k zYIz>G@rRq28Wq?vX3DFg7`fXff_|TUO@+gL?e?W$q7CqtDHs{;F-AytHXYjex+PJV zp?`ny+*7=Bt}{lTRUlN!55#A=NCrV;d8wRy(~OUX7FL>^!ywz@d85QAe(GbcQ$0{& zhC^UU+>mM`F{8v4p_$SZm29vaHLF>P zvW1V$h0w^iyyt5Nr0Xvzp94Ps4AnQOOx!c-%`!7ib6JKPw?4lOAk5 z%ic}*qNjnkJj?H$xwNbOU~fd?M6_Ed#>Ew!EL3fE#bK9!ZgQ4#KglB_q|+tncIa09 z{_XGxZ5}5H4yFA&TvFJC{E*p>w`T<^7tZ4Rm>*<1d;R;W=9GB+(0<7~EQxo;i@{eJ z9Q|PST(HPBg~9#1Sy!)zd=(MB&buP6cKewtUM`_=E%8yM`dW^7`{7bT?Ackj$eXH1 z?yvv5KD+eN?=+<9dGz;Zwkf$%x7JE8Waqf0K3wEkPvPl3x>fc}_1LTKQ|10R&&qA$VakRq@V^pM^Tb$Ga4ss`)L--2GeM%dPG>`Oo`JMST72q385H zCDb%;Zlp_L(R)>E-_dn6LaktVq3Bs;=w`WI`0wZMrXs_>x2S1ver@B43f~)Q;Q7m# z8@Uk`@nMi;-=9-aQHEO#YFr7U~TUVeqEfn@K4@ePIe_0&u(Vnf5;epF-3$LlTCv1@Jr=W zQXD%m<}#2T$AzY+L_(Q3f2#MWd{+bq++|{&CilR9;o)j`ZG_dfV>Msp5U!k7{WOxX zeq{!SBo=>W?}(s8D`e#_wtcc2YsLfegM_LuaUP*#lzny)ez+w`slNo};+XW|zpj?N zwkDyKg&guZUSiknUB!hwbk%3?i2=7wI+h`9XEhBaLQ+85Yr6x%bWkcoQIU8iGb1%5 zt_B_6*sJwNln|$LCA;?5ZP7*4nOK=v5tBp-sd&;QZI@`&AsT36l8Ex!Fc6K;Gh>$j znCioAq*wR){zYTc=trx|Z0Ad2>l|r?LpQolpyJRP4^KtR5KXoJ6sDVyn1v6py*jJ*qc}zv>Wj>VZfm-J4la(9 zZN5)={F8q0bWtK}h;0cl^h#FowKsD2JS?1!uH^JyD^`BvVf8TdYTnwlw_0C4tRs%D zl349Z3?)5npM+j}EoE0~anJK={?WA(Ry+0^Hm_X-u@igx6u1zB=xO~MjncN{5)UKA z+OZo(DzGzF&k46SX(J1FW+xYNDQ~n z~E4+W$q5+er zGoFnGCfoKfrTL{XijkN|E|yhy`^wBQCPvs~*HEf=h7<#t<;|h6=Bs3|1=7U0o+Gb| zKw$`@v~|9}SQ9O(87j&hC_qO)#7W?vMBH8GtvWy|Ds@Pz<8(N8!j!Tf7O3GLJc~K;l^i4fGWyn&KB|ZJ?N-u%(872Evjo z&cosX(oxAs2}$78|qunFNO;TB?J(pp6Qywh860A>_?Ctk-oSk#1U^NPPPzXN;4GYBD(2|>8D9H@{K-DAfDGXcw!H_&-9I= zd~x`1TG8B+py~yP*ha=Tw_m_67Pf~bUe7&z0OIna^!Su{XP#Hodg&o5;ifW>*kEqOBE?^N_v?(P~8BTvuGJ)nmP+0qCk8R(RogG)(}S=39&9Z*|wd zD5X36LJJ~fr5^VITnq546X#|*%$8V4VR>_mEOsTR@Ig;A9+pE{qtMB2M1s?SeAST3 zDWTFihxy78p{9#idkmeQhJtT`)ges!J_O4lh!3PK#wS`!MnOQ7plF{Y0?^Lpy`UKk z3MxswGsJ*^@s*||r2ilsxRvNZWHELJ-!O}dB)%DaK^&V?Ju^(4J_57i!J^a2J1z;~ z5NP0wMi?H9$!SPbhBVJr`r30mA4(li0)$Lgp2qLN02;AGKnObaEH6Q!6A(huH|uY^ z=hGfVYfpb5Z;Wlnk_kJWtm}UG5ahck5+FDyewjZ$Oh#({N zc)~%6BGziiVLPyKAvtxI=He`TS%XRO_M6RBFCe=8ao!{X?;s^{8vAwwTYzVJgp~|e zXZfZ?^hvKx#794%5iW_hNBQXUW}SM|S?q@6KKFMdVgdJuKo9=oF=%29wuyIP`~}}X z^_EaUkus*S_68H^ToQ@BblYqw@m5FlD3B^B4E&`HojQ;n=1t z%(C504w6r2VVQ1=q5y)^>n?o)J^p2gZPn_PCF=XPUb|)-e$B|lzuU>i*otH{FAK^l ziMt>G)!EVj+Y;_N$A#I)uwcP4*tbk7J(Ppk+J2&rAWI-oES5+qpd?I*fmJXqL0GLj z!=!K=xnr8mtM*OtDM=I0?(R?E_0sZ5k4J8t^-_V{-vC2HwUuNc&0VAdGf^YW09p~T0Kt{5{=xVz{R{cc87KOlscIVHF&epN3l z2efL@7(mQOv;lo{VB&gi8B0E&YNQL|RY^e(B$5G-b6AR-^Aho(Q5#k}d_h6*fMYY^ zY6qC?^VBtDoE273~Ady#cVk@x;RyoWTyyme! z31^=(C*m((!V|vzh4=)UW8J}48*v&WW~C%vJsSdh9q76iAdt*rV+Q^b*2}Yc3P)8> zc@b*?VTJNr6ukgnCC7yk3FP#+t?)R%l6c>^wy)#wQ!(S+Pqonj;Wf+9&xV z@MU_%sF}53a9o(<8Qb7GEBdFXU?%Gv73Yl4o{nd%rlloCx%F@aEVt?%3Mu&#-l{*& zD*d%K?W#I0PG%f*!5(ip9c`k{vP+FM-HOA`g6=$r*!WCHQRC7YuNr@q{Y_HgI*7HD zDK;qSwMaX$gSdg zLeD2M3Vz?*)PL5|IFlKW7lFF<`e|;vsBnJuP13G_xBgt&#I5!j{)U~rXZrcQ&Uq^+ z2l79W5BWmX&IKPja@R^vZrICa$y<4LbK^ocf6dHzcN9!LoPTw5p>xOntM5YJ&ioOZBXz-{_KnrV zL#IysOx3P^)7R%iIty!j^8@eZO3&v`{u7#;a9o>M_;<;%apd-^9sZf<=iloW-bnI) zHx~M|uvqwfeqC|4H$K19X?C~AVXJL%@3+(5KfVTA!R>(gbe4jjZx)uE7W?yWmhIfB zd~$O}V}AI_muItid@eYaNL=U0okN{lkV+g!I}SREgDv9V-*E^A4heTg2|IHtICJSb zpSkSJecSo0w=++qGjA%xnXkZ^ztZ^|svte$&VLIt4b{#fCeTwPeY51;mw^QlU6W&@tjuk*t(YRXLySL z_lLWPXu>c6#5wF$zP5djPD)FUtGfQ7TqLymDhf#oj& zwe3w7{(6ZD7WcsWO;0{_#`~kq-40lmEKFFg#rPNE{SH)k!5b+D-m#EJ9sY!2_vl9( zuk2<)0Iio9EWVvfv3|$|+eT1orPw|e97y_cChY+i^1A~%{w_Uzv6rax7qsn7_+C)= z$n4^k=lDlRR@(zsA5ACoM#5#YgfL=ZiZg3)iAjvQW_B^yXD88PBrY($F4@!0lLWr8 zljJr{uq7pYxpF?Zf17Cba7zjXhITovOIlfULume+>KHDBe-OFVY|<1Rxu^ZEn+$<@`Lri z*CGc;0e5;|I^^A(Yp*&v_vcWxSWw8s6^{|6fB6s%MDPomrK1hvIYbOnWPHVXlFnXm z87}b^?@JZpx_wH;TH38Rs8$>bLFLx zrz-L0DIT@bHu>kC$zJ3C_09UZM96!uS*0@DGIO06m|URzOwIkVS60c_SMBP(zjQkB z2PrHx2mV+dDGz#Nk{5ome2+aCb9y&~_~nXV#g*Pv5yMpZ5T&n!*%w?#1vAp>gXk{j zhd;pzS`~Axi!Q$ly}0#cJoJ1aEsh3yTpDa-J07a`W3fF-fYpuF<+KBQcDX}IHZ{if z7Gp?pP9&nQWVOHRw+?y(J zF-k{lCwBDw#72<-aD94jK%>lk-%{^1!X6>5hwO$jw8^iZ6($HgcAo;h49-kdCB z5h<`=9+i?%ulQvJiJIw{iyOnPW9L-+XG)6FfTrsPfi9(z&y@eLNilEu|G$uWOfwR_ zFE5G`$+ZWUmX+5W<-7*jCcS+VzWj4QW?`eIOAlXi)lw!0#0&y{J5!V>^Lpd@Qv5rm zxr*AT=<#oc9N{tD21Rwd2pKa8dLklY)o^oJP>-_?EK?AtBp|Zk1r$^LXLDfPP^#-t z)wU1M{$`xD(bcVY-ttu%>VVUc+!6HcK?ZQF?i8!qN%19jb6s_;?%{FGtL_!>o3HK@ zi50Br7yr+(WYgt(BTn2?01kOW#t zOhianSV%}fK#ZSXoS$Ff{~7`UlK(p;DJUc@jFv--o=1yeghf>ZMb(7F)P=>hg=Gwc z7rdo!scD9jT zmX$%)HSNrs7oXr{o_Gio9`VKmaK;32#Ru}G`pG`^)p+h}L<+Qc6Mm&E`pUa#V{#0( zHo>4F$*AdxachPlCC98I|61oumyZ009eIIWuOi!v;_3@h$OW0@FLU1%zAhvc=e>CK z^eHJL^F>N(PGVAKe0)*_KG8oc$t@`LwqLrVPqLF&tgC0JyJvu>yU!yx55Ie^L3eKk zJ74v`ZR>r@*5l?imm4>3+1;|YbF{nWWNYVYapQr(Rd1bZ0U9m(k}VZ_w!{Q7Rvg*kqs=D#MenAG)WPgm55Eo#P?Sd-#aGP-F@=j zBdgixd3$hPM`U4d)ayZf$!Ju?r~^QFCu?|SE} zduHDEOf+?lwYK-SwRW{OeQ0TDZEt9zysz!9FYl{+J6KmVT$eZYKIc*U z)4e0J9V7D}M!&RDmzqB=H&9njNAvhf$HZ#yY~0hv|*CqrJC0R|H)h}a~!C7GxUs?gHyZTM{0zK5M7HK zsC_&35*y1dWL{VDvB=D6(6RB_(rBFeOR0SG`m%{~`&!S1!Hai4#j!j{;C{g6IaTZa zsmy8U{kyq}dtV0gEgC8pT7tjzjtn(aeffZA<|u9qA}@6jx#VsSH&(CorHfk>ST@ys z9m-KQ)P82XTp50}=;dWsh3(@d0^M(qG}mu6<(>P(`7Wc*Bek+_A#$Xp;l~$oWhUU6 zL}zxa7LX~X+sE+D5)q17{j06nJ%iMT0OK~WhFpVwjHmZ`#i(4#oqivWl^sJ1O*)xi zhi`%DzoMe^F!F_t8J;u%s|?OHuKOoJhFKlTQIg>q(lI4zNR=`~$5}m8yO=sp|7+wTiI*5}6&a&u6)xK% zGuhHnrTRb0J;lSSTk^K~N7XB-Aj;8L=?OGuOemVtSym3Uo85d-vm7&0xAt#kv@&A3 zSb*GVV6?55CYFlDE7kpmf;Sn?3dm@*52nb=csaiCf7#!PV#6R zDbgED5R-eXOplE6vyT$>%)gJPWc@9!*c%k6jzI`Voe|HipYBvj6KU%Ixue$y=rq+9 zSlRE>9Q%tZVf*T{(kHxJxA|CPYt`1;P-#5)Bl`~eXP<~pFNdw>)V3%>+q}|!SR};9 zP-e)h;a!cSmQ>As_Gs#%wdm19oEZb1NJ5$=DGAnyzk(JDm{BDl!u=9xM(w_M>EwZR z$hvdZX6iU!4bkYCw6hr()F~3ONRvdM+s^RvukygDz_GQ=TfTQoN z%q2%RD02l@=}PZz+g@dziR7|JocnV8lj_iW^rPxO7Q35W%5Ng}Ml9l6e%ALfuI*2l zK4KiEi0bKV&pSkE9q+v8`FPND!Mg3|#(I?=ZZl}C_0RWOk>9|^4En?v{-4|z#@T*K z^Y*=n)fTot-8b5IG>oI`ib#L6_jTZ^^jLJ>&_8d})^G7|;-tE9*BozXpSeX16HO_E zEgd{Lz^9qp!vu-i|U80%gE6!*A-BOyni8d*(&irrz;&Pmm z?1x`D8z~~h?t)l%h_Pq;%z9f>UJ2ipFXEq?&UP5qKg;OvLxK>E_9ta&k!0Nzenx-W>cs3*b;L14F){Z)p?Jvf0ACtO}W*q|w2QF?;hux8J<( zmoM=ZG8*qnmfs-2_&H-NcJ^|o>-x{=jqo{nftjFhN8D1kbrcbkSV zmLQ34t209&yYK+blzirR>0F=Z)XYlXLS%Kf`mc;MXR|Epe>B%p){m(XIA+r3=8CS- zr^}yOYek!L`t+^LKfmJtU1DZccIDaN=VHy@r8ZB>uDvy%D7*E$%zmWodc)vEW$5p6 z9IV{F&wR2b_jiT6RrxI@W%kVWIAjFzfg^MMWb>cmcZLy(=s%PxojT?lfv}4E<^ZDZ z^s<8l#K@7GNlgE5q3_cT!z44CXSf-f-==)a zb+s`}XwX-6Mz82!8!)lLRpcVI|H3j=oqBXusR5S|MCZ@A&4>kU+n;Bj^)0xp?=1Gb zZOm9V12O*ZPjiYQ;cRbHt@%L*V#Q`%zRVVH=Pqt6Kw;5M&mdlk=;ra;I3Kv4%o~uB z*jSs>Cj#H)2)Mq<*52r1C|ga4G%9iy+>O(dHT}Z6FB!yg+y@EVJs;?QpSgv;q46D% z=F1H_bF5y1-p13CwmbP`lm|eu#H<;O>5>EHS1bZzNs;r;g26=7^6-u)I_X74RiD90 ze0zz`8_|eW``-JHUO4Pu`%%zRBe9LVO!?$hx$Bka^-58V6B771!6dnQnWn=guu$Uv8KXqJ;MG zM*;=w>O}gty{gCyy$n&r!;v4Z|Ao$PUfn1CY&+%8giW8(4gh8>csj(+Qh#*?H!{9N ze2*SdP>A1EYrUlFn48VEfC<0R`QSJ(#NI$%fJ2!(M3Q&jB%3cGTAfAN;n{`k-du*Z&Ms z^u^vx69j$@#z*~P@;@^GIxS%d$(XcV^6rSWU}nMv+uubGMNduw+xV|49f5SNi4k?rejx^!n$n`GSYV@7p365xV} zlG#Q7MK2`&(q|3FbxR)D^hephLWH^h(EHO2_n_yWmepNn(VWZ&Cmn4;4L2gzQR_IC z6DoXC1yyb;om3-bQ4@4ZFOnv!M5dc?K_UaW*iZX=bRLxxn}|s6U`}TsgTMss09zm- zG`AR-Z5XTre1#rUZifo%0ek*IyrO{>aS=Oes8}*f1Py$S41UH9JQFNcKnAzs5aB&w zX!Q*m7$r!Lh`_4HrbBYb;0PZn?hYoKgJ7s4kfC-t%m%(dxk21V2-rZvC}7+7k>Tl( z6FOTMmE$Kq!8$mKrCucpZyig5JR^f6@zz6ADEk!{qlp3=B*Duk*!O+V|LCIWN{HH? z2+lzG5FXNkg9ZLXSl&mik>O-4Vu8*voPPeF4LJG~72^YViidoqLWy{Y+CkDbi4~>~ z`G*5nf??x@@D)5XhKf)wL0x>0I6z)Kz=a{J@m`q-|8cf|IMxKD2`iIHA09&X3AO(Z znqUL}MN=%nA$DxQ)p$hDFZQ&?Brymo59b4Y5uI@6!=tWcbvnj2?%u!1LE*5w$V|5h7$A z1A~2J`ih4UZElU(am-;D2y!rt`y*2;6-K0hac00R9GFPs$R+T%QZk7YK>+~A93GN- z;3z<0Kg5CK(NK#RNIeBsTLKBWpZT^?WE&6tTMvuB%dtp<5lHX>8=`RZ#kA)Ql`oxAk?-$!XRy}`;9Tn@y9HN%XlH^ALGDs}%@R=_`VqVuZUaFxs@ySqIcavcCh@39?VrQ6W3$UbBv4#vX`+#$1` z;MtD>r^X6|T{`e#FS6DYwN8Vg4S)=rpwqZrbSK9c0Hx56MBnExvq8wqpz_IxIIheF z2A}9jI`9Y?{@VwzMS%*XBTfK{WgSc_1IR`-R4YCcTFCwr$1jMG&ueZY7Ng469S5F0{-)1=B<}YK8JcT z69at@fBP1GgMzFjJr_^}{sVwsrNdrGqRO8^nvpR7Nq7*p=-B7n4kZv;4NpBpv{9@| zd=S+W`QNm>vVTZFE8AyXwGcoXTo0Jq}H2c+`cfYWeFrXbwUoN5QZD0Z< zxQk7J03Pm7Mb=Y-8=i-8?iRp&U0{Xmb3QMZC7vH^pz6@1|9%FiX%>a8Bi;tR?CL}2 z;SnmDS*J?By>yooOd+Rj;Yc)G$kQ^{jRT=sE^huxAo`+o?kg{>ll&&)BAxvQuqfRH zR;!+TF9@a4ToivU2Rn$|Cci$xyhho+hJJ*5uO-gCIfbjg=8NVyB%iu65b{s)g-r-7 z7Ptez?4ZG)k{~=2h+{X0he)x`%;IV__G8-ZN3tl!EOHag@9+6`)FTX23OvS{bLyAG zguaOOEa`Y#lCoLy$dhA|QjpD$${9qqQp;+nrS)`1DF#`_Y0IHeI5&00* zJ0CEK4>h%k&`!$S!YZBs*bgxZjR4qt*~$|ec&7b1Voc=;^|cU+eHIO<1%S^krPN{( z;~nOE@lsTJZtY`R2`XaFn2hWI9sx9;kq|r6$aOjtT?0HK%Ok?-f;21NHvo_6>?ii9 zsl=cLObzc)HF2~0iDyAIAmfC}v_oNq`m$r@kkUg^KQ&rxmP?_#HQcuB;>}F&010&z z*sHSEFVTph7}Bv#3M_*?KezlWL$l2J;D-4S(sHYgpQ*loQ2N4ED4UqG+;idzNkS5r zP&5Ds|4!sqe1Gp4QA9)ZVRLbv$XB=zw(4<_EU+Ur!XJy=43CE3AyhF22EcQ?zljuf@8z^71#6PNQr%$L96+TS{Z;_xpUmK@B!a{rytu{>^LmzgqVDxxXgU{RW zuLuA%{MRdl%jvrNAcAdf#n&|xG*OAoB~@XL+dc`aR7q$wkZV5Sgu)bF4-ZlgL6hKa z>hL+5@p*yPCJxjePiSI4JblV$0h3FkA~7UHA1U5iofBA z+i@8Jv<**S{1*h=p}M zUgkj@d6~;on20v0qE;p%3DmMKT_wX7_jvemW0;PGa213t&~-!-n|a1}D4ots#Hvfs zlb+?h?Q0zrqz|<2i|`_c{sW*mbXw}>!z3`tnP`n{YM3;DdIsz+_RQ};6OYMkqZl+J zJta>`LB(I;-?-$HM@p-wZx>9sas23t;h*>V&sF`Wr9P<(eHLo))7cw-y`R7O`_acK$DJU$gad(3+Jm|Fz?5r*1)L0On4i+*&r5=FaAqzvsp_u><#t}Ix8_kwUh2IBk zltrKJBA}4~s0I`jOGR|iz&-R*LD8HPBtVPGw5rJFIL+B1hC*Z5LN0P*Xb3g44^3wTKFs9$B(GplAEJQArhj-8wGn8?&Qv){9x^b!Z!AqU9SMRg$Dai zGNEg}U~X$j;4d_gx?8aVQp~8Wab$TqqWm+?O?|Zumcu?SzPwY z9X_EihtR8_OG{#mz%Y7itc}A7awR4m9FBF1!{mn1j8EF(^Q5H!691k8E7BKuVHE69 z2X@3jFt-PrW}$8O$aefcTyQ@;B$flFkk4_9Wue@q5b~)tV(BOy%Kx3t`DZy2X;dw| zoUO(lL_zYVgN>w?>r>%3N16EB5&fhkaXr*K($Zz#)(|YP=-jj8B?N$ZsS#=VkAgU) zA|{P5?qfqob~&a=kWJ$oFh!1O8}SKUp~yMp%qUX2c=PUK#EVg+9QkyE#P$J$c=L+m z3m%q0hVzeoZ#vz~k(T@o*fO!jD%prc8@BIsXu#Gx@HTwe2bMq+g^EI>Y}hu_VXPSD zOh8r%T#WbuP6C?*A)r4oBJ0%s3En&0)j$Sdw0LoMg97_Sf~=>*$`si$No6p7+j|(c z?Q~d=B1bTqtqun>A0F+D>8VTs01D1(exM03bumT3FlQ`i%14k2{s_ zOlKH|)uSl}x2N|~T2xn;^n&b#3tVe$S555a*ok=oJCqNwHQL`#@lX0cT>H)5pI+zr zQtVPDQv2H5wWW7%07l1P;FSgL_}W+J{MDp8KG@HIynfY<5e%G0Oc+@^rPUvp;yqI3|=87{HHIb33IUGi$mDXl?w*86;8Vfw;3Vw>K91LBamV0IRU$ zfzNW!6A{w_$HT{KBl&s+;fTiaXU#SJ3OCW9H+K7}{f{fspIXI>hTA?kPUERH_|Z?? zKCrFuvHx}1``6R!OXuA&>o3H9ytMg)a(PV>ejHyQVE{K_-}Yth4>DP}~&J|J7fVPiI7Xi3im2 z$)rVu9(&eKGxX2bePo>5sr#&Y>s>wJwnJu}*iU;G@ma6qotN<7IY`2}H-^eq7pLyl zTB&`B<7(!f|Hv?X8NOZjSmFv@-=NUC^*`g&sCUJI8mE%OCDGf92X9;Agp;fbo%lH~ zbBCuQ2Y3*^9#+pzfP!Rf2K<^k_oJgFx986(uc+rrWWvqPMEy;VONXlcm6a#`I)2Mj zWpb^=Xy$TtpHb5v#XlncxHFeb^mg>Q`7BR%;{}YRF0J>WqeJg=K9c^XJP?s>)FUi? zNqMJGs`T#2#c9=L+T5k@MJ1~7w;_I(65M+d!|Eq2>bPjIR3q(c#j#ty#9giEe9e@j zpO7ox*`}V2njNs@8gbuK0VS#?{SvX;b6zccVroz*qzU}ABy#h;M=~g|j&3aq_`xxO zMV2lciuxHaJnapFaCQ(LPr)l+C!@Rvq>M#%T8&@4yyCvDiOaVP6zBQ%(X8k0vnN9{ zx1ZaYiO4c`?Hz8P9736wvhIEptje9oXZt_Yy;>;iG)LfAZf{k)qa<>LMI{zts_omu zzcJ`Kop{UsA>^ai~OyFYWv7g^ku zskHrjc%Ro7bly4Nn~nqXGkf0Wyap7x5>1M%>=19TU*%&(XmcuVJ`JM>uk#cpp4E8i z8dKOO0z3KEE#g8acZq&|*I}3vWl0u91m!&6^mM-Gur66;3=AvchKz$%=(Gkqnk#P~ zrAvg7vaGe8xMEsM0V~b!r*YM-1oZ?H=DP2tXyYGAotq{o;-jDV*8>qPRKhQkL|Y)0 z84+m%VfFTHW9p4(205FqAJ7ru=Zx;$@H92!S2Gej`;lnsI4Ti|iMe#wN<#7=8ob#w6gWX-c4ulpBUZjJ^{*1lwU=x(fa zYdm|hj>>1G{wE{t-s`@=-}Vz8_p}^lr7oULGs8>$?HHZvegFOgi?P>ua%4xps2tM%Z#u=tme`5;EhEuxeX>Z1zFJ9 zpY9+wAAQ6VnZsL)M~Rx=6{moJ6$Hd=LuPLY%zSrQhh4NsHz)d@?tW8E-Ue7VB`hs5 zj>J7=%*r#9;k4;uK5~c8NQ*3>VBmj4IEVoz?eFD9AI*GvIeJbZSMe!)_!a+n$AcG| zFwg4^{G>@koZ^w~_!{zkr9%Cd^;Mx~PA#)jAB2}#Jv9;qeP$;EpL*ajX15B9xu?ex z{#f}6O?Z4#nHar&?tM|)L+^dR*_eNSaBtb|9tO?Lud6OMymOi$Gg4dT4UB_Yzvh2; zy<<0zzo*)|-u5U`yz&#r#R|Kj{2!4#^E5`}eg}8EPk8E!B?O_dflJso>BjsrPhW8F z#dhD(KcW_b;E?{QU+x*t=2!bfjTDoj3E4dclU+84Vc3imuGK=`xw+E`5%hTJf7+Qf#aLaHuv1OZODD)&aulG%9$i-LnW!^Ohq=skYh@vsE{imSB_Hc za37)6S4eY}T#Zz6%+K%t&pwaGXOGY0^S)lM=hObcWc~SoF``6$k5l+3V9xR3S%tR? znVMVEw8LPQpvgGYyihxam3U2NRBo#BQoO9Q+`Q6%+TAI~JacM)tSI46bSngKax@tw zX3(pnj(B9+KN;TC#*J^u*54vB8%#bMOs$=^_RXdREQ7pJT#(SuHc`D+q>3YV2jhs% zzAhImegK`YZfncuI;V=r*J#7PLF=c~6(Q1#aDSe<@x>s6B}|>WSFi7FbM`=BQ*sJs zp(y@O%Qe}j-u>leV%u4HcA~0nmma$@MAx=eHm|N5Uu+eVhC|#;n%VwU=|ZA3kS@5| zj6Yd4>B8IFef&hNR6?aVmlF%##x}ktN zioA5C;Wr%6=a&tvf_>RO-u%#hJ+wJ`R)CF=k< z+bV8A&rQRKP8-9#mcP?yy#}r|4FNxOO;qnBxXsTo3MW z1ncELc;>F&f%j>?9NFTL$FR+_bh5V(`C#D=b~w6W|D?g*M*SJ0y7NRphv%rn$@WgS zfaW7o&jRB+Tzwo|-0-oAjtD(RQkBC6-A+IIt^j+7J33lNs?8$`>@BMu<6L#GOIC&L zBbjbLyBu!e7_W^V?JD7O3htxxZJawhxiY=`@XlS6pd^<>Ah$xc`)r>JD7^h|b6h*M6y zbEsa=tx1PepTh}DxL_sc+g82tAr6Vv_E)72XZo}hj5-FYcUzPmE?jm>h<3`dKb)=Z z7-N5!UaEUsfV2Xutp?th3T*fM!3?m+3Sx>G~q1r3>s7G}nJ*z%8Eb&_8;Z$MP986Yu#L zeZ<|m|G&J!ix>JoHw{j79Pt4I(XiLEFd$m1^!YgGYu}OiU&+>50302Y>j!*tJxxk0 z)l4zpYYZxun}ut|Rc8KFkgKk0Cd`*hq9iyE5s2=eNke5x z?*B@Mww85{kC`N=3(18-zgHPPxQZxXQ?n@irXDa)Z0hYEkgi;E5EcSdPM7m&!;sRB zYNa;*gZgTv*7We-QKV+odEV*I@?{iV^=Laog5A+gMd{zMV(`Fs8pTtvUYdiMt#ZHu z-PCQxlpsIab&o^Ao9QQ7octN0~NG5y%bf=N}l#pUdPYEHvGuhPeBYV$Hh_M(( zeT7#@q^e3=-Ax+_YW30j47&4*O2Y#0 zJOhF2L2@34w8j7dav!~L5VgiO_k=Y2Q?$*@oB#B@ZuFVnc~$3QM$NNJb>RcvV^f(Q zJkI+=Z!l;#hN1EB_Evhz$MpR%_@-MZ&AJGDIv?uRn=-1+zitU7F(58lv~wQAw9Vuj zeqe>rgHP&Gu5y9!1Ju5rH!)-PWw|t~A|OuAONmzm42(-%eg=HfgO2@wm4g3jKFw*2 z|5~Wf$s(wN95~Sk^q+!2tOrCvE7?;YsIV!#64k!nBXZ*MKV6gCze_+q?GA|&OiFfL zfSv=8Pwc~qL!mLS$huVL)?^#bheSpS;vek>H*NVBbZLhM%^DugA8y5_T*q3U zY^B{M8#xwHV#gX=<0$b9P!m#0d{1V@>o><4P}MPjUma8d2~Lpn5?v5-ZUx&GJ-=bO zA0C8;afPo|THP;8zv_|J*!or?6dGTX=Ea1X)PYYIeSAKa98ad%(^JlFK|LyK4|~Yp z#nLWwQk@o3E^I=@{b*;3fF~9pydZtwP!|7pFWP&>bV(A;m;{ZTk!rN0Up$s}$u>QT zka~ylrIpKXX(R}H^*WM}3Mtm|`UhQHZm6dl*J=4Joshf!5kBP&JCd6v&4mUeq=CPr zy=X0ingNcFrQR7M$0A2)&ivQ0ptkxvW4hqDq|D`;Z?o=2Jl z;AHcC8XpQ6pO)0mRWuP-^DjCk(L>XLQErgm3)OtQuJua12dV=A#tc6`!kze-mf8#t zdcc9u;FMU8kq@1`iohN|IEmJqe)D-5q}7u4Ymk5ccy#XfCoxgcSaMqsJT)Qzfa40( zSnMpEdn*YGDwkOBZ@O6hy zx6*#UJ{^tB+*}z+;HFv^`Q^g+uX_OFD`|lJmQfsRFUAA^1!i|~Nb@r}CJrPDv(fAn zt`WH{vXH{V^1uC(HbL?t6hZF}r@NrjMLcMiNN3*O7tUpn1L1i>r$jE3=1s?d(tk2L zmDB&3HmImje0>kahbDdW!}QXjn#VAjcgsCFv;+<<@*DJrlNO63W;*=foZE3oO~wmk)7$t(P6D@81pxqHpB53Cv}U@R5%`uU@)X=|-wC-Y}L4~JSc&))ExnvSC+jOFJZwaJnZI93OxyX5mm zpYq=_Kaa%ycsm&Qc^Dd9nRF5fxyUFjxB&wgoB^t&3#RP<=37_YvXMM6u}7qI3MTZX z?m3(yG)4C3q~=yGW&tR%b)c)xxyO4vn%1D-XTXW{v$;iQrQf(TxazceV~{qg+S6yKXy;n1LApU))9Br5faR%i;A zazl<3+$z{6E&#WLE(oMvahCFLg$7yT-a`P+<|~OF5wVQa$b__c7aqVJhDKA@&>$m-;L3VXD0KH}1yGi@_-20B0CENXbGYsd+<-p;4he$M z-faS|=KmsDt{a5WF4wJJ<_d?)rHjPzC-nID$1P&c2~8uNne|yo+_#~!fDMy<$ z0ci|!)YtIP3QEl;)Yx=2;>x8JMTBS%S_Mh*OoScR6j5l+(Fyt8O!%8i-dvsly8mqg zMu1aD`~$pd6^Va$G_ytE$yYeg1fx`v`_)9^zk=?6h5!9~`2F9bzyBUXw~A!9iZ!=N zEViCFZIvG1Dm%ATer2nIwpDp=>uJSSRm;}1?yc(owraj_)&AYuhm6%F_IfDgdrPsb zOs`v%I#gvGnL)NT$!?RUd)uQOE;PBGuiiEfa5cQb%-MQCS# zU}^sA3RQACT)N$U`Z^n$|0&s-5HHzu`3R*Tp2zwb-zi&}=H~Wxc{{5kzD=rsL}}Mc zz5o5B3sb_eU#ah@P4n1k$1eB7E+LG!Ki&2%BEuGP_V)cR^>&NEE{&z;$E0o)h40pF z3|vw_a(dFW?`PkeaHpoQuD~U`dv3f0^_?!+cn(IXXL8_miwo^S4|`we9^z1C^X!@M zk?hj`*(=VoKd*m%e0a&77hbwIP1`#S-q)A$duds6PvZokvIeHk!vq#pRNkvPbWOD@ zQ^6u~d0|bhhpy^$OYi);dUvvpv{z=D$2|6)(dl>ba<>mS-m|!3m3JuOJNv%v30|qT zRE2$^BuYa6fz;EZ1^Rbtg{yvjcd5W#6g{$kE~-2Bz>wnjF=JhCyeaIzhKoyoYR0S2 zCa4_qyRGe0<*e(d-2XzGkm~wuYh`O=!KWygwwkawb|L85wOy~;@R4)V?Wcd4e{+p_ z7Svkeblc$Kmg!<+az)=@n5k-TXQb`%hsp)zgx7@!5#6S{w$AUYR`&%cyV$1&Z!UOLMJzmaTmqapz&{Nr{5G%62I&uBwYLT zkYe)b^1Yo4^A9Z^#!tw{A(I4jT9MR|ga08DG`>KH0cSnqP^t1^`~Jd4q95`KAky-d zpW1^s)eP;b{JUwg{$rjub<3L`XPS-2sb%vHEw-xV*lumA(Q*DwPzk)kRrOnkA=>+) zPd%xABfJvW)u>CIBCf##&pH8Q&yjq8df(jk*}wD49ANvFH>pt!>jM zBZq#&iqsz`Z2kKl^L*5<16#{5IeHuPuS7(oW%5_DL&;{8BWh(Bh;=A-%Sg8#iayj= zdMD67SAaP=`|cs1c*9YPZI02f?xvA(8sl>m99O4vZD}o*-4cTT-CW!%M+v;*`ugAulkDnL%SC4JAyv;Hk zul5@1MQ;b&>F&~tvtP^Qeh>z5r|5sD5>Af(!eNBeP2lw$&|!>~&zz_NSLLA4E4~$p zL7d-(teo458?$T&MY$xM((!~i~fr#K}fhVt-_Dxp0WvcudVDJPI3~9+NH`q3OjDQ9@F~G z_A+QWjf#yH7dfrpp$wm!dbs78a`h>Qx;MO^Y;dx=nM_cMtjmWrR(9&&)v|Ez?X;Mx z&$%3@MyPLfvYcAW1o?p>tDBCN8^EU-`}qF#O^8Y(gc{56%$6bIEZD$f<& zsc~aq%o#4q`+x{U=)9PLD&O(u$c&Z&oPmA=Fz_4WNcG$q{k;gcgD2FX5IGG%ET{bR z9|G7K4%-hxCMhZDL3_i`ig{?ii`de($zOB7pe~7uY-oJAYVUc$#{O>H)OQ2X^sngk zr$cu>A9=hL4{{ox9*TDfR*z9wKv({Gmtx!$^OJexM9{C{7_X*cnb%s5M}B$y@N>`^ zy6Wj@r}I9yAcy5XghAr_8(K*gZjWz z?7k1rb}GU>GP!EB>{e8XTY`?ylW~=&UN5SAU+efbR(-6AeDN&cj>9KoW5MvrRYW5J zWEUi!P12*P*L!@xC)GD*4wTf$M)0HW#>v>h@bIkA4hx)D8XkOCpX#TpHrfn46%sDl zHS7!{qf%4CgXDynOn>%Ba#k`&HtGTH?0phlyb`2{x}Rb+Ko;-5X6Dca2z7J;_E8p8 ztD!%bq9jj`+~gwVsBk}9)?IN_P_opf2cQ4u;&DcHNL|X2{-9@+lZnx&yESAQT69Jr zZrKh|{=ykLS}bOb2e!ZEcB8q#j>Kq&?Ck4qIfJC6h-G#yA23DknJ!&&Eh_FiO83?yL47AIiteCAyF{kw{L8 zF&@u{Yob=mtbr~3ZamB+iL%tzd!;}e9 zv4ohvSxR%zD*+#{v`6xx=(wg5X`y0%ePPsD&aF|D%6T_^Qs>h+_edWctwa& zs)JN89EOhhDRK8Xs_;_XPraATV!M!+@=yTIu!<;tG)@7e!5f3hn%5l?BXeZFD#P@b z1&IRQaY&ik9$}ZlToDdmE#Ki-nrBc_Y|nJ(!MpY8kvQnRc~F`jmj>LMzG=2&*UXSJ zG>ni^W2yJ|kWOfsc6wwe5oO4w<$+n*Yu|!J^OKm2U%iJ;aftMn zV>Hv3A*K&S=9FUL!RQ%X`s775*k>0c}8#DGcdCqiSS(5Kds*qJH~mbD#zt9AxCZDa3w7GnM@Cii{clzUJNNDZ(>~{ za)Psvhybk}2@9l9yuJ0$s4pEhago8{e105nU@ zZ^gEDpIS{A&IYe6{ACwB&LOieb?b(9OKEX|u>(&p{)LU<@WdSBJ&^1G)JqivXw;Ux2X0f7y+$qu7CMae-A*elS{TQ=GE zVzR$;a^T}6ZZhDVH0zzR{Sa?AU|2-CaF;#u8~^^yedH!kU;zXv1fl2bq&L}Ek1yD2 zeDaF8#hjf(C3fGu4J~BbPAWV02m|67XdfVygGV>9uN||W{CtmsB5H;!!01$)Id(uN z18rFVt7F?}@mbr00H%I`G=OaLLu@JQ`9-|kHAYS6@p%F8++e@e07#OA)$7PtG5{$z z+jXS{(tfLmf8tvgvDZ`ojIEo(4NqYw#|!B)aNLwc_&z$2Ev00Saub}70F@^&9+|?G zm9WAb5Kse=+k5JHR8^nfVA1m7%HUYi3?&<>I z_6;P>TRBPc+f~IqrVXStD zoz|!wV1L2FDZ(xkVMkf}Hu##nQx18jgc(%hct8xXLvRz+c5qs{nra>ou<|J|>ivQn zdw3%v$tDl3oJJNAO-74?HH&1?;Y>_8%a+7vqsNAAfMj9dZ|4I%FM-Oz4<1YsJp-q# zJO*i}&fE(J7>>!R-zDqJp#DoQ3$!g+toic%B10c}S|iU-UtRvZbcw(w+d_-SS3Y{? zp9pv@CSAbjfNmgEd*ODkA2>@O+1iGpm!a79amIwjG#S5pd2J@U4S(eaJIzyA)B)p9m8IX$VaH0b(X9RVG-w5Yb{2LZ@o8RT=x{)?bJ!cV zfB-tyJ+iERw@}cxZ2ku-rI*1`R-C7lHS{vh1Zk8BfVD@b@H}kL((X7WG|AQosINDp zAHIO@Q5UGQ)08Nk)(2;bs}mq+by>cen{4s;i9teOaMCTS0fFpYcJ>2TLmqXYV;G;w zxTDmeX9<$oWn0-i#7^SP=iVFNn7C~|Vp9GsOtizyx9~!&+I|QcESL<9XF%IOyYr|Q zdF+D$Y_nyCXd%UV-*FX3#;W-y9infC+qL{3v!sf(PS6FWK9nBJ_)O0$-<2eT;qWt zrFK<$Sain%q=}`HK)#J8rZkV%;3@%mU9u0p6b9^R9vH%@qGB)+J6L4tRE_j@Mrz6Q$m}w#!&YTMSD*}eLvdt_h0?W8ep538k z_LK#>cc7K;TtY$w_KQ%TGwXjj<2EKn!HR^6jALps^ zJ!Gq8IpJk$Tr64LhtJxQs$QKb;LNAG%$9fNlOQlk+fHEWmcE)TDSl(iM`Lw44`zDp z)B^Zk2y}=}vL$@RY?N@&4!*QqYB`R%7<2&M$#`=q$tI*kcYvK(^QeKy&>sM)MKh4g zf$8r-iYcM~E;G1fe~bKd;RUv`98P!+*V~J=sat}yvTXC25MdVg_fi($vTIrPVW}j` z1rWLr_xLKynnRUe;A^{&HQ-XwNYK{E^WB-}*itHHMMeN7hn}Q}_VU>pX^RPR^!h5W z@eIRdss+ymhe?(coEwmD#}7`012S0H6*u$MaEmREm*5(#@Wm0|{k8hV_vn@P<~8pf zS4Mp=>MzWGFq=Y~{AElU>x(ED zQjNzfu;u**y!cjygne*ChK8Joa&kVFOt#XS!E7+FFOKO5`@}>rbg>3WqV}L5U8r!< zNF1mpLr!;KLQcp&!vHKehsSV1#$ZX99>RPWPV0nCD(pv#RG7hvS%&ZFs3QFN0t(Vo5|Lr}M0dAvru z9LMzJ6swP;r}LtM3xC<2YjUL7W1}3e(;F?-K04-@9)8a6;wj}Ol4gUWoylu*eY@ch z9qpyp0Y1I5oTVRFT4!Rye(dMW6XSHcBV=~h66xIJD%v@p(UJgJ|xL<*bYOVz%uww{^H|$B%_^Hu){A-oi<-; zMU?MM^lk8AnMpSV?DaS!2c^iGWUAcsh=rwqo*qae4TLh8u^_WAzeuu-XB!0^7V@Ja zel&m_g*|ox zEU>@|PqZ+gkMum?Gi(22v7D(H58B$bvxFZwJM=fH&Q50eNq?nG;5-FA+43!bEz*NU zNMVa^v4$G7%S#n(Em<>%(hae8V#0XzfcQZpmcS<7mItEad^Q~vE5Gv&QZ3jz zhBem?Ly)z>+70?qRL`;N>z-OwGO^?&Ob<|?^g(Sq>j})zKLuco1c~+Vbshr?Z`c`g z0Vrh4pg%~Ak%WfNYtK=um+QsD$=29!8z+nsuKYXiSB^OY)RSP9a{2r}x3XvK54lZa zrDE3~d^C5~6WXv7A-KYUwZ>B-?KU`F2HlW=8{YK(MsF=)xLJp|8t#{Je=GhQ-qd5^ zS^`==ye5(aGDs^dQ!s=5@58%gJ~Mc(PO0AVM&BoTw%ACk-Y7NS`R2~Gwr4qxf~{=J zIgmO4Ygh*iMDSS~fdXaIOFP&HZGP}Dt%vfw*!a=hM@e=VH}*wA>Z4Vvh~H6NqwUAR z;No+1kvgmmSZP;)qQyP^-SXuiT6s49WW!BQIEU{QEaQZbz3+ITX`v|2!Be( zc;H|g?8~oTzGZjD90FQDnoM~2Y>k`@a&bgRJ?eX1{)#ryAbBCAubg&Y7A)7KL z%Xrg=iO{TLLLHqGgFXJdcC+YS9qg+nZ)+KF*pPJ%L%yY1h@$P2+38KS4n4>}u!-GZ zJ?z+uc@8SLSAgEc;;KRZzikR))AiF{Vn@@DJp;iV#DzE6N*~j$-2PJLXdeAPJ=l_2 zd2c=zz|MaG#eTUWn5Sa1X=mwXdB;Bt6JjTP5qpSZhqpRB{uP`zftK;W4*OIE-QE$; zkALCap{X8njcG@31AJ-4e*+)T0!qZzquHDon@uVrz#>pH#AY)6`1%cuALt&!9$F3h z$+r8X=esY0!i3t56|&?gRF?*Oz{jsiX>Tsgfw3N&7IXq`zn-t*(@H1WrAUD_k{9Sf z4mV{Fo*ixF*1G^s5drJ=Hg*+j_z}$vthm(E)sn~mRXu_~S zkzGGX!29J6sY#1pOjBq|snYw0XMsixYv((z%(uu;{@o6ousB4iSo}w~qVv5xB<|4V z024Qucp3Gx@8he8l8*N4K&XsOK8eVtDZW3pb0y+y*PfDl{POXGAusRp`(~eLtDozS zl@0zB55Gw1mvY{G37y*r{;$~joM=`{(f2n6Kc~uft{Mjp-lpt5Qnn7dF#SXf@_k3) zP|)|GVyAm(<-f~wb*HH^yZ@|W=UPr)E*H6W^;c4v{+{&-&=&i;1}kkJ~}H=A~k zS6rPYG0iW=VE4Dn1GAS+#T13t?AMJ;GjXk{lJFMso4;z=Kt#hzchAlR5=$-D&FgS( z(8)Aw>6`6_2j@4U#NWzamGbCX3~RsTh$;X_z147-T(eE}TFzt%5lg*XC2EB02A1Ba z-|pAHH{d;F`>!c#P|U1-1SO9faBW??G#WW9IyCUJ!=g-T<*nxN4&xp}+4;4R!y+qE z&Q4h!V$4m2`46Mso~I&x>_3Lbymjh-=H97f{Y4yW`g9|b2{2Qqd!Gu9e{u9*Qitd# zkN{6z;*+&(fH#v+<9clT{L=$^LFiTdpjD0$Hwr<7$Y;}!heOxF9d-C*po zv#tU6KDk@OSe)|gRR7p{@!86MUlW1Z*&}4lj@uln_))*<6tQ2oi3`Fv{ASX%Yx8HW z=&R_>WFA@_o6W(Ao|wx$Z18#Rw&&3k^LI{M`aFM+n0?~g{qwb-zZFEhJMsPD)z#16 zA5%pA7mCvj#uuLC9`*lGcK_1&kBZ`K|HY?IYsVL#)xYy!s%cvtUwY0IJ-J-pYcR3g zICAvl%8SpJCRSRevrn$J{ivN-eYN)PdtRwsVG1&Rf5nF5BBT(-D-z}mxeZQs-G zo#1vulX*u+py{0l-M6H>g*Rm8l>lwn7lb?>;9Kom%+Zf#5*BvJVND%6>o!Inilw zccY(IMcfp0vEKzR=D!0kS9Sr#SfYBuV43YooSj>JPIud^ASk^P9nPTd$anDXDLM;X zHG&5&tHA_+q%3ZqqnR2qf0%TRPH}3NnLvTyChy7;wb%gd+U4@IjZm=s%Q)<&71DIVWbB5QKXK4?@Tun z?U4E_myDj_=G^EJN1;NyZIp`dB#x~iY^w50sKZX?P@AR>DVZW9Ud^hAQHIF;Ltl8BH9m;?##XKUr8*3&Uk6!5Fi1x#Fh z*61?mi8q71aBJU*Bzmy);=J6IxLmQeZ`3H%m;?IdH1)VA8NSQtmJj@x(bo4-gf5?a zdXQTcA{u+8K`tB}36MWNXQ$#H_fc~Sbvy*HjzH~itSxW_5j-^+ZV%KVV;CL~0s>x& zx!A4MSs9zsZ!sNqFNQSna4SH zHuFR-m=8|g>`_y}eS1wh@y=ign}3iqpBj$s=kNW6Tjx#AKd?+5id&6@LTsgd^NH$L z&h|Vm+sO&A{9Bx3F5<-o_#0p$E4)k8rVo@s5Jg&LO|5u#T!wD{K0$) z!of6HuUj8kxl4XV)ISckcivGqZ@{f%bJG~qYEoa?3(RgG5K z%31o)1ldwBZz0w3(#S>Q_CCqUw5C$+LAsaU17!ZbgT|&t+@13zmA{_fNjfqtwR}xuzVsKE~?J?1dd2n3ku}XZ+$46JA`Q(Aie_%3o8#ObEuM#2Eov9 zj`TLNtF|I3`>Hy#V&!O>_BsyYwmF+FK%ul8re|Lj21B+i?S#iDA}K{=<@Hdf7f|C2 zVo(9HAPS7yKtWSF7!%4QesuV~jQ#Mk1h0sSbD1VxVZTDHm$$qYH>Ogo?WKpc(&ql@ zOL)!&3k~_S=V^WsOpKe2$W@%h#Mh@Ly0uFzGrDEKB{wb79&J4A-^5swg%Wz$0;F_) z+l6!RQ+c3OK9c<_>eGYrpwf#HDd%gE(v0CYxJ ziX<)re5Zn|h%OclG(hlhGKC!eqE&6$s=1-(RhoPabJos^j2Uq=a=BeRYo5k>+i zbdjhzL7B6Pz*5BR$*a6+NaMxdb0}5EB1G+Fq!&>Ij0cY$0gt0#m}wOW5%4Gq_EleU z3WzA}mEl~H?79^Do)J}D+_!jSa-A{)P_f+U`@3oG14GF`nj*Stx|GB%(v#f+DuyAeVT=uk>Th2$#A>m)J#GJ4 z5VggScpgzvDGX_JbfT|V9!!A$p;SOrmH*(1VSL4`bfgb42{t2#M42r!i^HZ>l$hXn z)YcY7d}~_8r&wjQ8sSgR`~y^Q`9E5dzk?{&_j3o1-yO?APUgTk?!1K|9uK&;k+T=D zvd2dP*cAcxrU5G`plls*+N~n4Si+fzc!Lu*hJyt7q?biN(JLwvGoW>#Ag@@`u|iOR z55g@5pvkKQ2I3DzL`D^Ij)aURecp@!!H5XJ<R6x`Z^xA#`%3C4L~PhYvK8l(%s5XUWQW%rAsn;t(KWY*@sCAjY2HJsgA!yscL??uOO20LUy%=UeG2tJ4dHMZjRD5RXWiV~YDTRg9naM&cAY zG&92i5}xkAU8c+Uw7~9JdaQ+w2U@d^K*Tt-IxPpB{~Q^DQ;5@syeP`uDTdyl$MA4- z(G&$fvT_%Le|1{&*blj(Y56cd=|x;T1P@8V$KuI@0H9*sbQ+JMAf&3aRgAcWk}nEE z8Wh6?iAbMc%2Pm{#Ujx>eZdmK@LBKAqd4UoghNo4(k+wuDwNeyvC4R{)zGxq0UY8k z0a3z0z*s6*LlteX%HNp#=k*99fDE@-e1`~?PU3-vnF`@Sh^iu~b`j;f#^WKwNR4%b zB~HbXBeRMV^ty%AV# zf2rfd!llrL;9<(*d}ok|@r%-xMC2&xe#829`8n_>6vlzBzsCftZoHj| zhz>c3(#S$iQUn*gBs6O?qKRa^OUQAGv|R);fQaA_UH?u05e))OQlz1(Qp>0vbB+X= z==!%9>R$? zvVf{u(i$!6pCjnrhwlGE6nZNc@w}~`ey|$Ci3SuaSYi?Q-_|B1>184!9|zKgqkOQ4 zo<@KT0QzK5W{w#x5vf$E139+g`nM6e)hNj=Rvx_s7L-E8H7N=fBbrgbAOK>tSW%Dw z{=-~!2IzdvLS8E#HyyQ8zO3_;D6p7?3@_F^-emeB+I745Kt-fV`#NIMNJj`S{SpZ9 z!L41QAew#tu^Pai=twuLqqxsna-PV2y~BG%{;gsNG6GaM`aZt6uH5wg&brGUQ(Eij zcjr1On-OFjYKBLY-XMwtijGWd9C>1R^n0|40P84pMu{73>Y3yYG@9oFdI*H>mIr}4 zm=+f#b^JswgmMKA?c<;~q=NNZ?LH#Z%m733&6o*wbT1`w_%_GIW zarl=hAm3vk6Qkt20*DtP{SZ}O{UHsW_<^FDl1s(D&=SxNP7%TfE|)$Kc1h>j9pqLN z^bZhDBqL7OB7Jdd0otO@1O&$bs^R`aaK>M^Pd{{B@N(po`REtqWl$Uu@`bL`8Lbme z!FR)TPBtOk2#78K26s?ZKoz`25ZH-97~MlETtY(r^xl#J1yEFy7Pz4kL?#MQ;2Xk%MF1Xzi8KOA=3U%#1ORRp!2m|! zM;rlOlF%3(?92fEps2+EQm*|VOqiCxR;=PfR3PPmjE3i}2#8?-0L?(8J(p21UaSNT zgi+Q^Nr(pA1Zi3{xK`#H3TTOyo?~AAi#rt|1`hF9c#s1Evk-9=&%C!6QZ+^`3#Mx}SDdS_kN$?QUHD16r0%{CzJG%1Q+Kkp<$A!g3U8 zIe_9OMJ+CAx;n{l(`t_Z;owByF%{j;rTRb@U6|Gukvg$N#Nzocj+!bVSKO$Z)=m}q ze~B+`$g!&wk^WU0v;>;}Y}|{|)^H@wk#|2cq`D^xA5V7s zcGI90CmyZW?3U@Lap2@Yf6KKCopNr-Lhe>xS=X>GQvxsYz16@-Sncf6voo28#?+s? zI@BIMz(0jb-I~ccGP|#OJjro59b4PXN%8Hub~^jX(S;z{rfKaUvQV_T>y7HVJ8XR4 z10RTnrz0?#Y7YvZ2p4`MV58CF zU&9~Z5`W;t*3G~NuYBgLncE|s9p(<#O}u_~vi8HtrkHjM^Z4G!0WFs&`)U*iJ}Z$jgJ11i& z-pjx0i7NP*lF+Ua{?WVoJ(V4hcIxycx52}ub%=NVNt3uzTldvL;_Agbkm<_t<{T|5B0&)4oCFr4>TE{q zW+tKL3_b{#4>{l7!0}uL~xjhZ-n6h;+5#> z+oF6B*0h`uep-H(QvSSU;520x{0kO2)=?ge4Q9ZXzSNq!g>Q@K;JBfTa^stL{NG`_`=98p!!8gX(#N44C<3Ls)Q~ z$%Wp~CcNqGql{QGDjFCG)kNqg%BCL*!I@TGpulW^N)J{Ph4&)P0u{z<5mn4$UmyaO zsJKsm(&v@(qId3Lj(5!0o zsn0Y2*BNHdKGg)gy0$B5UOiSH(*MBrrn&wn=@r3xJ4lFZf#`S6kNz1J;#OkopWZbJ zaJKTAJ?UM^pXg(@YPQ!VuQk)zG!?_0&pp>m@8D01K6!9*_E|xWpWt3uBeUc&J*93@ zymCO|iDTwcW|CA}$>}U!*Ap&(o3zLiy*#fEudiNv|1=0xu_(Rp;~Szf0cYN-_{99x zpOwj1*Y`xx?VD?JkB?rO++?uh&&fRKe;=lpd;H%%uAqVBVVOAQ$WsiEbEMgJ_MyKj zZHk!em2!^Sd~I(WI>QTTmX}d3`fu#Wo8`sTv5N{ zowQI27@Pr9fpyU2Ue8QkU3l7ZRKfkDstCW(!yqx>;ET9-5n^rAhtY^TPG|1;2Bx36 z>wl^DfMd<%W|rrx0U!f&=Ogl_*_rW%92574!`T;~OhzRW)22<&J+u`08*oO#Yg6pp zV{(+5@?OWS!6@ZAyDlC^ttrZ0D?MnmUun@aL!7_yOj8#|aZ>d?W~C?1TW_MN^=3f} z`H(}=5I8kA2&@+^WCqmxCk9;!uZQQf!A8&2u|!?N>$_C8A8PS>h`m+=V51ClOb=HG z^J(Bgx0-F!Eq4*2dIzYOZQdb{_Z;b0ns7sppQIFZLlSlN0spwXPq@As)o>zn4sV06 zl*q~zdYY7jes*;{-|E6fQJ~&mn_^dszrz{ss4pmXc+MqR&+cP(cK?SZ@*_0H<&K-7?r7dhSXYmYcNHw9MXCOp%#=5CNI`pdo? zhw#(X8^%iW_zaTA4=!OE$tIbSvy;PkOQ*V-vj)G>4io`q{1dnT9tU`nbt7Qy!;E&%HvF)6!#G1`4w{V?y+f0dLMAqiu9-ZEAK}4MASX@Dpy$#1Jzeg>UB zqr{uMg{f4$zqNS3R`mLERsS3K^7B_Jua-PV0~sf2sC(Z~U)SVd(QK!fqUHhAd-7nzUa4d$@UHzbmnJnX0s0 z1f|CC7{4RjuR)R@@2M`J`6a||h-4CA`hMtU`Jv>mYG0w3)7VOj9(pSUMSnZ?%?njI zWK3xh=w^?#)H^QOZs)P^hy@P0O3Lu5E|D%sV{*?A({$oXWOLIPG7WHYklSg2K~3h$ zQ+UQWbw>IttlM(NDEZU9nuBu+FobK0+9j{A2FIB2IpVniqbL-mA532GH zd%6#J?aP;{i-qgsaM~L6@reWK!mnNs6gk=_1p58@BJVa; zm+45W|$~2KoE?|@6anhn3Fybq7!w0AiUhT4UuR zu&9E`<#LO+0`Eu}QH67Q6^Dk>-$hqNJzNg2u>LAA6xSE^XrsEq_GkJ~{9@GOo#hJ5 zp1?3!FuDk=Uy0i<=O^n#7Ykpkv_lAb*27t%-u`8GlDSxeYPn{E$o;CP;aANEL@nPJG7l@8Ga!5dbGYZ zBlM$pY;lejJ-W(|$V_mK(A>YnvvH=|adVRB)g7Wlosr!gEF=5sPO(Ho9pCX-RF-ji z1>$H~)u|UHAkP6dq>cm;l_)w^d)8j4ei&-;XFWZC`3wq4cNqLrEJowO`INTlP^&AmjR((O=-Cv?lOC?Uuy}C~x zmgkE~k5~?Fb)m?*ri>=##{tw-{eF=6xjCC%MJtqY)$ zILK03o$lgs(RisKyrM_9F&vvFMNvnrhk~_sP{(|Ccudf}P^ah&6KLf|lH%dkWa~o8 ziNr~&xKl05&h+FdAA+pfk2ps@ba9Svf<^mmC(TAlyhdXOB$Lhopf)HEQ--B=)*fDV zuk)Ob-BEw@H#Ax6kLQ1T8d4Xfo3ngRgej)XL*?}!7&*QxPD$ag4qKjZI_KODPtpUA zy03NKE}IejUTS6FdC5uCdAcBltJ+sSMiY}!6>gaU%QACa=#OsQ>r4$oV6eH~AAzmd zW3p;NwV{}^>p7>NUq#LALUsNCt%z~*nhTYyj~>7O?)g&V9JN1cH}S_R=ygPEC#npcV7I z;=~7se09=xG)f&wOYtce-TZCJ5)UYNwy{6+9_~E4m%I4#gwpIGLQ2%5^|gvhkb(o} zW^Y-zh|FH_7_axH7~xUweZ%W0^S^o4T+*MMBZ}aUGL6Hs4U`*tPmI2F^)&u#7sH5c z|1e0q7JmpE^X&9)(W@R7WK3MKPAG7hCxo)LR$2qL@xH4#a{&x%_FYFt73&ih2tXHs zrZHub{fkU!EJGry9SE`>bLbQzMR?8wAiU5Hpk*EP1iy;r3WE<48oya#za;!=h$4X> z7Bx}gfLiMu?*?awfA}qFW^q>kyO;$B7-tfW2JpSchJTWYw%n)k(ZR}a(5}a+ebAmt zS@hEuIEo_{LI#L9ivYOS>MgFr{>RdJ1~u`%;W`acNkWs*Ly?YzDj+5Fss=>5NK+6M zLkDRA0tr1dK~V`sq)I?k5KE{cq67s&6buN8Sbl(rNQsC4IcMhCWGAzm$%pLjyYI92 zbxk5m*q}9HfJ?Q1&mWOCrdQ&)81bYzoB>({c+IiVzjcs>OPZ<#^!6%d3m~8=Ps~_F z|6}=uQsVS={XdGO+}Xsma{bmhYO*wwE`ZxQ0JZig>cvKu&IBmc|s5CcW z@w9fQt(digo?>2Yd_K|w_F4rMyBhtfq2P{+!wpY|_rux$d5VTC=C8(^oDw1WmRf!r zE;J0X+kXJ#iIr%wA_Lr=pBkKVZi0AG#CmU;QC(YDT52H#=Mlq#8Gh7!ctW9*n}vjG z5e8mt{>zfRTu>HVeBGLnWnHXlRJ1vrF9$F2cx`pi%f58DSRHP!zgVpARZ@j3)P|Q@ zsFvOhu?9NW{#q{ab}6-bUb=m^^mkXuqxe#vwbG;K$~>~myc)}Vo|m2aT6P+Kg{cVA zCxVSgN|H=)Z~~a355k=UOZ$Tj@dP6xSRY^<^c8481e>z3(!_FoY%Y z3Zx-DgfCv@7v1hX@i6;_sjhUl-Dv|7xQUq5LRNdgb$xbDR-bZn+$aflAA5v*ql>J3 z!4+!2&U<&R%Jhw-))pooj_xC%=Z$VId4YS+74-S5B;7 z@Z;4;#5zVP3$ow^Sp19C$0M3lQ*UMqe`lPllJ_LLYAG^cIdN7J301ORNe?KPv&8*F zOKk4|913Jgt1;7F3*`F4ySP|bj_?u_Rmw!}k(J|FFg*bB56L^J9YdP7ms0{5P*$Q4WRiu4wrg#~AX9i}aD_*cOle@8fXLF`q^qV6zu^9igd3&Z9@U4A3 zr|7h!{kB?;Sfc%?aWUy{>2_DM{`>Y2@3vBvLbIMbFvV8Tdq(HOmN>;bg54csP1dM$ zMJtH*ItiBrdLb8Q^K`mX?_86@`FmH~Y%!7ygCjZ7(WQpX&Hv%XFblYiH^`xKw9BB5Uf!fYr#shrpB;G|^8V?~#qNde))Hjfvc!FeMs*yb*|Wo8dc-=?r@qLiupVJIv@LD? zq3@wcf2-5|!@iGkC~M05e!IK@hn4}S568o_&Z$m z)FX2#BA8dUEh0%6a=xH(*WdjMmwbF4@t2XfkE9NEmU%+PL`#W2WnDDvMQ#x<8B>ve z@ka3;sD0*NUpaJ;iBT03U11MT34?Yxe6H=lr&&V-HAvfb^oML=MJ76U9izfQS43)j zXP&Q)M$&dgj=75#JTfmbdG6x!{CVtiUrUf48J*1uF60g(tD{`*%HLf$!DC=z$-<3t zfsZ+=3EFTrTMjD``G9#QmnqWOC8oee2fLo1I@u_XMd~YHHm;zr-4pER7cR@Wq!l4x z^&6vuM}Ihj;p7SHurt=#>i^i(sTe=Z8k`4!s!ys(t{!5FhJ|wx+hj~J7`dv$!;tWV z3@-XxS%}L#rl8+*n+sgy6HXZtY#L1|)QAr!BX>9gmt9ZyopCSCLtkXM{=({;zU60; zyiCr3p0F{89%FHo*7>yshCv~8TgxVvbdiQDF#1WDUdK5o0 zaTPhe3b{%^bMS!SN7xaQKpq}*hIQH*pn0>rBBjhp*24^F-c?99_WXw%6W{ivs2i-h| z1wFwEI7XoNC@33$T#fEX z^vEjaDhD&&4xaiAtucX0G7-O65Ih%o=+)b^0n*B4t|uZwx`_hG^1(*!7<>HmKjL(P zoY5WT^znH({ENQe<~|1;eVL5;knoNtl_sFiN+N(}ka9B}E<$&)QVGCF>uT_capV|w z?x33DcM`u!Afyc|^&Mc?8YldPvZP5urA~t;-Twy#Kd~$FmBFvY#GE7{%%Cw+N7ZHW z1zVg&R{$EVe=zEVaAbs#+U$8XCPw@YIy_Kma23xnSiwLN4706$~nBEXxXRZ8NO;dU@{SAAjIb6Ui1p{u_xO0~>wNy#6Z0d;c8oLUvg9R<+TM357RHSeG*%#Zj};-W zg_U9;`8}WtYapAC81GGtrSuEjJdnrcmnD7AU)k6rXx}5vr;dC-bK!X-_Q!SZ29GW9 zj|KkAdREZkhoWI3`F{qEBiMwgd6vK+XMf)~pzBg@nV3F)T9S)=q4A$P@O*sBLj2e( z-NT#`TMvK9%}0-!fwnmii$bXtX;B;= z_MNOxU|<}(u&x-5Fbf5RBM#lOLa9^eeR!oNWIzvSnq zucdx(VXZKM^ z;?>_z(SEoOU2F(H1NC{UvmFH1vvaMM)+k zi&<9w0_B%JeC)q(LLxS1r=ukziGNz49$8gCzv9PVoc=K!Ct2^R(f9G{l#%_|`%cEbQg7*b0j`K>LZAD)*lb>FLLIwZRmhO~Ht&BHo%!Rq}f85R~Sg zW@oL>D>`GnFM5FAPL1AH&Wzof52;GPH>%$8-F^p^ZLq}MW`~!S)LvxEd6DIu)()kB&i4my|^9d*ewFjs%mGq~iWyD9$@z$dT1m6A=_ zYYnXiGv~`Q?Y(zeejj)oo{^I&gXh74<(F;W#GZ8C>@A9{MfBcd%j2FC8 z+Aj{9h0{>++-v;zV`nnp=(zV`qMtWEW{IH<=flplLxm(X0%+oF9`$m?Lb_;H{BY8j zA! z>4e>lwT>?Z%^T$NAEm!P6G$hZ<5y;G^FyqyPPu(qPHRFC~B0{(a+M2VC(?_xO$=^~cpzocO6{P{Gu zOcnF~OBbY8Z5wP^V6!-v(1svkF5Xh4o|LH`Tx|syx5N#RvUGR-&(?2m?P zB;T|=MgJPU271hq26+gxV8CrPNCOIpJaE}8LQx1D0x_)tQ+90sb+lk!I!my z0^*R&pAr0!7Pd?>=b3zLK%w$37}B~AwOj#+uqrGLY**M>($?iK83ta*`~`!e1DwTA z1?egJLoKNwaH?nYf!}yQJh>7K(uve5@e58VU;Tox5zl4Ki`&EAavRyX8` z7h#$$f)t@ukjy4&$vmtb^GNSx=iK{DPgre%23{9Y+wcra?#&Wlfsyw+pboDDX;~By zW+jYnd13WNVMnk4HT0+k5h3U?k-`6^i{CM7^#*$UgrXjo@9+fEAPTn9`2n(i|XZx^nvTaY2y@FXW75cRJVD*&%KvVG4k>VKG8R_o=N!NjZ z29{mIo1MV<8=t7x*Ph8j{DuF%o_f-@RAeI?i3XTcMgMRbE~Oz|eL4MC{m)tXn#>pK zXgrhY63J2W23H&~q4jUE#_11sFv7}ZZugn|z7nr9Mvjub!m=VRuR)7Ed^LcIIY ze0t>Pt|x!^Ru5G~fB}nmOJdfrM#ox)6uX8^ebbc)rG%Y z35u$;+tIe1@3a3y*WtlquNDR{tj3P;lTnoM(+R_Jy%w?dO4AlKM>_l2mPK#qd4E;# zMZFmU&ml&xbtp0D8L{vVH0sL4t$3?Nk?=kT<526l)QuABnC0obA^e3i_u8h1!qqyU z9#4KX9$N6P{rK>lZR_vBLn)#U;y3*59)Df?8GH53*3ePqwR~OQ;(|oOU&ji%{|a6Z z(!Kq6RFKehckex<`dqkaEBI()z0Zg5 z^rJmRe{QVgc5binbf6Ivg958Ar{i{1WPY{uw0$~vtox&&?C-~4FrP2=?9RP3*s|?- zv=sd1^3ar0!n5Uiwv_py_ESj;r#=@^aR?IU$W-+zv2_g zNFx7!gjnz~6lD&7L`01e1wIhb7iz@;4{fWv<(7#;iVE&*S`a%UY$P**oe{{qEtJ=* zWlReTqwjjFiI4Iuw7j9bco-}K=1YLY()ryvI_^yVtiJufQ?9_Wa*92_LMTieM@zyM zB~ef(SD`mvTO10O3yv(&!0{b^N0VUlC6OU<+^myK8puC0xhqSV-9&ZG%$WiBviQM_ zG68UAX(Y_XD&r8!`hWS~t==ql=2-whW|tcM7gM|ijRFkp7j=~;>6w6s;Y*S<7Q z;he5KtM;r$w zM`|uO*4CLcI+?u}H!D3Mef!ZqiOYefUimNgQD(m*t3|BUS@z!%_HOP|mb246U#I&Q zoE{`Ob>%sAJ1aU-8oD1j{rrl36ILj&?=~55Vvm*!PG@Ldz%()P+0M?1)ezp$hPF6` zD&+4RT1Qo8038|BavbpK1=z?g)REm}8d_Qzxo#XQC_C{ zXC_ssDZJpjOioW-rS@(g71mZ=dsKLNx#Qb#hB@Kx*9&9o4aaE9!>Pk9M0dH8M2I+Fs?a z8^^aH%UT5z*C6p(h#D6PEzuDSCsM8HmL6Rh)-Xsc$KXOIbVKBk_|nbK!V;a!w6SXyfclSHlIW#Ry1W*a6UOVIFe4-tll!i zx$WeRgL9s2@0k84c!F^7#3skAsikXF7soGZ4y*)z_;9~TzVFFfpUhLc zpT0&KUBBBiAbGH>)<00O5E$WS^7!hi8F711U+1NFH@E0KK1Qs?8}MhGQ7jV6NnF<0Rr!QZplV2 zxn<2t)1)7>bEls;v5WW2Y)mKeM6X^-)~(Dpn#_1R*lbpK#-u)atkU#N>9?t=yH&ZS zCo>bD)CY}x1$)Qem^ky}$?eB8!KR+kvr{eiZd^Y)$z1BW`Pjo+`VC0`%_aTm^;{4C zdsF9*ngq=nBfp=lK6A}y@5$p^?*b0KeX2RL`NHQz?fZ(QhrEX;9q*MLyZ^(aGi}yq|(VDo09*7UZhr^tv0-rINT z#?!i&a_?@O`tb79?CdGDGtj!rs5N0UqKPVEQ;nlQM2vxw3$yV>eCsZ-oM_B}cv`#U z0SPKya2YD42lU|3I67%w99q);wK@`bxDmRE%7MS5U0N@|c?um*eQuLPU%9w1Rii!Kh3-RC z8T(UkD>P0dpRplmA4VFE07`@gt{As;EmM;{AwpezmxrIzV8B#n1_(z@RuPuJ3bolO zAaz0Q*#HX;G>^zP+J%k@?O<}LNue~b0WgV8N2@@?IhoLKy5K%0cb|8>in46Xyfi|M z@#pWu@||x;!+Fv|hGABBfYyHeeeq4ft5Eepicba9j5wbKNQ)xzE2>bx_!o*51pHRv zy9lGk4nvK)jLusLUa)V#RtuhMuvVOf8Uy_NJE5V9s5lbj6oH}4L>x}j5MuBtWJBLD zb1a$IGx6D3_G;JCVLtZObe<>8F9Uc(e!-+#m}Uq}W$z~$a<9>W$rY`z9w=%UX76{{ zLIrSw^^s-|Ol2*OG|{r~X~`8L1_fn@(Fin&X2{9=*1-3~l54)&VzxPNb^sVV?L-Hp zC3Dk9JTnvRKX%z?LJy=Ru|rXwdghSgM$V zcFF)0_nmKcnwo%z#BpfGq@{J0%)>2dmKBYu6yQGRNq9B$9O16G%-}`J|H#0u+C@pL z$NnQjleWNut9+qb2&oj<1An?B7um$QjcTq3$$;tjv=kM;V_nd&SQr_Nh)$vVRD|^{ zL*rT?ywp{iI1=Go!H;01Ma9!DR}5Xwf;}eXXHn9U85vU3d?U7*mx&N-Iu=j>wx&?+ zK2T0_`2ktw=5s4q4Vh+h06+R7PK6d1`iV&aihKrmbkULkL4DJdi7nbO;yjv?naHM{ zFUT#;qF;%nyK(tbM)?vL(7w=fcGCcfWkn(GIrrUjWtHGyBgNEbKJTuR;15dAZ(x$)Buzbmc zFRA#Dw`fFaL;CDlsvmP%Hj#h7FTS32Au)w6PJz`a6^-vgU8XZkVf@rl9?Xoi7DFFS zC8W7H{GgFCugT<2+0xE7KpJ#1X<4x2U9^TfODkIi&Kw$b5t5*?E@2qi=lPQs`g4iR zZ|$BXPX5XaJ!dmKc;n~Ss{6F@0d%ta8IWMngyLHCIoK&CN|>G*$8FR92mL)XWEcJ4 zI+>=`JkX8=o_zu}4^?d%9`xX3mE9x^l}`+Mfg}=Rc!9nT zjqalD9nE~USunhbE?ox;pY5mK-?v5rj6YNSm?+7Q0z%?J4&1Di~mnxH8Nl>Dw7dM!&5I_JDxf``1B`E+OYCCSA)*v z3z=52i$mxdN{XyP^PUtq7)Hmiv*P9esbsrXz8$IdO%8u)-*H01%ZhZ|ZyL5eZ#gq; zT7Z)dgJ-}{_RzD-6zu_8)+z*tM)-U=WYbGQ6(VzQw$I0&7Kow?8q%Gs!~Y|1W>Gee zvZ1-BGo}7r+ao)zBM?T! zBq_t^-qZXV_xZr#f=P5LHa;_9`M>`@KobeNq7)rq*FH6S^HL8ZYZxeHpP5WdqIsqz z(--r&nU@>V1RAKhu`m>ix{qYFU_;*)#N3#QMiG;yvXW1a-E&<2(MA3pYM72Qq>*WK zR4sTInvP!P3*`cb?(k?^0I3RKY6Z9iFCc}BoEA%qWrFd;kT7|actaWho902v7Yv0O zdaC&S+)VJ)pmarRjXX`~$H+T3kmdTb(6W|!DiQMg(qFB>(S`_xXS7?JOTWJ4yYyQ8 z*i6nn*+%Teu{VE|Y>s7`%kl9h1GKxo-4vqzyrU95iBT#{eYl%uZLlbdtlL`LgZr;e zKGEb4*zmbbnlykw?Rrs_pJgAi2)B2w=8rpBdhEQCqUx7QmNxIPfCT&HS+j(*D!7fz zLjT^5vjTTkmG5%1{dc$Ds(KU+fiF`7ENBRyf>?w(ozn^B@3wI^m2& zP5f0Y@fVpTFAMSoT)i%4ULXCL`>U<|T_T@u{`)vB9jg;ozaygD7$?n>hr`GJidjiL zP5CGigVIVd`MdsktoC^7lL^P)ijBhOu$7Ee>Em8XTa8j=BwxB074Ju#3 zOh@We2qr$(#|b83e~&|Wmir!XB306O04N*dKagqw8zt}NSa2$GE2`*z>MfzJ^5@m6`@wZ{6&$n7Oqar|UsLv69Qnzh@~L=imOeo`4u zpYRxO#$8a!D63z%_AOs~BfvVozH{m}az~Lo&T7}8=NLTHdEb&wBl-kcl$iuPm!pSn zjmeq2MGh;t-XinpK)!vHAe=T3i0PzJn;0m%Z?3h){QY>C;_sNAaKSg0mGvL;y?~;dT3_vpu-7Jt31~%5Pm=F!%EAf z$IiH&IZ?C@sXh07{Fqci`!D3-gpFSkM-BEegi*;KB9F^PVIE-#&o;CROs!w*z0yut zRv0vIoqj{p*#6KyVBRs>|4gPo@BMGH^M(^+ho%9q+>yN9Kos}nZjj}XxQ%hNR6=7U z=4)RtFA;e-WwAp5sJ0>a!Ypa@N4q6YuwSdRuP(xL@m9_z%Ss%aoB921Y>6B2o1K7o8YpC;P}hD* zDm+wD0^wR9$jgwv06a7~s+o$qXuZr=btlw2nb-EQtSGW}ER` zW3Xpp_@#d>XDjD{!Qfbm^d+LbO5UgJBk*_r77c-RRI5q(9HBakgO%k z|2+ZMl0~HmDa>4h=0-B2M&*D?{?BlTbwskFf*`TM-kh^u=*sN}R4Tl-n9+s`eXTvz z%z37boo`O9%e7v?afJTqx5Y@;nDMYymJOlh;Zh6cAs=X5UI60LZa?_tF4GneDzD|d zp>UFgO1E-O!#v4Bs|edPz7!Hlj}>t{lH@OLWxb8@wFd)~_ZFoXnXd(N0`*>gfChI%dkw#brQ02aF4VoDEFt^g30yblY!3}GHC_F9-@+n*rfV)1HEkJA8|K^3x8<3)#7olO(RA)) z`pn!J7egJeCN!~t-XDSnHwo(AY3d&o)K_{|mL?r7TV;16lTUE>Y0Hq& zRPJYUP|-cjyHSlPBXoj#-}a$hUV@nNLJrFjI^WVrcehY^JETpKfm}>_g3PpP*rKa;QG%X z^_@A1r-7Z)HGT<~Bp3JQ3_HIiGqN%sEeM}BdI7h-boR8#XNj@6=T^s7uYHvIq8t+6 zV;8=b_vg`)rR>8*zeB%j$CADne@u8)l>8%~S17goI>qQ^YQe>u!lvK6wT=%aq(t2Q z_hCi)((totnf2x<->)9l2{X-iqR$`kUGk|qGAmnru`bc{llzxHa}J08>_=f&Q!e#z zZ=)}T{(Jm0=d{V_c*@3*WaZ~1kDdv5TWrU(BWwAxk3M~TwKbMuwoxN%x*Q}U_~uXY z`f-f$SD*j3r~1t{JE}~7od4I5^m1nN;m60<5o^#$jjTU?vQH}aM_mgF=6?;sM&yb! z@+I<#hj!Tf)equ#o%d16YbsXF-VyuP-ZfbT5=~$J_U^A*S%srlpUFFt(1yDixyMy{ zHJ95Rzexr|z7ecI`<#vYRFIh=2rx=1dFgb7H+_0rl?!sDn^WxNR6x*f*I0{+HF0az z>HfX1edz2-S=LJn262|ag%xux^fL8CtxtTQSgs%U7iq%(e7P*Mj--vhf(>>W6YSS1wX9G6RRKGXxlHjSKyIg4GsG z;*p9pER}e0f{x-4L3wPAP^*g!%8}t$!hO{&Bgtd4HUlOLKrbue&2IcH8u{?xOj z8}qYLDm8)277H`tG6!EtuG|XbX*31S44zUqsMPGM(O9WjXqE4MEI$!*ihFMEkdT7N z>%ez=HHv0_-J(Idj=oy9b2_hlbaZNUy@QnaZ%#YR>qiF73VizP6?i!3lVNd?(X~%T zH9@xri1=s^HgfkdvzAvKHZ7^(S3#%$IkM5 z@Nvf_CI{k-7qQxfSRH&Bd}7$&{yX^eUcbu$Ypv)rX5afgTdcOEt=*2D@i7=NwjSFA zSRghsfb!PvD+5?LYh$*on{A;F=qxpt!)SCbRJS~s$GK@GtPaas6 z+b^$3MB~yuI{VHjQBbIAEt7sI|Jif$!~TwtFk32I5qkJSdf+wUA$;axk&_m_eKt4G zSagC;bFFl&(Hgiq6YF<>Aq!^Yx^wa&6%A)2b-vtm4pfd@nA}@XH#imL9dg4uFuGo9 z#zjW`?5CLYka!3LAomvnlmYw$XtV?1fJ#s*=ysr_;#rCRUw)E`o>Gb=DMe=~MQbTV z6X}BnGD>>*gL?7@b>tNZ@`_sfrEpN|pvoa-4Gk4dbrnrDB@Jao^@9rPit=g-@~Vn* zstR(d@^}?_S!KM8lB~3%jFh638m(w?LEYw@j@?;9hahvO09)r%4$hvAj;{80 zM{R7J&4`YMN9^FOBi5)2Hq^-OiNt@Lyq^>vOL>bV)~c^}d9H_;6<)s8UL zjyBOxIARcIX_#PVl62G})zv!nq)mpK4gHu^zLRCKwRyRj`889s8x|Hf?TOW%L}rj_ zb(nr#lvZQB_MH^nyIF_3@(dpp89ymAdwRw0Ng3%;iT6G$?OtKn-J-~jlK7UAq+5lV zRk?ZPIi-bpSM&0(W#*J6r!&%$(x?fS>G9ENk>PO{E}T1iDIhr7@62Vlpfu+Iy0ve< z*~xq(QjWHLuBv0}#-cQWVOuV0Z z`|j=Z^xK)Y6Vnr~_upR6PQ99)dNKR<+3ZB$Ea%be%ljXO+ujc}y&r6S|Ezs#=mBT& z$@9LxL3SVeac@uele_Ibtu6PP8`?S=>+jZAJ*dCh(@?=~EPCFS$GMyT`hLk|PwDG> z#X2u_U_8J-xRgDM*_#1_zikL0&-YOU_V0^_$u)zyINh)h!|k=t3h`DsQVtz;&r4KJ zH2FU7xb-4kNa1XBSJCGem4;C(AD-X6Jyu1`KwSLF3UtY~%ini*xNu!>AHOK?yiNFO zUTL3;o*lW@Jk{pkpChgQT5YoVY^$Yo{HDfCg-E&U;0Q;+V?kFen*_EPi_A)1T z)%4b^H7!!2zRkVdVPb>)%&tahi}KY5jxYzKh<{Eqyhg7Le(EEacP#!^oal;qoM^zO ze~rfttJm-q@61hP8`tMa$kFr9GXZb!xX5cFk7)N~cs37v?cnMlx@p(zoXllm5XZQY z3NYCErb-aat{28}fsddV*R&Q`HVz5{8&+84U}$I&;@N7@xX`QUx9@WaLpXQAX+?&k zF?^EnLZ9IVnWILHo3P}C_D&xU8)_9Qnc3IwRhn=7{n|WKeS-I@JV5{ z_as>Pd33M4`=!5P#fN|oOGoqtP@Q;wE$tvVJKVM9BKTvvAr|^_+2QrUNj&~jHC^eN z@IjVuKkU$FKmtQ(xU`;eu(#6#2JwFF`U?E-d(EPG_v)|UQqW`hV-UhY_kJbbD<*I% zVubw5KD`@ToU1d*oS#sBexcXBeq?!#gSl(cpQkgnu~tZkfaxI%{^33iYb~8|Sn2pc zlm}~~4D6-aU!m)Av`6B9*(3jL$%TM4B8))ooIGN+FZ8HI(sqJn*T{z=M$8CP7b`SL zSl2RxG!mT6az3~GdL@5S{)J)w^1^Y2>k@U22Jp~(1KNdTfQ@#SXr`07Hg(%hpbXc~ z??y6PL>7Cy3_2QEI7Vmd7B!III$?~aQ3ca!oeyd%x)gW9kj}se&k)XJIvHau)iv)8 zSqnR0Qq5K1Vk(_N0?q$e2_(W24~)<|-$KgPUEi)jDblNc;VtbI!QJU290x3647bi! zdmT@}>Hv{?IeLD(Cy++p{p4-nM{(d`Vyw_awobrqt)t$+$(B*Q^8h(#ie%jG8nHUh zne-e2R8z6;>C(Uojj(=Y3XfD+VAZ78zw>rh73v%*4>&~}^(8$5B=I$QJjV#WO;aCT z1JFFv#XAsX9W}u0am~8(DB#fKZi$FTlA2QYGz|rj??ydg^4AP!f$xAc0&c)BVcKns zy-68BAv^NFiYvstfTyV@azeGj_JYOLeCYd)cwVU_T}w{|>%UxkYP-Q(wPXBI1_LD7 zQ6ii%1IbIdK!WANm`}t0VBA-K%HHnEI>6V54BM-X2hV3#@v2dVc!<>{?67LbTH(rG ze-Pxk%=7Ju$HV}|B(03BYLZ?xap*q=ec~NPq9`|7PagM&^3tN99*`DYlX}QJu z<4kA`bKgnhT=Ud)+xsMD*J-cb5pXzt%Mt@_&wLR%4^5+zssB`}EmjS%#|=MWu~CAk zGoG!Xf{W00l_A}m)p;_uKWPwn4Uy`ig6BmXID8fsJkD!Sc=j{ilyUA7{=-g*EVL&5C&~>^k&@MiSlXxK z=c}^w8m!~)4xi@M3JwveiUO~*gXz7+dr<*RuPm-RB}L+Ew(XRzuZ^b>&*3}q&%O#R zzzYvpN5V|yH7}}KrY#HY&-lRWg=bax z{?n(bp9w`&9vF_?v$KM}&JJ_lXlML*ap(gF%vBt?wB(rqH5)f~G_?d@A=rjEhtbt4 z+(GWb!`P@T*E9{F_%@x_SN19jE3#YT(QyB!ykzpKk|V(*eib$+j8hkWKyT-i^ylL z(ASVfm0I5>e~kXm0RIeby7*WHe+ADa{nSaY&{WXXVP1p||KCRb>c<5m=yZAh?!5oy z@rmi&JcH7$w_UIFJ*<0r)o}{lae^QnUqzunfFcNNZkGOaDK~; z#|5nySMDxKDjSV>yjs8Vv`#Y$j^eu&C|1<7``Pec{AjIw{q2@Bgs_f;SF~dr*;5pu zTz{%q{2{DH_%CN?qmsZBzl|mz>4gV)s6u;hrXGCuTe{KcMBA~=j=PeuJWuM3w1t#< zowSe?c37CSlMy)4%%2CdI(T3nhSUfU>}2rEPncQ$)sz2fdcYpLe(3ioY4$s#&?Gnm zfJ(CN6Pu<`kvb81iBiha*Nf={e=l$VyH5P>hN1Qj57b@bqVNik?G`F3D#ShHKqHFDsMDqp;aAId2)lx55)Cy{3MjtUp}ciOWGGbC zf<(m;-X!)y{_QT83*K_9&5_v4z@5VlYatY|N+Lm6riiUCvSu&kU#(bwNeal2!q7h` zXcYo-L9KaMXHGx{h%oQERQ~bQJJE@d_%z(ISrgHfuN}F~KGgQxC7(Yn@?I(gsIjet zy{U8Js2%1>aT)=a(H&v1?vF`&rdB~gtutXmMA)ZDfnP+7W$0lcPpml}^@9P+C0IHU zQHu=NFLGkHa-fc9raSIHBS*8C4eRA%KrVd6Shy>eSPDoyJFHsDyvP^97l2Cy0U;$= zc&_gLm%zi~Gvh00mPN=tqB4<*RI8z-8`6J%f;?n7^CtW;r|jr?)AWKZIs=zoY?xi@ znSCWbyP_idT37b<>Fk?Z*-TuHb3lqlfLKj@4q+=sB_O9^I%m23KtPG;9iiAKaoDEi zoUZs7f>^F&K+c2d_-T;f#jK!cLLOYUfVzS3dT z*mSPHSblA2z7eQk+OR-K8PZLZG1*L=uTh+N09#%_w}2qe*HJ%N^r9^37E2V1i`pg^ z+(-l24{1aau$2HGqs92e3dVuM$Zu>uWfI>30(PdtZiI`NnBMl6LY;r5*>`(ooX|TX47Pe%S&)gr? z;R?Qq7r4H-kBLl)CP6rCzB_pNC(*DO7pxb-RzIP{+lXw6J;xzqgz-h@2M~K!*d5*D zqrpn0SX4zl%Fz-PPJ+B<16)+GWmwe9RrKt=vZTfcWdL6QIF!1-MF@1;5RFEfgHtI=2gR`P`)U#ypjvO_J03bKr_L@a~LzNSJTj8QNT z@s$j(@}^a-F)XH=r+{@Nqp0jdZ1I~5MmHC|ZhlUz--!A!w|i7p}Da~$xRFyJy%qB;kqCfsV7v-?*bV=RPJ zt5(uxDtw9J JnsWy(NZiW@$5ix?s)q&b#b6qu3E6gytDBY( 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 oylz=(KI!pLQ|pIfLk@3I{yMQ~oOnyp8? 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%0DC!Fkg~pW8{fZHwP6i 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ν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%0A#tP7J{^hC8c`hVGb@d``2h<>qPPRq)(RM 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 diff --git a/cmd/strix/main.go b/cmd/strix/main.go deleted file mode 100644 index 744b956..0000000 --- a/cmd/strix/main.go +++ /dev/null @@ -1,202 +0,0 @@ -package main - -import ( - "context" - "fmt" - "log/slog" - "net" - "net/http" - "os" - "os/signal" - "syscall" - "time" - - "github.com/eduard256/Strix/internal/api" - "github.com/eduard256/Strix/internal/config" - "github.com/eduard256/Strix/internal/utils/logger" - "github.com/eduard256/Strix/webui" - "github.com/go-chi/chi/v5" -) - -// Version is set at build time via ldflags: -// -// go build -ldflags="-X main.Version=1.0.10" ./cmd/strix -var Version = "dev" - -const Banner = ` -███████╗████████╗██████╗ ██╗██╗ ██╗ -██╔════╝╚══██╔══╝██╔══██╗██║╚██╗██╔╝ -███████╗ ██║ ██████╔╝██║ ╚███╔╝ -╚════██║ ██║ ██╔══██╗██║ ██╔██╗ -███████║ ██║ ██║ ██║██║██╔╝ ██╗ -╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ - -Smart IP Camera Stream Discovery System -Version: %s -` - -func main() { - // Print banner to stderr so it doesn't mix with structured log output on stdout - fmt.Fprintf(os.Stderr, Banner, Version) - fmt.Fprintln(os.Stderr) - - // Setup logger first, before anything else, so all messages use consistent format - slogger, secrets := config.SetupLogger() - slog.SetDefault(slogger) - - // Load configuration (uses the logger for startup messages) - cfg := config.Load(slogger) - cfg.Version = Version - - // Create adapter for our interface - log := logger.NewAdapter(slogger, secrets) - - log.Info("starting Strix", - slog.String("version", Version), - slog.String("go_version", os.Getenv("GO_VERSION")), - slog.String("listen", cfg.Server.Listen), - ) - - // Check if ffprobe is available - if err := checkFFProbe(); err != nil { - log.Warn("ffprobe not found, stream validation will be limited", slog.String("error", err.Error())) - } - - // Create API server - apiServer, err := api.NewServer(cfg, secrets, log) - if err != nil { - log.Error("failed to create API server", err) - os.Exit(1) - } - - // Create Web UI server - webuiServer := webui.NewServer(log) - - // Create unified router combining API and WebUI - unifiedRouter := chi.NewRouter() - - // Mount API routes at /api/v1/* - unifiedRouter.Mount("/api/v1", apiServer.GetRouter()) - - // Mount WebUI routes at /* (serves everything else including root) - unifiedRouter.Mount("/", webuiServer.GetRouter()) - - // Create unified HTTP server - httpServer := &http.Server{ - Addr: cfg.Server.Listen, - Handler: unifiedRouter, - ReadTimeout: cfg.Server.ReadTimeout, - WriteTimeout: cfg.Server.WriteTimeout, - IdleTimeout: 120 * time.Second, - } - - // Start server in goroutine - go func() { - log.Info("server starting", - slog.String("address", httpServer.Addr), - slog.String("api_version", "v1"), - ) - - if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { - log.Error("server failed", err) - os.Exit(1) - } - }() - - // Print endpoints - printEndpoints(cfg.Server.Listen) - - // Wait for interrupt signal - quit := make(chan os.Signal, 1) - signal.Notify(quit, os.Interrupt, syscall.SIGTERM) - <-quit - - log.Info("shutting down server...") - - // Graceful shutdown with timeout - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - // Shutdown server - if err := httpServer.Shutdown(ctx); err != nil { - log.Error("server shutdown failed", err) - os.Exit(1) - } - - log.Info("server stopped gracefully") -} - -// checkFFProbe checks if ffprobe is available -func checkFFProbe() error { - // Try to execute ffprobe -version - cmd := os.Getenv("PATH") - if cmd == "" { - return fmt.Errorf("PATH environment variable not set") - } - - // For now, just check if ffprobe exists in common locations - locations := []string{ - "/usr/bin/ffprobe", - "/usr/local/bin/ffprobe", - "/opt/homebrew/bin/ffprobe", - } - - for _, loc := range locations { - if _, err := os.Stat(loc); err == nil { - return nil - } - } - - return fmt.Errorf("ffprobe not found in common locations") -} - -// getLocalIP returns the local IP address of the machine -func getLocalIP() string { - addrs, err := net.InterfaceAddrs() - if err != nil { - return "localhost" - } - - for _, addr := range addrs { - if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { - if ipnet.IP.To4() != nil { - return ipnet.IP.String() - } - } - } - - return "localhost" -} - -// printEndpoints prints available endpoints -func printEndpoints(listen string) { - // Extract port from listen address - port := "4567" - if len(listen) > 0 { - if listen[0] == ':' { - port = listen[1:] - } else { - // Parse host:port format - for i := len(listen) - 1; i >= 0; i-- { - if listen[i] == ':' { - port = listen[i+1:] - break - } - } - } - } - - // Get local IP - localIP := getLocalIP() - url := fmt.Sprintf("http://%s:%s", localIP, port) - - // ANSI escape codes for clickable link (OSC 8 hyperlink) - clickableURL := fmt.Sprintf("\033]8;;%s\033\\%s\033]8;;\033\\", url, url) - - fmt.Fprintln(os.Stderr, "\nWeb Interface:") - fmt.Fprintln(os.Stderr, "────────────────────────────────────────────────") - fmt.Fprintf(os.Stderr, " Open in browser: %s\n", clickableURL) - fmt.Fprintln(os.Stderr, "────────────────────────────────────────────────") - - fmt.Fprintln(os.Stderr, "\nDocumentation: https://github.com/eduard256/Strix") -} diff --git a/data/DATABASE_FORMAT.md b/data/DATABASE_FORMAT.md deleted file mode 100644 index 394257f..0000000 --- a/data/DATABASE_FORMAT.md +++ /dev/null @@ -1,517 +0,0 @@ -# 📹 IoT2mqtt Camera Database Format Specification - -**Version:** 1.0.0 -**Last Updated:** 2025-10-17 - ---- - -## 🎯 Overview - -The camera database is a collection of JSON files containing URL patterns and connection details for IP cameras from various manufacturers. This format is designed to be: - -- **Universal**: Works with any IP camera brand -- **Extensible**: Easy to add new models and protocols -- **Human-readable**: Simple JSON structure -- **Parseable**: Straightforward for automated tools - ---- - -## 📁 Directory Structure - -``` -connectors/cameras/data/brands/ -├── index.json # Master list of all brands -├── d-link.json # D-Link camera models -├── hikvision.json # Hikvision camera models -├── dahua.json # Dahua camera models -├── axis.json # Axis camera models -└── ... # Additional brands -``` - ---- - -## 📋 File Formats - -### 1. **index.json** - Brand Directory - -Lists all available camera brands with metadata. - -```json -[ - { - "value": "d-link", - "label": "D-Link", - "models_count": 250, - "entries_count": 85, - "logo": "/assets/brands/d-link.svg" - }, - { - "value": "hikvision", - "label": "Hikvision", - "models_count": 320, - "entries_count": 95, - "logo": "/assets/brands/hikvision.svg" - } -] -``` - -**Fields:** -- `value` (string, required): Brand identifier (lowercase, URL-safe) -- `label` (string, required): Display name -- `models_count` (integer): Total number of camera models -- `entries_count` (integer): Number of URL pattern entries -- `logo` (string, optional): Path to brand logo - ---- - -### 2. **{brand}.json** - Brand Camera Database - -Contains all URL patterns and connection details for a specific brand. - -```json -{ - "brand": "D-Link", - "brand_id": "d-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "website": "https://www.dlink.com", - "entries": [ - { - "models": ["DCS-930L", "DCS-930LB", "DCS-930LB1"], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "live3.sdp", - "notes": "Main HD stream" - }, - { - "models": ["DCS-930L", "DCS-932L"], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "video.cgi?resolution=VGA", - "notes": "Medium quality fallback" - } - ] -} -``` - -**Root Fields:** -- `brand` (string, required): Brand display name -- `brand_id` (string, required): Brand identifier (must match filename) -- `last_updated` (string, ISO 8601 date): When database was last updated -- `source` (string): Where the data came from (e.g., "ispyconnect.com") -- `website` (string, optional): Manufacturer's official website -- `entries` (array, required): List of URL pattern entries - ---- - -### 3. **Entry Object** - URL Pattern Entry - -Each entry represents a specific URL pattern that works for one or more camera models. - -```json -{ - "models": ["DCS-930L", "DCS-930LB", "DCS-930LB1"], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "live3.sdp", - "auth_required": true, - "notes": "Main HD stream with audio" -} -``` - -**Fields:** - -| Field | Type | Required | Description | -|-------|------|----------|-------------| -| `models` | array[string] | ✅ Yes | List of camera model names/numbers this URL works for | -| `type` | string | ✅ Yes | Stream type: `FFMPEG`, `MJPEG`, `JPEG`, `VLC`, `H264` | -| `protocol` | string | ✅ Yes | Protocol: `rtsp`, `http`, `https` | -| `port` | integer | ✅ Yes | Port number (554 for RTSP, 80/443 for HTTP) | -| `url` | string | ✅ Yes | URL path (without protocol/host/port) | -| `auth_required` | boolean | No | Whether authentication is needed (default: true) | -| `notes` | string | No | Human-readable description | - ---- - -## 🔧 URL Template Variables - -URL paths support the following template variables: - -| Variable | Description | Example | -|----------|-------------|---------| -| `{username}` | Camera username | `admin` | -| `{password}` | Camera password | `12345` | -| `{ip}` | Camera IP address | `192.168.1.100` | -| `{port}` | Port number | `554` | -| `{channel}` | Camera channel (for DVRs) | `1` | -| `{width}` | Video width | `1920` | -| `{height}` | Video height | `1080` | - -**Example:** -``` -Template: rtsp://{username}:{password}@{ip}:{port}/live3.sdp -Result: rtsp://admin:12345@192.168.1.100:554/live3.sdp -``` - ---- - -## 📊 Stream Types - -### FFMPEG (Recommended) -- **Protocol**: RTSP, HTTP -- **Format**: H.264, H.265 -- **Use case**: High-quality video with audio -- **Priority**: 🥇 First choice - -### MJPEG -- **Protocol**: HTTP -- **Format**: Motion JPEG -- **Use case**: Medium quality, wide compatibility -- **Priority**: 🥈 Second choice - -### JPEG -- **Protocol**: HTTP -- **Format**: Still images -- **Use case**: Snapshot-only cameras or fallback -- **Priority**: 🥉 Last resort - -### VLC -- **Protocol**: RTSP, HTTP -- **Format**: Various (VLC-specific) -- **Use case**: Compatibility with VLC player - ---- - -## 🎯 Priority Order for Testing - -When testing multiple URLs for a camera model, use this priority: - -1. **RTSP (type="FFMPEG")** - Best quality, supports audio -2. **HTTP MJPEG** - Good compatibility -3. **HTTP JPEG** - Snapshot fallback - -**Example:** -```python -def get_urls_for_model(brand_data, model_name): - entries = [e for e in brand_data["entries"] if model_name in e["models"]] - - # Sort by priority - priority = {"FFMPEG": 1, "MJPEG": 2, "JPEG": 3, "VLC": 4} - entries.sort(key=lambda e: priority.get(e["type"], 99)) - - return entries -``` - ---- - -## 🔍 Search and Lookup - -### By Brand -```python -# Load brand file -with open(f"data/brands/{brand_id}.json") as f: - brand_data = json.load(f) -``` - -### By Model -```python -# Find all entries for a specific model -def find_model_entries(brand_data, model_name): - return [ - entry for entry in brand_data["entries"] - if model_name.upper() in [m.upper() for m in entry["models"]] - ] -``` - -### Fuzzy Search -```python -# Search across all models (case-insensitive, partial match) -def search_model(brand_data, query): - query = query.upper() - results = [] - for entry in brand_data["entries"]: - if any(query in model.upper() for model in entry["models"]): - results.append(entry) - return results -``` - ---- - -## 🌐 URL Construction - -### RTSP URL -```python -def build_rtsp_url(entry, ip, username, password): - return f"rtsp://{username}:{password}@{ip}:{entry['port']}/{entry['url']}" - -# Example: -# rtsp://admin:12345@192.168.1.100:554/live3.sdp -``` - -### HTTP URL -```python -def build_http_url(entry, ip, username, password): - protocol = entry["protocol"] # "http" or "https" - return f"{protocol}://{username}:{password}@{ip}:{entry['port']}/{entry['url']}" - -# Example: -# http://admin:12345@192.168.1.100:80/video.cgi?resolution=VGA -``` - -### With Template Variables -```python -def build_url(entry, ip, username, password, **kwargs): - url_path = entry["url"] - - # Replace template variables - replacements = { - "username": username, - "password": password, - "ip": ip, - "port": str(entry["port"]), - **kwargs # Additional variables (channel, width, height, etc.) - } - - for key, value in replacements.items(): - url_path = url_path.replace(f"{{{key}}}", value) - - # Build full URL - if entry["protocol"] == "rtsp": - return f"rtsp://{username}:{password}@{ip}:{entry['port']}/{url_path}" - else: - return f"{entry['protocol']}://{username}:{password}@{ip}:{entry['port']}/{url_path}" -``` - ---- - -## ✅ Validation Rules - -### Entry Validation -```python -def validate_entry(entry): - # Required fields - assert "models" in entry and isinstance(entry["models"], list) - assert len(entry["models"]) > 0 - assert "type" in entry and entry["type"] in ["FFMPEG", "MJPEG", "JPEG", "VLC", "H264"] - assert "protocol" in entry and entry["protocol"] in ["rtsp", "http", "https"] - assert "port" in entry and isinstance(entry["port"], int) - assert "url" in entry and isinstance(entry["url"], str) - - # Port ranges - assert 1 <= entry["port"] <= 65535 - - # Common ports check - if entry["protocol"] == "rtsp": - assert entry["port"] in [554, 8554, 7447] # Common RTSP ports - elif entry["protocol"] == "http": - assert entry["port"] in [80, 8080, 8000, 8081] # Common HTTP ports -``` - ---- - -## 📝 Naming Conventions - -### Brand IDs -- **Format**: lowercase, kebab-case -- **Examples**: `d-link`, `hikvision`, `tp-link` -- **Invalid**: `D-Link`, `D_Link`, `dlink` - -### Model Names -- **Format**: UPPERCASE with hyphens (as manufacturer specifies) -- **Examples**: `DCS-930L`, `DS-2CD2142FWD-I`, `IPC-HFW1230S` -- **Keep original**: Don't normalize or change manufacturer names - -### Protocol Values -- `rtsp` - RTSP protocol -- `http` - HTTP protocol -- `https` - HTTPS protocol -- **Invalid**: `RTSP`, `Http`, `tcp` - -### Type Values -- `FFMPEG` - H.264/H.265 streams (RTSP or HTTP) -- `MJPEG` - Motion JPEG streams -- `JPEG` - Still image snapshots -- `VLC` - VLC-specific streams - ---- - -## 🔄 Versioning and Updates - -### Version Format -```json -{ - "brand": "D-Link", - "brand_id": "d-link", - "database_version": "1.2.0", - "last_updated": "2025-10-17T14:30:00Z", - "entries": [...] -} -``` - -### Update Policy -- **Patch** (1.0.x): Add new models to existing entries -- **Minor** (1.x.0): Add new URL patterns/entries -- **Major** (x.0.0): Breaking changes to structure - ---- - -## 📚 Examples - -### Complete Brand File Example - -**foscam.json:** -```json -{ - "brand": "Foscam", - "brand_id": "foscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "website": "https://www.foscam.com", - "entries": [ - { - "models": ["FI9821P", "FI9826P", "FI9821W"], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "videoMain", - "notes": "Main stream HD" - }, - { - "models": ["FI9821P", "FI9826P"], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "videoSub", - "notes": "Sub stream SD" - }, - { - "models": ["FI9821P", "FI9826P", "FI9821W", "C1"], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIStream.cgi?cmd=GetMJStream&usr={username}&pwd={password}", - "notes": "MJPEG fallback" - }, - { - "models": ["FI9821P", "C1", "C2"], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr={username}&pwd={password}", - "notes": "Snapshot" - } - ] -} -``` - ---- - -## 🛠️ Tools and Scripts - -### Parser Script (Python) -```python -# scripts/parse_ispyconnect.py -import requests -from bs4 import BeautifulSoup -import json - -def parse_brand_page(brand_id): - url = f"https://www.ispyconnect.com/camera/{brand_id}" - response = requests.get(url) - soup = BeautifulSoup(response.text, 'html.parser') - - table = soup.find('table', class_='table-striped') - entries = [] - - for row in table.find_all('tr')[1:]: # Skip header - cols = row.find_all('td') - if len(cols) < 4: - continue - - models_text = cols[0].get_text() - models = [m.strip() for m in models_text.split(',')] - - entry = { - "models": models, - "type": cols[1].get_text(strip=True), - "protocol": cols[2].get_text(strip=True).replace('://', ''), - "port": int(row.get('data-port', 0)), - "url": cols[3].get_text(strip=True) - } - - entries.append(entry) - - return { - "brand": brand_id.title(), - "brand_id": brand_id, - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": entries - } -``` - -### Validator Script -```python -# scripts/validate_database.py -import json -import os - -def validate_brand_file(filepath): - with open(filepath) as f: - data = json.load(f) - - # Check required fields - assert "brand" in data - assert "brand_id" in data - assert "entries" in data - - # Validate each entry - for i, entry in enumerate(data["entries"]): - assert "models" in entry, f"Entry {i} missing models" - assert "type" in entry, f"Entry {i} missing type" - assert "protocol" in entry, f"Entry {i} missing protocol" - assert "port" in entry, f"Entry {i} missing port" - assert "url" in entry, f"Entry {i} missing url" - - print(f"✅ {filepath} is valid") - -# Run validation -for file in os.listdir('data/brands/'): - if file.endswith('.json') and file != 'index.json': - validate_brand_file(f'data/brands/{file}') -``` - ---- - -## 📄 License and Attribution - -- **Source**: ispyconnect.com camera database -- **Usage**: Free for IoT2mqtt project -- **Attribution**: Must credit ispyconnect.com as data source -- **Updates**: Community-contributed updates welcome - ---- - -## 🤝 Contributing - -To add or update camera models: - -1. Follow the JSON format specification -2. Validate using `scripts/validate_database.py` -3. Test URLs with real cameras when possible -4. Submit pull request with changes - ---- - -## 📞 Support - -For questions about the database format: -- GitHub Issues: https://github.com/eduard256/Strix/issues -- Documentation: https://github.com/eduard256/Strix#readme - ---- - -**End of Specification** diff --git a/data/brands/255-ip-cam.json b/data/brands/255-ip-cam.json deleted file mode 100644 index 60ec4ba..0000000 --- a/data/brands/255-ip-cam.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "brand": "255 Ip Cam", - "brand_id": "255-ip-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "255", - "32X 5MP", - "C6F0SgZ3N0PfL2", - "C6F0SoZ3N0P9L2", - "CF0Sgzonopfl2", - "DENVER IPO-1320MK2", - "DRC6F0SgZ3N0P6L2", - "es cam g02", - "HW0029", - "ICAM", - "IIII-551433-ABEBF", - "IUK 5A1", - "Other", - "phr04k", - "pppp-216658-ecdcb", - "ProeliteIP01axBLK", - "q52-5mp-wh", - "SRICAM", - "tttt-489242-vxvmx", - "xly0144" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "255", - "ICAM", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "255", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - }, - { - "models": [ - "3030", - "C6F0SoZ3N0P9L2", - "IIII-259624-EAADF", - "IUK 5A1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "4455", - "IPC365" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "C9F0SgZ3N0PbL0" - ], - "type": "JPEG", - "protocol": "http", - "port": 8082, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "common" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "H.265" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "icam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ICAM", - "Other", - "PoE" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ip66minicam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "Ipc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Ipc", - "ip-camera", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "IPC-V380-Q79" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "IUK 5A1", - "Other", - "sricam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "kiina" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "sioplus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "top" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/2n-helios.json b/data/brands/2n-helios.json deleted file mode 100644 index c896501..0000000 --- a/data/brands/2n-helios.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "2n Helios", - "brand_id": "2n-helios", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP-CAMERA", - "Vario" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VARIO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "VARIO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/307-hi-silicon.json b/data/brands/307-hi-silicon.json deleted file mode 100644 index d628d46..0000000 --- a/data/brands/307-hi-silicon.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "307 Hi Silicon", - "brand_id": "307-hi-silicon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "318e" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HI3516C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "HI3518E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/360-eye.json b/data/brands/360-eye.json deleted file mode 100644 index a27d724..0000000 --- a/data/brands/360-eye.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "brand": "360 Eye", - "brand_id": "360-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1111", - "EC101-B3Y2", - "EC107-B3Y2", - "EC107Y-B3Y10", - "EC38", - "EC73-V13", - "EC76-U15", - "Other", - "v380", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "360", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - }, - { - "models": [ - "360", - "360eye", - "360Eye", - "360EYE", - "360EYE PRO", - "EC101-X15", - "EC76", - "EC76-U15", - "EC80_V13", - "EC80-X15", - "i360", - "Other", - "v380", - "V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "360", - "360Eye Pro" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "LowResolutionVideo" - }, - { - "models": [ - "360eye", - "EC101-X15", - "EC107-B3Y2", - "EC107Y-B3Y10", - "EC73-N13", - "IPC365", - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "360EYE", - "360Eye Pro", - "EC101Y-B3Y10", - "IPC365" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "360EYE", - "360EYE PRO", - "EC101-X15", - "EC107-B3Y2", - "EC73-N13", - "EC76", - "EC76-U15", - "eyes", - "IPC365", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "360EYE EC129-X15", - "EC101-B3Y2", - "EC101-X15", - "EC101Y-B3Y10", - "EC107-X15", - "EC37", - "EC73-N13", - "EC73-V13", - "PW2K2N06E-GTWY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "603", - "Other", - "V380" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "E101-B3Y2", - "EC101Y-B3Y10" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "EC101-B3Y2", - "EC107-B3Y2", - "EC76-X15", - "epc101", - "Other", - "v380", - "V380 Wifi IP Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "EC101-X15", - "EC132-X15", - "EC80-X15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=8080&subtype=1" - }, - { - "models": [ - "EC101-X15", - "mv12241966" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "EC101-X15", - "PW2L2A06A-GTY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "EC107-B3Y2", - "EC73-N13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "EC107-B3Y2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "EC107-X15", - "EC137-X15", - "EC80-X15", - "XM80-8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/realmonitor?channel=0&stream=0.sdp" - }, - { - "models": [ - "EC137Y-B3Y2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "SL-CAM", - "V380", - "y335" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "V380" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/3com.json b/data/brands/3com.json deleted file mode 100644 index 6e7231f..0000000 --- a/data/brands/3com.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "brand": "3com", - "brand_id": "3com", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EX11402-WIFI", - "Other", - "rc8221", - "XHCI-SE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "EX11402-WIFI", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "EX11402-WIFI", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Ipela" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "IPELA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "RC8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "RC8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/3eyes3.json b/data/brands/3eyes3.json deleted file mode 100644 index c05c653..0000000 --- a/data/brands/3eyes3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "3eyes3", - "brand_id": "3eyes3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E-2100M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/3g-ipcam.json b/data/brands/3g-ipcam.json deleted file mode 100644 index 1790ad2..0000000 --- a/data/brands/3g-ipcam.json +++ /dev/null @@ -1,474 +0,0 @@ -{ - "brand": "3g Ipcam", - "brand_id": "3g-ipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002a", - "720 P IP CAMERA", - "L Series", - "Other", - "SRICAM SP004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "002A", - "IPCAM V380", - "IPC-HFW2231R-ZS-IRE6", - "Other", - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "002A", - "720 P IP CAMERA", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "002A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1234", - "C6F0SEZ0N0P0L0", - "C6F0SFZ3NOP5L0", - "C6F0SGZ0N0P3L0", - "C6F0SGZ3N0P6L2", - "C6F0SiZ3N0P0L0", - "C6F0SoZ3N0PcL2", - "C9F0SeZ0N0P4L0", - "C9F0SEZ0N0P4L0", - "C9F0SGZ0N0P2L1", - "C9F0SgZ3NP8L0", - "Chemin", - "F-SERIES", - "Other", - "SRICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "2016w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2018", - "F-series", - "P2P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "3245", - "328", - "3285", - "3289", - "454", - "4556", - "546577", - "720 P IP CAMERA", - "B987w", - "BM16", - "C6F0SeZ0N0P0L0", - "C6F0SfZ0N0P3L0", - "C6F0SfZ3NOP5L0", - "C6F0SgZ0N0P3L0", - "C6F0SgZ3N0P6L2", - "C6F0SIZ3N0P0L0", - "C9F0SgZ0N0P2L1", - "CT0276WHUK", - "Fd7902", - "GGGG-152116-FCEEA", - "L SERIES", - "Other", - "p2p", - "sr1", - "SRICAM SP004" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "355566", - "546577", - "Other", - "X6130" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3g Ipcam: C6F0SoZ3N0PdL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_0" - }, - { - "models": [ - "3g Ipcam: C6F0SoZ3N0PdL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "556", - "c6f0SoZ3n0P9L2", - "ipc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "590" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "720 P IP CAMERA", - "IPC701939" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "720 P IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=2" - }, - { - "models": [ - "720 P IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "720 P IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "C6F0SEZ0N0P0L0", - "c9F0SeZ0N0P4L0", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "C6F0SFZ0N0P3L0", - "PPCN060874FEGNW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "C6F0SGZ3N0P6L2", - "C9F0SeZ0N0P7L0", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "C9F0SEZ0N0P7L0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "ipc720" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-CAM" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "IP-CAM" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "IPCAM v380", - "IPCAM V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "IPCAM V380", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPCAM V380", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPCAM V380", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "L SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "L SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "NEXHT360" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&fps=5&quality=75&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other", - "P2P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "rc8025" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "SCRICAM AP004", - "SRICAM AP006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/3r.json b/data/brands/3r.json deleted file mode 100644 index f95d803..0000000 --- a/data/brands/3r.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "3r", - "brand_id": "3r", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "Prestige DVR", - "PRESTİGE DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Prestige DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Prestige DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/3svision.json b/data/brands/3svision.json deleted file mode 100644 index 9f9edb3..0000000 --- a/data/brands/3svision.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "brand": "3svision", - "brand_id": "3svision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N3011", - "N6078", - "N6079" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "N3071", - "N6078", - "N9071", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "N3072", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "N6013" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "N6071", - "N8072", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "N6076" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "N8072" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "N8072", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "N9073" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/3xlogic.json b/data/brands/3xlogic.json deleted file mode 100644 index 8c408dd..0000000 --- a/data/brands/3xlogic.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "brand": "3xlogic", - "brand_id": "3xlogic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3mp", - "vsx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "3mp", - "CMC-3MP-OD-I", - "VSX-2MP-MVD40", - "VX-3P28-OD-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "3mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "avtech", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "AVTECH", - "vsx-2mp-d", - "VX-3PV-B-I", - "VX-4S28-MD-I" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other", - "vsx-2m-d", - "VSX-2MP-MVD40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Radio" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "rc8025" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Vigil Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&quality=75&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Vigil Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[USERNAME]&quality=75&resolution=[PASSWORD]" - }, - { - "models": [ - "Vigil Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[USERNAME]&quality=75&fps=5&resolution=[PASSWORD]" - }, - { - "models": [ - "Vigil Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&fps=5&quality=75&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "vsx", - "VX-3P28-MD-IA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "VSX-2MP-MVD40" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "VX-3M-F-AWD", - "VX-3m-OD2-RIAWD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/11" - }, - { - "models": [ - "VX-3P28-MD-IA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "VX-4S28-MD-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/4er.json b/data/brands/4er.json deleted file mode 100644 index 5d0d956..0000000 --- a/data/brands/4er.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "4er", - "brand_id": "4er", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/4mp-ip-camera.json b/data/brands/4mp-ip-camera.json deleted file mode 100644 index f24c2d0..0000000 --- a/data/brands/4mp-ip-camera.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "4mp Ip Camera", - "brand_id": "4mp-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "47680146", - "KEYE", - "Other", - "Security" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "g-240", - "G42" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "ID002A", - "IPB8224" - ], - "type": "VLC", - "protocol": "http", - "port": 81, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipc-2mpvd28w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "ipc-2mpvd28w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "uniview" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream2" - }, - { - "models": [ - "zero" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/4sdot.json b/data/brands/4sdot.json deleted file mode 100644 index 1bea375..0000000 --- a/data/brands/4sdot.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "4sdot", - "brand_id": "4sdot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4331911061", - "4S-B05W-720P", - "B05W-720" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "4S-B05W-720P", - "B05W-720P", - "CMOS720P", - "hx series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "B05W-720P", - "B07BW-1080P-HX", - "HX series", - "HX SERIES", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "B07BW-1080P-HX", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "PW638K" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/4ucam.json b/data/brands/4ucam.json deleted file mode 100644 index e4344ff..0000000 --- a/data/brands/4ucam.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "brand": "4ucam", - "brand_id": "4ucam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Eyes DVR", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/Stream?Video?Acc=[USERNAME]?Pwd=[PASSWORD]?webcamPWD=UserCookie00000" - }, - { - "models": [ - "EYES DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EYES DVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video?Acc=[USERNAME]?Pwd=[PASSWORD]?webcamPWD=UserCookie00000" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "loginfree.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/4xem.json b/data/brands/4xem.json deleted file mode 100644 index 451d413..0000000 --- a/data/brands/4xem.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "brand": "4xem", - "brand_id": "4xem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP3112", - "IPCAMW45", - "Other", - "PT 3114", - "PZ6114", - "W50", - "WLPTG", - "WLPTS", - "WLPTZ", - "WPT", - "wptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "IP3112", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IP3112" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "IpCamW45", - "KX SERIES", - "Other", - "W45" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "IPCAMW45", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "KX SERIES", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "PZ6114" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "Other3" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "PT 3114" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?cam=0&quality=3&size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/4xptz.json b/data/brands/4xptz.json deleted file mode 100644 index 8f39523..0000000 --- a/data/brands/4xptz.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "4xptz", - "brand_id": "4xptz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "30x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "M400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0" - } - ] -} \ No newline at end of file diff --git a/data/brands/555.json b/data/brands/555.json deleted file mode 100644 index 6165f74..0000000 --- a/data/brands/555.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "555", - "brand_id": "555", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/5mpbullet.json b/data/brands/5mpbullet.json deleted file mode 100644 index ba2d3d5..0000000 --- a/data/brands/5mpbullet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "5mpbullet", - "brand_id": "5mpbullet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/7-star.json b/data/brands/7-star.json deleted file mode 100644 index 2ddaab3..0000000 --- a/data/brands/7-star.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "7-star", - "brand_id": "7-star", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WIPB-SC22" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/7links.json b/data/brands/7links.json deleted file mode 100644 index a4b6367..0000000 --- a/data/brands/7links.json +++ /dev/null @@ -1,763 +0,0 @@ -{ - "brand": "7links", - "brand_id": "7links", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "3628-675", - "PX-3615-675" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "3655", - "3786-675", - "IPC-440HD", - "IPC-710IR", - "Meins", - "Other", - "PX3309", - "PX3615", - "PX-3628-675", - "PX-3671-675 LHL", - "px-3688-675", - "px-3722-675", - "PX3744", - "Sitzplatz" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "3655", - "ipc-710ir", - "ipc-720", - "IP-CAM", - "PX 3675", - "PX3309", - "PX-3615" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3655", - "7LinksCamBarn", - "IPC-380", - "IPC-720", - "IPC-720 HD", - "IPC-800.FHD", - "ipc900.ptz", - "NX4275", - "NX-4284-675", - "PX3615", - "PX-3688-675", - "PX-3755" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "3671", - "3677", - "3677-675", - "3720-675", - "3720-919", - "3755", - "Incam", - "ipc-720", - "IPC-760HD", - "IPC-770HD", - "IP-Cam-in", - "Other", - "PX3309", - "PX-3671-675 LHL", - "px-3675", - "px-3719-675", - "px-3720-675", - "PX-3720-675", - "Überwachung" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3671", - "3677", - "3677-675", - "3720-919", - "IPC-440.HD", - "ipc-710ir", - "IPC-710IR", - "IP-Cam-in", - "IP-Wi-Fi", - "lenacam", - "Other", - "PX 3675", - "px 3675-675", - "PX3309", - "PX3614_675", - "PX3615", - "px-3671", - "PX-3671-675 LHL", - "px-3688-675", - "px-3722-675", - "Px3722-675" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "3671", - "as", - "moja", - "Other", - "PX3614_12", - "PX3615", - "PX-3615-675", - "px-3671", - "RoboCam III" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "3677", - "374411", - "3755", - "ipc-20hd", - "IPC-340HD", - "IPC-440.HD", - "IPC440HD", - "IPC-720", - "IPC-770HD", - "IPC-850.FHD", - "Other", - "Px3722-675", - "px3744", - "PX-3744", - "Px3744-675", - "px3755", - "PX-3755", - "PX-3765-675", - "px-3775", - "PX-4760" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "3677", - "HAUSTÜR", - "IPC-710IR", - "IP-WI-FI", - "Other", - "px-1179-675", - "px-1279", - "PX3309", - "PX3615", - "PX-3688-675", - "RoboCam II", - "ROBOCAM III", - "ÜBERWACHUNG", - "Wireless" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "3677", - "IPC-430 WIFI", - "IPC-631.HD", - "IP-CAM", - "Other", - "PX-3615" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "3720-675", - "ipc-720 HD", - "IPC-760HD", - "IPC-770HD", - "Other", - "PX 3675", - "px 3675-675", - "PX-3671-675 LHL", - "PX36771-1", - "px-3720-675" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3720-675", - "ipc-720", - "NX-4558" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "ch0_0.h264" - }, - { - "models": [ - "3744", - "IPC 260", - "IPC-20HD", - "ipc900.ptz", - "Other", - "PX 3760-675", - "PX-3755-675" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "3775-675" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "4336", - "IPC-20HD", - "IPC-430 WIFI", - "IPC-720 HD", - "IP-CAM-IN", - "nx-4341-675", - "NX-4341-675", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CS131A", - "RoboCam", - "RoboCam II", - "RoboCam III" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Haustür", - "IP-Wi-Fi", - "Other", - "PX3614_12", - "PX3615", - "px-3722-675" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IPC-220.hd", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "IPC-340HD", - "ipc-380", - "IPC-770HD", - "IP-CAM", - "PX-37878" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live/av0" - }, - { - "models": [ - "IPC-400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "IPC-430 WIFI", - "Other", - "PX3615" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-440.HD", - "IPC-440HD", - "IPC-750HD", - "ipc900.ptz", - "NX-4207", - "NX-4209" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/videoMain" - }, - { - "models": [ - "IPC-440.HD", - "IPC-720", - "NX-4558-913" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "IPC440HD", - "ipc900.ptz" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "IPC-440HD", - "ipc-720", - "Other", - "PX3309", - "PX3615", - "px-3675", - "px-3688-675" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "ipc-631.hd", - "px-3690" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "ipc-631.hd", - "px-3690" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "IPC-710IR", - "Other", - "PX3615", - "px-3690" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "ipc-720", - "IPC-720 HD", - "Other", - "PX3615", - "px-3690" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IPC-720 HD", - "IP-CAM", - "nx 4389", - "NX-4389-675", - "Other", - "pano360s", - "SK7008-T1F1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IP-CAM", - "PX3614_675" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-CAM", - "Other", - "PX3615" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "IP-Wi-Fi", - "Other", - "PX3615" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "KT-6764", - "PX-3744", - "RoboCam III" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "NX-4209" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/h264/ch0" - }, - { - "models": [ - "NX-4336-675" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "NX-4389-675", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other", - "PX3615" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "PX3309" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "px 3675-675", - "PX3615", - "px3723" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "px 3675-675" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "PX3309", - "PX3615" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PX3614_675" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "PX-3615-675" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 888, - "url": "/videostream.asf" - }, - { - "models": [ - "PX-3615-675" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "px-3688-675" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "px-3690" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "px-3690" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "RoboCam II", - "RoboCam III" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "RoboCam II" - ], - "type": "JPEG", - "protocol": "http", - "port": 82, - "url": "/cgi/jpg/image.cgi" - }, - { - "models": [ - "RoboCam III" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "RoboCam III" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 82, - "url": "/cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "IPC-300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "IPC-740" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "PX3615", - "SK7008-T1F1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/401" - } - ] -} \ No newline at end of file diff --git a/data/brands/8level.json b/data/brands/8level.json deleted file mode 100644 index 1ed0d39..0000000 --- a/data/brands/8level.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "8level", - "brand_id": "8level", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPED-2MP-36-1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/9up.json b/data/brands/9up.json deleted file mode 100644 index 2bec730..0000000 --- a/data/brands/9up.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "9up", - "brand_id": "9up", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DIP3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/a-bmi.json b/data/brands/a-bmi.json deleted file mode 100644 index 6c8abbd..0000000 --- a/data/brands/a-bmi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "A-bmi", - "brand_id": "a-bmi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/a-link.json b/data/brands/a-link.json deleted file mode 100644 index ce75425..0000000 --- a/data/brands/a-link.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "A-link", - "brand_id": "a-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101", - "IPC1", - "IPC2", - "IPC3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "101", - "IPC1", - "IPC2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "AICN500W", - "IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "IPC2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPC3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPC3", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPC3", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - } - ] -} \ No newline at end of file diff --git a/data/brands/a-mtk.json b/data/brands/a-mtk.json deleted file mode 100644 index 2c23a69..0000000 --- a/data/brands/a-mtk.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "brand": "A-mtk", - "brand_id": "a-mtk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2570D", - "6566", - "Other", - "SUPER" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "media/media.amp" - }, - { - "models": [ - "6566", - "AM9539M", - "Dome", - "Other", - "SUPER" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "AH2927T-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "AH2927T-A", - "Dome", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "AM2110D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp?streamprofile=Profile1" - }, - { - "models": [ - "AM2110D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp?streamprofile=Profile2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/a-tion.json b/data/brands/a-tion.json deleted file mode 100644 index be5ae24..0000000 --- a/data/brands/a-tion.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "A-tion", - "brand_id": "a-tion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A0528" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/a1webcam.json b/data/brands/a1webcam.json deleted file mode 100644 index dea228e..0000000 --- a/data/brands/a1webcam.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "A1webcam", - "brand_id": "a1webcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg.cgi?refresh=0&channel=[CHANNEL]&id=[USERNAME]&pass=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]&oldbrowser=1" - }, - { - "models": [ - "Other", - "Phone" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "tyytt" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "Wanscam", - "web1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/a4tech.json b/data/brands/a4tech.json deleted file mode 100644 index e5fa28b..0000000 --- a/data/brands/a4tech.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "brand": "A4tech", - "brand_id": "a4tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "432b", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "432b", - "avm457", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "AVM457", - "Ganek", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AVM457", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ITD2016", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/aanke.json b/data/brands/aanke.json deleted file mode 100644 index 8bba267..0000000 --- a/data/brands/aanke.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "brand": "Aanke", - "brand_id": "aanke", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "191BL", - "191BM", - "C500", - "C800", - "I51DL", - "I91BF", - "I91BN", - "I91-DX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/abelcam.json b/data/brands/abelcam.json deleted file mode 100644 index d146638..0000000 --- a/data/brands/abelcam.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Abelcam", - "brand_id": "abelcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "005" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "WebCam (2)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "WebCam (2)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].mjpg" - }, - { - "models": [ - "WebCam Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "screen.jpg" - }, - { - "models": [ - "WebCam Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "screen.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/abient-weather.json b/data/brands/abient-weather.json deleted file mode 100644 index d08c7a2..0000000 --- a/data/brands/abient-weather.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Abient Weather", - "brand_id": "abient-weather", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AMBIENTCAMHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "SK7008-T1F1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/601" - } - ] -} \ No newline at end of file diff --git a/data/brands/abo.json b/data/brands/abo.json deleted file mode 100644 index c71024a..0000000 --- a/data/brands/abo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Abo", - "brand_id": "abo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ranger Pro" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/abr-security.json b/data/brands/abr-security.json deleted file mode 100644 index f0d8622..0000000 --- a/data/brands/abr-security.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Abr Security", - "brand_id": "abr-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC6200W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/abr.json b/data/brands/abr.json deleted file mode 100644 index f9268d2..0000000 --- a/data/brands/abr.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Abr", - "brand_id": "abr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6100", - "720p", - "ipc6100w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "6100", - "6200", - "ABR-IPD6200W", - "IPC6100W", - "IPD6200W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/abron.json b/data/brands/abron.json deleted file mode 100644 index 431e1ae..0000000 --- a/data/brands/abron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Abron", - "brand_id": "abron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AB-IPR506NB-US" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsph2641080p" - } - ] -} \ No newline at end of file diff --git a/data/brands/abs.json b/data/brands/abs.json deleted file mode 100644 index add5526..0000000 --- a/data/brands/abs.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "brand": "Abs", - "brand_id": "abs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3 series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3 series", - "4 series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "3 SERIES", - "4 SERIES", - "MegaCam", - "MegaCam 312M", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "3 SERIES", - "4 SERIES", - "megacam 4210", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "4 series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "4 SERIES", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/[CHANNEL]/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/absolutron.json b/data/brands/absolutron.json deleted file mode 100644 index 3ad6032..0000000 --- a/data/brands/absolutron.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Absolutron", - "brand_id": "absolutron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "image.mpg" - }, - { - "models": [ - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/abus.json b/data/brands/abus.json deleted file mode 100644 index c1df8cd..0000000 --- a/data/brands/abus.json +++ /dev/null @@ -1,676 +0,0 @@ -{ - "brand": "Abus", - "brand_id": "abus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "10550", - "Other", - "TV21550", - "TVIP10500", - "TVIP10550", - "TVIP11000", - "TVIP20000", - "TVIP21550", - "TVIP51550", - "TVIP52501" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "21501", - "Other", - "TVIP10001", - "TVIP10050", - "TVIP10051", - "TVIP21050", - "TVIP21500", - "TVIP31050", - "TVIP52501", - "tvip71000", - "TVIP71550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "2718", - "Digi-Lan TV7204", - "DIGI-LAN TV7219", - "Digi-Lan TV7230", - "DIGI-LAN TV7230 V2", - "Innenhof", - "Other", - "tv7202", - "TV7203", - "TV7210", - "TV7214", - "tv7216", - "tv7218", - "TV7240-LAN", - "TVIP51550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "ABUS: TVIP82100", - "IPCB64621", - "TVIP42561" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "casa", - "DIGI-LAN TV7230 V2", - "Other20550", - "TV7203", - "TV7220", - "TVIP41550", - "TVIP52500", - "TVIP52501" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "CF3", - "ipcb42501", - "IPCB54611B", - "IPCB74521", - "IPCB78520", - "IPCS84530", - "TVIP11560", - "TVIP41500", - "TVIP42561", - "TVIP42562", - "TVIP44510", - "TVIP60000", - "TVIP61500", - "TVIP61550", - "TVIP61560", - "TVIP62000", - "TVIP62560" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Digilan 7230", - "TV7204V2", - "tv7216", - "TV7230" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "DIGILAN 7230", - "Digi-Lan TV7204", - "Digi-Lan TV7230", - "DIGI-LAN TV7230", - "DIGI-LAN TV7230 V2", - "entree", - "foyer", - "Other", - "Other20550", - "TV7203", - "tv7204", - "TV7220", - "TV7240-LAN", - "TVIP11000", - "TVIP21550", - "TVIP41550_CAM1", - "TVIP52500", - "TVIP61560" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Digi-Lan TV7204", - "Other", - "Other20550", - "TV7204v2", - "TV7222", - "TVIP41550", - "TVIP51550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Digi-Lan TV7206", - "Digi-Lan TV7230 v2", - "TVIP41550", - "tvip52500", - "tvip52501", - "TVIP52501", - "TVIP60550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Digi-Lan TV7206", - "Digi-Lan TV7230 v2", - "FENIX", - "HD720p Dome", - "Other", - "Other20550", - "TIVP 31500", - "TV21550", - "TV7203", - "TVIP10000", - "TVIP10001", - "TVIP10055", - "TVIP11000", - "TVIP11502", - "TVIP11551", - "TVIP11552", - "TVIP21500", - "TVIP21550", - "tvip21551", - "tvip21552", - "TVIP21552", - "TVIP21560", - "TVIP31551", - "TVIP32500", - "TVIP41550", - "TVIP51550", - "TVIP71501", - "TVIP71551", - "TVIP717551", - "tvipem" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "DVR90001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Unicast/channels/101.sdp" - }, - { - "models": [ - "DVR9001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Unicast/channels/102.sdp" - }, - { - "models": [ - "DVR9001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Unicast/channels/202.sdp" - }, - { - "models": [ - "HDCC90001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Unicast/channels/201.sdp" - }, - { - "models": [ - "IP17550", - "IPS17550", - "IR 1080p", - "tvip10550", - "TVIP21500", - "tvip21551", - "tvip21552", - "TVIP52500", - "TVIP61550", - "TVIP62560", - "TVIP71501" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mp4" - }, - { - "models": [ - "IP4100", - "TVIP42561", - "TVIP92700" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "IP4100", - "IPCS34511A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "IPCA 62520", - "IPCB42515A", - "IPCB62510A", - "TVIP61560" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "IPCA 72500", - "IPCB42515A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s2" - }, - { - "models": [ - "IPCB54611B", - "TVIP44510", - "TVIP68510" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "IPCb64620", - "IPCB78520", - "IPCS84530", - "TVIP 21000", - "TVIP41500", - "TVIP60000", - "TVIP61500", - "TVIP61550", - "TVIP61560", - "TVIP62560" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "IPCB7250", - "IPCB74520", - "IPCB74521", - "IPCB78520", - "TVIP22500", - "TVIP31001", - "TVIP31501", - "TVIP32500", - "TVIP60000", - "TVIP71501", - "TVIP72500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "IPTV42560" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "IPTV605550", - "TVIP41550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "TVIP10000", - "TVIP20000", - "TVIP20050", - "TVIP21500", - "tvip21551" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "Other", - "TVIP20000", - "TVIP21500", - "TVIP717551" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other", - "PortCam", - "TV20550", - "TV21550", - "TV32500", - "TVIP10550", - "TVIP11560", - "TVIP20000", - "TVIP20550", - "TVIP21550", - "TVIP41500", - "TVIP41550", - "TVIP61500", - "TVIP71501" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "TIVP 31550", - "TVIP10001", - "TVIP10051", - "TVIP10055", - "TVIP11551", - "TVIP21501", - "TVIP21550", - "TVIP40000", - "TVIP41550", - "TVIP51500", - "TVIP51550", - "TVIP71550" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "TIVP41550" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/viewer/video.jpg?resolution=320x240" - }, - { - "models": [ - "tv7203", - "TVIP41550" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "TVIP10055", - "tvip10055A", - "TVIP10055A" - ], - "type": "JPEG", - "protocol": "http", - "port": 10001, - "url": "/jpg/image.jpg?size=3" - }, - { - "models": [ - "TVIP21000", - "tvip41560" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "TVIP21500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.mjpg" - }, - { - "models": [ - "TVIP22500", - "TVIP31001", - "TVIP32500", - "TVIP41560", - "TVIP62520" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "TVIP41500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "TVIP41500", - "TVIP41550_cam1", - "TVIP41550_cam2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "TVIP41550" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video[USERNAME].mjpg" - }, - { - "models": [ - "tvip41560", - "TVIP61550" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "TVIP62000", - "TVIP62500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/pull" - }, - { - "models": [ - "TVIP72000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/0/h264/1" - }, - { - "models": [ - "TVIP82561" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "IPCA53000", - "IPCB42510B", - "IPCB44510A", - "IPCB64515B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "IPCB42550", - "IPCB78520", - "NVR10030", - "TVIP41500", - "TVIP52500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/ac38xx.json b/data/brands/ac38xx.json deleted file mode 100644 index 122e38e..0000000 --- a/data/brands/ac38xx.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Ac38xx", - "brand_id": "ac38xx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dm12", - "MD12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/live/2" - }, - { - "models": [ - "DM12", - "MD12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/live/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/acam.json b/data/brands/acam.json deleted file mode 100644 index 20a8beb..0000000 --- a/data/brands/acam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Acam", - "brand_id": "acam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C2100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "imp2irmptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "n287z752", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/accfly.json b/data/brands/accfly.json deleted file mode 100644 index ce8530c..0000000 --- a/data/brands/accfly.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Accfly", - "brand_id": "accfly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c091wx", - "c102wx", - "c120wx", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "P72" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/accsxperts.json b/data/brands/accsxperts.json deleted file mode 100644 index ffbc37c..0000000 --- a/data/brands/accsxperts.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Accsxperts", - "brand_id": "accsxperts", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5deMayo" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ace.json b/data/brands/ace.json deleted file mode 100644 index e5b8277..0000000 --- a/data/brands/ace.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Ace", - "brand_id": "ace", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Esperanza", - "Other", - "samsung", - "Xin", - "Yca" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "noname", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile0" - } - ] -} \ No newline at end of file diff --git a/data/brands/acer.json b/data/brands/acer.json deleted file mode 100644 index a32df3b..0000000 --- a/data/brands/acer.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "brand": "Acer", - "brand_id": "acer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A100", - "A500", - "ASPIRE", - "LMT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "A500" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "A500", - "Apire One", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "A500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "A500" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Apire One" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "Apire One", - "Aspire" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Aspire" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg" - }, - { - "models": [ - "ASPIRE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Iconia", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/aceri-bcn.json b/data/brands/aceri-bcn.json deleted file mode 100644 index 50faf74..0000000 --- a/data/brands/aceri-bcn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aceri-bcn", - "brand_id": "aceri-bcn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/acesee.json b/data/brands/acesee.json deleted file mode 100644 index 8e691d3..0000000 --- a/data/brands/acesee.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Acesee", - "brand_id": "acesee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AC04", - "AVZM40P130", - "DSE", - "EB225/SH", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "acdsee", - "ST-316-2M-AI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "AMB36HL200W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8061, - "url": "/2" - }, - { - "models": [ - "AVP40P200", - "Dome", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "AVTN40P130", - "avzm40p200", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "AVZM40P130" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "K9604-W", - "ST-316-2M-AI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/achtertuin.json b/data/brands/achtertuin.json deleted file mode 100644 index b92233b..0000000 --- a/data/brands/achtertuin.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Achtertuin", - "brand_id": "achtertuin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3011", - "N3011" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "3011", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Hooldoor", - "huawau" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Link" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Panasonic" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/acm-v3002.json b/data/brands/acm-v3002.json deleted file mode 100644 index 7718e4e..0000000 --- a/data/brands/acm-v3002.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Acm-v3002", - "brand_id": "acm-v3002", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fine", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/acm.json b/data/brands/acm.json deleted file mode 100644 index e82b686..0000000 --- a/data/brands/acm.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Acm", - "brand_id": "acm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1311" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "4100b" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "m101" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "m101" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/acor.json b/data/brands/acor.json deleted file mode 100644 index fc052c2..0000000 --- a/data/brands/acor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Acor", - "brand_id": "acor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/acromedia.json b/data/brands/acromedia.json deleted file mode 100644 index 835429f..0000000 --- a/data/brands/acromedia.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "brand": "Acromedia", - "brand_id": "acromedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "009", - "ACROMEDIA IN-009", - "IN/EX", - "IN/EX Series", - "IN-010", - "IN-09", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "009", - "Acromedia IN-009", - "ACROMEDIA IN-009", - "BLW-2004E-AHD", - "IN-010", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "BLW-2004E-AHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "ECESMS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "in/ex", - "IN/EX Series", - "IN-010", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IN/EX", - "IN/EX Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IN/EX Series", - "IN/EX SERİES", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "in-009", - "IN-010", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "IN-009", - "IN-010" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IN-010" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IN-010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "IN-010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IN-010" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/acti.json b/data/brands/acti.json deleted file mode 100644 index f58dee7..0000000 --- a/data/brands/acti.json +++ /dev/null @@ -1,727 +0,0 @@ -{ - "brand": "Acti", - "brand_id": "acti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000", - "00217", - "1231", - "1239", - "3411", - "3511", - "4200", - "4201", - "5711n", - "7411 B", - "7911", - "8201", - "A41", - "A71", - "acd 2200", - "ACD2000", - "ACD2100", - "ACM-1011", - "ACM11231", - "ACM1231", - "ACM-1431", - "ACM-1431N", - "acm-1431P", - "ACM-1432P", - "acm3001", - "ACM-3001", - "ACM3011", - "ACM-3211", - "ACM3401", - "ACM-3411", - "ACM-3511", - "ACM3601", - "ACM-3601", - "ACM3701", - "acm-4000", - "acm4001", - "ACM-4001", - "ACM-4100", - "ACM-4200", - "acm4201", - "ACM-4201", - "ACM-5001", - "ACM-5601", - "acm-5611", - "ACM5611", - "ACM-7411", - "acm-7511", - "acm8201", - "ACM-8211", - "ACM-8511", - "ACN-3211", - "acti d55", - "ACTI IP CAMERA", - "ACTI-1231", - "ACTiMyView", - "ADC3011", - "B21", - "B27", - "B410", - "B45", - "b53", - "B77A", - "b97", - "D11", - "D12", - "D31", - "D32", - "D51", - "D52", - "D55", - "d61a", - "D64", - "d71a", - "D72", - "D72A", - "D82", - "D92", - "E 913", - "E12", - "E12A", - "E13", - "E22VA", - "E31", - "E32", - "E32A", - "E33", - "E36", - "e37", - "E41", - "E42", - "E42A", - "E43", - "e43b", - "E44A", - "E45A", - "E46", - "E51 Manual", - "E53", - "e56", - "E61", - "E62A", - "E66", - "E72A", - "E77", - "E77--A-XX-14E-00179", - "E77-Phil", - "E816", - "E82", - "E91", - "E92", - "E93", - "E94", - "e97", - "E98", - "I51", - "I96", - "i98", - "KCM-3311", - "KCM-3911", - "KCM-5211", - "KCM5511", - "KCM5611", - "KCM-5611", - "KCM7111", - "Other", - "SED-2120", - "SHS", - "TCM 4301", - "TCM 4511", - "TCM-1111", - "TCM1231", - "TCM-1511", - "TCM3041", - "TCM-3111", - "TCM3401", - "TCM3411", - "TCM-3511", - "TCM-4101", - "TCM-4201", - "TCM4301-09C-X", - "tcm-4511", - "TCM5311", - "TCM5611", - "TCM7411", - "tcm-7811" - ], - "type": "JPEG", - "protocol": "http", - "port": 7070, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "000", - "7411 B", - "acm 8511", - "ACM3601", - "acm4201", - "ACM-4201", - "ACM-7411", - "ACM-8211", - "acti d55", - "D52", - "D55", - "d61a", - "D92", - "Dome", - "E54", - "E77", - "KCM-5211", - "TCM1231", - "TCM-1231", - "tcm-4511" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "1231", - "3411", - "A41", - "A416", - "ACD2100", - "ACM-1231", - "ACM-1431N", - "ACM3211", - "ACM-3401", - "ACM-3511", - "ACM-4001", - "ACM-4201", - "ACM-7411", - "b53", - "B54", - "B910", - "B95--A2XX-14B-00310", - "d11", - "D12", - "D21", - "D31", - "D32", - "D42", - "D51", - "D52", - "D55", - "D72", - "D82", - "D92", - "DO4M36A", - "E12", - "E13", - "E32", - "E33", - "E33 chan2", - "E42A", - "E43", - "E43A", - "E46", - "E51", - "E52", - "E53", - "E53--A-XX-13G-00029", - "e617", - "E63", - "E65", - "E73", - "E73A-A-XX-15C-00034", - "E76", - "E77", - "E81", - "E82", - "E84", - "E86a", - "E91", - "E96", - "I42", - "I51", - "KCM-3311", - "KCM-3911", - "KCM-5611", - "KCM7211", - "KCM7911", - "KCM8211", - "Other", - "v24", - "Z31", - "Z34", - "Z82", - "z95" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "1231", - "1511", - "4200", - "ACCA", - "ACD2100", - "ACM 5711", - "ACM-1011", - "acm1231", - "acm1431", - "ACM-1511", - "acm3001", - "ACM-3001", - "ACM3211", - "ACM-3311", - "ACM-3401", - "ACM-3411", - "ACM-3511", - "ACM3601", - "ACM-4001", - "ACM-4200", - "ACM-4201", - "ACM-5601", - "ACM-7411", - "ACM-8511", - "ACTI IP CAMERA", - "B41", - "B45", - "B87", - "d11", - "d31", - "D32", - "d51", - "D64", - "d72", - "D82A", - "E12", - "E12A", - "E14", - "E22", - "E271", - "E33 chan2", - "E37", - "E441A", - "E61", - "E66", - "E77", - "E77--A-XX-14E-00179", - "E91", - "E92", - "E93", - "E96", - "E97", - "E98", - "KCM-5611", - "KCM7211", - "kcm-8111", - "Other", - "TCM 4511", - "TCM3011", - "TCM-4201", - "TCM-5111", - "TCM5311", - "TCM5311MG", - "tcm-7811" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "1231", - "3411", - "4201", - "ACM-1011", - "ACM1231", - "ACM1231 egen", - "ACM-3401", - "ACM-3511", - "ACM-4001", - "ACM-4201", - "acm-5601", - "ACM5611", - "B87", - "d11", - "D12", - "D21", - "d31", - "D51", - "D52", - "D55", - "D72", - "E12", - "E32", - "E33 chan2", - "E46", - "E73", - "E77", - "E91", - "i94", - "KCM-5611", - "KCM7211", - "KCM7311", - "Other", - "TCM 3511", - "TCM 4511", - "TCM1231", - "TCM3111", - "TCM-4201", - "TCM5111" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "1231", - "22VA", - "A41", - "ACM-1231", - "ACM3211", - "ACM3411", - "ACM-5001", - "ACM5611", - "B55", - "B67", - "B71", - "B95", - "B95--A2XX-14B-00310", - "B97--A-XX-13L-00049", - "d32", - "D32--A-XX-13K-00022", - "D54", - "D55", - "D71A", - "D71--A-XX-13C-00408", - "D81A-A-XX-15E-0", - "D91", - "E11", - "E12", - "E12A", - "E13A", - "E16", - "E22VA", - "E31", - "E32A", - "E43B", - "e46", - "E46", - "E63A", - "E77", - "E77--A-XX-14F-00933", - "E81", - "E816", - "I51", - "I71", - "i910", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream1" - }, - { - "models": [ - "1231", - "7401", - "acm1231", - "ACM-1231", - "acm4201", - "ACM-4201", - "ACM-5001", - "ACM-7411", - "B71", - "E44", - "I47", - "TCM 4301" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "168", - "7911", - "A82", - "A84", - "a94", - "ACM-1231", - "ACM-3511", - "ACM-7411", - "ACTI IP CAMERA", - "B410", - "B43", - "b45", - "B81", - "B83", - "d11", - "D32", - "E12", - "E13A", - "E15", - "e21", - "E22VA", - "E32", - "E33", - "E33A", - "E34", - "E415", - "E42A", - "E51", - "E74A", - "E77", - "E79", - "E81", - "E86A", - "E95", - "EQ1", - "GCO", - "KCM-5311", - "KCM7311", - "KCM8211", - "Other", - "SED-2120", - "TCM 4511", - "TCM-1111", - "TCM1231", - "TCM-1231", - "TCM3111", - "TCM-3511", - "tcm-6630", - "TCM-7411" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/" - }, - { - "models": [ - "A81", - "ACM3601", - "ACM-3601" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-media/media.amp" - }, - { - "models": [ - "ACM-1431", - "ACM-3401", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "ACM-3511" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "ACM-3511", - "ACM-4001", - "ACM-4200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "ACM-4001", - "ACTi B97", - "B96", - "B97", - "E11", - "E73--A-XX-13G-00002", - "E73--A-XX-13I-00238" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "ACM-4001", - "D31", - "D82a", - "e925", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif&event&video2" - }, - { - "models": [ - "ACM-4201", - "TCM-1231" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "ACM-5001", - "ACM-7411", - "ACTi I25", - "b53", - "d10", - "D22VA", - "D61", - "E32A", - "E67a", - "E77", - "e925", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif&event&video1" - }, - { - "models": [ - "ACM-5001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/cgi-bin/cmd/encoder?GET_STREAM" - }, - { - "models": [ - "acm-5611", - "D61", - "d61a", - "E93" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&GET_STREAM" - }, - { - "models": [ - "ACM5611", - "b71", - "B95", - "BS30", - "d32-2", - "E53--A-XX-14C-00157", - "E77", - "E77--A-XX-14E-00179", - "I96--A-XX-13K-00077" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream2" - }, - { - "models": [ - "ACTi B81", - "d82a", - "E413", - "I96" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif&event&audio&video1" - }, - { - "models": [ - "av3100ai", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "D12" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "SRICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Z34" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/action.json b/data/brands/action.json deleted file mode 100644 index 3ef0364..0000000 --- a/data/brands/action.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Action", - "brand_id": "action", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000", - "b53" - ], - "type": "JPEG", - "protocol": "http", - "port": 7070, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/actioncam.json b/data/brands/actioncam.json deleted file mode 100644 index d783cd0..0000000 --- a/data/brands/actioncam.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Actioncam", - "brand_id": "actioncam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "camm" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL]/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - } - ] -} \ No newline at end of file diff --git a/data/brands/actiontec.json b/data/brands/actiontec.json deleted file mode 100644 index 848e2ba..0000000 --- a/data/brands/actiontec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Actiontec", - "brand_id": "actiontec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rc8021v" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/activa.json b/data/brands/activa.json deleted file mode 100644 index 3572414..0000000 --- a/data/brands/activa.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Activa", - "brand_id": "activa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ACT-200W", - "ACT-2800/3100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "ACT-2100", - "ACT-2800/3100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/active-vision.json b/data/brands/active-vision.json deleted file mode 100644 index 8797ba0..0000000 --- a/data/brands/active-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Active Vision", - "brand_id": "active-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ACC-V11" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/active.json b/data/brands/active.json deleted file mode 100644 index e61b9ab..0000000 --- a/data/brands/active.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "brand": "Active", - "brand_id": "active", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/video0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture[CHANNEL].jpg" - }, - { - "models": [ - "SC530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "SC530" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Vision SX-1200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Vision SX-500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[USERNAME]/cam[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/activecam.json b/data/brands/activecam.json deleted file mode 100644 index 3c66a07..0000000 --- a/data/brands/activecam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Activecam", - "brand_id": "activecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ac-d4121ir1v2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "AC-D7111IR1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streaming/video0" - }, - { - "models": [ - "AC-D7111IR1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streaming/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/acumen.json b/data/brands/acumen.json deleted file mode 100644 index dd58786..0000000 --- a/data/brands/acumen.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Acumen", - "brand_id": "acumen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AiP-B24N", - "AiP-B34", - "AiP-M53", - "Other", - "Y04" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsph2641080p" - }, - { - "models": [ - "AIS-S22H-B1Y0W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "ekran", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpg4/rtsp.amp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/acunico.json b/data/brands/acunico.json deleted file mode 100644 index 0b66480..0000000 --- a/data/brands/acunico.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Acunico", - "brand_id": "acunico", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/acvil.json b/data/brands/acvil.json deleted file mode 100644 index 907c24f..0000000 --- a/data/brands/acvil.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Acvil", - "brand_id": "acvil", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "WIFI-5MP-30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/702" - } - ] -} \ No newline at end of file diff --git a/data/brands/adamas.json b/data/brands/adamas.json deleted file mode 100644 index 4ada8e8..0000000 --- a/data/brands/adamas.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Adamas", - "brand_id": "adamas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wnc-01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "wnc-01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/adapter.json b/data/brands/adapter.json deleted file mode 100644 index 05fe70a..0000000 --- a/data/brands/adapter.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Adapter", - "brand_id": "adapter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/adata.json b/data/brands/adata.json deleted file mode 100644 index eeeb7ad..0000000 --- a/data/brands/adata.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Adata", - "brand_id": "adata", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1MP HD P2P CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "AMB", - "AMB-MD", - "APOIP-MB", - "BLC02", - "EYE1.3", - "EYE2MBS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "AMB", - "AMB-MB1.3", - "apollo hd dvr", - "EYE1.3", - "EYE2MBS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "APOIP-MB", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "APOIP-MB", - "BCC", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/adc.json b/data/brands/adc.json deleted file mode 100644 index 70e8707..0000000 --- a/data/brands/adc.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "brand": "Adc", - "brand_id": "adc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "700x", - "723", - "V510", - "v520ir", - "V520IR", - "V521IR", - "V721W", - "V820" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live.sdp" - }, - { - "models": [ - "700X" - ], - "type": "JPEG", - "protocol": "http", - "port": 1026, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "723", - "ADCi400-X002", - "D064", - "Ilustra400", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.sdp" - }, - { - "models": [ - "723", - "Other", - "V520IR", - "V820" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live2.sdp" - }, - { - "models": [ - "ILLustra400", - "ILUSTRA400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "ILLustra400", - "ILUSTRA400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "Other", - "V520IR", - "V723" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other", - "v510", - "V520IR", - "V720W", - "V721W" - ], - "type": "JPEG", - "protocol": "http", - "port": 1026, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "V510" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "V520IR", - "V721W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1032, - "url": "/live3.sdp" - }, - { - "models": [ - "V521IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/adeco.json b/data/brands/adeco.json deleted file mode 100644 index 3c343ed..0000000 --- a/data/brands/adeco.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Adeco", - "brand_id": "adeco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/adhua-dh-ipc-hdw4233c-a.json b/data/brands/adhua-dh-ipc-hdw4233c-a.json deleted file mode 100644 index 8ee8d7a..0000000 --- a/data/brands/adhua-dh-ipc-hdw4233c-a.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Adhua Dh-ipc-hdw4233c-a", - "brand_id": "adhua-dh-ipc-hdw4233c-a", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DH-IPC-HDW4233C-A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/adhua.json b/data/brands/adhua.json deleted file mode 100644 index a30e0cb..0000000 --- a/data/brands/adhua.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "brand": "Adhua", - "brand_id": "adhua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DH-HAC-HFW1200RMN-0360B-S3", - "DH-IPC-HDW4233C-A", - "HDB4300F-PT", - "MYCAM", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DH-HAC-HFW1200RMN-0360B-S3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DH-IPC-HDW4233C-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "HDB4300F-PT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "HDB4300F-PT", - "MyCam", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IPC-D1B20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IPC-HDW1230S" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=htd%402Tg25" - }, - { - "models": [ - "IPC-HFW1320S-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "N84CL52", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "xvr4808" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=8&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/adiance.json b/data/brands/adiance.json deleted file mode 100644 index e9d4426..0000000 --- a/data/brands/adiance.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Adiance", - "brand_id": "adiance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - } - ] -} \ No newline at end of file diff --git a/data/brands/adj.json b/data/brands/adj.json deleted file mode 100644 index dbf6cbf..0000000 --- a/data/brands/adj.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Adj", - "brand_id": "adj", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "700-00048" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1024, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "DVR (Channel 1)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "DVR (Channel 2)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=0" - }, - { - "models": [ - "DVR (Channel 3)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=0" - }, - { - "models": [ - "Wireless IPCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "WIRELESS IPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/adt.json b/data/brands/adt.json deleted file mode 100644 index a88c0aa..0000000 --- a/data/brands/adt.json +++ /dev/null @@ -1,433 +0,0 @@ -{ - "brand": "Adt", - "brand_id": "adt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0c810", - "0C810", - "1000", - "1600hd", - "8025b", - "A-ADT-4HS2", - "AD412-ADT", - "ADT8025B", - "G-Camera", - "i1000", - "ICAMERA", - "icamera 1000", - "Icamera 1000", - "ICAMERA1000", - "ICAMERA-1000-ADT", - "MDC83", - "NV412A-ADT", - "OC810", - "OC810-ADT", - "OC835-ADT", - "Other", - "PULSE", - "RC8010", - "RC8021", - "RC8021W", - "RC8021W-ADT", - "RC8025", - "RC8025-ADT", - "rc8025b", - "Rc8025b", - "RC8025B-adt", - "RC8025B-ADT", - "RC8025B-V2", - "rc8-25b-adt", - "RCR021W-ADT", - "toycam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "0c810", - "1000", - "8025B", - "ADT8025B", - "ICAMERA1000", - "ICAMERA-1000-ADT", - "MDC835-ADT", - "OC810", - "OC810-ADT", - "OC835-ADT", - "otc810", - "Other", - "pulsar", - "PULSE", - "RC8021", - "RC8021W", - "RC8021W-ADT", - "RC8025", - "RC8025-ADT", - "RC8025B", - "RC8025B-ADT", - "rc8325-v2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "0C810", - "1234", - "8025", - "8025B", - "A-ADT4HS2", - "ADT8025B", - "Icamera 1000", - "ICamera1000", - "ICAMERA-1000", - "ICAMERA-1000-ADT", - "mdc835", - "NV412A", - "OC810", - "OC810-ADT", - "OC835-ADT", - "oc835v3", - "OTC810", - "Other", - "pulse", - "RC8010", - "RC8021", - "RC8021W", - "rc8021w-adt", - "RC8021W-ADT", - "RC8025", - "RC8025-ADT", - "RC8025b", - "RC8025B-adt", - "RC8025B-V2", - "RC8025b-vb", - "RC8201", - "rc8235", - "RC8326", - "RCR021W-ADT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "1600hd", - "A-ADT4HS2", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "8025B", - "iCamera-1000", - "ICAMERA1000", - "OC810-ADT", - "RC8025-ADT", - "RC8025B-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "8025B", - "iCamera", - "Icamera 1000", - "ICAMERA1000", - "ICAMERA-1000-ADT", - "NV412A", - "OC810", - "OC810-ADT", - "Other", - "pulse", - "RC8021", - "RC8021W", - "RC8021W-ADT", - "RC8025", - "RC8025-ADT", - "RCR021W-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "A-ADT4HS2", - "Icamera 1000", - "ICAMERA1000", - "ICamera-1000-ADT", - "oc810", - "OC810-ADT", - "Other", - "RC8021", - "RC8021W-ADT", - "RC8025", - "RC8025B-ADT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "A-ADT-4HS2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "AD412-ADT", - "nv412a", - "NV412A-ADT", - "RC8021", - "RC8021W", - "RC8021W-ADT" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Digital Video Recorder" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=1" - }, - { - "models": [ - "DYK4500" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "DYK4500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "G-CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "ICAMERA", - "ICAMERA 1000", - "ICAMERA-1000-ADT", - "OC810", - "Other", - "PULSE", - "RC8021W-ADT", - "RC8025-ADT", - "rc8025b", - "RC8025b-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "ICAMERA1000", - "ICAMERA-1000-ADT", - "ipcam-wo", - "OC810-ADT", - "Other", - "RC8021", - "RC8021W-ADT", - "rc8025", - "RC8025-ADT", - "RC8025B", - "RC8025B-ADT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "ICAMERA-1000", - "OC810-ADT", - "OC845", - "RC8025B-ADT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/video.sav" - }, - { - "models": [ - "NV412a", - "RC8021W", - "rc8021w-adt" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "NV412A-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "NV412A-ADT", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "NV412A-ADT", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "OC810-ADT", - "rc8021w", - "sc468", - "SC87C51C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "oc835v3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.cgi" - }, - { - "models": [ - "oc845" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "OC845" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam4/mpeg4" - }, - { - "models": [ - "OC845" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "rc8021w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/main.cgi?" - }, - { - "models": [ - "RC8021W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "rc8021w-adt" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.jpg" - }, - { - "models": [ - "RC8025B-ADT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "SC821C83" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/main.cgi?next_file=main.htm" - } - ] -} \ No newline at end of file diff --git a/data/brands/adv.json b/data/brands/adv.json deleted file mode 100644 index f1f0902..0000000 --- a/data/brands/adv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Adv", - "brand_id": "adv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "adv1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/advance.json b/data/brands/advance.json deleted file mode 100644 index 8a085e4..0000000 --- a/data/brands/advance.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "brand": "Advance", - "brand_id": "advance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002fvwu", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HVC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 82, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NetCam", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Other", - "WB-IP03A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "WB-IP03A", - "wp00030A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "WB-IP03A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "WB-IP03A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "WB-IP03A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "WB-IP03A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "WB-IP03A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WB-IP03A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/advanced-home.json b/data/brands/advanced-home.json deleted file mode 100644 index 32e0759..0000000 --- a/data/brands/advanced-home.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Advanced Home", - "brand_id": "advanced-home", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "elro" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "ELRO" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "icam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "lc-1140" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Phone" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "RC8025B-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "S4X" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/advidia.json b/data/brands/advidia.json deleted file mode 100644 index 07cb974..0000000 --- a/data/brands/advidia.json +++ /dev/null @@ -1,327 +0,0 @@ -{ - "brand": "Advidia", - "brand_id": "advidia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A14", - "A-15", - "A-30", - "A-34W", - "A-38-F", - "A-44-IR", - "A-49-F", - "A-54-OD", - "Other", - "vp-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "A14", - "A-34" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "A-14", - "A-34W", - "A-45", - "A-46" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "A-28", - "a-35", - "vp-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "A-34W", - "A-37FW", - "A-47", - "M-46-FW", - "VP-16-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "A-34W", - "A-37FW", - "A-44-IR", - "A-45" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "a-35", - "A-55", - "vp-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/103" - }, - { - "models": [ - "A-37fw", - "A-37-FW", - "A-47", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "A-427-V", - "vp-4", - "VP-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "A-427-V", - "VP-16-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/901" - }, - { - "models": [ - "A-427-V", - "vp-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "A-44-IR", - "a-49-f", - "VP-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "a-49-f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.mp4" - }, - { - "models": [ - "a-49-f", - "E-47-V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "A-54-OD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "A-65", - "B-38-V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "A-88-V", - "B-31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "B-31" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 7070, - "url": "" - }, - { - "models": [ - "B-31" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "B-31", - "B-33", - "B5360", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "E-37-V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "p-25", - "vp-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/MediaInput" - }, - { - "models": [ - "vp-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "vp-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/1103" - }, - { - "models": [ - "VP-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/902" - }, - { - "models": [ - "VP-16-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch2_0.h264" - }, - { - "models": [ - "vp-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//Streaming/Channels/2" - }, - { - "models": [ - "vp-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//Streaming/Channels/5" - }, - { - "models": [ - "vp-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "vp-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=101&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "VP-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/advisen.json b/data/brands/advisen.json deleted file mode 100644 index 1d6bfb6..0000000 --- a/data/brands/advisen.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Advisen", - "brand_id": "advisen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "123281" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "UNLISTED", - "Visia 7" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/advitronics.json b/data/brands/advitronics.json deleted file mode 100644 index d5209e8..0000000 --- a/data/brands/advitronics.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Advitronics", - "brand_id": "advitronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PortaVision SIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/aecbl1.json b/data/brands/aecbl1.json deleted file mode 100644 index f5d989b..0000000 --- a/data/brands/aecbl1.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aecbl1", - "brand_id": "aecbl1", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/aegis.json b/data/brands/aegis.json deleted file mode 100644 index e6b7f68..0000000 --- a/data/brands/aegis.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aegis", - "brand_id": "aegis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/aeon.json b/data/brands/aeon.json deleted file mode 100644 index df5c556..0000000 --- a/data/brands/aeon.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Aeon", - "brand_id": "aeon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AEON SC" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "nc325w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aeoss.json b/data/brands/aeoss.json deleted file mode 100644 index 66481bc..0000000 --- a/data/brands/aeoss.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Aeoss", - "brand_id": "aeoss", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "610W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "BS-200W", - "BW-200W", - "srr", - "Vision BW-200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Eos PTZ-100W", - "J6358" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "J6358" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "J6358" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "J6358" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/aercont.json b/data/brands/aercont.json deleted file mode 100644 index 50dbadc..0000000 --- a/data/brands/aercont.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "brand": "Aercont", - "brand_id": "aercont", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2155M", - "AV 8185 DN HB", - "AV8365DN", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "8365DN", - "AV 8185 DN HB", - "AV8365DN" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "AV 8185 DN HB", - "AV3100", - "AV8365DN", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "AV12776DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/aeromax.json b/data/brands/aeromax.json deleted file mode 100644 index ad436d5..0000000 --- a/data/brands/aeromax.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "brand": "Aeromax", - "brand_id": "aeromax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aeromaxnl621e", - "N621e", - "NL621E", - "NLE621E", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - }, - { - "models": [ - "n621-e", - "N621e", - "NL", - "NL621E", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/aes.json b/data/brands/aes.json deleted file mode 100644 index b2e21ff..0000000 --- a/data/brands/aes.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aes", - "brand_id": "aes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AES-PC8" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "rca" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - } - ] -} \ No newline at end of file diff --git a/data/brands/aetos.json b/data/brands/aetos.json deleted file mode 100644 index 1c83b65..0000000 --- a/data/brands/aetos.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Aetos", - "brand_id": "aetos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "400w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "400w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "700W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/aevision.json b/data/brands/aevision.json deleted file mode 100644 index 965c661..0000000 --- a/data/brands/aevision.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Aevision", - "brand_id": "aevision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "125", - "AE-13AA1M", - "AE-13B01m", - "AE-H41MIC-OD", - "Aevision AS NVR8000", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "Cam3", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/afidus.json b/data/brands/afidus.json deleted file mode 100644 index 8b556dd..0000000 --- a/data/brands/afidus.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Afidus", - "brand_id": "afidus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other", - "R-09A", - "RH-230F2", - "RN232Z1", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other", - "R-09A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "RH-331Z2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "tm-110f5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/afreey.json b/data/brands/afreey.json deleted file mode 100644 index a50d6e2..0000000 --- a/data/brands/afreey.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Afreey", - "brand_id": "afreey", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "808pr", - "ANC-3210HA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "anc202", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "ANC-600A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/agasio.json b/data/brands/agasio.json deleted file mode 100644 index e6f6e59..0000000 --- a/data/brands/agasio.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "brand": "Agasio", - "brand_id": "agasio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4LifeAgasio", - "A503W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "4LifeAgasio", - "533W", - "602w", - "CABIN EYE", - "e6981" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "5", - "622W", - "A502W", - "A512", - "A512W", - "A602W", - "A603W", - "A621W", - "A622W", - "e6981", - "F - SERIES", - "FR4020A2", - "M1BF", - "M501I", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "533W", - "k2998", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "603W", - "A500W", - "A502W", - "A512", - "A602W", - "A612", - "A612W", - "A621W", - "A622W", - "M1051", - "M501I", - "Other", - "VNT6656G6A40" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "621", - "621W", - "622W", - "A500W", - "A502W", - "A503W", - "A602W", - "A603W", - "A612", - "A612 - custom", - "A612W", - "A621W", - "A622W", - "A632W", - "BW", - "F - Series", - "FR4020A2", - "HW", - "M1051", - "M105I", - "M105l", - "M501I", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "621", - "621W", - "A602W", - "A603W", - "A621W #1", - "A621W #2", - "A621W #4", - "A622W", - "M501I", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "621", - "A512W", - "A603W", - "A622W", - "OIHN", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "621W", - "622W", - "A500W", - "A502W", - "A512", - "A602W", - "A622W", - "Dome", - "fr4020a2", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "622W", - "A603W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "A500W", - "A502W", - "A512", - "A602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "A500W", - "H.264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "A502W", - "A503w", - "A512", - "A602W", - "M501I" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "A502W", - "A603W", - "A621W #1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "A502W", - "H.264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - }, - { - "models": [ - "A502W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "A512", - "A622W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "a522w", - "DOME", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "A533W", - "A602W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "A533W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "A602W", - "M1BW", - "VNT6656G6A40", - "vnt6656g6a440" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "A602W", - "A603W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "A602W", - "A603W", - "A622W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "A632W", - "H.264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "FM1BF" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/agk.json b/data/brands/agk.json deleted file mode 100644 index 8bf3dff..0000000 --- a/data/brands/agk.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Agk", - "brand_id": "agk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NatWave" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/agptek.json b/data/brands/agptek.json deleted file mode 100644 index 74da847..0000000 --- a/data/brands/agptek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Agptek", - "brand_id": "agptek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "V20" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/agrofilm.json b/data/brands/agrofilm.json deleted file mode 100644 index 8d8e513..0000000 --- a/data/brands/agrofilm.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Agrofilm", - "brand_id": "agrofilm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/agsso.json b/data/brands/agsso.json deleted file mode 100644 index 706c742..0000000 --- a/data/brands/agsso.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Agsso", - "brand_id": "agsso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "f-series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "srr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aguadilla.json b/data/brands/aguadilla.json deleted file mode 100644 index 230591a..0000000 --- a/data/brands/aguadilla.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aguadilla", - "brand_id": "aguadilla", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/aguilera.json b/data/brands/aguilera.json deleted file mode 100644 index 93939ba..0000000 --- a/data/brands/aguilera.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aguilera", - "brand_id": "aguilera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aguilera4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "AQUILERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/aha.json b/data/brands/aha.json deleted file mode 100644 index 815e801..0000000 --- a/data/brands/aha.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aha", - "brand_id": "aha", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "touch" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ahd.json b/data/brands/ahd.json deleted file mode 100644 index d1ef662..0000000 --- a/data/brands/ahd.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "brand": "Ahd", - "brand_id": "ahd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "Other", - "ST0052" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720p", - "jiojio" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CM17D7", - "Other", - "V99" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "fgxdrt" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "jiojio" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SF500", - "x001woxytn" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "V99" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ahio-digital.json b/data/brands/ahio-digital.json deleted file mode 100644 index 3fb42e5..0000000 --- a/data/brands/ahio-digital.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ahio Digital", - "brand_id": "ahio-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AD-IPC2330D-VF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ahula.json b/data/brands/ahula.json deleted file mode 100644 index 2735676..0000000 --- a/data/brands/ahula.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ahula", - "brand_id": "ahula", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HDW-4433C-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ai-ball.json b/data/brands/ai-ball.json deleted file mode 100644 index 45148cc..0000000 --- a/data/brands/ai-ball.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ai Ball", - "brand_id": "ai-ball", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=appletvstream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ai-wifi.json b/data/brands/ai-wifi.json deleted file mode 100644 index 89ec9fb..0000000 --- a/data/brands/ai-wifi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ai Wifi", - "brand_id": "ai-wifi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IL-HIP291" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/aiboostpro.json b/data/brands/aiboostpro.json deleted file mode 100644 index afdd95e..0000000 --- a/data/brands/aiboostpro.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aiboostpro", - "brand_id": "aiboostpro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2K ProHD 3MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "2K ProHD 3MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/aicam.json b/data/brands/aicam.json deleted file mode 100644 index 1fcc335..0000000 --- a/data/brands/aicam.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Aicam", - "brand_id": "aicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "683kba24upbh", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "GI-2310 5G", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ufirststream" - }, - { - "models": [ - "IP-XM400POE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/aida.json b/data/brands/aida.json deleted file mode 100644 index 0ceaa39..0000000 --- a/data/brands/aida.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Aida", - "brand_id": "aida", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD-NDI-CUBE", - "HD-NDI-IP67" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/aiex.json b/data/brands/aiex.json deleted file mode 100644 index aeeb600..0000000 --- a/data/brands/aiex.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Aiex", - "brand_id": "aiex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ext p", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "H2943" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aigas.json b/data/brands/aigas.json deleted file mode 100644 index 6145bcd..0000000 --- a/data/brands/aigas.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aigas", - "brand_id": "aigas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ND4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ainol.json b/data/brands/ainol.json deleted file mode 100644 index 6d02ad1..0000000 --- a/data/brands/ainol.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ainol", - "brand_id": "ainol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Novo 7 Aurora" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/aipcam.json b/data/brands/aipcam.json deleted file mode 100644 index 65cb54d..0000000 --- a/data/brands/aipcam.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "brand": "Aipcam", - "brand_id": "aipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "222" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "234", - "546577", - "C6F0SfZ0N0P3L0", - "C6F0SfZ3NOP5L0", - "c9f0sez0n0p0l0", - "imey", - "IP-CAM", - "IPCAM V380", - "IP-CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "AMO", - "ID002A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "atasam", - "C9F0SeZ0N0P0L0", - "c9F0SeZ3N0P5L0", - "COOLCAM", - "IPCAM V380", - "Other", - "SRICAM SP007" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "c9f0sez0n0p0l0" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "coolcam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "DB POWER", - "SRICAM AP006", - "SRICAM SP007" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "e3429" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "hhh", - "SRICAM AP006", - "SRICAM SP007", - "wanscam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "MS-C3263" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SRICAM AP006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SRICAM AP006" - ], - "type": "VLC", - "protocol": "mms", - "port": 8557, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/air-live.json b/data/brands/air-live.json deleted file mode 100644 index 7c0848d..0000000 --- a/data/brands/air-live.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "brand": "Air Live", - "brand_id": "air-live", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2015", - "Gabinet", - "OD-2025HD", - "SC-300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsph2641080p" - }, - { - "models": [ - "325HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - }, - { - "models": [ - "BU720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - }, - { - "models": [ - "CV-720IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "FE-201DM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "FE-501HD" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "MD-720", - "POE-200HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "OD2015HD", - "POE-200HD", - "WN-2600HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "OD-2025HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "poe 200 cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mjpg" - }, - { - "models": [ - "poe200", - "poe200 camv2", - "POE-200HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mp4" - }, - { - "models": [ - "WL=350HD", - "wl-2600cam", - "wl-350hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "wl-1200cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "WN-200HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "cam1/mpeg4" - }, - { - "models": [ - "WN2600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/aircam.json b/data/brands/aircam.json deleted file mode 100644 index 4631105..0000000 --- a/data/brands/aircam.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "brand": "Aircam", - "brand_id": "aircam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aircam dome", - "Other", - "Ubiquity", - "unv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "AirCam Domo", - "Dome", - "DOME", - "Mini", - "OD-2025hd", - "OD-325HD", - "Other", - "tanadewa", - "Ubiquity", - "UBIQUITY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "OD-2025hd", - "Other", - "UBIQUITY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "OD-2025hd", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "OD-2025hd", - "OD-2025HD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "OD-2025HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "OD-325HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "OD-325HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "tablet" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/aircamubnt.json b/data/brands/aircamubnt.json deleted file mode 100644 index ba13b3b..0000000 --- a/data/brands/aircamubnt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aircamubnt", - "brand_id": "aircamubnt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "UBIQUITY" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/airlink.json b/data/brands/airlink.json deleted file mode 100644 index 77330ab..0000000 --- a/data/brands/airlink.json +++ /dev/null @@ -1,435 +0,0 @@ -{ - "brand": "Airlink", - "brand_id": "airlink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1001", - "101", - "AIC250", - "aic250w", - "AICN500 SERIES", - "SkyIPCam 747 Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "101", - "1777W", - "747W", - "777w", - "AIC1620POE", - "AIC600W", - "AICN500 Series", - "AICN500/A", - "AICN500W", - "Other", - "SkyIPCam 747 Series", - "SkyIPCam 777 Series", - "SkyIPCam500W", - "SkyIPCam747W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "101", - "AIC250", - "AICAP650 Series", - "AICAP650W", - "AICP310 Series", - "SkyIPCam 310", - "SkyIPCam250" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "101", - "AIC600W", - "AIC650W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "101", - "AIC250", - "Other", - "SmurfA1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "101", - "250AIC", - "AIC250", - "AIC250W", - "AIC650W", - "AICN777W", - "ic-250", - "Sky IP cam 250", - "SKYIPCAM250", - "SkyIPCam250w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "101" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "101", - "AIC250", - "AIC250W", - "AIC600W", - "AICN500 SERIES", - "Other", - "SKYIPCAM 747 SERIES", - "SKYIPCAM 777 SERIES", - "SKYIPCAM250", - "SkyIPCam250w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "101", - "AIC250", - "AIC-250A", - "aic250w", - "AIC250W", - "AIC600W", - "AICN500 SERIES", - "CS-5A1EAE", - "Other", - "SKYIPCAM 747 SERIES", - "SKYIPCAM 777 SERIES", - "SKYIPCAM500W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "1620W", - "1777W", - "500", - "747w", - "ACIN1747W", - "AIC250", - "AIC600W", - "aicn00w/ana", - "AICN500", - "AICN500 SERIES", - "AICN500/A", - "AICN500W", - "AICN500W/ANA", - "AICN777W", - "Other", - "SkyIPCam 500", - "SKYIPCAM 747 SERIES", - "SKYIPCAM 777 SERIES", - "SkyIPCam1747W", - "SKYIPCAM250W", - "SkyIPCam500W", - "SkyIPCam747W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "1620W", - "747W", - "ACIN1747W", - "AIC1620POE", - "AIC250", - "AICAP650W", - "AICN1500W", - "AICN500 Series", - "aicn747W", - "AICN777W", - "Other", - "SKYIPCAM 747 SERIES", - "SKYIPCAM 777 SERIES", - "SKYIPCAM1777W", - "SKYIPCAM500W", - "SkyIPCam747W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "1777W", - "AICN777W", - "SkyIPCam 777 Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "250aic", - "aic250", - "AIC250", - "aic250w", - "SKYIPCAM250W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "250AIC", - "AIC-250W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "310", - "AIC250", - "AIC600W", - "AIC650W", - "AIC650Wdean", - "AICAP650 SERIES", - "AICN500 SERIES", - "AICP310 Series", - "Other", - "SkyIPCam 310", - "SKYIPCAM 747 SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "600w", - "AIC600W", - "AIC650W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "AIC250", - "AIC250W", - "AIC600W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "aic250w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AIC600W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "AIC600W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "AIC600W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "AICP310 Series", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "SmurfA12" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion&camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "SmurfA1", - "SmurfA12" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "SkyIPCam 747 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/airlive.json b/data/brands/airlive.json deleted file mode 100644 index 70becba..0000000 --- a/data/brands/airlive.json +++ /dev/null @@ -1,613 +0,0 @@ -{ - "brand": "Airlive", - "brand_id": "airlive", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2025HD", - "2060HD", - "OD-2025HD", - "OD-2060HD", - "POE-200HD", - "WL-2600CAM", - "WN-200HD", - "WN-200HD-ETI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "2060hd", - "BU-2026", - "CW-720", - "Gabinet", - "OD2025HD", - "OD-325HD", - "OD-600HD", - "Other", - "WN/POE-2600HD", - "WN-200HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "2060HD", - "325hd", - "AirLive OD-600HD", - "CU-720", - "IP-200", - "OD2015HD", - "OD-2025HD", - "OD-2060HD", - "OD-325HD", - "OD-600HD", - "Other", - "POE-100HD", - "POE-200HD" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "2060HD", - "IP-200", - "OD-2025HD", - "OD-325HD", - "OD-600HD", - "POE-200HD", - "WN/POE-2600HD", - "WN-200HD", - "WN-200HD-ETI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "325hd", - "OD-2060HD", - "OD-325HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "325hd", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "325hd", - "CW-720", - "IP-200", - "OD-325HD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "325HD", - "IP-200", - "OD-600HD", - "Other", - "POE-100CAM v2", - "POE-200HD", - "POE-280HD", - "POE-5010HD", - "wl 2000", - "WL-2600CAM", - "WL-260CAM", - "WN/POE-2600HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "325hd640", - "OD-325HD", - "OD-600HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "400152", - "720ir", - "AirliveCW-720IR", - "CW-720IR", - "OD-2060HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "AH-2573", - "Other", - "WL-1000CAM", - "wl-1200cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8000, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "BC-5010", - "BU-3025", - "BU-3025V2", - "BU-3026", - "BU-3026IVS", - "BU5010", - "CU-720", - "h264", - "IP-200", - "MD-3025", - "OD2025", - "OD-2025HD", - "OD-325HD", - "OD-600HD", - "POE-100HD", - "POE-200HD", - "POE-5010HD", - "WN/POE-2600HD", - "zadaj" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "BC-5010", - "OD300", - "Other", - "POE-5010HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/jpeg.cgi" - }, - { - "models": [ - "BU2015", - "BU-3025V2", - "BU-3026", - "BU-3026-IVS", - "MD-3025", - "Other", - "sc 300w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "BU-2015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/mobile" - }, - { - "models": [ - "bu-2026", - "BU-3028", - "CU-720", - "OD-2025HD", - "OD-325HD", - "OD-600HD", - "POE-100HD", - "poe-2600hd", - "WN/POE-2600HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BU-3026", - "BU-3026-IVS", - "BU-3028" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BU-3026-IVS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "BU-3026-IVS_MY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "BU-3128", - "BU720", - "CU-720", - "DM-720", - "MD-720", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "BU-720", - "MD-720", - "WN/POE-2600HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - }, - { - "models": [ - "CU-720", - "FE-201DM", - "FE-210DM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "CU-720" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "CU-720", - "IP-200", - "od300", - "Other", - "POE-100CAM V2", - "POE-100HD", - "POE-200HD", - "POE-280HD", - "WL-2000CAM", - "WL-2600", - "WL-2600CAM", - "WL-260CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "DY-NC10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "fe-200", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - }, - { - "models": [ - "FE-200CU", - "FE-200DM", - "FE-200VD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - }, - { - "models": [ - "IP-200", - "OD-325HD", - "OD-600HD", - "Other", - "WN/POE-2600HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP-200", - "OD-325HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "IP-200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "MD-720" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view/image?pro_0" - }, - { - "models": [ - "MD-720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro2" - }, - { - "models": [ - "OD-2025HD", - "Other", - "POE-260CAM", - "WL-2600CAM", - "WN/POE-2600HD", - "WN-200HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "OD-2025HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "od300", - "OD-325HD", - "Other", - "POE-260CAM", - "WL2000", - "WL-2000CAM", - "WL-2600CAM", - "wl-350hd", - "WL-350HD", - "wn-150" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "OD300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "OD-325HD", - "POE-280HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "OD-325HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - }, - { - "models": [ - "OD-600HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "OD-600HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "OD-600HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other", - "POE-250HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/stream1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "POE-100CAM V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "POE-200HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "POE-280HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "POE-5010HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi" - }, - { - "models": [ - "wl-1200cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "WN-200HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/airmobi.json b/data/brands/airmobi.json deleted file mode 100644 index 4782662..0000000 --- a/data/brands/airmobi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Airmobi", - "brand_id": "airmobi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HSC321" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/airship.json b/data/brands/airship.json deleted file mode 100644 index 863718e..0000000 --- a/data/brands/airship.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Airship", - "brand_id": "airship", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Server 4.711+" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&framerate=5" - }, - { - "models": [ - "Server 4.711+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?codec=mjpeg&camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/airsight.json b/data/brands/airsight.json deleted file mode 100644 index 5a3879b..0000000 --- a/data/brands/airsight.json +++ /dev/null @@ -1,430 +0,0 @@ -{ - "brand": "Airsight", - "brand_id": "airsight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "TOTO", - "X10", - "x10Airsight", - "XC36A", - "xc40a", - "XX36A", - "xx38", - "xx40a", - "XX41A", - "xx42a", - "xx52A", - "xx60a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "X10", - "X36A", - "X38A", - "xc36a", - "XC36C", - "XC38A", - "XX59" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "Other", - "x10", - "x10Airsight", - "X36A", - "x69", - "X70A", - "XC39A", - "xc49a", - "XX34A", - "XX36A", - "xx39A", - "xx49a", - "XX52A", - "xx59a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "x10", - "x10Airsight", - "x36a", - "xc36a", - "XC38A", - "xx36", - "XX36A", - "xx39a", - "xx40a", - "XX41A", - "xx42a", - "xx52a" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "Wideeye", - "x10", - "X10", - "x10Airsight", - "X10AIRSIGHT", - "X36A", - "X39A", - "xc36a", - "XC36A", - "xc38", - "xc38a", - "XC39A", - "XC40A", - "XX34A", - "xx34c", - "XX36A", - "xx40a", - "XX41A", - "xx42a", - "XX42A", - "xx52a", - "XX52a", - "xx59a", - "XXA36A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "X10", - "X39A", - "XC39A", - "xx39a", - "XX49A", - "xx59", - "XX59A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "X10", - "x10Airsight", - "XC39A", - "XX34A", - "xx59A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "x10Airsight", - "XC36A", - "xx40a", - "XX41A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "x10a", - "X39A", - "XC36A", - "XC38A", - "XX36A", - "XX41A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "X10AIRSIGHT", - "X34A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other", - "xc36a", - "xc38a", - "xx42a" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "X10", - "X34A", - "X38A", - "xc36a", - "XC38A", - "XX34A", - "XX36A", - "XX40A", - "xx51a", - "xx60a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "X10", - "X34A", - "XC38A", - "XX34A", - "XX36A", - "xx40a", - "xx51A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other", - "xx52a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other", - "XX60A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "xx40a", - "xx42a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "x10", - "x10a", - "xx51a" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "X10", - "x10Airsight", - "xx51a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "X10", - "xx40a", - "xx51a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "x10a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 131, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "X10A", - "xx52a" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "X34A", - "X38A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "X34A", - "xx40a", - "xx60a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "x38a", - "X39A", - "X40A", - "xc36a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "x40a", - "xx40a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "xc36a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "xc38a", - "XC39A", - "XX34A", - "XX36A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "xx40a", - "xx51A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "xx51a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "XX59" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/airsoft.json b/data/brands/airsoft.json deleted file mode 100644 index dcb28a9..0000000 --- a/data/brands/airsoft.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Airsoft", - "brand_id": "airsoft", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "XC34", - "xc38" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/airspace.json b/data/brands/airspace.json deleted file mode 100644 index 3d2e186..0000000 --- a/data/brands/airspace.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Airspace", - "brand_id": "airspace", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SAM-2355" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "SAM-2355" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "SAM-3571", - "SAM-3571N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264?ch=1&subtype=1" - }, - { - "models": [ - "SAM-3571", - "SAM-3571N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264?" - }, - { - "models": [ - "SAM-3571N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264?ch=1&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/airstream.json b/data/brands/airstream.json deleted file mode 100644 index 670af30..0000000 --- a/data/brands/airstream.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Airstream", - "brand_id": "airstream", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xc38a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/airties.json b/data/brands/airties.json deleted file mode 100644 index 47ec643..0000000 --- a/data/brands/airties.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Airties", - "brand_id": "airties", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PZ61x2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "PZ61x2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/airtop.json b/data/brands/airtop.json deleted file mode 100644 index eb77571..0000000 --- a/data/brands/airtop.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Airtop", - "brand_id": "airtop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AT-LIR400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/airview.json b/data/brands/airview.json deleted file mode 100644 index 7811d7c..0000000 --- a/data/brands/airview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Airview", - "brand_id": "airview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/airwave.json b/data/brands/airwave.json deleted file mode 100644 index 92ce697..0000000 --- a/data/brands/airwave.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Airwave", - "brand_id": "airwave", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/pusher.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "wer" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/ait.json b/data/brands/ait.json deleted file mode 100644 index c765b9c..0000000 --- a/data/brands/ait.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ait", - "brand_id": "ait", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/aitek.json b/data/brands/aitek.json deleted file mode 100644 index 98f68b4..0000000 --- a/data/brands/aitek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aitek", - "brand_id": "aitek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/aivant.json b/data/brands/aivant.json deleted file mode 100644 index 6e2fb69..0000000 --- a/data/brands/aivant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aivant", - "brand_id": "aivant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ajhua.json b/data/brands/ajhua.json deleted file mode 100644 index 6471ff8..0000000 --- a/data/brands/ajhua.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "brand": "Ajhua", - "brand_id": "ajhua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DHI-HCVR4108HS-S3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "DHI-HCVR5104HS", - "DHI-HCVR7104/08/16H-4M", - "DH-IPC", - "DH-IPC-HDBW4421R-AS", - "DH-IPC-HFW1120SP", - "dh-ipc-hfw4421dp", - "DH-IPC-HFW4421E", - "dh-XVR4104HS-X1", - "dvr", - "hdw463.1c", - "N22AL12", - "VD-N22AL 12" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DH-IPC", - "DH-IPC-HDBW4421R-AS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "DH-IPC-HDBW4421R-AS", - "Dh-ipc-hdw2431tmp", - "DH-IPC-HFW2100SP-V2-0360B", - "DH-IPC-HFW4421E", - "dvr", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DH-IPC-HDPW7564N-SP" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DH-IPC-HFW21DP", - "IPC-HFW4300S-V2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "DH-SD49225XA-HNR", - "dh-XVR4104HS-X1", - "Other", - "SD22204T-GN-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "DH-SD49225XA-HNR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=0" - }, - { - "models": [ - "HDI-NVA4232" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC-HDW4431C-A-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - } - ] -} \ No newline at end of file diff --git a/data/brands/ajt.json b/data/brands/ajt.json deleted file mode 100644 index 8ed38d9..0000000 --- a/data/brands/ajt.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Ajt", - "brand_id": "ajt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5636", - "AJT-019129-BBCEF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AJT-019129-BBCEF", - "AJT-026729-FDFC", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BCS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "live/ch00_0" - }, - { - "models": [ - "LUCA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ajtv.json b/data/brands/ajtv.json deleted file mode 100644 index f192a99..0000000 --- a/data/brands/ajtv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ajtv", - "brand_id": "ajtv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/akai.json b/data/brands/akai.json deleted file mode 100644 index ad90ec7..0000000 --- a/data/brands/akai.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Akai", - "brand_id": "akai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK7400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AK7400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AK7400", - "SP-T03WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AK7400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AK7400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/akaso.json b/data/brands/akaso.json deleted file mode 100644 index b3d09b0..0000000 --- a/data/brands/akaso.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Akaso", - "brand_id": "akaso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B60", - "EK7000 Pro", - "IPIM-902" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "cs300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "ws130-401" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "WS13M-401" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/akeia.json b/data/brands/akeia.json deleted file mode 100644 index f9633d0..0000000 --- a/data/brands/akeia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Akeia", - "brand_id": "akeia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/akon.json b/data/brands/akon.json deleted file mode 100644 index 503d03c..0000000 --- a/data/brands/akon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Akon", - "brand_id": "akon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "121" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "121" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aksilium.json b/data/brands/aksilium.json deleted file mode 100644 index 8e0093a..0000000 --- a/data/brands/aksilium.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aksilium", - "brand_id": "aksilium", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-203 VP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/aku.json b/data/brands/aku.json deleted file mode 100644 index e2f3ace..0000000 --- a/data/brands/aku.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Aku", - "brand_id": "aku", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK-1020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "AK-1020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "AK-1020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/akuvox.json b/data/brands/akuvox.json deleted file mode 100644 index f73a42a..0000000 --- a/data/brands/akuvox.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "brand": "Akuvox", - "brand_id": "akuvox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK1360" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "e11r", - "R26" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "E12W", - "E16C", - "R20", - "R20A", - "r26c", - "R26P", - "R29", - "TPL700" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "R20A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/alarm.com.json b/data/brands/alarm.com.json deleted file mode 100644 index b15bfcf..0000000 --- a/data/brands/alarm.com.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "brand": "Alarm.com", - "brand_id": "alarm.com", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "510", - "adc-520ir", - "ADC-620pt", - "ADC-V510", - "ADC-V520", - "adc-v520ir", - "ADC-V520IR", - "ADC-V610pt", - "adc-v620pt", - "adc-v700x", - "ADC-V700X", - "ADC-V720W", - "ADC-vs120", - "Other", - "v520ir" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "510IR", - "836", - "acd-v520", - "adc v520ir", - "ADC-520IR", - "ADC-620PT", - "adc-v510", - "ADC-V520", - "ADC-V520IR", - "ADC-V522IR", - "adc-v52ir", - "ADC-V610PT", - "ADC-V700X", - "ADC-V720", - "ADC-V720W", - "ADC-V721W", - "ADC-V723", - "ADC-V820", - "ADC-VS120", - "ADV-51NR", - "v510", - "v723", - "V-HD300W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live.sdp" - }, - { - "models": [ - "ADC-520IR", - "ADC-620pt", - "ADC-V510", - "ADC-V520IR", - "ADC-V620PT", - "ADC-V721W", - "ALC-520IR", - "V-HD300W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "ADC-520IR", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "ADC-V700X", - "ADC-V721W", - "CUBE", - "Other", - "v721w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "ADC-V520", - "ADC-V720", - "ADC-V723" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - }, - { - "models": [ - "adc-v520ir", - "ADC-V520IR", - "ADC-V610PT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ADC-V520IR", - "ADC-V720W", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "ADC-V520IR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ADC-V520IR" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "ADC-V720W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alaterassi.json b/data/brands/alaterassi.json deleted file mode 100644 index 31316af..0000000 --- a/data/brands/alaterassi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alaterassi", - "brand_id": "alaterassi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fd8134v" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/alcatel.json b/data/brands/alcatel.json deleted file mode 100644 index dbccc52..0000000 --- a/data/brands/alcatel.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "Alcatel", - "brand_id": "alcatel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4060A", - "6055U", - "alca", - "DL900", - "ldol 3", - "Lume", - "ONE TOUCH Fierce", - "onetouch", - "Other", - "ot'pop", - "Phone", - "tcl" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "5044R", - "temporis ip80" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "A466BG" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "a502dl" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "LDOL 3", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Lume", - "PHONE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/alcon.json b/data/brands/alcon.json deleted file mode 100644 index b138df7..0000000 --- a/data/brands/alcon.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Alcon", - "brand_id": "alcon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AL2001B" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "AL2003H", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "al2005pt", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alecto.json b/data/brands/alecto.json deleted file mode 100644 index c5e62d8..0000000 --- a/data/brands/alecto.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "brand": "Alecto", - "brand_id": "alecto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "150", - "150IP", - "Atheros", - "c903IP", - "dv150", - "dvc", - "dvc 120 ip", - "dvc 160ip", - "DVC 210IP", - "dvc-150ip", - "DVC-150-IP", - "DVC-1601", - "dvc210IP", - "dvc215IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "150ip", - "DCV-210IP", - "DVC120", - "dvc-120IP", - "DVC-150-IP", - "DVC-160IP", - "DVC-210ip", - "DVC-210IP", - "Other", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "dbvc-215IP", - "DVC 135IP", - "dvc 154ip", - "DVC 215IP", - "DVC_125IP", - "dvc-1000", - "DVC-125IP", - "dvc135IP", - "dvc-135IP", - "DVC154IP", - "dvc210IP", - "dvc-210IP", - "dvc-215", - "dvc215IP", - "dvc-215IP", - "DVC-215IP", - "dvc-315IP", - "Other", - "Voordeur" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "DVC 135IP", - "DVC 215IP", - "DVC-125IP", - "dvc-135ip", - "DVC-154", - "DVC-155-IP", - "DVC-215IP", - "DVC-255-IP", - "dvi135", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dvc 150ip", - "DVC120", - "DVC150IP", - "dvc-210IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dvc 215", - "DVC-125IP", - "DVC-164IP", - "DVC-215IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8081, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DVC 215IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "DVC 215IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11d=[PASSWORD]" - }, - { - "models": [ - "DVC-105IP", - "DVC-255-IP", - "SMARTBABY10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "DVC-135IP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "DVC-150IP", - "DVC-210IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "DVC-155-IP", - "dvc215IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dvc-215IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DVC-250-IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IVM150 ?", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other", - "SMARTBABY10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "SMARTBABY10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live/av0?user=[USERNAME]&passwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alertme.json b/data/brands/alertme.json deleted file mode 100644 index f137ea5..0000000 --- a/data/brands/alertme.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Alertme", - "brand_id": "alertme", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Cam300", - "CAM300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/alexim.json b/data/brands/alexim.json deleted file mode 100644 index c54ec85..0000000 --- a/data/brands/alexim.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Alexim", - "brand_id": "alexim", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AXP CA640 O4/5" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AXP CA640 O4/5", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "cam22822", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD-BRAMA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "xxx1" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Pic8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alfa.json b/data/brands/alfa.json deleted file mode 100644 index cd748d9..0000000 --- a/data/brands/alfa.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "brand": "Alfa", - "brand_id": "alfa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0002HD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AIPC120M", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "AIPC120M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "AIPC220M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "aw300p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "lop" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/alfawise.json b/data/brands/alfawise.json deleted file mode 100644 index 83dd0ef..0000000 --- a/data/brands/alfawise.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Alfawise", - "brand_id": "alfawise", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "alfa", - "ONVVIF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alhua.json b/data/brands/alhua.json deleted file mode 100644 index 9858369..0000000 --- a/data/brands/alhua.json +++ /dev/null @@ -1,291 +0,0 @@ -{ - "brand": "Alhua", - "brand_id": "alhua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1320SP-0360B", - "DH-IPC-HDBW4300E", - "DH-IPC-HF2100P", - "DH-IPC-HFW1120RMP", - "HFW5200EP-Z12", - "IPC-HDBW1320E", - "IPC-HDBW4200E", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "2230", - "DHI-XVR4108C" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "4433C-A", - "dh_hac_hdw1200r", - "DH_IPC_HFW1320SP", - "DH-IPC-HDBW1320EP-W", - "DH-IPC-HDBW1435EP-W-028B", - "DH-IPC-HDBW2431RP-ZS", - "DH-IPC-HDBW4431R-AS", - "DH-IPC-HDW4631C", - "DH-IPC-HDW4631C-A", - "DH-IPC-HDW4641C-A", - "DH-IPC-HFW1220SP", - "DH-IPC-HFW1320SP-W", - "DHI-XVR5116HS-S2", - "DH-SD22204T-GN", - "dh-xvr4104hs-x1", - "HDBW1420EP-0280B", - "HDW4433CA", - "hfw 1120 sw", - "IPC", - "IPC-EB5531", - "IPC-HDW1230S", - "IPC-HDW2431T-ZS-S2", - "IPC-HDW4433C-A", - "IPC-HFW1320S-W", - "IPC-HFW2431R-ZS-IRE6", - "IPC-T1B40", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Bullet", - "DH-IPC-HDBW4300E", - "DH-IPC-HFW4300S", - "Dome", - "IPC-2200", - "IPC-HFW3200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "BULLET", - "c35", - "c35p", - "dh_hac_hdw1200r", - "DH_IPC_HFW1320SN", - "DH_IPC_HFW1320SP", - "DHI-HCVR4108HS-S3", - "DHI-HCVR5216AN-S3", - "dh-ipc-hd2100p-0360b", - "DH-IPC-HDBW4300E", - "DH-IPC-HDBW4431R-AS", - "DH-IPC-HDW1230SP-0280B", - "DH-IPC-HDW1320SP-0360B", - "DH-IPC-HFW1000S", - "DH-IPC-HFW1000SP", - "DH-IPC-HFW1120RMP", - "dh-ipc-hfw3849t1p-as-pv", - "DHI-XVR5116HS-S2", - "DH-SD42212S-HN", - "DH-VXR4104HS-X1", - "dh-xvr4104hs-x1", - "dvmini", - "IPC-HDBW2421R-VFS", - "IPC-HDBW4200E", - "IPC-HDBW4431R-ZS", - "IPC-HDW2320R-ZS", - "IPC-HDW4300C", - "IPC-HDW4431C-A", - "IPC-HFW1320S-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "DH_IPC_HFW1320SN", - "DH-IPC-HFW1000SP", - "DH-IPC-HFW4300S", - "DH-IPC-HFW4800EP(4mm)", - "IPC-HDW4300C", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "DH_IPC_HFW1320SP", - "DHI-HCVR4108HS-S3", - "DH-IPC-HDBW4431R-AS", - "DH-IPC-HF2100P", - "DH-IPC-HFW1000SP", - "DH-IPC-HFW4300S", - "DH-SD2920T-GN", - "DH-VXR4104HS-X1", - "dh-xvr4104hs-x1", - "HDBW2208R-Z", - "IPC-2200", - "IPC-HDW2320R-ZS", - "IPC-HFW1000SN", - "IPC-HFW1320S-W", - "IPC-HFW3200", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DHI-HCVR5216AN-NT", - "DH-IPC-HDBW4300C", - "DH-IPC-HFW1120RMP", - "DHI-XVR5116HS-S2", - "DH-VXR4104HS-X1", - "dh-xvr4104hs-x1", - "IPC-HDW2431T-AS-0280B-S2", - "IPC-HDW4300C", - "IPC-HDW4431C-A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DH-IPC-HDBW4300E", - "DH-IPC-HFW1000SP", - "DH-IPC-HFW4300S", - "IPC-2200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "DH-IPC-HDW1320SP-0360B", - "DH-IPC-HFW1000SP", - "DH-IPC-HFW4300S", - "HDBW5421EP-Z", - "HFW5200EP-Z12", - "IPC-HDBW5421E-Z", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "DH-IPC-HFW1200S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1554, - "url": "/h264_stream" - }, - { - "models": [ - "DH-IPC-HFW2449S-S-IL", - "IPC-HDW2320R-ZS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "DH-IPC-HFW3441 TP-ZAS", - "DH-ipc-hfw3441TP-ZAS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MzIyMzExNjEzMVNoYXl0YW4=" - }, - { - "models": [ - "DHI-XVR4108C", - "ipc-A35", - "IPC-HDBW2531EP-S", - "IPC-HDBW4431R-ZS" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "DHI-XVR5104HS" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPC-2200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "IPC-HDBW3541F-AS-M", - "IPC-HFW2201R-ZS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/ali-express.json b/data/brands/ali-express.json deleted file mode 100644 index c71e693..0000000 --- a/data/brands/ali-express.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "brand": "Ali Express", - "brand_id": "ali-express", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif2" - }, - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Aliexpress", - "EXPRESS", - "IPCX-BC43272", - "Other", - "peephole", - "TCV-GQH300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DJ-IPPTZ504W", - "HI3518EV200 IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "POE 1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_1" - }, - { - "models": [ - "wy0530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ali.json b/data/brands/ali.json deleted file mode 100644 index 3cf05e0..0000000 --- a/data/brands/ali.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "brand": "Ali", - "brand_id": "ali", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3012r", - "ALIBI", - "ALI-NS1012VR", - "ALI-NS1014VR", - "ALI-NS3014R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "3030r", - "ALI-IPU3230R", - "ALI-IPV3013R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "5MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ABC01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Aliexpress" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Express" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "sfn480" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/alianza.json b/data/brands/alianza.json deleted file mode 100644 index 893dde7..0000000 --- a/data/brands/alianza.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alianza", - "brand_id": "alianza", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/alias.json b/data/brands/alias.json deleted file mode 100644 index ce95f72..0000000 --- a/data/brands/alias.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Alias", - "brand_id": "alias", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "anonymous" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/alibi.json b/data/brands/alibi.json deleted file mode 100644 index 37c75f0..0000000 --- a/data/brands/alibi.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "brand": "Alibi", - "brand_id": "alibi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3014", - "ALI-2013VR", - "ALI-IPU3030R", - "ALI-NS1014VRB", - "ALI-NS2026R", - "Other", - "wl-ic8b" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "3022VR", - "3030R", - "ALI-NS1014VR", - "ALI-NS3022R", - "ali-nz60" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 7070, - "url": "" - }, - { - "models": [ - "3030R", - "3230R", - "ALI-2013VR", - "ALI-NS4025R", - "ALI-NZ60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "3030R", - "ALI-IPV3030R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "3130", - "Alibi 3.0", - "ALI-IPU3013R", - "ALI-IPU3030R", - "ALI-IPU3130R", - "ALI-IPU3230R", - "ALI-IPV3113R", - "ALI-IPV3130R", - "ALI-NS1014VR", - "ALI-NS3012R", - "ipu3030", - "IPU3030R", - "ksajfhshks" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "ALI-IP23013R", - "ALI-NP7012RT", - "ALI-NZ60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "ALI-NS1034R", - "ALI-XD81-VUZAI", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "ALI-NS2016VR", - "ALI-NS4026R", - "ALI-NS4038RE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "ALI-NS4013R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "ALI-NS4026R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "ALI-NS4038RE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "ALI-NS4038RE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/aliendvr.json b/data/brands/aliendvr.json deleted file mode 100644 index b2f7d4a..0000000 --- a/data/brands/aliendvr.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Aliendvr", - "brand_id": "aliendvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "mega216" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/aliexpress.json b/data/brands/aliexpress.json deleted file mode 100644 index b4eb300..0000000 --- a/data/brands/aliexpress.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Aliexpress", - "brand_id": "aliexpress", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SfZ0N0P0L0", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/alinking.json b/data/brands/alinking.json deleted file mode 100644 index 510ca93..0000000 --- a/data/brands/alinking.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "brand": "Alinking", - "brand_id": "alinking", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3SVision Series", - "98520", - "ALC Series", - "ALC SERIES", - "ALC-9453-231P", - "ASL-7743 A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi" - }, - { - "models": [ - "3SVision Series", - "ALC Series", - "dax", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - }, - { - "models": [ - "AL 9603", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "AL 9603", - "ALC Series", - "ALC-9352P", - "ALS-7742" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "ALC Series", - "dax" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "ALC Series", - "dax" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ALC Series", - "ALC9751", - "ALS-7742", - "dax", - "Other", - "S2071/4071 Video Server", - "VLC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "ALC Series", - "ALS-7743 A", - "ASL-7743 A", - "Other", - "S2071/4071 Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion&camera=[CHANNEL]" - }, - { - "models": [ - "ALC Series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "ALC Series", - "Dax" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "ALC SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "ALC SERIES", - "dax", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ALC SERIES", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "ALS-7742" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "dax", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dax" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "dax" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dax" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "dax" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "dax" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dax", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Dax" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/alivision.json b/data/brands/alivision.json deleted file mode 100644 index d5c0789..0000000 --- a/data/brands/alivision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Alivision", - "brand_id": "alivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HSP01h2Z20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HSP01H2Z20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/all-in-one.json b/data/brands/all-in-one.json deleted file mode 100644 index 2d89d5b..0000000 --- a/data/brands/all-in-one.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "brand": "All-in-one", - "brand_id": "all-in-one", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "b series", - "B00432J56G", - "b1", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "b series", - "b1", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "B00432J56G", - "b1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "B00432J56G", - "b1", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "b1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "B1 series IP Cam", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Ditklik" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "H.264 DVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "H.264 DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/allecto.json b/data/brands/allecto.json deleted file mode 100644 index f28d8ba..0000000 --- a/data/brands/allecto.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Allecto", - "brand_id": "allecto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvc-150ip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "DVC-150IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dvi-155" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11d=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alliede.json b/data/brands/alliede.json deleted file mode 100644 index 7750eb6..0000000 --- a/data/brands/alliede.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Alliede", - "brand_id": "alliede", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/allnet.json b/data/brands/allnet.json deleted file mode 100644 index 6fd6676..0000000 --- a/data/brands/allnet.json +++ /dev/null @@ -1,383 +0,0 @@ -{ - "brand": "Allnet", - "brand_id": "allnet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2200", - "2240", - "ALL2205", - "ALL2250", - "ALL2272", - "ALL2282", - "ALL2288V2", - "ALL2296V2", - "ALL2298", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "2200", - "ALL2201", - "ALL2210" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "2211", - "ALL2250", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "2213", - "ALL2212", - "ALL2213" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2250", - "2397_le", - "ALL2288", - "ALL2288V2", - "ALL2295", - "ALL2295V2", - "ALL2296V2", - "ALL2298", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "2250", - "ALL2250" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "2250", - "ALL2250" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "2250" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2272", - "ALL2272" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "2281", - "all2281" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "2282", - "ALL2281" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "2290", - "ALL2297" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "2290", - "ALL2297" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "2398v2", - "ALL-CAM2305-LW", - "All-CAM2398", - "ALL-CAM2398-EP", - "ALL-CAM2398v2-EP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "2All2285", - "All2285", - "ALL2288V2", - "ALL2295V2", - "ALL2296V2", - "ALL2298", - "ALL2299", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "AL2205" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "AL2281", - "ALL2281", - "ALL2282" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "AL2299", - "ALL2298", - "ALL2299" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "ALL2205", - "ALL2272" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "ALL2205" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "ALL2205", - "ALL2272" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "ALL2205", - "ALL2272", - "ALL2282", - "ALL2288V2", - "ALL2296V2", - "ALL2297", - "ALL2298", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live/mjpeg" - }, - { - "models": [ - "ALL2205", - "ALL2250", - "ALL2272", - "ALL2282", - "ALL2288V2", - "ALL2295", - "ALL2296V2", - "ALL2298", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "ALL2205", - "ALL2272", - "ALL2281", - "ALL2282", - "ALL2288V2", - "ALL2296V2", - "ALL2298", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ALL2250" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream1.asf" - }, - { - "models": [ - "ALL2288V2", - "ALL2296v2", - "ALL2298" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "ALL2295", - "ALL2296v2", - "ALL2298", - "Other", - "TEchnopark", - "Technopark2", - "Technopark3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "All2296V2+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "ALL2298" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/h264" - }, - { - "models": [ - "ALL-CAM2372-WP", - "ALL-CAM2397-LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "ALL-CAM2397-LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "ALL-CAM2397v2-LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "ALL-CAM2495v3-LVEFN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/allsky.json b/data/brands/allsky.json deleted file mode 100644 index cc52b1c..0000000 --- a/data/brands/allsky.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Allsky", - "brand_id": "allsky", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "BoaCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/alltec.json b/data/brands/alltec.json deleted file mode 100644 index 17e593a..0000000 --- a/data/brands/alltec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alltec", - "brand_id": "alltec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "30901213a" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "imagep/picture.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/almacen.json b/data/brands/almacen.json deleted file mode 100644 index 273e4f3..0000000 --- a/data/brands/almacen.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Almacen", - "brand_id": "almacen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DCS-930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/MJPEG.CGI" - }, - { - "models": [ - "d-link" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "D-LINK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - } - ] -} \ No newline at end of file diff --git a/data/brands/alonma.json b/data/brands/alonma.json deleted file mode 100644 index bfb701e..0000000 --- a/data/brands/alonma.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alonma", - "brand_id": "alonma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "inwp2ac40" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/alp.json b/data/brands/alp.json deleted file mode 100644 index 6082120..0000000 --- a/data/brands/alp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alp", - "brand_id": "alp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/alpha-power.json b/data/brands/alpha-power.json deleted file mode 100644 index e0be206..0000000 --- a/data/brands/alpha-power.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Alpha Power", - "brand_id": "alpha-power", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fic-am101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/alpha.json b/data/brands/alpha.json deleted file mode 100644 index fd93c7a..0000000 --- a/data/brands/alpha.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alpha", - "brand_id": "alpha", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4120ex" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alphacam.json b/data/brands/alphacam.json deleted file mode 100644 index 34c29ab..0000000 --- a/data/brands/alphacam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alphacam", - "brand_id": "alphacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "12345" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/alphago.json b/data/brands/alphago.json deleted file mode 100644 index b80e23a..0000000 --- a/data/brands/alphago.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alphago", - "brand_id": "alphago", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALP-600" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av0_1&user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alphatec.json b/data/brands/alphatec.json deleted file mode 100644 index 5c7845f..0000000 --- a/data/brands/alphatec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Alphatec", - "brand_id": "alphatec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPDP Slim" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "IPDP SLIM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/alphatech.json b/data/brands/alphatech.json deleted file mode 100644 index 73f8c9a..0000000 --- a/data/brands/alphatech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Alphatech", - "brand_id": "alphatech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AT-NB248G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IPBold" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/alpina.json b/data/brands/alpina.json deleted file mode 100644 index 91e3744..0000000 --- a/data/brands/alpina.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Alpina", - "brand_id": "alpina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4024CSW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "904" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "904" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/alpine.json b/data/brands/alpine.json deleted file mode 100644 index c7ef188..0000000 --- a/data/brands/alpine.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Alpine", - "brand_id": "alpine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "904" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/alptop.json b/data/brands/alptop.json deleted file mode 100644 index 7ff0919..0000000 --- a/data/brands/alptop.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "brand": "Alptop", - "brand_id": "alptop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000w", - "at 1008w/200bw/500bw", - "at-100bw", - "AT-100BW", - "AT-200BW", - "at200dw", - "AT-200DW", - "AT200TW", - "at-500dw", - "AT-500DW", - "AT-500PW20", - "AT-B603W", - "AT-B603W HD 720P", - "ATLMDFS400", - "B608W", - "HD IP CAMERA", - "ips-1024vw", - "Other", - "Wireless" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "200at", - "500PW20", - "at-100", - "AT-100BW", - "at200bw", - "AT-200BW", - "AT-200DW", - "AT-200PW", - "AT-200RW", - "AT-800DZ", - "B603W", - "HD IP CAMERA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "400", - "800dz", - "AT-200DW", - "AT-200PW", - "AT-800DZ", - "AT-LBH400", - "AT-LIR400", - "IP72-ONVIF-IPS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "400", - "AT-1008w/200bw/500bw", - "AT-100bw", - "AT-100BW", - "AT-200B", - "AT-200BW", - "at-200rw", - "AT-500DW", - "at-lbh400", - "AT-LBH400", - "AT-LIR400", - "HD IP Camera", - "IP72-ONVIF-IPS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "AT-100BW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/altan.json b/data/brands/altan.json deleted file mode 100644 index 6a1b5e0..0000000 --- a/data/brands/altan.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Altan", - "brand_id": "altan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bosch", - "HW0022", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/altasec.json b/data/brands/altasec.json deleted file mode 100644 index b4cef30..0000000 --- a/data/brands/altasec.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Altasec", - "brand_id": "altasec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Asecam_pa", - "ATHD16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/1/live.3gp" - }, - { - "models": [ - "ATHD16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01/0/live.3gp" - }, - { - "models": [ - "ATHD16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch00/0/live.3gp" - }, - { - "models": [ - "ATHD16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch00/1/live.3gp" - } - ] -} \ No newline at end of file diff --git a/data/brands/altcam.json b/data/brands/altcam.json deleted file mode 100644 index d1bb97c..0000000 --- a/data/brands/altcam.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Altcam", - "brand_id": "altcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ddddd", - "IBC13IR", - "icv51ir", - "IDMF24IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/altec-lansing.json b/data/brands/altec-lansing.json deleted file mode 100644 index a77e24e..0000000 --- a/data/brands/altec-lansing.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Altec Lansing", - "brand_id": "altec-lansing", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/am.json b/data/brands/am.json deleted file mode 100644 index c2d7efa..0000000 --- a/data/brands/am.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Am", - "brand_id": "am", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AM-C736" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "C755RV2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amamax.json b/data/brands/amamax.json deleted file mode 100644 index 8ff2421..0000000 --- a/data/brands/amamax.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Amamax", - "brand_id": "amamax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCTVDVRH800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "CCTVDVRMPEG4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Getvideo.cgi?Cookie=" - }, - { - "models": [ - "CCTVDVRMPEG4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "IPZB-600", - "IPZW-400", - "IPZW-600", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "IPZB-600", - "IPZW-400", - "IPZW-500", - "IPZW-600" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/amano.json b/data/brands/amano.json deleted file mode 100644 index f3bb014..0000000 --- a/data/brands/amano.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Amano", - "brand_id": "amano", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAO-EDH-63-11", - "Dome" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amarine.json b/data/brands/amarine.json deleted file mode 100644 index cbf16a3..0000000 --- a/data/brands/amarine.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amarine", - "brand_id": "amarine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rigger cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/amatek.json b/data/brands/amatek.json deleted file mode 100644 index 85298b5..0000000 --- a/data/brands/amatek.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Amatek", - "brand_id": "amatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "I5NT", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "I5NT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/amax.json b/data/brands/amax.json deleted file mode 100644 index 514de42..0000000 --- a/data/brands/amax.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Amax", - "brand_id": "amax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "5210" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "aip205", - "NK-610W1A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amazable.json b/data/brands/amazable.json deleted file mode 100644 index ffc5b5c..0000000 --- a/data/brands/amazable.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Amazable", - "brand_id": "amazable", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Grand", - "GrandIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/still.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/amazon.json b/data/brands/amazon.json deleted file mode 100644 index 9705145..0000000 --- a/data/brands/amazon.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Amazon", - "brand_id": "amazon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B06W720HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Fire" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "fire hdx", - "Fire Tablet HD10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "KFDOWI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "NCS601W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - } - ] -} \ No newline at end of file diff --git a/data/brands/amba.json b/data/brands/amba.json deleted file mode 100644 index 39c6c13..0000000 --- a/data/brands/amba.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amba", - "brand_id": "amba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AB-002-hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ambarella.json b/data/brands/ambarella.json deleted file mode 100644 index 185eefe..0000000 --- a/data/brands/ambarella.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ambarella", - "brand_id": "ambarella", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AB-201-HDW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/img.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/amber.json b/data/brands/amber.json deleted file mode 100644 index e2efa45..0000000 --- a/data/brands/amber.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amber", - "brand_id": "amber", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ambientcam.json b/data/brands/ambientcam.json deleted file mode 100644 index 3641d51..0000000 --- a/data/brands/ambientcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ambientcam", - "brand_id": "ambientcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ambyux-dual-cam.json b/data/brands/ambyux-dual-cam.json deleted file mode 100644 index a468851..0000000 --- a/data/brands/ambyux-dual-cam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ambyux Dual Cam", - "brand_id": "ambyux-dual-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P10-Q" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "P10-Q" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/amc.json b/data/brands/amc.json deleted file mode 100644 index 5a50e74..0000000 --- a/data/brands/amc.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Amc", - "brand_id": "amc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "01046", - "AMC0349M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IP2M-841B-V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amcast.json b/data/brands/amcast.json deleted file mode 100644 index 2c932ae..0000000 --- a/data/brands/amcast.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amcast", - "brand_id": "amcast", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP4M-1041B (RTSP)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/cam/realmonitor?channel=1&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/amcom.json b/data/brands/amcom.json deleted file mode 100644 index b1e1b94..0000000 --- a/data/brands/amcom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amcom", - "brand_id": "amcom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "z32001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2600, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/amcrest.json b/data/brands/amcrest.json deleted file mode 100644 index ad6192d..0000000 --- a/data/brands/amcrest.json +++ /dev/null @@ -1,1833 +0,0 @@ -{ - "brand": "Amcrest", - "brand_id": "amcrest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000", - "01046", - "10518", - "1080p", - "1080P", - "1080P HD", - "1P2M-841B", - "2304TVL", - "2688 tvl", - "3MP", - "3MP/2304TVL", - "4K Ultra HD", - "4kv1", - "4m1051", - "4mp ai", - "5IP5M-1176EB", - "720P", - "720P IPM-721S", - "841", - "841b", - "842", - "852EW", - "960H", - "960HBC", - "ad110", - "AD110", - "adc2w", - "AMC047490F629A7D31", - "AMC4KBC28-W", - "Amcrest turret from MC", - "AMDV8m16", - "AMDV8M16-H5", - "ASH21-w", - "ASH21-W", - "ASH26", - "ASH26-W", - "ASH42", - "ASH42-B", - "ASH42-B -JP", - "ash42w", - "ASH42-W", - "BarnCam", - "Black/Silver", - "Doorbell", - "FrontDoor", - "HDPro-VLC", - "Idunno", - "IMP-HX1B", - "IP2-841M", - "ip2m", - "ip2m 841b", - "IP2M 841B", - "ip2m 852ew", - "IP2M-752EW", - "ip2m-841", - "IP2M-841", - "ip2m-841b", - "IP2M841b", - "IP2M-841B", - "ip2m-841b-v3", - "ip2m-841EB", - "IP2M-841EB", - "IP2M-841EW", - "IP2M-841S", - "IP2M-841W", - "IP2M-841W-v3", - "IP2M-842", - "IP2M-842EW", - "IP2M-842W", - "IP2M-844E", - "IP2M-844EW", - "IP2M-846B", - "IP2M-846E", - "IP2M-851", - "IP2M-851B", - "ip2m-851w", - "IP2M-851W", - "ip2m-852", - "IP2M-852 V2", - "IP2M-852B", - "IP2M-853E", - "ip2m-858w", - "IP2M-858W", - "IP2M-866", - "IP2M-866E", - "ip2m-958w", - "IP2M-PH822", - "IP3M", - "IP3M-941", - "IP3M-941B", - "IP3M-941S", - "IP3M-941W", - "IP3M-954E", - "IP3M-956", - "IP3M-956W", - "IP3M-HX2B", - "IP3M-HX2W", - "ip4", - "IP4-1026B", - "IP4M", - "ip4m-1024e", - "IP4M-1025EB", - "IP4M-1026", - "ip4m-1026b", - "IP4M-1026B", - "IP4M-1026E", - "IP4M-1026EB", - "ip4m-1026w", - "ip4m-1026W", - "IP4M-1026W", - "IP4M-1028", - "ip4m-1028b", - "IP4M-1028E", - "IP4M-1028EB", - "IP4M-1028EB-28MM", - "IP4M-1028EW", - "IP4M-1028W", - "IP4M-1046E-AI", - "IP4m-1051", - "IP4M-1051", - "ip4m-1051B", - "IP4M-1051B", - "IP4M-1051W", - "IP4M-1053E", - "IP4M-1054EW", - "IP4M-1055E", - "IP4M-1055EM", - "IP4M-1055EW", - "IP4M-841B", - "ip4mB", - "IP4MP-Dome", - "IP4M-SN2110EW-AI", - "IP5M_T1179EW", - "IP5M-1173E", - "IP5M1173EB-28MM", - "IP5M-1173EW", - "IP5M-1179EW", - "IP5M-B1186-28mm", - "IP5M-B1276EW", - "IP5M-D1188E", - "IP5M-T1179EW", - "IP5M-T1179EW 28MM", - "IP5M-T1179EW-28MM", - "IP67", - "ip721", - "IP8M", - "IP8M-2454EW", - "IP8M-2493", - "IP8M-2493E", - "IP8M-2493EB", - "IP8M-2493EW", - "IP8M-2493W", - "IP8M-2496E", - "IP8M-2496EB", - "IP8M-2496EW", - "IP8M-2496EW-28mm", - "IP8M-2496EW-28MM", - "IP8M-2499", - "IP8M-2499EB", - "IP8M-2499ew", - "IP8M-2597E", - "IP8M-2597EB-28MM", - "ip8m-2597eb-6mm", - "IP8M-2597-EW", - "IP8M-2599", - "ip8m-2599e", - "ip8m-t2499", - "IP8M-T2499E", - "IP8M-T2499EB-28MM", - "IP8M-T2499EB-40MM", - "IP8M-T2499EW", - "IP8M-T2499EW-28MM", - "IP8M-T2499EW-40MM", - "ip8m-t25", - "IP8M-T2599EW", - "IPM2-866E", - "IPM2m-841B", - "IPM2M-843", - "IPM-721W", - "IPM-743E", - "IPM-941W", - "IPM-HX1B", - "IPSM-843", - "IPZ-841", - "M1B", - "M1W", - "NV2104E", - "nv2108e", - "nvr", - "NVR", - "Other", - "PROHD", - "ptz", - "YellowCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "001B", - "01482_9TC335", - "1080", - "1080P", - "1080P cgi", - "1920TVL", - "1P2M-841B", - "1P2M-841W", - "2304TVL", - "3MP", - "4MP", - "5000L", - "720", - "720P", - "720P IPM-721B", - "720P IPM-721S", - "720P IPM-723S", - "721", - "722-IP", - "722S", - "723", - "723es", - "841w", - "AD110", - "ADC2W", - "AMC000DJ27SPS2C2QY", - "AMC001T4_590R5V", - "AMC1080", - "AMCREST IP2M-841EB", - "AMDV10804-4b-w", - "BlueRoom", - "DC2W", - "DVR", - "HDPRO", - "IMP722S", - "IMP-723", - "imp-743", - "imp-751w", - "IMP-HX1B", - "IP2-841M", - "IP2M", - "IP2M 841B", - "IP2M-841", - "IP2M-841 ProHD", - "ip2m-841b", - "IP2M-841B-V3", - "IP2M-841e", - "IP2M-841EB", - "IP2M-841EW", - "IP2M-842", - "IP2M-842B", - "IP2M-842E", - "IP2M-842W", - "ip2M-843EB", - "IP2M-844E", - "IP2M-844EB", - "IP2M-844EW", - "IP2M-846B", - "ip2m-851", - "IP2M-851EB", - "IP2M-851EW", - "IP2M-851W", - "IP2M-852", - "IP2M-853E", - "ip2m-853ew", - "IP2M-866", - "ip3", - "IP396ew", - "IP3M", - "IP3M-941", - "IP3M-941B", - "IP3M-941W", - "IP3M-943", - "IP3M-943B", - "IP3M943S", - "IP3M-943W", - "IP3M952E", - "IP3M-954", - "IP3M-954E", - "IP3M-954EB", - "IP3M-954EW", - "IP3M-956", - "IP3M-956B", - "IP3M-956E", - "IP3M-956EB", - "IP3M-956EW", - "IP3M-956W", - "IP3M-HX2", - "IP3M-HX2B", - "IP3M-HX2W", - "ip4m", - "IP4m-1024EW", - "IP4M-1025E", - "IP4M-1025EB", - "IP4M-1025EW", - "IP4M-1026", - "IP4M-1026B", - "IP4M-1026E", - "IP4M-1026EB", - "ip4m-1026w", - "IP4M-1028B", - "ip4m-1028e", - "IP4M-1028W", - "IP4M-1051", - "ip4m-1055em", - "ip4m-1055EW", - "ip5m", - "IP5M-1173E", - "IP5M1173EB-28MM", - "ip5m-1179ew", - "IP5M-B1186E", - "IP5M-B1186EW", - "IP5M-D1188E", - "IP5M-D1188EW", - "IP5M-T1179E", - "IP5M-T1179EW", - "IP5M-T1179EW-28MM", - "ip65", - "IP67", - "IP8M-2493EB", - "IP8M-2493EW", - "IP8M-2493EW (JPEG)", - "IP8M-2493EW-V2", - "IP8M-2496EW", - "IP8M-2496EW-V2", - "IP8M-26963EW", - "IP8M-T2499EB", - "IP8M-T2499EW-40MM", - "IP8M-T2599EW", - "IP8M-T2669", - "IP8M-T2669E-AI", - "IP8M-T2669EW-AI", - "IPM", - "IPM-22S", - "ipm2-841", - "ipm2-851", - "IPM2m-841B", - "IPM-721", - "IPM-721B", - "IPM-721P", - "IPM-721S", - "IPM-721W", - "ipm-723", - "IPM-723B", - "ipm723s", - "IPM-723S", - "IPM-723W", - "ipm743", - "IPM-743ESJP", - "IPM751B", - "IPM-751W", - "IPM-HX1", - "IPM-HX1B", - "IPM-HX1W", - "NVR", - "Other", - "Pro HD", - "PROHD", - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "01046", - "ASH21", - "IP3M-941", - "IP4M-1028EB", - "IP5M-T1179EW 28MM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&authbasic=[AUTH]" - }, - { - "models": [ - "01046", - "1080P Video Doorbell", - "4mp ai", - "4MP ProHD Indoor WiFi", - "5MP Dome", - "ad110", - "AD110 Doorbell", - "AS21-B-V3", - "ASH21-w", - "ASH22-w", - "ASH42", - "ASH42-B", - "ASH47-W", - "Floodlight Camera", - "ip2m 841b", - "IP2M-841B-V3", - "IP2M-841W", - "IP3M", - "ip4m-1025", - "IP4M-1025EB", - "IP4M-1041W", - "IP4m-1051", - "ip4m-1051B", - "IP5M_T1179EB-28MM", - "IP5M_T1179EW", - "IP5m-B1186EB", - "IP5M-B1276EW-AI", - "IP5M-F1180EW-V2", - "IP5M-T1179EW 28MM", - "IP5M-T1179EW-28MM", - "IP8M-2496E", - "IP8M-2496EB-V2", - "IP8M-2496EW", - "IP8M-2496EW-V2", - "IP8M-2696E-AI", - "IP8M-T2499E", - "IP8MT2599EW", - "IP8M-T2599EW", - "IP8M-VB2796EW", - "NV4108E and NV4108HS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "1080", - "1080P", - "722", - "842", - "IMP-743", - "IP2M-841B", - "IP2M-841EW", - "IP2M-844E", - "IP2M-844EW", - "ip2m-846e", - "IP2M-846EB", - "IP3M-954E", - "IP3M-956EW", - "IP-842M", - "IP8M-T2499E", - "IPM-722S", - "IPM-743ES", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "1080", - "1080P", - "1080P jp default", - "1080P vlc", - "1P2M-841B", - "3MP", - "720P", - "720P IPM-721S", - "720P IPM-723S", - "722S", - "841BIMI", - "842", - "AMC000DJ27SPS2C2QY", - "AMC1080", - "BLIIP2M-841W", - "HDPRO", - "IMP-722S", - "IMP-723", - "ip2m", - "IP2M-841", - "ip2m-841b", - "IP2M841b", - "IP2M-841E", - "IP2M-841W", - "ip2m-842", - "IP2M-842", - "IP2m-842b", - "IP2M-842B", - "IP2M-842E", - "IP2M-842W", - "IP2M-844E", - "ip2m-844e ip", - "IP2M-846", - "IP2M-854EW", - "ip3-951", - "IP3M", - "IP3M-943", - "IP3M-943B", - "IP3M-943S", - "IP3M-954E", - "IP3M-954EW", - "IP3M-956B", - "ip3m-956e", - "IP3M-956E", - "IP3M-956EB", - "IP3M-956EW", - "ip4m", - "ip4m-1025e", - "IP4M-1025EB", - "IP4M-1026B", - "IP5M-T1179EW 28MM", - "IP67", - "ip721", - "IPM-721", - "ipm-721s", - "IPM721S", - "IPM722S", - "IPM-722S", - "IPM-723", - "IPM-723S", - "ipm-723w", - "IPM-723W", - "IPM-743ES", - "IPM-751", - "Other", - "Tent", - "WillHouse IP2M-841" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "1080", - "1080P", - "720P IPM-721S", - "841", - "AMC000DJ27SPS2C2QY", - "AMC1080", - "IP2-841M", - "IP2M-841", - "IP2M-841B", - "IP2M-842", - "IP2m-842b", - "IP2M-842E", - "IP2M-846B", - "IP3M-943B", - "IP3M-943W", - "IP3M-954E", - "IP3M-956E", - "IP4M-1025EB", - "IP-842M", - "IPM2M-841B", - "IPM-721", - "IPM-721S", - "IPM-722S", - "IPM-743ES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1080", - "1080P", - "1080P HD", - "1190 W", - "13p", - "180", - "1920TVL", - "193", - "1P2M-841B", - "360", - "481", - "720P", - "720P IPM-721b", - "720P IPM-721ES", - "720P IPM-721S", - "720P IPM-723S", - "722-IP", - "722s", - "841", - "841bimi", - "841W", - "850E", - "AD110", - "AMC1080", - "amco349438798", - "BliIP2M-841W", - "HDPRO", - "HDPRO IPM", - "imp", - "imp722s", - "imp-723b", - "ip2m", - "IP2M-841", - "IP2M841b", - "IP2M-841B", - "IP2M-841B-V3", - "IP2M-841EB", - "IP2M-841S", - "IP2M-841W", - "IP2M-842B", - "IP2M-842E", - "IP2M-843EB", - "IP2M-844E", - "IP2M-844EW", - "IP2M-851EB", - "IP2M-853EW", - "ip3", - "IP3M", - "IP3M-941", - "IP3M-941B", - "IP3M-941W", - "IP3M-943", - "IP3M-943B", - "IP3M-943W", - "IP3M-956B", - "IP3M-HX2B", - "IP4M", - "IP4M-1024E", - "IP4M-1025E", - "IP4M-1025EB", - "IP4M-1025EW", - "IP4M-1026", - "IP4M-1026EB", - "ip4m-1028b", - "ip5m", - "IP5M-B1186EW", - "IP5M-B1186EW-28MM", - "IP5M-D1188E", - "IP5M-T1179EW", - "IP8M-2493EW", - "IP8M-2496EW", - "IP8M-2943ew", - "IP8M-T2599EW", - "IP8M-T2669EW-AI", - "IPl8M-2496EW-V2", - "ipm 723w", - "ipm2-852", - "IPM2M-841B", - "IPM3M-956W", - "IPM-721", - "IPM-721B", - "IPM-721ES", - "IPM-721S", - "ipm-721w", - "IPM-722S", - "ipm-723b", - "IPM723S", - "IPM-723W", - "IPM-743", - "ipm-743es", - "IPM-751W", - "IPM-HX1", - "IPM-HX1W", - "NVR", - "Other", - "PROHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1080", - "1080p", - "1920TVL", - "3MP", - "720P IPM-721S", - "841", - "841BIMI", - "842", - "HDpro", - "IP2-841M", - "IP2M", - "IP2M-841", - "IP2M841B", - "IP2M-842", - "IP2M-842B", - "IP2M-842E", - "IP2M-842W", - "IP2M-844E", - "IP3M-943B", - "IP3M-943W", - "IP3M-954E", - "IP3M-954EW", - "IP3M-956", - "IP3M-956E", - "IP3M-956EB", - "IP3M-956EW", - "IP4M-1025EB", - "IPM2m-841B", - "IPM721S", - "IPM-722", - "Other", - "PROHD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "1080", - "1080P", - "1080Psh", - "3MP", - "HDPRO", - "IP2-841M", - "IP2M-841", - "ip2m-841b", - "IP2M-842E", - "IP2M-844E", - "IP3E-956", - "ip3m-943w", - "IP3M-954EW", - "IP3M-956E", - "IP4M-1025EB", - "ipm 723w", - "IPM-723B", - "IPM-743ES", - "IPM-751W", - "ONVIF", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "1080", - "1080P", - "1080P HD", - "1920TVL", - "1P2M-841B", - "3MP", - "720P IPM-721S", - "720P IPM-723S", - "721", - "7225", - "741", - "821", - "841", - "841w", - "842", - "852EW", - "AD410", - "AMC000DJ27SPS2C2QY", - "AMC001WU65RYZXPQER", - "AMDV7204", - "DVR", - "HDPRO", - "ip20-841b", - "IP2-841M", - "IP2-851EB", - "IP2M", - "ip2m 841b", - "IP2M-814B", - "IP2M-841", - "IP2M841B", - "IP2M-841E", - "IP2M-841EB", - "IP2M-841W", - "IP2M-842", - "IP2M-842B", - "IP2M-842E", - "IP2M-842W", - "IP2M-843EB", - "IP2M-844E", - "IP2M-844E_JL", - "ip2m-846b", - "IP2M-851EB", - "ip2m-851ew", - "ip2m-851w", - "IP2M-852 V2", - "IP2M853EW", - "ip2m-854ew", - "IP2M-863EW-AI", - "ip3", - "IP3M", - "IP3M-941", - "IP3M-941B", - "IP3M-941W", - "ip3m-943b", - "IP3M-954E", - "IP3M-954EB", - "IP3M-956", - "IP3M-HX2B", - "IP3M-HX2W", - "IP4M", - "ip4m-1024e", - "IP4m-1024EW", - "IP4M-1024EW", - "IP4M-1025E", - "IP4M-1025EW", - "IP4M-1026", - "IP4M-1026B", - "IP4M-1026W", - "IP4M-1028E", - "IP4m-1051", - "IP4M-1051B", - "ip5m", - "IP5M1173EB-28MM", - "ip5m-b1186e", - "IP8M T2499EB", - "IP8M-2493EW", - "IP8M-2496E", - "IP8M-2496EB", - "IP8M-2496EW", - "IP8M-2496EW-V2", - "IP8M-2496EW-V3", - "IP8M-2599E", - "IP8M-T2499EW", - "IPM 723W", - "ipm2-841w", - "IPM2m-841B", - "IPM-721P", - "IPM-721s", - "IPM721S", - "IPM-722S", - "IPM723b", - "IPM-743", - "ipm-841", - "IPM-HX1B", - "IPM-HX1W", - "Other", - "PROHD", - "Tree64clops" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "1080", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080p", - "5MP", - "720P IPM-721S", - "ip2m-841b", - "IP4M-1041W", - "IPM2m-841B", - "IPM-723S", - "ipm-743es", - "IPM-841B", - "Network Camera", - "UNTILED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live" - }, - { - "models": [ - "1080P", - "IP3M-941B", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "1080P", - "720P IPM-723S", - "842", - "AMC1080", - "HDPRO", - "IP2-841M", - "IP2M-841", - "ip2m-841b", - "IP2M841B", - "IP2M-842B", - "IP2M-844E", - "IP3M-943B", - "IP3M952E", - "IP3M-954E", - "IP3M-956E", - "IP3M-956EB", - "IPM2-841", - "IPM-722S", - "IPM-723S", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1080P HD", - "4mp ai", - "ad110", - "ASH21-B", - "IP4MP-Dome", - "IP5M-B1186E", - "IP5m-B1186EB", - "IP5MT1179E" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "1P2M-841B", - "IP2M-841B-V3", - "IP4M-1041B", - "IP4M-SN2110EW-AI", - "ip5m", - "IP5M_T1179EW", - "IP5M-T1179EW-28MM", - "IP8M-2496EW-V2", - "IP8M-2499", - "IP8M-T2669E-AI", - "IP8M-VT2679EW-AI" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=R%40mcorpsCamera" - }, - { - "models": [ - "1P2M-841W", - "AD410", - "IMP-723", - "imp-723b", - "IP2M-841w-v3", - "IP5M_T1179EB-28MM", - "IP5M_T1179EW", - "IP5M-T1179E", - "IP8M-T2669EW-AI", - "IP8M-VB2796EW" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1P2M-841W", - "841W", - "ASH26-W", - "IP2M-841", - "IP2M-841W-v3", - "IP2M-858W", - "IP3M-941", - "ip4m-1051B", - "IP5M-1173E", - "IP5M-T1179EW 28MM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authbasic=[AUTH]" - }, - { - "models": [ - "1P2m-844", - "4K Ultra HD", - "741", - "AMDV7204", - "IP2M-841EW", - "IP5M-B1186-28mm", - "IP5M-T1179EW", - "IP5M-T1179EW-28MM", - "IP8M-2597-EW AI", - "IP8M-2696E-AI", - "IP8M-T2599EW", - "IP8M-VT2779EW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "2MP PTZ", - "5MP", - "ad110", - "AD410", - "ash42w", - "DVR", - "IMP-723", - "IP4M-1026EB", - "IP4M-1098EW-AI", - "IP4MP-Dome", - "IP5m-B1186EB", - "IP5M-B1186EW", - "ip5m-b1186ew-28mm", - "IP5M-D1188EW-22MM", - "IP5M-T1179EB-28MM", - "IP5M-T1179EW 28MM", - "IP5M-T1179EW-28MM", - "IP5M-T1277EW-AI", - "IP8M-2779EW-AI", - "Ip8M-2796EW-AI", - "IP8M-VB2796EW", - "ipm-723", - "PROHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "4K Ultra HD", - "IP8M-2496EB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=02&authbasic=[AUTH]" - }, - { - "models": [ - "4K Ultra HD", - "720P IPM-721S", - "AMCREST IP2M-841EB", - "ASH26-W", - "IP2M-846B", - "IP3M-941B", - "IP3M-941W", - "ip4m-1026w", - "ip4m-1028e", - "IP4M-1051W", - "IP5M-T1179EW 28MM", - "IP8M-2493EW-V2", - "M1B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=01&authbasic=[AUTH]" - }, - { - "models": [ - "4K Ultra HD", - "ASH26-W", - "ASH42-B", - "ash42w", - "IP2M-846B", - "IP2M-853E", - "IP8M-2493E", - "IP8M-2496EB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=01&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "4mp ai", - "ad110", - "AD410", - "imp 1051b", - "ip2m-841", - "IP3M-943B", - "IP3M-956B", - "IP4M-1028B", - "IP4M-1051B", - "IP5M_T1179EW", - "IP5M-1173E", - "IP5M-B1186EW", - "ip5m-b1186ew-28mm", - "IP5M-D1188E", - "IP5M-T1179E", - "IP5M-T1179EW", - "IP5M-T1179EW 28MM", - "IPM2m-841B", - "NULL", - "Other", - "UNTITLED" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "5m1179", - "IP5M-B1186EB-28MM" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=CAMm0t10n%21" - }, - { - "models": [ - "720P", - "720P IPM-721S", - "720P IPM-723S", - "HDPRO", - "IMP722S", - "IP2-841M", - "IP2M-841", - "IP2M-841B", - "IP2M-841W", - "IP2M-842", - "IP2M-842B", - "IP2M-842W", - "IP3M-943W", - "IP3M952E", - "IP3M-954E", - "IP3M-956EB", - "ipm721s", - "IPM-721W", - "IPM-722S", - "IPM-723B", - "IPM723S", - "IPM-743ES", - "IPM-751W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "722", - "722-IP", - "AMC041EC14", - "IP2M841B", - "IP2M-841EW", - "IP3M-943B", - "IP4K-Bullet", - "IP4M-1051W", - "IP4MP-Dome", - "IP8M-2496E", - "IPM722S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "722", - "AMDH10808", - "IP2M-841", - "IP2M-842", - "IP2M-842EW", - "IP3M-956EW", - "IP4M-1025EB", - "IPM-722S", - "IPM-743ES", - "NETWORK CAMERA", - "NVR-PTZ-static" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "841w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "960H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "960H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1sdp" - }, - { - "models": [ - "960H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=6?subtype=0" - }, - { - "models": [ - "960H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_05_main" - }, - { - "models": [ - "960H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_06_main" - }, - { - "models": [ - "960HP" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 555, - "url": "/h264Preview_02_main" - }, - { - "models": [ - "960HP8", - "AMDV7204", - "IP2M-842E", - "IP3M-956E", - "QCAM IP3M952E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "ad110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "ad110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "ad110", - "AD110", - "AD410", - "Doorbell", - "E2B", - "ip2m-841b", - "ip3m-943b", - "IP4-1024EB", - "ip4m-1051B", - "IP4M-1063EW-AI", - "IP5M-T1179EW", - "IP5M-T1179EW-AI-V3", - "IP8m-", - "IP8M", - "IP8M-2493EW-V2", - "IP8M-2496EB", - "IP8M-2496EW", - "IP8M-249EB-28MM", - "IP8M-25", - "IP8M-2696E-AI", - "ip8m-T", - "IPM2m-841B", - "IPM-721", - "IPM-841B", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "ad110", - "AD410", - "IP2M-841B-V3", - "Ip4m-1028B", - "ip4m-1041b", - "IP8M-2496EW", - "IPM-751", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ad110", - "AD110 Doorbell", - "AS21-B-V3", - "ip2m 841b", - "IP2M-841B-V3", - "IP2M-841W", - "ip4m-1025", - "IP4M-1041W", - "IP4M-1051B", - "IP5M_T1179EB-28MM", - "IP5M-1179EW", - "IP5M-B1276EW-AI", - "IP5M-T1179EW 28MM", - "IP5M-T1179EW-28MM", - "IP8M-2493EW", - "IP8M-2496EB", - "IP8M-2496EB-V2", - "IP8M-2496EW-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "AD110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46IUtlbndvb0QwMCU0MA==" - }, - { - "models": [ - "AD110", - "ip4m-1025" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&authbasic=64" - }, - { - "models": [ - "AD410", - "ASH21-w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1?subtype=0" - }, - { - "models": [ - "AD410", - "ip2m-841b-v3", - "IP4M-1041B", - "IP4M-S2112EW-AI", - "ip5m", - "IP5M_T1179EW", - "IP5M-B1186EW-28MM", - "IP5M-T1179EW 28MM", - "IP5M-T1179EW-AI-V3", - "IP8M-2496E", - "IP8M-2496EB-V2", - "IP8M-2499", - "ip8m-test", - "IPM5" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpg/video.cgi?channel=1&subtype=1" - }, - { - "models": [ - "adc2w", - "ash22-w", - "M2B", - "Zencam M2B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00" - }, - { - "models": [ - "AMC091B1F816B3C2D5 SN#", - "IP8M-2597-EW AI", - "Ip8M-2796EW-AI", - "IP8M-T2599EW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "AMDV108116-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=13&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "AMDV108116-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=13&subtype=01&authbasic=[AUTH]" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5", - "NETWORK CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=6&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=10&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=11&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5", - "NETWORK CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=13&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=12&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=14&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=15&subtype=0" - }, - { - "models": [ - "AMDV8M16-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=16&subtype=0" - }, - { - "models": [ - "Doorbell2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/realmonitor" - }, - { - "models": [ - "HDPRO" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IMP-HX1B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP2-841M", - "IP2M-841E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IP2M-841", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "ip2m-841b", - "IP3M-941B", - "ip4m-1026w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "IP2M841b" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ip2m-846b", - "ipm-743es" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 6004, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "IP3M-941B", - "IP8M-2493E", - "IPM-743ES", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=01&subtype=01&authbasic=[AUTH]" - }, - { - "models": [ - "IP3M-HX2B", - "IP5M-1176E", - "IP8M-2779EW-AI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46QW5ndSUyNEIzM2Y=" - }, - { - "models": [ - "IP4M-1026E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1&authbasic=[AUTH]" - }, - { - "models": [ - "IP4m-1051" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MTE3TGFrZXdvb2Q=" - }, - { - "models": [ - "IP4M-1051" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MzIyMzExNjEzMVNoYXl0YW4=" - }, - { - "models": [ - "IP4MP-Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46SlNub3cxMjM=" - }, - { - "models": [ - "IP5M_T1179EW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46UCU0MGNrZXIlMjQyMg==" - }, - { - "models": [ - "IP5m-B1186EB", - "M2B", - "Zencam M2B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=01" - }, - { - "models": [ - "IP5m-B1186EB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=main" - }, - { - "models": [ - "IP5M-B1186EB-28MM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46YWRtaW4x" - }, - { - "models": [ - "IP5M-T1179EW-28MM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsp" - }, - { - "models": [ - "IP8M-2496EB" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "IP8M-T2599EW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=0" - }, - { - "models": [ - "ipm-723b" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=1qazxsw2%21QAZ" - }, - { - "models": [ - "NETWORK CAMERA", - "NV4108E and NV4108HS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=0" - }, - { - "models": [ - "nv2108e" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=1&authbasic=[AUTH]" - }, - { - "models": [ - "nv2108e" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=0&authbasic=[AUTH]" - }, - { - "models": [ - "NVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46YWRtaW4=" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=31&subtype=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amegia.json b/data/brands/amegia.json deleted file mode 100644 index 611524f..0000000 --- a/data/brands/amegia.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Amegia", - "brand_id": "amegia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AM5211-E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amera.json b/data/brands/amera.json deleted file mode 100644 index 115ba94..0000000 --- a/data/brands/amera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amera", - "brand_id": "amera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iono" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/american-dynamics.json b/data/brands/american-dynamics.json deleted file mode 100644 index 2682414..0000000 --- a/data/brands/american-dynamics.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "brand": "American Dynamics", - "brand_id": "american-dynamics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "410", - "610", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live1.sdp" - }, - { - "models": [ - "5105DN" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "610", - "ADCI400-D033", - "i600", - "I610", - "i610-D321-150500000344", - "illustra 600", - "illustra 610", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/primarystream" - }, - { - "models": [ - "610", - "ADCi400-D021", - "ADCI400-D023", - "ADCI400-D033", - "Illustr400", - "Illustrai400", - "IP Indoor Mini dome", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "610", - "acdi610-d021", - "ADCi210-D011", - "ADCI400-D023", - "ILLUSTR400", - "illustra 600", - "ILLUSTRA 610" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/jpegcif.cgi" - }, - { - "models": [ - "625", - "ADVEIPSD22N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - }, - { - "models": [ - "ADCi400-D023" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live2.sdp" - }, - { - "models": [ - "ADCi400-D033" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "ADCIPE37120", - "VideoEdge" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "ILLUSTRA 600", - "ILLUSTRA 610" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "ILLUSTRA 600", - "ILLUSTRA ADCI-M-111" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "ILLUSTRA 600", - "ILLUSTRA 610", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/jpeg.cgi" - }, - { - "models": [ - "Illustra ADCi-M-111" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ufirststream" - }, - { - "models": [ - "indoor dome" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP Indoor Mini dome" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "ipdome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "operator/get_jpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ameta.json b/data/brands/ameta.json deleted file mode 100644 index ea81dab..0000000 --- a/data/brands/ameta.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Ameta", - "brand_id": "ameta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eyeonet 7942" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IP9118-28" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP9313-28", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/amiccom.json b/data/brands/amiccom.json deleted file mode 100644 index e21dcb9..0000000 --- a/data/brands/amiccom.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Amiccom", - "brand_id": "amiccom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "Z_22047", - "z_32001", - "Z_3201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2600, - "url": "/" - }, - { - "models": [ - "Z_22041", - "Z_22047" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2600, - "url": "/media/ch0/stream0" - } - ] -} \ No newline at end of file diff --git a/data/brands/amiko.json b/data/brands/amiko.json deleted file mode 100644 index e90f203..0000000 --- a/data/brands/amiko.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Amiko", - "brand_id": "amiko", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "60F", - "B60M400zoom", - "FE20A400POE WIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "D20V200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/amirok.json b/data/brands/amirok.json deleted file mode 100644 index ce97319..0000000 --- a/data/brands/amirok.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amirok", - "brand_id": "amirok", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/amity.json b/data/brands/amity.json deleted file mode 100644 index ca79b28..0000000 --- a/data/brands/amity.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Amity", - "brand_id": "amity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "grounds", - "Other", - "parimeter", - "warehouse" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/amopm.json b/data/brands/amopm.json deleted file mode 100644 index 409f0f0..0000000 --- a/data/brands/amopm.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Amopm", - "brand_id": "amopm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TH38C4-ONVIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "TH38C4-ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "TH38C4-ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/amorvue.json b/data/brands/amorvue.json deleted file mode 100644 index 2d69727..0000000 --- a/data/brands/amorvue.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "brand": "Amorvue", - "brand_id": "amorvue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3mp", - "3mp360", - "IPC 960p", - "NC1080AW", - "PC1180aw", - "PC1360AW", - "RC1080BW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "NC1080AW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "PC11080W", - "PC1180W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "RC720AW" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/amovision.json b/data/brands/amovision.json deleted file mode 100644 index ce34b4b..0000000 --- a/data/brands/amovision.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "brand": "Amovision", - "brand_id": "amovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MP HD", - "AM-C739A", - "AM-C755R2-WIFI", - "am-c839", - "AM-CPT540", - "amov-q645r", - "AM-Q10325V", - "AM-Q1036", - "AM-Q1039", - "AM-Q1139", - "AM-Q630m", - "am-q6320-wifi", - "AM-Q855RV2", - "H.264", - "Other", - "Q10325V", - "Q1036", - "Q6300 WiFi", - "Q630M", - "Q6320", - "Q645R", - "Q6540", - "SCM-255664" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "2MP HD", - "am-C7310-WiFi", - "AM-C7342", - "AM-C734V2", - "AM-C735", - "AM-C736", - "AM-C736V", - "AM-C755R", - "AM-D640R", - "AM-H676", - "AM-HD3200", - "AM-Q1139", - "H.264", - "Other", - "QF605" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "AM-643R-WIFI", - "AM-C735" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AM-C7310-WIFI", - "AM-C7342", - "AM-C734V2", - "AM-C735", - "AM-C736", - "AM-C736V", - "AM-C739A", - "AM-C754R", - "AM-C755R", - "AM-C755R2-Wifi", - "AM-D640R", - "C739", - "cpt510", - "H.264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "AM-C736", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "AM-C736" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "AM-C736" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "AM-C755R", - "AM-Q1159", - "H.264" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "AM-HD3300V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "AM-Q1036", - "AM-Q1036 Deano", - "AM-Q1055R2", - "Other", - "Q11404R-WIFI", - "Q630", - "Q645R", - "V100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "AM-Q1036" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "AM-Q1039", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "AM-Q1039" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "AM-W736" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ampand.json b/data/brands/ampand.json deleted file mode 100644 index 54219c1..0000000 --- a/data/brands/ampand.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ampand", - "brand_id": "ampand", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-P12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/amsecu.json b/data/brands/amsecu.json deleted file mode 100644 index 5626f02..0000000 --- a/data/brands/amsecu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amsecu", - "brand_id": "amsecu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CA-IP-D28R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/amview-hd.json b/data/brands/amview-hd.json deleted file mode 100644 index bd738ea..0000000 --- a/data/brands/amview-hd.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Amview Hd", - "brand_id": "amview-hd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome", - "snv288" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/amview.json b/data/brands/amview.json deleted file mode 100644 index 3f94a80..0000000 --- a/data/brands/amview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Amview", - "brand_id": "amview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "svn589zw66" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/amway.json b/data/brands/amway.json deleted file mode 100644 index 14fc3b8..0000000 --- a/data/brands/amway.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Amway", - "brand_id": "amway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC1000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/ana-pola.json b/data/brands/ana-pola.json deleted file mode 100644 index 1046cbb..0000000 --- a/data/brands/ana-pola.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ana Pola", - "brand_id": "ana-pola", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Polaroid" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/anba.json b/data/brands/anba.json deleted file mode 100644 index 80ea121..0000000 --- a/data/brands/anba.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Anba", - "brand_id": "anba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "300", - "720P IP NETWORK CAMERA", - "ab003L", - "AB-003L", - "anban", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C9F0SeZ0N0P0L0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HZD-600DM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "HZD-600DM", - "K and D", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbash.json b/data/brands/anbash.json deleted file mode 100644 index 0f64e68..0000000 --- a/data/brands/anbash.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Anbash", - "brand_id": "anbash", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC128PW", - "NC223W-IR", - "NC355PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "NC233W-IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbe.json b/data/brands/anbe.json deleted file mode 100644 index 3ac0fc9..0000000 --- a/data/brands/anbe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anbe", - "brand_id": "anbe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbe2.json b/data/brands/anbe2.json deleted file mode 100644 index 843cdc6..0000000 --- a/data/brands/anbe2.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Anbe2", - "brand_id": "anbe2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "006", - "720p", - "720p IP Network Camera", - "China" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "720p", - "720p IP Network Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/anben.json b/data/brands/anben.json deleted file mode 100644 index c365830..0000000 --- a/data/brands/anben.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anben", - "brand_id": "anben", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BPI205-2H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbentech.json b/data/brands/anbentech.json deleted file mode 100644 index 7804eff..0000000 --- a/data/brands/anbentech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anbentech", - "brand_id": "anbentech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BP20S-1H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbiux.json b/data/brands/anbiux.json deleted file mode 100644 index de22d58..0000000 --- a/data/brands/anbiux.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Anbiux", - "brand_id": "anbiux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4Mp", - "A8B", - "A8Q", - "A8SB", - "Ai08", - "Other", - "P3SB-8MP-EU", - "PTZ", - "x6c-weq", - "xm530", - "xm530_rh50x20_8m", - "xm530_rh80x20-PQ_8m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbong.json b/data/brands/anbong.json deleted file mode 100644 index 7c80123..0000000 --- a/data/brands/anbong.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anbong", - "brand_id": "anbong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/anbvision.json b/data/brands/anbvision.json deleted file mode 100644 index 4175c06..0000000 --- a/data/brands/anbvision.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Anbvision", - "brand_id": "anbvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AB-2M8SP100087", - "AB-2N8SP100087", - "D9108-3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ancarla.json b/data/brands/ancarla.json deleted file mode 100644 index 90e63ec..0000000 --- a/data/brands/ancarla.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ancarla", - "brand_id": "ancarla", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hd20m14hx-wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/andin.json b/data/brands/andin.json deleted file mode 100644 index c8d3c77..0000000 --- a/data/brands/andin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Andin", - "brand_id": "andin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/andowl.json b/data/brands/andowl.json deleted file mode 100644 index de22a33..0000000 --- a/data/brands/andowl.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "brand": "Andowl", - "brand_id": "andowl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPG-X6-WEQ2", - "Q-S30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IPG-X6-WEQ2", - "q-s712" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Q-A236", - "Q-A275", - "Q-S2i", - "QS66" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/stream1" - }, - { - "models": [ - "q-s4", - "Q-SX002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "q-s4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streamtype=0" - }, - { - "models": [ - "Q-S4", - "S-Q4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streamtype=1" - }, - { - "models": [ - "Q-S807" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - } - ] -} \ No newline at end of file diff --git a/data/brands/android-ip-cam.json b/data/brands/android-ip-cam.json deleted file mode 100644 index 08c28e8..0000000 --- a/data/brands/android-ip-cam.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Android Ip Cam", - "brand_id": "android-ip-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GALAXY ACE", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IP WEBCAM FOR ANDROID", - "zte" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video" - }, - { - "models": [ - "Other", - "samsung" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "TinyCam" - ], - "type": "MJPEG", - "protocol": "https", - "port": 8083, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - }, - { - "models": [ - "V380-Q10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "XT1609" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 42428, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/android-ip-webcam.json b/data/brands/android-ip-webcam.json deleted file mode 100644 index 034b732..0000000 --- a/data/brands/android-ip-webcam.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "brand": "Android Ip Webcam", - "brand_id": "android-ip-webcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Altel", - "Other", - "samsung gt-s7272" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "HUAWEI", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "IP WEBCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "IP WEBCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video" - }, - { - "models": [ - "IP WEBCAM ANDROID", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "IP-CAMERA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IPWEBCAM", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Nexus 4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/" - }, - { - "models": [ - "TinyCam" - ], - "type": "MJPEG", - "protocol": "https", - "port": 8083, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/android.json b/data/brands/android.json deleted file mode 100644 index 99a88a2..0000000 --- a/data/brands/android.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "brand": "Android", - "brand_id": "android", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "122", - "asus", - "DroidCam", - "Endoscope ip", - "galaxy", - "Galaxy S5", - "IP Camera1", - "ip webcam", - "IP Webcam", - "Ip Webcam for Android", - "J Samsung", - "jay lg", - "Kyocera Milano c5120", - "Moto", - "Other", - "redmi-note4", - "Samsung", - "Samsung J2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video" - }, - { - "models": [ - "122", - "Android Ip Camera", - "IP Webcam", - "Ip Webcam for Android", - "IP-CAM", - "IVCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "1809", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Galaxy S7" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5554, - "url": "/" - }, - { - "models": [ - "IP Camera1", - "IP CAMERA1", - "IP Webcam", - "IP WEBCAM", - "Ip Webcam for Android", - "IP WEBCAM FOR ANDROID", - "K30", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IP Webcam", - "Ip Webcam for Android", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "IP Webcam", - "Ip Webcam for Android", - "IP-CAM", - "Other", - "Redmi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "IP Webcam", - "IP WEBCAM ANDROID", - "Ip Webcam for Android" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/h264.sdp" - }, - { - "models": [ - "IP WEBCAM", - "IP Webcam on GT900H", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "OnePlus 3", - "S6Edg", - "z3c" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video?1920x1080" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "config/jpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "?action=snapshot" - }, - { - "models": [ - "screencast" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/stream.mjpeg" - }, - { - "models": [ - "Xiaomi Mi A1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/video/mjpeg" - }, - { - "models": [ - "z3c" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video?1280x720" - } - ] -} \ No newline at end of file diff --git a/data/brands/anenda.json b/data/brands/anenda.json deleted file mode 100644 index 40aface..0000000 --- a/data/brands/anenda.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anenda", - "brand_id": "anenda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AS23-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/anga.json b/data/brands/anga.json deleted file mode 100644 index 66e41a4..0000000 --- a/data/brands/anga.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Anga", - "brand_id": "anga", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AQ-229IPD", - "AQ-6108R5", - "Other", - "RT AQ-6108R5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/angel-electronics.json b/data/brands/angel-electronics.json deleted file mode 100644 index 4a565d0..0000000 --- a/data/brands/angel-electronics.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Angel Electronics", - "brand_id": "angel-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ctipc-123c1080pw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "CTIPC-224", - "CTIPC-245C", - "CTIPC-275C1080P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CTIPC-275C1080P" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "CTIPC-285C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "CTIPC-290C5MP-B", - "ctpt-90c1080p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Dreamstar" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/anhkiet.json b/data/brands/anhkiet.json deleted file mode 100644 index 19d6fcd..0000000 --- a/data/brands/anhkiet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anhkiet", - "brand_id": "anhkiet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3h07811pag00942" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/anjia.json b/data/brands/anjia.json deleted file mode 100644 index ae037f7..0000000 --- a/data/brands/anjia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anjia", - "brand_id": "anjia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AJ-L33PQ08A1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - } - ] -} \ No newline at end of file diff --git a/data/brands/anjiel.json b/data/brands/anjiel.json deleted file mode 100644 index 5f97aab..0000000 --- a/data/brands/anjiel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anjiel", - "brand_id": "anjiel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-sd-sh13d" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/anjvision.json b/data/brands/anjvision.json deleted file mode 100644 index 356f784..0000000 --- a/data/brands/anjvision.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Anjvision", - "brand_id": "anjvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mc200c2", - "MC500L", - "MC-F40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/anker.json b/data/brands/anker.json deleted file mode 100644 index a2db192..0000000 --- a/data/brands/anker.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anker", - "brand_id": "anker", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live0" - } - ] -} \ No newline at end of file diff --git a/data/brands/anko-tech.json b/data/brands/anko-tech.json deleted file mode 100644 index d4fe02f..0000000 --- a/data/brands/anko-tech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anko Tech", - "brand_id": "anko-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc1220rm-02" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/anlapus.json b/data/brands/anlapus.json deleted file mode 100644 index f9b1993..0000000 --- a/data/brands/anlapus.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Anlapus", - "brand_id": "anlapus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FORDVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "model1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "model1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "model1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/annahme.json b/data/brands/annahme.json deleted file mode 100644 index 43b03e3..0000000 --- a/data/brands/annahme.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Annahme", - "brand_id": "annahme", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6012" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IN6012" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/annez.json b/data/brands/annez.json deleted file mode 100644 index 2a62ced..0000000 --- a/data/brands/annez.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Annez", - "brand_id": "annez", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]&channel=1&stream=0.sdp:" - } - ] -} \ No newline at end of file diff --git a/data/brands/anni-digital.json b/data/brands/anni-digital.json deleted file mode 100644 index 6bbc6ab..0000000 --- a/data/brands/anni-digital.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "brand": "Anni Digital", - "brand_id": "anni-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANNI-HL04CP03V", - "IP-001", - "IPC3J24P-I2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "fc3", - "fc5", - "IPC3F18P-I3", - "IPC5F19P2-I3-W", - "IPC5F1JMM-13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "k9604-w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/annke.json b/data/brands/annke.json deleted file mode 100644 index 5ee9ca1..0000000 --- a/data/brands/annke.json +++ /dev/null @@ -1,892 +0,0 @@ -{ - "brand": "Annke", - "brand_id": "annke", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=0", - "auth_required": true, - "notes": "Bubble Protocol - main stream (works with go2rtc bubble:// source)" - }, - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=1", - "auth_required": true, - "notes": "Bubble Protocol - sub stream (lower quality)" - }, - { - "models": [ - "cheap p-t", - "C1200", - "C500 (I51DL)", - "i51el", - "NCD8000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "1080p", - "141CS", - "171gp", - "i41fl" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "1080P", - "131m", - "141cs", - "141CS TJF", - "151dj", - "151DM", - "151DS", - "151EH", - "191BF", - "191BL", - "2MP", - "4MP BULLET", - "AC500", - "C1DSP", - "C500", - "c800", - "FCD600", - "FFMPEG H.264", - "H264", - "Hi3518E-IP", - "I51DL", - "I51DM", - "i51DS", - "I51DW", - "I51DX", - "I51EC", - "I51EG", - "I51EH", - "i61dq", - "I61DR", - "I61DU", - "i61fb", - "I91BF", - "I91BH", - "I91BL", - "I91DB", - "I91F", - "l21G", - "NC400 (I81HC)", - "NC800", - "NOVA S", - "NP41F1P", - "Other", - "OTHER 2", - "TURRET CAMERA", - "w300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "1080P", - "141CW", - "191BF", - "191BL", - "5mp", - "720p", - "Back Porch", - "c500", - "c800", - "C800-4k", - "DL81A", - "DL81A1t", - "DN41R", - "DN81R", - "dvr", - "DVR", - "FFMPEG OTHER", - "i21ae", - "i21G", - "I41G", - "I51DM", - "i51DS", - "I91BF", - "I91BL", - "l91BL", - "N44SU", - "NP41F1P", - "Other", - "POE", - "POEcustom", - "Turret Camera", - "Upper Side Yard", - "VIEW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "131v", - "2mp", - "2MP", - "720P", - "Apoo", - "DE41g", - "DL81A", - "DVR", - "H264", - "I21DE", - "I21G", - "I31V", - "i41ec", - "i71gd", - "K9504", - "K9604-W", - "N34WDB+I31DB", - "n441l", - "N44WBD1T", - "NVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "131V", - "141 fl", - "CES", - "i31", - "I31V", - "i41", - "I4iDG", - "JPG", - "l31v" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "131V", - "141CW", - "141gd", - "171gp", - "2MP", - "I21v", - "I23EB", - "i41fl", - "IPC", - "l31v" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "141CS", - "151DE", - "151DM", - "161fc", - "181HD", - "191BF", - "191BM", - "191DB", - "AC500", - "ANNKE 4MP PoE", - "C500", - "c800", - "CZ400", - "FCD600", - "I51DF", - "I51DX", - "I61BK", - "I61DS", - "I81HB", - "I81HD", - "i91be", - "I91BF", - "I91BL", - "I91BN", - "I91BQ", - "I91DH", - "l61fc", - "NC400 (I81HC)", - "Other", - "P01", - "PO1", - "POE", - "sumo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1" - }, - { - "models": [ - "141CW", - "AK-N48PIA0-68DT", - "de81g", - "DL81A", - "DVR", - "POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "141CW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "141gd", - "151DE", - "I51DE", - "I51DF", - "I51DL", - "i51dm", - "i91bn", - "I91DH", - "NC400 (I81HC)", - "NVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "151", - "151de", - "151DM", - "4k POE Turret", - "4K Turret", - "4MP BULLET", - "C800", - "CZ400", - "I19BN", - "I51DM", - "I51DN", - "I51ds", - "I51ES", - "I61DR", - "I91BF", - "I91BL", - "I91BM", - "I91BN", - "I91dn", - "NOVA S", - "Other", - "p10", - "POE", - "TURRET CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "151CK", - "151DM", - "C800-4k", - "I51CK", - "I51DX", - "Other", - "WZ500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/sub/av_stream" - }, - { - "models": [ - "151CK", - "191BL", - "DW81KD", - "I51DN", - "I51EH", - "I91DS", - "NOVA S", - "Turret Camera", - "WS500", - "WZ500", - "WZ504" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/main/av_stream" - }, - { - "models": [ - "151DM", - "I91BQ", - "l51DS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2" - }, - { - "models": [ - "151DQ", - "191BV", - "i51dm", - "NVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102/?transportmode=unicast.sdp" - }, - { - "models": [ - "151DQ", - "191BV", - "i51dm", - "I91BN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101/?transportmode=unicast.sdp" - }, - { - "models": [ - "191BE", - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[USERNAME]_stream=0.sdp" - }, - { - "models": [ - "191bk", - "191BL", - "c500", - "C800-4K", - "CZ400", - "I19BM", - "I51DS", - "I91BF", - "I91BQ", - "isb92", - "l51DL", - "l91BL", - "l91bm", - "l91bn", - "Pano360 Pro", - "Turret", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "191BL", - "I91DS", - "Pano360 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif2" - }, - { - "models": [ - "2MP", - "i21an" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "4k Turret", - "c500", - "C800", - "I91BN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam2/onvif-h264" - }, - { - "models": [ - "720P", - "DN61R", - "DN81R", - "DVR", - "Other", - "View" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/501" - }, - { - "models": [ - "ACZ800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H265/ch1/main/av_stream" - }, - { - "models": [ - "ACZ800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H265/ch1/sub/av_stream" - }, - { - "models": [ - "c800", - "I91DS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_Chayse01April=tlJwpbo6_channel=1_stream=1.sdp" - }, - { - "models": [ - "c800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]" - }, - { - "models": [ - "C800-4k", - "FCD600", - "I81EM", - "I91BL", - "I91BN", - "NCPT500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Dan", - "I41GD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "DN81R", - "DVR", - "H264", - "Other", - "View" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/401" - }, - { - "models": [ - "dt81dx" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "PSIA/Streaming/channels/[CHANNEL]" - }, - { - "models": [ - "dvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=4&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "h264", - "NP41F1P" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Hi3518E-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=&stream=.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "I21eb" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "I51DL", - "NC800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "I51DL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265_stream" - }, - { - "models": [ - "I51DM", - "I91BN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "I51DS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264/0/sub/av_stream" - }, - { - "models": [ - "I51DS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264/0/main/av_stream" - }, - { - "models": [ - "I51EG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=2.sdp" - }, - { - "models": [ - "I61G" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "i91bf" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - }, - { - "models": [ - "I91BN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "I91DQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "K8208-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=" - }, - { - "models": [ - "N48PAW" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "NCD800", - "WZ500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?" - }, - { - "models": [ - "POE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "vc500" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264/ch1/main/av_stream" - }, - { - "models": [ - "141CS", - "151DB", - "151de", - "151dj", - "151DM", - "191BS", - "2MP", - "4MP Bullet", - "4MP DOME", - "720P", - "AC500", - "AK-N48PIA0-68DT", - "c500", - "C800", - "DE81GB", - "DN41R", - "DN81R", - "DVR", - "DW81KD", - "i15dx", - "i51dm", - "I51DS", - "I51DX", - "I61BK", - "I61DR", - "I61FC", - "I61G", - "I91BD", - "I91BF", - "I91BM", - "I91F", - "l51DM", - "N481Y", - "N48PI", - "NC400", - "NC800", - "NCPT500", - "Other", - "P01", - "POE", - "VIEW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "191BS", - "AC500", - "c800", - "C800-4k", - "I51DX", - "I91BF", - "NC800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "191df" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/102" - }, - { - "models": [ - "191df" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/201" - } - ] -} \ No newline at end of file diff --git a/data/brands/anno-zero-ltd.json b/data/brands/anno-zero-ltd.json deleted file mode 100644 index 27b059d..0000000 --- a/data/brands/anno-zero-ltd.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anno Zero Ltd", - "brand_id": "anno-zero-ltd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Entrance" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/anpviz.json b/data/brands/anpviz.json deleted file mode 100644 index df09ea1..0000000 --- a/data/brands/anpviz.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "brand": "Anpviz", - "brand_id": "anpviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "250", - "3MP", - "5MP", - "IPC-B880w-D", - "IPC-D250W-S", - "IPC-D350", - "IPC-D383WD-S", - "IPC-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "3MP", - "5MP", - "ipc-b850w-ds", - "ipc-d3240w-s", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "4mp", - "5MP", - "AZ-IPZW30205WFS", - "BulletCam", - "DW77", - "IPC3442W28", - "IPC-D308WD-S", - "IPC-D383WD-S", - "IPC-D7451EDS-4X", - "Other", - "PTZIP204WX4IR", - "WP-244W", - "wp-245w-eu", - "WP-25505W-US" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "4MP", - "DW77", - "ESNP104-IR/4X", - "IPC-D383WD-S", - "Other", - "PTZIP204WX4IR", - "WP-245-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/12" - }, - { - "models": [ - "5MP" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/" - }, - { - "models": [ - "5MP", - "AZ-IPZ45520-EU", - "Dome", - "ipc-240", - "IPC-250B-S", - "IPC-B850W", - "IPC-D2083WD-S", - "ipc-d230w", - "ipc-d2330w", - "ipc-d250g", - "IPC-D250WS", - "IPC-D260W-s", - "IPC-D3150G-S", - "IPC-D350W-S", - "IPC-D360W-ST", - "IPC-D383WD-S", - "MC500L", - "MC500L5", - "Other", - "PTZIP204WX4IR", - "PTZIP30A60WD-SA-5X(A)", - "USeries", - "YMF10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "5MP", - "IPC-B8740w-s", - "IPC-D230W", - "IPC-D250G", - "IPC-D250G-S", - "Other", - "PTZ-2504X-I2", - "YM800sv2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream1" - }, - { - "models": [ - "AT500PE20", - "AZ-IPZ45520-EU", - "IPC-D250B-S", - "IPC-D250W-S", - "IPC-D3240W-S", - "IPC-D383WD-S", - "Iums400", - "PTZIP204WX4IR", - "PTZIP45520E-S-EU", - "YMF52_NM223N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "D240W", - "H420W", - "IPC-B852VU-S", - "IPC-D250W", - "IPC-D3240W-S", - "IPC-D360W-ST" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "IPC-250B-S", - "IPC-D3150G-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "IPC-250B-S", - "IPC-B852VU-S", - "IPC-D3240W-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "ipc-b2t86pd-sa", - "IPC-B8740W-S", - "IPC-D3A43W-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC-B852VU-S", - "IPC-D340W", - "IPC-D383WD-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "IPC-B863WD-S", - "ipc-d230w", - "IPC-D240W-S", - "IPC-D250W-S", - "IPC-D280W-S", - "PTZIP204", - "PTZIP204WX4IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "IPC-D250W-S", - "IPC-D383WD-S", - "U Series", - "UNK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264?username=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IPC-D250W-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264cif?username=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IPC-D363WD-SA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "PTZIP204WX4IR", - "YML 12D2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/anran.json b/data/brands/anran.json deleted file mode 100644 index 7501844..0000000 --- a/data/brands/anran.json +++ /dev/null @@ -1,557 +0,0 @@ -{ - "brand": "Anran", - "brand_id": "anran", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "1080P", - "1080P PTZ Outdoor D/N Color IR Zoom 3-10mm Network CCTV surveillance IP Camera", - "1080P PTZ OUTDOOR D/N COLOR IR ZOOM 3-10MM NETWORK CCTV SURVEILLANCE IP CAMERA", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "211", - "24 NR-WIFI", - "24CW", - "24NB", - "24NB-IP", - "24NB-IP-POE", - "24NB-POE", - "24nr", - "24NW-IP", - "24NW-POE", - "24PZ", - "254", - "264", - "2mp", - "720p", - "960H", - "ABQ-A1-200W", - "AGP", - "A-HDPT06W-IP2", - "AN-24NR-WIFI", - "AnranWifi", - "AnranWired", - "an-vd123", - "ap2br", - "AP2GA-IP", - "AP3WA-1P", - "AP-PTO22", - "AR 408-ip", - "AR VDB221-IP", - "AR_VDB221_WIFI", - "AR-24NB", - "AR-24NB-IP", - "AR-24NB-POE", - "AR-24NR", - "AR-24NR-WIFI", - "AR-408GB-IP", - "AR-408GW", - "AR-408GW-Wifi-NVT", - "AR-AP2GA", - "AR-AP2PA-WIFI", - "AR-DVB221-POE", - "AR-DW105-IP", - "ar-hk02w-ip", - "AR-N4PW-IP", - "ar-pdt22", - "AR-PG02_POE", - "ar-ptd22", - "AR-PTD22-POE", - "AR-VD123-POE", - "AR-VD123-POE-IP2", - "ar-vd123-wifi", - "AR-VDB221-POE", - "AR-VDB221-WiFi", - "AR-VGB101-WIFI", - "AR-VGW721-POE", - "bullet", - "Bullet", - "C754R", - "chris ptz", - "Dome", - "GW-G1S", - "H.264", - "h256", - "hd ip wired", - "HK02W-ip", - "HK02W-WIFI", - "IP 2MP", - "k8208", - "Lekkas", - "mad", - "Mini wifi", - "N4PW-IP", - "NVT", - "Other", - "Other.", - "PTZ", - "savy", - "S-VGB721-IP2.0", - "VD123B-wifi", - "VGB101-POE", - "VGB101-WIFI", - "VGB10-WIFI", - "W610-DW18", - "wifi_1080p", - "xxxxx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080P", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "24NR", - "24NR-WIFI", - "254", - "264", - "720P", - "an-nr24-wifi", - "AR-24NR-WIFI", - "AR-36WB WIFI", - "AR-K04W2HC", - "ar-kd4w13", - "AR-N48", - "H.264", - "H.264 WIFI OUTDOOR", - "H256", - "ip66", - "NVT", - "Other", - "SWC1201WT4", - "swc1201wt4 WIFI OUTDOOR", - "w307-wifi", - "wifi", - "WIFI_1080P", - "Wireless" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1080P", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "24NW-IP", - "254", - "5523-W", - "720P", - "AR-408GB-IP", - "AR-408GB-WIFI", - "AR-N13W0-P303", - "ar-vd123-wifi", - "AR-VGB101-WIFI", - "AR-W602", - "ar-w606", - "AR-W606-WIFI", - "B01", - "B04", - "ipc", - "Other", - "W602", - "WiFi" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "1080P", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "AnranWifi", - "AR-03NB-HX", - "AR-24", - "ar-24w", - "AR-36WB-WIFI", - "AR-DW18", - "AR-HX36", - "ar-n20w-hx36", - "AR-W602", - "AR-W610", - "B602", - "C6F0SoZ3N0PcL2", - "C9F0SgZ3N0PbL0", - "c9fosgz3n0pbl0", - "IPCAM3", - "KS3002MW", - "Other", - "ptz", - "w602", - "W610-DW18", - "w630", - "WIRELESS", - "XK888" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080P", - "1080P PTZ OUTDOOR D/N COLOR IR ZOOM 3-10MM NETWORK CCTV SURVEILLANCE IP CAMERA", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "ar-24w", - "AR-80F", - "ar92f", - "ar-hx38", - "AR-W602", - "AR-W610", - "AR-W610-WIFI", - "ar-w620", - "Other", - "PORCH PTZ1080P", - "PTZ1080P", - "WIFI_1080P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "24NB-IP", - "24NW-IP", - "24NW-POE", - "AP2BA-IP20", - "AP2GA-IP", - "AP3BA-IP", - "AR205", - "AR-24NB-IP", - "AR-408GW", - "AR-408GW-WIFI-NVT", - "H.264", - "IP 2MP", - "m24 1p", - "Other", - "p3max", - "S-VGB721-IP2.0", - "VGB101-WIFI", - "vgw781-ip" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "1080P", - "24NB-IP", - "24NW-IP", - "ABQ-A1-200W", - "AnranWired", - "AP2GA-IP", - "AR-408GB-IP", - "AR-408GW", - "AR-VDB221-WiFi", - "AR-VGB101-WIFI", - "D-C7342", - "D-C753R", - "H.264", - "H.264 WIFI OUTDOOR", - "HK02W-WIFI", - "Other", - "pool", - "vd122-1p", - "VGB10-WIFI", - "vgw781-ip" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "1080P PTZ OUTDOOR D/N COLOR IR ZOOM 3-10MM NETWORK CCTV SURVEILLANCE IP CAMERA", - "AR_VDB221_WIFI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "1080P PTZ OUTDOOR D/N COLOR IR ZOOM 3-10MM NETWORK CCTV SURVEILLANCE IP CAMERA", - "ip180", - "Other", - "WIFI_1080P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "5523-W6-Q", - "AR-W664", - "B01", - "K8208-3WS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/ch0_0.264" - }, - { - "models": [ - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "5523-W", - "B04", - "MINI WIFI", - "Other", - "XK-67" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "24nb", - "24NR-WIFI", - "24NW-IP", - "AR VDB221-WIFY", - "AR-24NW-POE", - "AR-N10WA-24NR", - "AR-PTZ22-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "24NB-IP", - "24NW-IP", - "ANRANWIFI", - "AR-IP180", - "AR-VD123-WIFI", - "ip180", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "24NW-IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "5323-W-Q" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "5523-W6-Q" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8088, - "url": "/ch0_1.264" - }, - { - "models": [ - "5MP", - "720P", - "980p", - "AR-B801", - "ar-vd123-wifi", - "B01", - "doma" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ANRAN 5MP 1940p" - ], - "type": "JPEG", - "protocol": "http", - "port": 8119, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "AR-24NB-IP" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "AR-C735" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "ar-vd123-wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[PASSWORD]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "AR-VDB221-WiFi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "AR-VDB221-WiFi", - "N01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AR-W602" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8000, - "url": "/onvif/device_service" - }, - { - "models": [ - "AR-W602" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=101.sdp?" - }, - { - "models": [ - "B01", - "ZS-GQ2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "H.264", - "ip180" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "H.264 WIFI OUTDOOR" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "R5108-5H", - "v4.02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "wifi_1080p" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/anscam.json b/data/brands/anscam.json deleted file mode 100644 index 96966fc..0000000 --- a/data/brands/anscam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anscam", - "brand_id": "anscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "waterproof" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ansice.json b/data/brands/ansice.json deleted file mode 100644 index 01aa5c7..0000000 --- a/data/brands/ansice.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Ansice", - "brand_id": "ansice", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS-2CD3T20D-I3", - "H.264", - "IPC-NT98562_80N40_S38", - "MI-IP19" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ansjer.json b/data/brands/ansjer.json deleted file mode 100644 index 259a505..0000000 --- a/data/brands/ansjer.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Ansjer", - "brand_id": "ansjer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1nb-2622mw", - "Other", - "ZG2622MW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/anson.json b/data/brands/anson.json deleted file mode 100644 index 087b2d2..0000000 --- a/data/brands/anson.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Anson", - "brand_id": "anson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ax-200dbi-ip", - "Ax-200PID-IP", - "AX-4201IPW-B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "AX-200PID-IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "AX-A005" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/channel=0;stream=1;user=[USERNAME];pass=[PASSWORD];" - } - ] -} \ No newline at end of file diff --git a/data/brands/anspo.json b/data/brands/anspo.json deleted file mode 100644 index e2b4418..0000000 --- a/data/brands/anspo.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "brand": "Anspo", - "brand_id": "anspo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ASP 8836-200Bulb", - "ASP-32130TPOE", - "ASP-8404XVR-1080N", - "ASP-IP70130", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ASP-8004XVR-1080N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ASP-8016XVR", - "ASP-82200P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/Streaming/2" - }, - { - "models": [ - "ASP-82200P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/antifurto365.json b/data/brands/antifurto365.json deleted file mode 100644 index 86619b9..0000000 --- a/data/brands/antifurto365.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Antifurto365", - "brand_id": "antifurto365", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/antik-smartcam.json b/data/brands/antik-smartcam.json deleted file mode 100644 index fb0a976..0000000 --- a/data/brands/antik-smartcam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Antik Smartcam", - "brand_id": "antik-smartcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "antik smartcam sci10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "SCI 55" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "SCI 55" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/antkr.json b/data/brands/antkr.json deleted file mode 100644 index ba88cac..0000000 --- a/data/brands/antkr.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Antkr", - "brand_id": "antkr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AMA-2500", - "AMZ-1100", - "xgen" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "AMA-2500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/antrica.json b/data/brands/antrica.json deleted file mode 100644 index f78c0c5..0000000 --- a/data/brands/antrica.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Antrica", - "brand_id": "antrica", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CMBC MIMIC 4", - "Encoder" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/anv.json b/data/brands/anv.json deleted file mode 100644 index 824d801..0000000 --- a/data/brands/anv.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "brand": "Anv", - "brand_id": "anv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "00000", - "china", - "ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "101", - "China 1.0mp", - "GS-220W", - "gs-w220b", - "onvif", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "1mpa", - "200A", - "Bullet960", - "CHINA 1.0MP", - "China_Model", - "GS200A", - "IPC-8016B", - "Other", - "Voordeur" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ANX", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ANX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "CHINA 1.0MP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/anvan.json b/data/brands/anvan.json deleted file mode 100644 index a561b55..0000000 --- a/data/brands/anvan.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Anvan", - "brand_id": "anvan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR-PTZ22-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/anxinshi.json b/data/brands/anxinshi.json deleted file mode 100644 index 00769ab..0000000 --- a/data/brands/anxinshi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anxinshi", - "brand_id": "anxinshi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPD-D53M02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/anyka.json b/data/brands/anyka.json deleted file mode 100644 index 9009cda..0000000 --- a/data/brands/anyka.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Anyka", - "brand_id": "anyka", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/anykeeper.json b/data/brands/anykeeper.json deleted file mode 100644 index d2b7d84..0000000 --- a/data/brands/anykeeper.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Anykeeper", - "brand_id": "anykeeper", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK-4030C" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "ak-4100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/anysun.json b/data/brands/anysun.json deleted file mode 100644 index c9fd59b..0000000 --- a/data/brands/anysun.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Anysun", - "brand_id": "anysun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF", - "TOP-201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ONVIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/aobo.json b/data/brands/aobo.json deleted file mode 100644 index a8a9f47..0000000 --- a/data/brands/aobo.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Aobo", - "brand_id": "aobo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h010", - "HC003", - "SpyCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HC003" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HC003" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Q18 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/8062D93D576F746EFAD6668A629BF82D*0" - } - ] -} \ No newline at end of file diff --git a/data/brands/aochan.json b/data/brands/aochan.json deleted file mode 100644 index 16b150c..0000000 --- a/data/brands/aochan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aochan", - "brand_id": "aochan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C7824WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/aomg.json b/data/brands/aomg.json deleted file mode 100644 index 3133297..0000000 --- a/data/brands/aomg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aomg", - "brand_id": "aomg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CBSKY FI-831" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/aoshi.json b/data/brands/aoshi.json deleted file mode 100644 index 78f461d..0000000 --- a/data/brands/aoshi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aoshi", - "brand_id": "aoshi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TE110FD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/aote.json b/data/brands/aote.json deleted file mode 100644 index eeb0f8e..0000000 --- a/data/brands/aote.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Aote", - "brand_id": "aote", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "1012", - "Josh", - "Other", - "S898bvE", - "W1012vG-B-POE", - "W5999bG", - "W5999W-B", - "W5999W-POE", - "W6409G", - "W6409G-B", - "W898bG-B", - "W898bG-B-POE", - "W898bvG-B-POE", - "W898G 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "Other", - "W3200", - "W889G-B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "W514vG-B", - "W5889G-B", - "W898bvG-B-POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "TEK 1.0MP/1.0 Megapixel HD 1280X720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "W898bvG-B-POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "W898bvG-B-POE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/aotetek.json b/data/brands/aotetek.json deleted file mode 100644 index 7d27174..0000000 --- a/data/brands/aotetek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aotetek", - "brand_id": "aotetek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720pBullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/aottom.json b/data/brands/aottom.json deleted file mode 100644 index 68cfb4a..0000000 --- a/data/brands/aottom.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Aottom", - "brand_id": "aottom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD30M14JAJ-WIFI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "super4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/ap-tech.json b/data/brands/ap-tech.json deleted file mode 100644 index 7982087..0000000 --- a/data/brands/ap-tech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ap-tech", - "brand_id": "ap-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AP-D100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_stream" - }, - { - "models": [ - "AP-D100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/apc.json b/data/brands/apc.json deleted file mode 100644 index 480931e..0000000 --- a/data/brands/apc.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "brand": "Apc", - "brand_id": "apc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "NBRK0450", - "netbotz", - "Netbotz 355", - "NETBOTZ455" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/stream_[CHANNEL].jpg" - }, - { - "models": [ - "netbotz", - "Netbotz 355", - "netbotz1", - "netbotz455" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/webcam.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/apeman.json b/data/brands/apeman.json deleted file mode 100644 index 1b5e661..0000000 --- a/data/brands/apeman.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Apeman", - "brand_id": "apeman", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IB81" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "ID71" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "ID71", - "IP360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/aper.json b/data/brands/aper.json deleted file mode 100644 index 39e54fb..0000000 --- a/data/brands/aper.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Aper", - "brand_id": "aper", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dcs5013", - "dsc5013", - "NC-D5013" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "i70" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "I70" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "nc e3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/apexis.json b/data/brands/apexis.json deleted file mode 100644 index e55ea8d..0000000 --- a/data/brands/apexis.json +++ /dev/null @@ -1,746 +0,0 @@ -{ - "brand": "Apexis", - "brand_id": "apexis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1200", - "3932" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "1200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "1200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=&resolution=32&rate=0" - }, - { - "models": [ - "1200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=&resolution=32" - }, - { - "models": [ - "213 PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "215 ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp" - }, - { - "models": [ - "216 FD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "910hd", - "AH9063CW", - "APM-H803", - "APM-H803-WS", - "APM-H804-WS", - "APM-J011", - "APM-J803", - "H Series", - "H602", - "H804", - "HD 9063", - "HP602", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AH9063CW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - }, - { - "models": [ - "AH9063CW", - "apm- j803- ws", - "APM-H803", - "APM-H803-WS", - "APM-H804-WS", - "APM-J011", - "APM-J0233", - "APM-J8015-WS", - "H Series", - "HD 9063", - "J Series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AL DVR", - "APEXIS APM-J011 WS", - "apexis J series", - "apm- j803- ws", - "APM-H803-WS", - "APM-H804-WS", - "APM-J011", - "APM-J011-WS", - "APM-J012-WS", - "APM-J0233", - "APM-J0233-IR", - "APM-J901-z-ws", - "APM-Jo11-ws", - "IP Bell", - "J Series", - "j233", - "jo 233 ws", - "jo233", - "Other", - "Other IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AL DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg.cgi?refresh=0&channel=[CHANNEL]&id=[USERNAME]&pass=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]&oldbrowser=1" - }, - { - "models": [ - "apexis apm-j011 ws", - "APM-401-WS", - "APM-602", - "APM-J011", - "APM-J011-WS", - "APM-J012", - "APM-J012-WS", - "APM-J012-WS2", - "APM-J0233", - "APM-J0233-IR", - "APM-J803", - "APM-J901-z-ws", - "j", - "J Series", - "J602", - "J901", - "J902", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APEXIS APM-J011 WS", - "apexis apm-j8015", - "apexis J series", - "APEXIS J SERIES", - "Apexis: APM-JP6235-WS", - "apm- j0011- ws", - "APM- J0011- WS", - "apm- j803- ws", - "Apm j901 z Ws", - "APM-H803-WS", - "APM-H804-WS", - "APM-J001", - "APM-J011", - "APM-J011-WS", - "APM-J012", - "APM-J012-WS", - "APM-J012-WS2", - "APM-J02233", - "apm-j0233", - "APM-J0233", - "APM-J0233 WIFI", - "APM-J0233-IR", - "APM-J602-WS-IR", - "APM-J802", - "APM-J803", - "APM-J901", - "APM-J901-z-ws", - "APM-J902", - "apm-j902-z-ws", - "apm-j903-z-ir", - "APXIS SERIES", - "domIP", - "H Series", - "H804", - "J Series", - "J8015", - "J901", - "J902", - "JP4045", - "JSERIES", - "ner Yard", - "Other", - "Other Ip camera", - "Other IP CAMERA", - "OTHER IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "APEXIS APM-J011 WS", - "apexis J series", - "APM J901 Z WS", - "APM-J011", - "APM-J012-WS", - "APM-J0233-IR", - "Other", - "Other IP CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "apexis J series", - "APM-J012-WS", - "J602", - "Other", - "Other IP CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "apexis J series", - "APM-H804-WS", - "APM-J011", - "APM-J012", - "APM-J012-WS", - "APM-J901-Z-WS", - "APM-JP6235-WS", - "E8ABFA19537A", - "J Series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "APEXIS J SERIES", - "APM-H804-WS", - "APM-J011", - "APM-J012", - "APM-J012-WS", - "APM-J0233", - "APM-J0233-IR", - "APM-J901-Z-WS", - "apm-jo11", - "APM-JP6235-WS", - "J011", - "J602", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "APEXIS J SERIES", - "Apexis1", - "apm- j0011- ws", - "APM-H803-WS", - "APM-H804-WS", - "APM-J011", - "APM-J011-ws", - "APM-J012", - "apm-j802", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "APEXIS J SERIES", - "APM-J011" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APEXIS J SERIES", - "APM-J011", - "APM-J011-Richard", - "APM-J011-WS", - "APM-J012", - "APM-J0233" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "apm- j0011- ws", - "APM- J0011- WS", - "APM-H804-WS", - "APM-J011", - "apm-j02233", - "APM-J0233", - "APM-J8015-WS", - "APM-J802", - "APM-JP6235-WS", - "H Series", - "H SERIES", - "J SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "APM- J0011- WS", - "APM-J011", - "APM-J011-WS", - "APM-J0233", - "ID002A", - "J SERIES", - "Other", - "OTHER IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-602", - "APM-H803-WS", - "APM-H804-WS", - "APM-HP602", - "APM-HP602-MPC-WS", - "APM-J011", - "APM-J901-z-ws", - "APM-jp8015ws", - "H Series", - "H602", - "H804", - "Other", - "Other Ip camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-H803", - "Other Ip camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "APM-H803-MPC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "APM-H803-MPC", - "APM-HP602-MPC-WS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-H803-WS", - "APM-H804-WS", - "J902", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "APM-H804-WS", - "APM-J011", - "APM-J012", - "APM-J0233", - "APM-J0233 WIFI", - "APM-J803", - "APM-J901", - "J Series", - "J602", - "J901", - "Other", - "Other Ip camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "APM-H804-WS", - "APM-J011", - "APM-J011-ws", - "APM-J012", - "APM-J012-WS", - "APM-J0233", - "APM-J0233-IR", - "apm-j903-z-ir", - "J Series", - "J012", - "J602", - "J901", - "j901(door)", - "J902", - "j902ws", - "Mailstep", - "Other", - "Other Ip camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "APM-H804-WS", - "APM-HP804-MPC-WS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "APM-H804-WS", - "J Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-H804-WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "APM-H804-WS", - "J Series" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "APM-J011", - "APM-J012 WS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "APM-J011", - "APM-J012-WS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "APM-J011" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fullsize.jpg?camera=[CHANNEL]&clock=on&motion=0" - }, - { - "models": [ - "APM-J011", - "APM-J011-WS", - "APM-J012", - "APM-J012-WS", - "APM-J601-IR", - "APM-JO11", - "C-7816WIP", - "j101", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-J012", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "APM-J012", - "apm-j012 ws", - "APM-J012-WS", - "APM-J8015-WS", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-J012", - "APM-J012-WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-J0233 WIFI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 132, - "url": "/videostream.cgi" - }, - { - "models": [ - "apm-j1018", - "APM-J802-WS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "APM-J802-WS", - "ltd" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "dealextreme" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "J SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "j012", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "onix" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other IP CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Q6032-E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/apix.json b/data/brands/apix.json deleted file mode 100644 index c033be9..0000000 --- a/data/brands/apix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Apix", - "brand_id": "apix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/apklink.json b/data/brands/apklink.json deleted file mode 100644 index 88f2e7a..0000000 --- a/data/brands/apklink.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "brand": "Apklink", - "brand_id": "apklink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "37738236", - "7838", - "Atendimento", - "AVACom", - "BT464", - "C7812WIP", - "C7815WIP", - "C7837WIP", - "C7838WIP", - "easycam", - "ESCAM QF100", - "HI3518E", - "In1", - "IP-1", - "JK-C7823W", - "Other", - "PT 737", - "QF100", - "QF300", - "SP-TM01EWP", - "StarBase", - "StarCam", - "SUNLUXY", - "T7838WIP", - "Vstarcam", - "Vstarcam C7815IP", - "WP-711", - "wp-717" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "C7637WIP", - "Camspot 3.1", - "H264_HOMENET_CAM", - "jth1", - "SUNLUXY_MTS", - "VstarCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/udp/av0_0" - }, - { - "models": [ - "C7812WIP", - "EASYCAM", - "ESCAM", - "ESCAM QF100", - "VSTARCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "C7835WIP", - "C7837WIP", - "C7838WIP", - "Camspot 3.1", - "E6813", - "ESCAM", - "Other", - "QF100", - "vstarcam c7837wip", - "wintech" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_1" - }, - { - "models": [ - "EASYCAM", - "WINTECH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ESCAM QF100", - "STARCAM", - "VSTARCAM", - "VSTARCAM C7815IP", - "VSTARCAM C7816IP", - "VSTARCAM C7837WIP", - "VSTJ513084CSLEY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "VSTARCAM C7837WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "VSTARCAM C7837WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/apleye.json b/data/brands/apleye.json deleted file mode 100644 index cf707b5..0000000 --- a/data/brands/apleye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Apleye", - "brand_id": "apleye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HC414" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/apm.json b/data/brands/apm.json deleted file mode 100644 index a0d5560..0000000 --- a/data/brands/apm.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Apm", - "brand_id": "apm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AAL-9684" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/apn-vision-ltd..json b/data/brands/apn-vision-ltd..json deleted file mode 100644 index e5e2ac7..0000000 --- a/data/brands/apn-vision-ltd..json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Apn Vision Ltd.", - "brand_id": "apn-vision-ltd.", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QC16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/apogee.json b/data/brands/apogee.json deleted file mode 100644 index 0be144f..0000000 --- a/data/brands/apogee.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Apogee", - "brand_id": "apogee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TA-420B200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "TA-420B200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aposonic.json b/data/brands/aposonic.json deleted file mode 100644 index bb370d5..0000000 --- a/data/brands/aposonic.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Aposonic", - "brand_id": "aposonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A H.264 DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "A H.264 DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "A H.264 DVR", - "A H.264 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "A-BR18B8-C500", - "A-S0401R1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "A-S0401R1", - "H.264 DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi?Video=[CHANNEL]" - }, - { - "models": [ - "A-S0401R23" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/stream_[CHANNEL].jpg" - }, - { - "models": [ - "H.264 DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/app-cam-35.json b/data/brands/app-cam-35.json deleted file mode 100644 index 2f636d7..0000000 --- a/data/brands/app-cam-35.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "App Cam 35", - "brand_id": "app-cam-35", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0035D6I01653" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/apple.json b/data/brands/apple.json deleted file mode 100644 index 3c65efc..0000000 --- a/data/brands/apple.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "brand": "Apple", - "brand_id": "apple", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3GS", - "ipad", - "iPad 2", - "iPad Air", - "iphone 4", - "iPhone 4 CDMA", - "iPhone 4S", - "iphone 5", - "iPhone 5S", - "iphone 6", - "Iphone4", - "iPod", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?codec=mjpeg&camera=[CHANNEL]" - }, - { - "models": [ - "3GS", - "Iphone", - "IPHONE 4", - "IPHONE 6", - "IPHONE 6 PLUS", - "Iphone4", - "iphone6", - "iPod" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&fps=5&quality=75&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "iipad", - "ipad", - "iphone 5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live" - }, - { - "models": [ - "iipas", - "iphone 6" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/video" - }, - { - "models": [ - "ipad" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/" - }, - { - "models": [ - "IPAD 2", - "iphone", - "iphone1", - "IPHONE6", - "iPhone7" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[USERNAME]&quality=75&fps=5&resolution=[PASSWORD]" - }, - { - "models": [ - "Ipad Air", - "iPhone 4", - "IPHONE 4 CDMA", - "iPhone 4S", - "iPhone 5", - "iPhone 6 Plus", - "iPhone3", - "IPHONE6", - "IPOD", - "macbook", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "IP-CAM-APP", - "iphone 7", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf" - }, - { - "models": [ - "iphone", - "iphone 4", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "iPhone", - "iPhone 4", - "IPHONE 4S", - "iPhone 6", - "iPhone SE", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "iphone 4", - "iphone se" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/live?codec=mjpeg&camera=0" - }, - { - "models": [ - "IPHONE 4", - "iphone3", - "Ipod" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image.jpg?size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "iPhone 4S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "iphone 5", - "IPHONE 5S", - "iPhone 8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IPHONE 5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.mjpg" - }, - { - "models": [ - "IPHONE 5S", - "Sony" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "iphone 6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/applesonic.json b/data/brands/applesonic.json deleted file mode 100644 index fddb737..0000000 --- a/data/brands/applesonic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Applesonic", - "brand_id": "applesonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4channel" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/applink.json b/data/brands/applink.json deleted file mode 100644 index 0f5d75c..0000000 --- a/data/brands/applink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Applink", - "brand_id": "applink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "V380" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/appo.json b/data/brands/appo.json deleted file mode 100644 index b9b41ab..0000000 --- a/data/brands/appo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Appo", - "brand_id": "appo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "V380s" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/appro.json b/data/brands/appro.json deleted file mode 100644 index 0a52d18..0000000 --- a/data/brands/appro.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "brand": "Appro", - "brand_id": "appro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7228", - "DVR-3016", - "LC_7226", - "Other", - "VS Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "DVR-3016" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "api.htm?op.liveimage=1" - }, - { - "models": [ - "LC_7226" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "LC_7226", - "lc-7226", - "Other", - "VS Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "lc7211wb", - "lc-7226", - "LC-74xx", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "LC-74xx" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/stream.cgi?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/approx.json b/data/brands/approx.json deleted file mode 100644 index 2035954..0000000 --- a/data/brands/approx.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "brand": "Approx", - "brand_id": "approx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "APPi", - "APPIP002", - "APPIP01W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APPI01P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "APPI01P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "APPI01P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "APPI01P2P", - "APPIP02P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "APPIP002", - "APPIP01WV4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "APPIP002", - "ip002" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "appIP01P2P", - "APPIP01WV4", - "APPIP03P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "appIP01P2P", - "VSTB224232GDWGU" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APPIP02P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10552, - "url": "/tcp/av0_0" - }, - { - "models": [ - "APPIP400HDPRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "LC-7226" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - } - ] -} \ No newline at end of file diff --git a/data/brands/aprica.json b/data/brands/aprica.json deleted file mode 100644 index 76eea1a..0000000 --- a/data/brands/aprica.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aprica", - "brand_id": "aprica", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/aprox.json b/data/brands/aprox.json deleted file mode 100644 index 2b25cf7..0000000 --- a/data/brands/aprox.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aprox", - "brand_id": "aprox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/apti.json b/data/brands/apti.json deleted file mode 100644 index 650918b..0000000 --- a/data/brands/apti.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "brand": "Apti", - "brand_id": "apti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "13v2-36", - "14C2-36W", - "27C4", - "APTI-14V3-2812W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "14-C2", - "14C6-2812", - "24C6-2812W", - "304C2-23WP", - "APTI-24V2-36W", - "APTI-24V-2812", - "apti-301d2-36wp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "14C2-36W", - "27C4", - "RF42MA-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "14C2-36W", - "27C4", - "27C4-2812W", - "2KP6-2812", - "APTI-14V3-2812W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "2KP6-2812" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "304C2-23WP", - "304C2-28WP", - "APTI-54C6-2812P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/aptina.json b/data/brands/aptina.json deleted file mode 100644 index 3e978c2..0000000 --- a/data/brands/aptina.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Aptina", - "brand_id": "aptina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9P006" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "9P006" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "ARR0331", - "MT9M034" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "ARR0331" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "GXV3662HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10888, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/aqara.json b/data/brands/aqara.json deleted file mode 100644 index 9395cdf..0000000 --- a/data/brands/aqara.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Aqara", - "brand_id": "aqara", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Doorbell G4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/360p" - }, - { - "models": [ - "Doorbell G4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1080p" - }, - { - "models": [ - "G5 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1520p" - } - ] -} \ No newline at end of file diff --git a/data/brands/aqua.json b/data/brands/aqua.json deleted file mode 100644 index fd2d951..0000000 --- a/data/brands/aqua.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aqua", - "brand_id": "aqua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/aquila.json b/data/brands/aquila.json deleted file mode 100644 index 94ed48e..0000000 --- a/data/brands/aquila.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Aquila", - "brand_id": "aquila", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AV-IPE03", - "AV-IPE04" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FIX HD720" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Vizion" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Vizion" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Vizion" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ar3210.json b/data/brands/ar3210.json deleted file mode 100644 index ffec9d8..0000000 --- a/data/brands/ar3210.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ar3210", - "brand_id": "ar3210", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8557, - "url": "/Onvif/Streaming/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/aran.json b/data/brands/aran.json deleted file mode 100644 index c54b141..0000000 --- a/data/brands/aran.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Aran", - "brand_id": "aran", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR-24NR-WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "AR-48W-IP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/archos.json b/data/brands/archos.json deleted file mode 100644 index ab5f5f0..0000000 --- a/data/brands/archos.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Archos", - "brand_id": "archos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/arcvision.json b/data/brands/arcvision.json deleted file mode 100644 index 7f44d66..0000000 --- a/data/brands/arcvision.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Arcvision", - "brand_id": "arcvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "19240", - "ARC-19220", - "C735" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - } - ] -} \ No newline at end of file diff --git a/data/brands/area.json b/data/brands/area.json deleted file mode 100644 index b1a22d2..0000000 --- a/data/brands/area.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Area", - "brand_id": "area", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/area51.json b/data/brands/area51.json deleted file mode 100644 index cc1bc2e..0000000 --- a/data/brands/area51.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Area51", - "brand_id": "area51", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SK7008-T1F1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "SK7008-T1F1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/501" - } - ] -} \ No newline at end of file diff --git a/data/brands/arebi.json b/data/brands/arebi.json deleted file mode 100644 index 0fba62a..0000000 --- a/data/brands/arebi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Arebi", - "brand_id": "arebi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A10 Plus" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "A10 Plus" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/arecont.json b/data/brands/arecont.json deleted file mode 100644 index 3ea6f24..0000000 --- a/data/brands/arecont.json +++ /dev/null @@ -1,767 +0,0 @@ -{ - "brand": "Arecont", - "brand_id": "arecont", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10115DNv1", - "10mp", - "1305", - "1310M", - "20175DN", - "2100", - "2105DN", - "2155", - "2155DN", - "3100", - "3115DN", - "3116DN", - "3130", - "3130HD", - "3280", - "3455DN", - "5105DN", - "5115dn", - "5115dn-13", - "5115dn-17", - "AV Series", - "av10115dn-07", - "av2000", - "AV20175DN28", - "AV20185DN", - "AV2105", - "AV2105dn", - "AV2110", - "AV2155", - "AV2155dn", - "AV2155DN", - "av2246", - "AV2255", - "AV3100M", - "AV3105DN", - "av3110dn", - "AV3130", - "AV3135", - "AV5105DN", - "av5115dn", - "av5115dn-13", - "av5255pmir", - "AV8180", - "av8185", - "AV8360", - "AV8365DN", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "10115DNv1", - "2110DN", - "3225PMIR-S", - "av2115dn" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/mjpeg?res=full&x0=0&y0=0&x1=100%25&y1=100%25&quality=12&doublescan=0" - }, - { - "models": [ - "10115DNv1", - "11455DN", - "1325ir", - "20275DN", - "5115DN", - "AV10005", - "AV12176", - "AV12366", - "AV2105DN", - "av2216dn", - "AV2216PM-S", - "av5115dn", - "AV8185", - "Other", - "VISION" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "10115DNV1", - "10mp", - "2110DN", - "2115DNv1", - "2125IR", - "2145DN", - "2155DN", - "2465DN", - "3100", - "3245", - "32453245PM", - "3256PM", - "5115DN", - "5125", - "5155DN", - "Arecont: AV5105DN", - "AV 2256", - "AV 8365DN", - "AV SERIES", - "AV10005", - "AV10255AMIR", - "AV2105dn", - "av2110d", - "av2216dn", - "AV2256PM", - "AV3100", - "AV3115DNv1", - "AV3155", - "AV3256", - "AV8180", - "AV8185", - "Other", - "pm2216pm", - "VISION" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "mjpeg" - }, - { - "models": [ - "10115DNV1", - "1305", - "1325", - "2115", - "2145DN", - "2155DN", - "3115dn", - "3130", - "3155DN", - "5100", - "5105DN", - "5125", - "AV SERIES", - "av10255amir", - "AV10255AMIR", - "AV1300", - "AV20185DN CH1", - "av2100", - "av2100m", - "av2115dn", - "av2216dn", - "AV3105DN", - "AV3130", - "AV3155", - "AV5100", - "AV5100M", - "AV5255PMIR", - "AV8365", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "10115DNV1", - "1310dn", - "2115DN", - "3225PMIR-S", - "AV1115DN", - "av2115dn", - "AV2255", - "AV2556", - "AV3130", - "AV3146DN", - "av5115", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/mjpeg" - }, - { - "models": [ - "10355PMIR", - "20175DN", - "20185dn", - "2115DN", - "2176DN", - "2216DN", - "2255pmir", - "2456dn", - "3355DN3455DN", - "5115DN", - "5225PMIR", - "5255AM", - "AV 12366", - "AV10215PM-S-30-120", - "AV10255AMIR", - "av10255pmir-sh", - "AV1125IRV1X", - "AV12366", - "AV1305", - "AV20185dn", - "AV2110d/n", - "AV2216PM-S", - "AV2246M-W", - "AV2255", - "AV2255AM", - "AV2256PM", - "AV2455DN-AB", - "AV2556", - "AV3115DNv1", - "AV3155", - "AV5245", - "AV5245DN", - "AV5245PM", - "av5456D", - "AV5525", - "AV8185DN-HB", - "Other", - "rch Bach", - "Vision" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp" - }, - { - "models": [ - "11455DN", - "3100", - "av3130" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/image?res=full&x0=0%25&y0=[object%20Window]%25&x1=100%25&y1=100%25&quality=21&doublescan=0" - }, - { - "models": [ - "12366DN", - "AV 365", - "AV Series", - "AV12176dn", - "AV12186dn ch1", - "AV20185DN CH1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg[CHANNEL]?res=half&x1=0&y1=0" - }, - { - "models": [ - "12585PM", - "2105DN", - "2110DN", - "AV20185dn", - "AV8365", - "G5 Mini", - "VISION" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "12586PM", - "20175DN", - "2105DN", - "3100", - "3225PMIR-S", - "AV16F0833", - "AV20185dn", - "av2115dn", - "AV2556" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "1305", - "1355", - "2105DN", - "2155", - "2155M", - "AV Series", - "AV12176dn", - "AV12186dn ch1", - "AV1355DN", - "AV2110d/n", - "av2115dn", - "AV5245PM", - "AV8185", - "AV8185DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - }, - { - "models": [ - "1305DN", - "1355", - "20175DN", - "2155DN", - "3155DN", - "AV 12366", - "av2100", - "AV5105DN", - "AV8185", - "AV8185DN", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "1355", - "2115DN", - "3100", - "3125IR", - "3135", - "3255AMIR-H", - "5105DN", - "5125DN", - "AV Series", - "AV10005", - "av10225IR", - "AV10255AMIR", - "av1115dv", - "AV12186dn ch1", - "AV12276DN", - "AV1300", - "av2100", - "AV2105dn", - "AV2155", - "AV2255", - "AV2255AM", - "AV3100", - "AV3105DN", - "AV3115", - "AV3115DN", - "AV3130", - "AV5100M", - "AV5115DN", - "AV5115DNAIv1", - "AV5115DNv1", - "AV8360", - "AV8365DN", - "Other", - "VISION" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "1555DN", - "5105DN", - "av12186av12186-0" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "20175DN", - "2105DN", - "2115", - "AV10655DN-28", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "20175DN", - "2456", - "3155DN", - "3246", - "5125", - "5225PMIR", - "AV SERIES", - "av10115dn-07", - "av10255amir", - "AV20185dn", - "AV20185dn ch1", - "AV20185DN CH3", - "AV20185dn Junk", - "AV2216PM-S", - "av2246m-w", - "av5115dn-2", - "AV5215PM-S", - "AV8185", - "AV8185DN", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264.sdp?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "20175DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam5/mpeg4" - }, - { - "models": [ - "20275", - "3100" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img.jpg" - }, - { - "models": [ - "20365DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264.sdp1?res=half&doublescan=0&ssn=901" - }, - { - "models": [ - "2115DN" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "2116dnv1", - "2225PMIR-S", - "AV10655DN", - "av12276dn-28", - "AV2216PM-S", - "AV2256PM", - "AV2825IR", - "AV3255DN-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "2805", - "3256PMIR-S", - "AV 8365DN", - "AV10005DN", - "av10225PMIR", - "AV10655DN", - "AV1255PMIR-S", - "AV2146DN", - "AV3115DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "3100", - "3115DN", - "3155DN", - "AV Series", - "AV3105DN", - "AV3130", - "AV5115DN", - "AV8360", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "3100", - "AV12186" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-media/media.amp" - }, - { - "models": [ - "3225PMIR-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp?res=full&x0=0&y0=0&x1=2048&y1=1536&qp=20&ratelimit=10000&doublescan=0&ssn=7329" - }, - { - "models": [ - "5105DN", - "AV20365DN/65170" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "5115DN" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "8185dn", - "AV12276DN", - "AV20365DN/65170", - "AV8185DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "8185DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264.sdp3?res=half&doublescan=0&ssn=603" - }, - { - "models": [ - "8185DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264.sdp1?res=half&doublescan=0&ssn=601" - }, - { - "models": [ - "AV 8365DN", - "AV Series", - "AV12186", - "AV20185DN", - "AV20185dn ch1", - "AV20185dn ch2", - "AV20185dn ch3", - "AV20185dn ch4", - "AV8185DN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image[CHANNEL]?res=half&x1=0&y1=0" - }, - { - "models": [ - "AV12176DN-08", - "AV12276DN", - "AV20185DN CH3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp1" - }, - { - "models": [ - "av12376RS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "AV12586DN", - "AV129294", - "av1355dn", - "AV1355DN", - "AV4655dn-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "AV12586DN", - "AV20185DN CH1", - "AV8185DN", - "av8515dn" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "AV20175DN28" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg1?res=half&x1=0&y1=0" - }, - { - "models": [ - "AV20185dn", - "AV20185dn ch3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264.sdp3" - }, - { - "models": [ - "AV20185dn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264.sdp3" - }, - { - "models": [ - "AV20375RS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/mjpeg4?res=half&x1=0&y1=0" - }, - { - "models": [ - "AV2110" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "AV3100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "AV3105DN", - "hdd" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "AV4655dn-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "AV8185" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "live/mpeg4" - }, - { - "models": [ - "AV8185", - "AV8365", - "AV8365DN", - "Other", - "VISION" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "C6F0SgZ3N0P3L0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "MicroDome G2 AV3556DN-S NL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264.sdp?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - } - ] -} \ No newline at end of file diff --git a/data/brands/arenti.json b/data/brands/arenti.json deleted file mode 100644 index 0b4c606..0000000 --- a/data/brands/arenti.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "brand": "Arenti", - "brand_id": "arenti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DOME", - "DOME1", - "Doom", - "GO mini 2k", - "IN1", - "Other", - "Outdoor OP1", - "P2 Indoor Smart Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "M4T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/argom-tech.json b/data/brands/argom-tech.json deleted file mode 100644 index 84245aa..0000000 --- a/data/brands/argom-tech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Argom Tech", - "brand_id": "argom-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "t920" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/argos.json b/data/brands/argos.json deleted file mode 100644 index 6e24be7..0000000 --- a/data/brands/argos.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Argos", - "brand_id": "argos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "514" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "AV SERIES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/0?videoCodecType=H.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/argus.json b/data/brands/argus.json deleted file mode 100644 index 37b0b44..0000000 --- a/data/brands/argus.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Argus", - "brand_id": "argus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Surveillance DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL].jpg" - }, - { - "models": [ - "Surveillance DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=[CHANNEL].JPG&SENDEMPTYIMAGES=NO" - } - ] -} \ No newline at end of file diff --git a/data/brands/argusleader.json b/data/brands/argusleader.json deleted file mode 100644 index e771422..0000000 --- a/data/brands/argusleader.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Argusleader", - "brand_id": "argusleader", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AS21231" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/arit.json b/data/brands/arit.json deleted file mode 100644 index c1679ee..0000000 --- a/data/brands/arit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Arit", - "brand_id": "arit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipcd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/arlotto.json b/data/brands/arlotto.json deleted file mode 100644 index ff7a291..0000000 --- a/data/brands/arlotto.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Arlotto", - "brand_id": "arlotto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "AR1200", - "AR1500", - "BX200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/2?videoCodecType=H.264" - }, - { - "models": [ - "AR1200", - "AR1500", - "BX200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "ar1500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "AR1500" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "AR1500" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "AR3520P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/arm.json b/data/brands/arm.json deleted file mode 100644 index ba5dbfa..0000000 --- a/data/brands/arm.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Arm", - "brand_id": "arm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H.264 Lite DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ivop.get?action=live&THREAD_ID=" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/arma-tech.json b/data/brands/arma-tech.json deleted file mode 100644 index d092057..0000000 --- a/data/brands/arma-tech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Arma-tech", - "brand_id": "arma-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AT-R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/armorview.json b/data/brands/armorview.json deleted file mode 100644 index 0c6dfd3..0000000 --- a/data/brands/armorview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Armorview", - "brand_id": "armorview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/armorvue.json b/data/brands/armorvue.json deleted file mode 100644 index 3610325..0000000 --- a/data/brands/armorvue.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Armorvue", - "brand_id": "armorvue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/arnan.json b/data/brands/arnan.json deleted file mode 100644 index b0c8835..0000000 --- a/data/brands/arnan.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Arnan", - "brand_id": "arnan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR-24NW POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "AR-24NW POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "AR-24NW POE 960" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/arp.json b/data/brands/arp.json deleted file mode 100644 index e50514d..0000000 --- a/data/brands/arp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Arp", - "brand_id": "arp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/arrow-security-system.json b/data/brands/arrow-security-system.json deleted file mode 100644 index 51c375b..0000000 --- a/data/brands/arrow-security-system.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Arrow Security System", - "brand_id": "arrow-security-system", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR7916" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/arsoft.json b/data/brands/arsoft.json deleted file mode 100644 index 3e276f9..0000000 --- a/data/brands/arsoft.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Arsoft", - "brand_id": "arsoft", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xc36c" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/arvani-cctv.json b/data/brands/arvani-cctv.json deleted file mode 100644 index 6c42ec5..0000000 --- a/data/brands/arvani-cctv.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Arvani Cctv", - "brand_id": "arvani-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264-IPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IP551WI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "ZZW28-2", - "ZZW28-3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/asagio.json b/data/brands/asagio.json deleted file mode 100644 index e36a704..0000000 --- a/data/brands/asagio.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Asagio", - "brand_id": "asagio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "A603W", - "AG226s", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "A603W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A622W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/asante.json b/data/brands/asante.json deleted file mode 100644 index 9c30b7b..0000000 --- a/data/brands/asante.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "brand": "Asante", - "brand_id": "asante", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SMARTBOT PT", - "Voiager 1", - "Voiager 2PT", - "voyager", - "VOYAGER 1", - "Voyager I", - "Voyager I/II", - "VOYAGER SMARTBOT", - "VoyagerII" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi" - }, - { - "models": [ - "Other", - "smartbot", - "VOYAGER I", - "VOYAGER I/II", - "VOYAGER II" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other", - "SmartBot", - "Voyager 1", - "VOYAGER I", - "VOYAGER I/II", - "VOYAGER II", - "Voyager Smartbot" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg?type=motion" - }, - { - "models": [ - "Other", - "Voyager I" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other", - "pl29", - "smartbot", - "Voyager 1", - "Voyager I", - "Voyager I/II", - "VOYAGER SMARTBOT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - }, - { - "models": [ - "SMARTBOT", - "Voyager 1", - "VOYAGER II", - "VoyagerI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Voyager I" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "Voyager II" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/asc.json b/data/brands/asc.json deleted file mode 100644 index a0063fa..0000000 --- a/data/brands/asc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Asc", - "brand_id": "asc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K9104" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/asdibuy.json b/data/brands/asdibuy.json deleted file mode 100644 index af70283..0000000 --- a/data/brands/asdibuy.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Asdibuy", - "brand_id": "asdibuy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "asd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1" - }, - { - "models": [ - "ES-IP851" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "sasd" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/asecam.json b/data/brands/asecam.json deleted file mode 100644 index adc2706..0000000 --- a/data/brands/asecam.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "brand": "Asecam", - "brand_id": "asecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8 MP", - "8MP Dome", - "IF52N53-IR", - "IF56N53-IR", - "NH4RH-200H", - "NZ4RN-A80A18", - "Other", - "P05H42" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "8mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "8Mp" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "" - }, - { - "models": [ - "8MP Smart Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Dome 4K" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/asgari.json b/data/brands/asgari.json deleted file mode 100644 index 211de93..0000000 --- a/data/brands/asgari.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "brand": "Asgari", - "brand_id": "asgari", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "720", - "720pro", - "720Pror", - "Other", - "PTG 4", - "PTG4-1080p", - "PTZ-80IR G2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "720", - "720 PTZ-25ir", - "720 u", - "720U", - "720u g3", - "720u-G3", - "PTG3", - "ptz-25ir" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "720", - "720 u", - "720U", - "720U G3", - "720U PTZ", - "720u-g3", - "Mats", - "PTG3", - "PTZ-25IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "720", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720pro", - "720PRO", - "PTZ-80IR G2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720U", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720U", - "Other", - "UIR-G2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Kontor", - "Other", - "PTG2", - "UIR", - "UIR G2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "UIR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other", - "PTG2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "PTG2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "UID" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/ashmount-ptz.json b/data/brands/ashmount-ptz.json deleted file mode 100644 index 85e8702..0000000 --- a/data/brands/ashmount-ptz.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ashmount Ptz", - "brand_id": "ashmount-ptz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8554, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/asia.json b/data/brands/asia.json deleted file mode 100644 index 3951fd1..0000000 --- a/data/brands/asia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Asia", - "brand_id": "asia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Camera S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/asip.json b/data/brands/asip.json deleted file mode 100644 index 9d0d2e8..0000000 --- a/data/brands/asip.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Asip", - "brand_id": "asip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7000EM Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/Img.jpg" - }, - { - "models": [ - "7000EM Series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Camera=0&BandWidth=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/asm.json b/data/brands/asm.json deleted file mode 100644 index ac5281d..0000000 --- a/data/brands/asm.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Asm", - "brand_id": "asm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/asoni.json b/data/brands/asoni.json deleted file mode 100644 index 25fb5dd..0000000 --- a/data/brands/asoni.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "brand": "Asoni", - "brand_id": "asoni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4xx Series", - "615", - "CAM619IR", - "CAM635", - "CAM6631FIR-POE", - "LAger 1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - }, - { - "models": [ - "4xx Series", - "CAM635", - "Other", - "Series 4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "4XX SERIES", - "615", - "CAM619IR", - "cam628", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "615", - "CAM619IR", - "CAM635" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v2" - }, - { - "models": [ - "CAM646MIR-POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/v2" - }, - { - "models": [ - "CAM646MIR-POE", - "CAM6631FIR-PoE", - "CAM6691FiR-PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "CAM748FIR-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/GetImage.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/aspac.json b/data/brands/aspac.json deleted file mode 100644 index d2c92d9..0000000 --- a/data/brands/aspac.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Aspac", - "brand_id": "aspac", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP1", - "IP2", - "IP3", - "IPCAM3", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/asrock.json b/data/brands/asrock.json deleted file mode 100644 index f214a22..0000000 --- a/data/brands/asrock.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Asrock", - "brand_id": "asrock", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AS-5110HQ", - "AS-5313-EJ", - "ipd=10mf23w", - "xxdxxddf" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "h264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/astak.json b/data/brands/astak.json deleted file mode 100644 index 6567c94..0000000 --- a/data/brands/astak.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "brand": "Astak", - "brand_id": "astak", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM-818DVR4V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi?Video=[CHANNEL]" - }, - { - "models": [ - "CM-818DVR4V", - "cm-ip700", - "cm-mole", - "ip-700", - "IP-700", - "Mole", - "mole ip 700", - "Mole2", - "mole2 ip-700", - "NVR", - "Other", - "PTZ", - "ZNY1022" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Mole" - ], - "type": "JPEG", - "protocol": "http", - "port": 84, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "Mole" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Mole" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "MOLE", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/asterix.json b/data/brands/asterix.json deleted file mode 100644 index eaadf7a..0000000 --- a/data/brands/asterix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Asterix", - "brand_id": "asterix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/asti.json b/data/brands/asti.json deleted file mode 100644 index f5ef8fa..0000000 --- a/data/brands/asti.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Asti", - "brand_id": "asti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sed-2120" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 7070, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/astr.json b/data/brands/astr.json deleted file mode 100644 index 7b949d2..0000000 --- a/data/brands/astr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Astr", - "brand_id": "astr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/astra-streaming.json b/data/brands/astra-streaming.json deleted file mode 100644 index 673dcf5..0000000 --- a/data/brands/astra-streaming.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Astra Streaming", - "brand_id": "astra-streaming", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/astrind.json b/data/brands/astrind.json deleted file mode 100644 index 11619d2..0000000 --- a/data/brands/astrind.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Astrind", - "brand_id": "astrind", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Unique Eyes" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/astroghost.json b/data/brands/astroghost.json deleted file mode 100644 index 6e7be88..0000000 --- a/data/brands/astroghost.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Astroghost", - "brand_id": "astroghost", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AllSkyCamera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/astrum.json b/data/brands/astrum.json deleted file mode 100644 index d958aa7..0000000 --- a/data/brands/astrum.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Astrum", - "brand_id": "astrum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP9071W", - "IP907IW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/astun.json b/data/brands/astun.json deleted file mode 100644 index c367eaa..0000000 --- a/data/brands/astun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Astun", - "brand_id": "astun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wifi200" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/asus.json b/data/brands/asus.json deleted file mode 100644 index 81ea88a..0000000 --- a/data/brands/asus.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "brand": "Asus", - "brand_id": "asus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "..." - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/?action=stream" - }, - { - "models": [ - "202" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "memopad" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - }, - { - "models": [ - "nexus", - "Nexus 7", - "Other", - "Pad", - "padfone", - "padfone x", - "Padfone X Mini", - "Tablet", - "Transformer Prime", - "ZEN", - "zenfone 4", - "zenfone2", - "zenfone5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "tuf gaming", - "TUF GAMING RYZEN 7" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=1" - }, - { - "models": [ - "TUF GAMING RYZEN 7" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/asutech.json b/data/brands/asutech.json deleted file mode 100644 index e5330c8..0000000 --- a/data/brands/asutech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Asutech", - "brand_id": "asutech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1200TVL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/asw-006.json b/data/brands/asw-006.json deleted file mode 100644 index 8434d9b..0000000 --- a/data/brands/asw-006.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Asw-006", - "brand_id": "asw-006", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aszhonga.json b/data/brands/aszhonga.json deleted file mode 100644 index f6010dd..0000000 --- a/data/brands/aszhonga.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aszhonga", - "brand_id": "aszhonga", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Q10C-JZ-WIFI-2.0MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/at-vision.json b/data/brands/at-vision.json deleted file mode 100644 index 83f16a8..0000000 --- a/data/brands/at-vision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "At Vision", - "brand_id": "at-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "action" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/atheros.json b/data/brands/atheros.json deleted file mode 100644 index 125623b..0000000 --- a/data/brands/atheros.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Atheros", - "brand_id": "atheros", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR 9285" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "ar9285" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AR9285" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/athome.json b/data/brands/athome.json deleted file mode 100644 index 417f38b..0000000 --- a/data/brands/athome.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Athome", - "brand_id": "athome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other", - "r'cam 3.0" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "r-cam 3.0" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "RTX 01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/atis.json b/data/brands/atis.json deleted file mode 100644 index 52de02e..0000000 --- a/data/brands/atis.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Atis", - "brand_id": "atis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Atis1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "ATIS1", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/atlantis.json b/data/brands/atlantis.json deleted file mode 100644 index 7db2827..0000000 --- a/data/brands/atlantis.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "Atlantis", - "brand_id": "atlantis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A02-IPCAM3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "A02-IPCAM3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=1" - }, - { - "models": [ - "A02-IPCAM3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "A11-UX914A-BPV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Fixed ir cmos", - "ingresso", - "nv500", - "nv501nv", - "Other", - "retro" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Fixed ir cmos" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "PlusCam HD Outdoor 7000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/atlona.json b/data/brands/atlona.json deleted file mode 100644 index 490ed2d..0000000 --- a/data/brands/atlona.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Atlona", - "brand_id": "atlona", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AT-HDVS-CAM" - ], - "type": "FFMPEG", - "protocol": "rtp", - "port": 4000, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/atomtech.json b/data/brands/atomtech.json deleted file mode 100644 index 85f5a07..0000000 --- a/data/brands/atomtech.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Atomtech", - "brand_id": "atomtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ATOM Cam", - "ATOM Cam 2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/atrix.json b/data/brands/atrix.json deleted file mode 100644 index 14c97d3..0000000 --- a/data/brands/atrix.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Atrix", - "brand_id": "atrix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/att.json b/data/brands/att.json deleted file mode 100644 index a212b99..0000000 --- a/data/brands/att.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Att", - "brand_id": "att", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OC810" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=2" - }, - { - "models": [ - "rc8221", - "RC8221D" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/attech.json b/data/brands/attech.json deleted file mode 100644 index fb65ed2..0000000 --- a/data/brands/attech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Attech", - "brand_id": "attech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "starter" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/attichd.json b/data/brands/attichd.json deleted file mode 100644 index de6ea11..0000000 --- a/data/brands/attichd.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Attichd", - "brand_id": "attichd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hosafe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "HOSAFE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/attn.json b/data/brands/attn.json deleted file mode 100644 index e483bac..0000000 --- a/data/brands/attn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Attn", - "brand_id": "attn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-D4MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/atv.json b/data/brands/atv.json deleted file mode 100644 index 375d16f..0000000 --- a/data/brands/atv.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Atv", - "brand_id": "atv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CMIP7442-28M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "IPFD2MT", - "IPVD2TW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "NB237" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - }, - { - "models": [ - "NB237", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1/Profile1" - }, - { - "models": [ - "VLD4500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "VLD4500" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/atz.json b/data/brands/atz.json deleted file mode 100644 index 6f0e2a2..0000000 --- a/data/brands/atz.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Atz", - "brand_id": "atz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ATZ-CHV07P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "ATZ-CHV07P", - "CH-007" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "CH007" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "chv24" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/au3.json b/data/brands/au3.json deleted file mode 100644 index ca392cd..0000000 --- a/data/brands/au3.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Au3", - "brand_id": "au3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AU3-1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/audiance.json b/data/brands/audiance.json deleted file mode 100644 index ff6cca3..0000000 --- a/data/brands/audiance.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Audiance", - "brand_id": "audiance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/audio-enhancement.json b/data/brands/audio-enhancement.json deleted file mode 100644 index b6ea396..0000000 --- a/data/brands/audio-enhancement.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Audio Enhancement", - "brand_id": "audio-enhancement", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Educam360-B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/august.json b/data/brands/august.json deleted file mode 100644 index de79545..0000000 --- a/data/brands/august.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "August", - "brand_id": "august", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/stream1" - }, - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - }, - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/stream1" - }, - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream[CHANNEL]" - }, - { - "models": [ - "doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1_v" - } - ] -} \ No newline at end of file diff --git a/data/brands/auric.json b/data/brands/auric.json deleted file mode 100644 index 16077de..0000000 --- a/data/brands/auric.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Auric", - "brand_id": "auric", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "232", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "XM2008" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aussen.json b/data/brands/aussen.json deleted file mode 100644 index 98f2ce4..0000000 --- a/data/brands/aussen.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aussen", - "brand_id": "aussen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/auto.json b/data/brands/auto.json deleted file mode 100644 index e7ef23c..0000000 --- a/data/brands/auto.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "brand": "Auto", - "brand_id": "auto", - "last_updated": "2025-01-01", - "source": "strix", - "website": "", - "cameras": [ - { - "model": "Automatic Detection", - "entries": [] - } - ] -} diff --git a/data/brands/autoip.json b/data/brands/autoip.json deleted file mode 100644 index 8d6c3a9..0000000 --- a/data/brands/autoip.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Autoip", - "brand_id": "autoip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GV-NC-201B", - "NIB-2150", - "Other", - "Special" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/auwer.json b/data/brands/auwer.json deleted file mode 100644 index dcf71b9..0000000 --- a/data/brands/auwer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Auwer", - "brand_id": "auwer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BE-IPH11W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/av102ip-40.json b/data/brands/av102ip-40.json deleted file mode 100644 index 795fbfc..0000000 --- a/data/brands/av102ip-40.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Av102ip-40", - "brand_id": "av102ip-40", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/av12176dn-15.json b/data/brands/av12176dn-15.json deleted file mode 100644 index f677104..0000000 --- a/data/brands/av12176dn-15.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Av12176dn-15", - "brand_id": "av12176dn-15", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "av12176dn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp1" - }, - { - "models": [ - "av12176dn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp2" - } - ] -} \ No newline at end of file diff --git a/data/brands/av265.json b/data/brands/av265.json deleted file mode 100644 index f3d0847..0000000 --- a/data/brands/av265.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Av265", - "brand_id": "av265", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/av40185dn-cd.json b/data/brands/av40185dn-cd.json deleted file mode 100644 index 8609760..0000000 --- a/data/brands/av40185dn-cd.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Av40185dn-cd", - "brand_id": "av40185dn-cd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "av40185dn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/avacom.json b/data/brands/avacom.json deleted file mode 100644 index f4b2290..0000000 --- a/data/brands/avacom.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "brand": "Avacom", - "brand_id": "avacom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "1080W", - "5060", - "5980", - "h5060w", - "h5080w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1080w", - "M1060W", - "M1080w", - "M1080-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "1080W", - "5060W", - "H5080W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5060", - "5060w", - "H5060W", - "H5080W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "5060w", - "H5060W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "5080w", - "H5060W", - "H5080W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "H5060W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "H5060W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "H5160W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "H6080AW", - "H6081", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "M1060W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "M1060W", - "M1080w", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "M1060W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "M1080W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/avaja.json b/data/brands/avaja.json deleted file mode 100644 index 5457d87..0000000 --- a/data/brands/avaja.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avaja", - "brand_id": "avaja", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/avalonix.json b/data/brands/avalonix.json deleted file mode 100644 index 7b0b320..0000000 --- a/data/brands/avalonix.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Avalonix", - "brand_id": "avalonix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC4K18", - "IPSDMIRW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPD401VPM", - "IPSDMIRW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/avantgarde.json b/data/brands/avantgarde.json deleted file mode 100644 index 6d7b3bd..0000000 --- a/data/brands/avantgarde.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Avantgarde", - "brand_id": "avantgarde", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "123456", - "ip100", - "px-3720-675", - "pyle", - "S631", - "Sumpple", - "Sumpple S650" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "S610" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av1" - }, - { - "models": [ - "SUMPPLE", - "SUMPPLE S650" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/avaya.json b/data/brands/avaya.json deleted file mode 100644 index ed238a0..0000000 --- a/data/brands/avaya.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Avaya", - "brand_id": "avaya", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other 13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/avcam.json b/data/brands/avcam.json deleted file mode 100644 index 555924a..0000000 --- a/data/brands/avcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avcam", - "brand_id": "avcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVM2220SE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/video/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/avd552mip.json b/data/brands/avd552mip.json deleted file mode 100644 index 14f3098..0000000 --- a/data/brands/avd552mip.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Avd552mip", - "brand_id": "avd552mip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Avue" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "Avue" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live2.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ave.json b/data/brands/ave.json deleted file mode 100644 index 414ae9a..0000000 --- a/data/brands/ave.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ave", - "brand_id": "ave", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "SF Series" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/avenir.json b/data/brands/avenir.json deleted file mode 100644 index a5908da..0000000 --- a/data/brands/avenir.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avenir", - "brand_id": "avenir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AV-DS2CD1021I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/aventi.json b/data/brands/aventi.json deleted file mode 100644 index 09334a6..0000000 --- a/data/brands/aventi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Aventi", - "brand_id": "aventi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1n1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "1n1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/aventura.json b/data/brands/aventura.json deleted file mode 100644 index 04df338..0000000 --- a/data/brands/aventura.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Aventura", - "brand_id": "aventura", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM-IPE-3D-3F-IRVP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "CAM-IPM-13D-IRVP", - "CAM-IPM-1D-212M-IRVP", - "CAM-IPM-3B-04IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "CAM-IPM-1B-04IR", - "CAM-IPM-1B-21IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/aver.json b/data/brands/aver.json deleted file mode 100644 index e67bb99..0000000 --- a/data/brands/aver.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Aver", - "brand_id": "aver", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2012", - "SF2012H-B", - "SF2012H-D", - "TR311HN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "520Pro", - "AVer CAM520 Pro2", - "DL30", - "FB2027-3", - "FB3027", - "FD2020-M", - "fv3808", - "Other", - "ptc500s", - "PTZ310N", - "TR-311", - "TR311HN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live_st1" - }, - { - "models": [ - "AV-CM20" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "FB 1026", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "FS2012H-C", - "Other", - "SF2012H-C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "FX2000", - "Other", - "SF1311H-C", - "TR311HN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live_st2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "PTC310H", - "PTC330UV2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "SF2012B", - "SF2012H-B", - "SF2012H-D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/averdigi.json b/data/brands/averdigi.json deleted file mode 100644 index 725e26c..0000000 --- a/data/brands/averdigi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Averdigi", - "brand_id": "averdigi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sf1311" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/avermedia.json b/data/brands/avermedia.json deleted file mode 100644 index d95788f..0000000 --- a/data/brands/avermedia.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "brand": "Avermedia", - "brand_id": "avermedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP V58", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "IP V58", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "NAV", - "sf2012h" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v2" - }, - { - "models": [ - "NV Series", - "NV SERİES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mobile/channel[CHANNEL].jpg" - }, - { - "models": [ - "Other", - "SF1301" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "SF+1301" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video/mjpg.cgi" - }, - { - "models": [ - "sf1301" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "sf1301" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=640&rate=0" - }, - { - "models": [ - "SF1301" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "SF1301" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/avertx.json b/data/brands/avertx.json deleted file mode 100644 index 7dac650..0000000 --- a/data/brands/avertx.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Avertx", - "brand_id": "avertx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "510", - "AVX-HD510", - "HD510" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream1" - }, - { - "models": [ - "AVX-HD820IR", - "HD300IR", - "HD90" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8082, - "url": "h264" - }, - { - "models": [ - "AVX-HD820IR", - "HD-80IP", - "HD820", - "HD820IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "HD420IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HD420IR", - "PTC500S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_st1" - }, - { - "models": [ - "HD510" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8082, - "url": "/onvif-stream2" - }, - { - "models": [ - "HD820", - "HD90", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "HD90" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/avicam.json b/data/brands/avicam.json deleted file mode 100644 index e31430c..0000000 --- a/data/brands/avicam.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Avicam", - "brand_id": "avicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Arcos" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "AV-1004 BC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/video/profile1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/avidia.json b/data/brands/avidia.json deleted file mode 100644 index ee7dd57..0000000 --- a/data/brands/avidia.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Avidia", - "brand_id": "avidia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A-24W", - "A-34W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "a-30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "A-34W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "A-35" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/avidsen.json b/data/brands/avidsen.json deleted file mode 100644 index cccc06c..0000000 --- a/data/brands/avidsen.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Avidsen", - "brand_id": "avidsen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "123281", - "123282", - "123283", - "123284", - "123287", - "123288", - "123288 GVM", - "123381232", - "123382", - "123981", - "123982", - "720", - "IPC282-Miw", - "IPC380-i", - "ipc382", - "Other", - "visia", - "VISIA 123287", - "Visia 123288" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "123281", - "123282", - "123287", - "123288", - "123382", - "IPC281", - "IPC281-Ex", - "IPC382-i", - "IPC382-i 123382 V1", - "Other", - "visia", - "visia 8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "123281", - "123380" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12nese-camera-teardown1" - } - ] -} \ No newline at end of file diff --git a/data/brands/avigilon.json b/data/brands/avigilon.json deleted file mode 100644 index 76c81c4..0000000 --- a/data/brands/avigilon.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "brand": "Avigilon", - "brand_id": "avigilon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.0-H3-D1", - "HD H.264 Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/media/cam0/still.jpg" - }, - { - "models": [ - "1.0-H3-PO2", - "gjgj" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/defaultPrimary?streamType=u" - }, - { - "models": [ - "3.0C-H4A-BO2-IR-B", - "6.0MP H5A WDR", - "MP5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/defaultPrimary?streamType=m" - }, - { - "models": [ - "4.0mp h5a wdr" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "C2-0-H3-D1-101505051742" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ENC-4P-H264" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/defaultPrimary3?streamType=u" - }, - { - "models": [ - "H4sl", - "HD H.264 Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "media/still.jpg" - }, - { - "models": [ - "HD H.264 Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "M4 Multisensor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/defaultPrimary-3?streamType=u" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - } - ] -} \ No newline at end of file diff --git a/data/brands/avilink.json b/data/brands/avilink.json deleted file mode 100644 index 893b979..0000000 --- a/data/brands/avilink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avilink", - "brand_id": "avilink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVC208" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/avios-webserver.json b/data/brands/avios-webserver.json deleted file mode 100644 index 0eaaecc..0000000 --- a/data/brands/avios-webserver.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avios Webserver", - "brand_id": "avios-webserver", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVIOSYS WEBSERVER" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/aviosis.json b/data/brands/aviosis.json deleted file mode 100644 index 3b013ac..0000000 --- a/data/brands/aviosis.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Aviosis", - "brand_id": "aviosis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9070csw" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/aviosys.json b/data/brands/aviosys.json deleted file mode 100644 index bf02169..0000000 --- a/data/brands/aviosys.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "brand": "Aviosys", - "brand_id": "aviosys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9000/9100 Series", - "9060 I/O/MP", - "9060-I", - "IP9060I", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "9000/9100 Series", - "9060A", - "9070", - "ip9100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "9000/9100 Series", - "9070", - "9100", - "9100A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "9000/9100 Series", - "9100", - "9100a", - "9100A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - }, - { - "models": [ - "9000/9100 SERIES", - "9000A", - "9060 I/O/MP", - "9060A", - "9060-I", - "9070", - "9100A", - "ip9100", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "9000/9100 SERIES", - "9060 I/O/MP", - "9060A", - "9060-I", - "9070", - "9070 SERIES", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "9000/9100 SERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "9060 I/O/MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "9060-I" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - }, - { - "models": [ - "9070", - "9070 Series", - "9070IR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "9070", - "9100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "9070", - "9070 Series", - "9070IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi" - }, - { - "models": [ - "9070", - "9070IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "9070", - "9070-c" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "9100", - "9100a", - "9100A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Camera=0&BandWidth=0" - }, - { - "models": [ - "9100a" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/avipas.json b/data/brands/avipas.json deleted file mode 100644 index 0230c74..0000000 --- a/data/brands/avipas.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Avipas", - "brand_id": "avipas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "av1082w", - "ptz", - "x1280" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/aviptek.json b/data/brands/aviptek.json deleted file mode 100644 index b6ae83d..0000000 --- a/data/brands/aviptek.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Aviptek", - "brand_id": "aviptek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nc1600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/avistek.json b/data/brands/avistek.json deleted file mode 100644 index 683bd98..0000000 --- a/data/brands/avistek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avistek", - "brand_id": "avistek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "np 1200 - l10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/avl-hd-dome.json b/data/brands/avl-hd-dome.json deleted file mode 100644 index a247da6..0000000 --- a/data/brands/avl-hd-dome.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avl Hd Dome", - "brand_id": "avl-hd-dome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVLHDD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/avl.json b/data/brands/avl.json deleted file mode 100644 index cf7bfc9..0000000 --- a/data/brands/avl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avl", - "brand_id": "avl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HDD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/avn.json b/data/brands/avn.json deleted file mode 100644 index 041f0e2..0000000 --- a/data/brands/avn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avn", - "brand_id": "avn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "avn244va" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/avonic.json b/data/brands/avonic.json deleted file mode 100644 index 09d2c63..0000000 --- a/data/brands/avonic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avonic", - "brand_id": "avonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cm60" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/avosys.json b/data/brands/avosys.json deleted file mode 100644 index 34eb411..0000000 --- a/data/brands/avosys.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Avosys", - "brand_id": "avosys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP9000", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/avr-raiden.json b/data/brands/avr-raiden.json deleted file mode 100644 index 3f5441e..0000000 --- a/data/brands/avr-raiden.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Avr Raiden", - "brand_id": "avr-raiden", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4CH" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "HDR-7304HM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "ksiegowosc" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/[CHANNEL]" - }, - { - "models": [ - "KSIEGOWOSC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/avs.json b/data/brands/avs.json deleted file mode 100644 index 1d1fb4f..0000000 --- a/data/brands/avs.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "brand": "Avs", - "brand_id": "avs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP cameras", - "Other", - "SYSTEMS HD1024 SERIES", - "TITANAPOLLOATOM DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "ME", - "titan apollo atom", - "TitanApolloAtom DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg.fcgi?mode=real&si=[USERNAME]&mon=1&ch=[CHANNEL]&width=[WIDTH]&height=[HEIGHT]&quality=7&fps=0" - }, - { - "models": [ - "NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-usr/image" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "Systems HD1024 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "pic01/images.jpg" - }, - { - "models": [ - "Systems HD1024 Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image/mjpeg.cgi?id=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "Systems MPix 2.0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Systems MPix Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream/nph-stream.cgi?id=[USERNAME]&pw=[PASSWORD]&streamtype=jpeg&truenph=1" - }, - { - "models": [ - "Systems MPix Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream/nph-stream.cgi?id=[USERNAME]&pw=[PASSWORD]&streamtype=mjpeg&truenph=1" - }, - { - "models": [ - "Y4C-ZA" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/avstart.json b/data/brands/avstart.json deleted file mode 100644 index 6e26175..0000000 --- a/data/brands/avstart.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avstart", - "brand_id": "avstart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CB205" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/avt.json b/data/brands/avt.json deleted file mode 100644 index 4c6436c..0000000 --- a/data/brands/avt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avt", - "brand_id": "avt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FI9853EP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/avtech.json b/data/brands/avtech.json deleted file mode 100644 index 2eba91b..0000000 --- a/data/brands/avtech.json +++ /dev/null @@ -1,808 +0,0 @@ -{ - "brand": "Avtech", - "brand_id": "avtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "202z", - "avm359an", - "AVM5547", - "AVN211" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "212Z", - "358-HD", - "80X", - "ANM357A", - "Arbres fruitiers et route", - "AVC", - "AVC792", - "AVM2220TP", - "AVM2421", - "AVM2421AP/F28", - "AVM2443", - "AVM317ZBP/F38", - "AVM328", - "AVM328A", - "AVM357a", - "avm357zap", - "AVM357ZAP", - "AVM358", - "AVM3650L-000E532CC486", - "AVM365A", - "AVM428ZDN", - "AVM459", - "avm521cp/f38", - "AVM532F", - "AVM542AP/F28F12", - "AVM542B", - "avm542fp", - "AVM543", - "AVM552", - "AVM561", - "avm571", - "AVM583", - "AVN 362", - "AVN211", - "avn244", - "AVN252", - "AVN257", - "AVN284", - "AVN314", - "AVN314-HS64", - "avn314z", - "AVN320", - "AVN362", - "AVN363V", - "AVN363Z", - "AVN801", - "avn801z", - "AVN807ZA", - "AVN80X", - "AVP542B", - "AVX931", - "AVZ529", - "AVZ592", - "DC2", - "dgd2404", - "DGM 5106", - "dgm1105", - "dgm1304", - "DM1306", - "DVR (2)", - "eagle", - "Entatech", - "h.264", - "H264 DVR", - "IP cameras", - "NVM428", - "Other", - "PtZ", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264" - }, - { - "models": [ - "3300auxsd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "358-HD", - "457A", - "465", - "500", - "7dvr", - "7xx DVR Series", - "7xxdvr", - "AV5115-8B", - "av7", - "av801", - "AVC2", - "AVC791 DVR", - "AVC792 DVR", - "AVH308EA", - "avi201", - "AVI201ZP", - "avi203z", - "AVI203Z", - "AVM 521A", - "AVM 571", - "avm2172", - "avm2451t", - "AVM301", - "AVM317B", - "AVM317bpP/F38", - "AVM317ZBP/F38", - "AVM328", - "AVM328A", - "AVM328Z", - "AVM328ZB/F38", - "AVM332P", - "AVM3453P", - "AVM357", - "AVM357A", - "AVM357ZAP", - "AVM365", - "AVM417A", - "AVM428ZDN", - "AVM457", - "avm4570", - "avm457z", - "avm457zap", - "AVM459", - "AVM459AP", - "AVM475", - "AVM511", - "AVM542A jpeg", - "AVM542B", - "avm542BP", - "AVM552", - "AVM553JP", - "AVM561", - "AVM565A", - "avm571", - "AVN211", - "AVN212", - "avn216", - "avn222", - "AVN252", - "AVN257", - "avn320", - "AVN362", - "AVN363Z", - "AVN420", - "avn542", - "AVN801", - "AVN801vv", - "avn801z", - "AVN805", - "AVN807ZA", - "AVN80X", - "AVN815ez", - "AVP542B", - "avt216SE", - "AVT216SE", - "AVX931", - "awm357", - "DG1004", - "DGM1104", - "DGM1104QSP", - "DVR", - "DVR (2)", - "H264 DVR", - "haven", - "IP cameras", - "IVS DVR", - "kimlong", - "KPD675", - "KPD677H", - "MainGate", - "MDR757ZB-E", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "452B", - "AVI201", - "AVM 512AP", - "avm301", - "avm357", - "AVM357a", - "AVM357ZAP/F38", - "AVM358CHF", - "AVM417A", - "AVM428", - "AVM428D", - "AVM457", - "AVM459", - "AVM542B", - "AVM542fp", - "AVM552", - "AVM561", - "avm565a", - "avm571", - "AVMU428D", - "AVN216Z", - "AVN244", - "avn284", - "AVN328ZBN", - "AVN420P", - "avn701", - "AVN813", - "dgm1104", - "Entatech", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264_ulaw/VGA" - }, - { - "models": [ - "457A", - "458C", - "AV321", - "AV5115-8B", - "AV565", - "AVC793ZC", - "AVM 503P", - "AVM2220TP", - "AVM2421", - "AVM2443", - "AVM317ZBP/F38", - "AVM328A", - "AVM357A", - "AVM357ZAP", - "AVM358", - "avm359an", - "AVM417", - "AVM417A", - "AVM428", - "AVM457ZAP", - "AVM511P", - "AVM521", - "avm542", - "AVM552", - "AVM5547", - "AVN211", - "AVN212", - "AVN244zvp/22", - "AVN284", - "AVN362", - "AVN80x", - "AVT216SE", - "AVZ592", - "dg-104", - "DG104", - "DGM 5406P/F28", - "dgm1104", - "DGM1104", - "dgm1134", - "dgm1304", - "dgm5206", - "DGM5206SVAT", - "H264", - "H264 DVR", - "h264 ip", - "IP CAMERAS", - "kpd677", - "KPD965working", - "MDR759H", - "NVM328", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264/HD1080P" - }, - { - "models": [ - "540", - "AVH-408P", - "AVM2432P", - "AVM2451T", - "avm2592L", - "AVM420UP", - "AVM5", - "AVM511p", - "AVM561", - "AVM592", - "AVN 521A", - "C04", - "dgm1104", - "dgm1105", - "dgm1304", - "KPD677", - "Other", - "YGN2003A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/video_audio/profile1" - }, - { - "models": [ - "701", - "AVC791 DVR", - "AVI201", - "AVI201zp", - "AVM328Z", - "AVM357A", - "AVM457", - "AVM459", - "AVN204", - "AVN211", - "AVN252", - "AVN257", - "AVN284", - "AVN314", - "AVN314-HS64", - "AVN314z", - "AVN362", - "AVN420", - "avn701", - "AVN801", - "AVN801zeu", - "AVN807A", - "AVN80X", - "avn80XZ", - "AVN813", - "AVx 252", - "IP cameras", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "701", - "ANM357A", - "ANN363V", - "AVC791 DVR", - "AVM328Z", - "AVM357A", - "AVM417A", - "AVM457", - "AVN212", - "AVN257", - "AVN304", - "AVN314", - "AVN314-HS64", - "AVN362", - "AVN362V", - "AVN80X", - "AVN812", - "AVN813", - "AVx 252", - "AVX 252", - "CAM04", - "DVR", - "IP cameras", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "7xx DVR Series", - "art", - "AV321", - "av801", - "AVC791 DVR", - "AVH8516", - "AVI203", - "AVIZ321", - "AVM 302AP", - "AVM301", - "AVM311P", - "AVM311P/F28", - "AVM317B", - "AVM328", - "AVM328A", - "AVM328Z", - "AVM357A", - "AVM359A", - "AVM417A", - "AVM428", - "AVM542A jpeg", - "AVM571", - "AVN211", - "AVN212", - "avn216", - "AVN252", - "AVN257", - "avn284", - "AVN362", - "AVN801", - "avn801z", - "AVN80X", - "AVN812", - "AVx 252", - "AVx 322", - "AVX931", - "AVZ516", - "AVZ529", - "awm357", - "dgm5606", - "DVR", - "DVR (2)", - "H264 DVR", - "haven", - "IP cameras", - "KPD675", - "KPD677H", - "MDR757ZB-E", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "7xx DVR Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Getvideo.cgi?Cookie=" - }, - { - "models": [ - "7xx DVR Series", - "av801", - "AVC", - "AVC2", - "AVC791 DVR", - "avc791dvr", - "AVC792 DVR", - "AVM217Z", - "AVM328Z", - "AVM357A", - "AVM459", - "AVM561", - "avm571", - "AVN211", - "AVN212", - "AVN252", - "AVN304", - "AVN420P", - "AVN801", - "avn801z", - "AVN801zeu", - "AVN80X", - "AVN812", - "AvTech-Mjpeg", - "AVx 252", - "AVZ516", - "AVZ5192", - "DVR", - "DVR (2)", - "H264", - "H264 DVR", - "IP CAMERAS", - "Itsu", - "KPD675", - "MDR688B", - "MDR757ZB-E", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "7XX DVR SERIES", - "ANN363V", - "AVC791 DVR", - "AVN212", - "AVN362", - "AVN801", - "AVN80X", - "AVX 252", - "AVX 322", - "DVR", - "DVR (2)", - "IP cameras", - "IVS DVR", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live/mjpeg" - }, - { - "models": [ - "AV5115-8B", - "AV5115-9A", - "AV5455DN-50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264.sdp" - }, - { - "models": [ - "av801", - "AVI201zp", - "AVN80X", - "Fatts", - "h264", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "AVD744", - "avm328", - "AVM328B", - "AVM328ZDP/F38", - "AVM359AN", - "AVM428A", - "AVM553JP", - "AVN801", - "AVS529", - "dgm1134", - "H264", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/h264_ulaw/HD720P" - }, - { - "models": [ - "AVH408P", - "AVM", - "AVM 521A", - "avm552", - "AVM5547", - "DGM 5606P/F28", - "DGM1105q", - "DGM2203", - "Other", - "YGN2003A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8151, - "url": "/live/video/profile1" - }, - { - "models": [ - "AVH800EA6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8085, - "url": "/live/video_audio/ch01/record" - }, - { - "models": [ - "AVH800EA6", - "ygn2003a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/video_audio/ch01_ch01/pc" - }, - { - "models": [ - "avi", - "avi201" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "avm217z", - "AVM317B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AVM217Z", - "AVM357A", - "AVM417A", - "AVN815EZ", - "AVS529", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264/SXGA" - }, - { - "models": [ - "AVM317BPP/F38" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi" - }, - { - "models": [ - "AVM328A", - "AVM365", - "h.264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/HD1080" - }, - { - "models": [ - "AVM328A", - "AVM5547", - "AVZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/ch0" - }, - { - "models": [ - "avm542" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/video/profile3" - }, - { - "models": [ - "AVM5447P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "AVN362", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "AVN362", - "AVN80X" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "live/h264_ulaw" - }, - { - "models": [ - "AVN362", - "IP CAMERAS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.h264" - }, - { - "models": [ - "AVN362" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/live.h264" - }, - { - "models": [ - "AVN812" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "avt216SE", - "EAGLE" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "/cgi-bin/guest/Video.cgi?media=JPEG&channel=16" - }, - { - "models": [ - "avt420" - ], - "type": "JPEG", - "protocol": "http", - "port": 51938, - "url": "/cgi-bin/guest/Video.cgi?media=JPEG&channel=1" - }, - { - "models": [ - "avt420" - ], - "type": "JPEG", - "protocol": "http", - "port": 51938, - "url": "/cgi-bin/guest/Video.cgi?media=JPEG&channel=2" - }, - { - "models": [ - "IP CAMERAS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "mjkj", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/avtron.json b/data/brands/avtron.json deleted file mode 100644 index 55adb56..0000000 --- a/data/brands/avtron.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Avtron", - "brand_id": "avtron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AM-SM2061-vma2", - "AM-SM2061-VMA2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/avue.json b/data/brands/avue.json deleted file mode 100644 index 606e441..0000000 --- a/data/brands/avue.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Avue", - "brand_id": "avue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2m bullet ipcam", - "AVD552MIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/avycon.json b/data/brands/avycon.json deleted file mode 100644 index 39131a6..0000000 --- a/data/brands/avycon.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Avycon", - "brand_id": "avycon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVC-EHN41FT", - "AVC-VN91FLT", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - } - ] -} \ No newline at end of file diff --git a/data/brands/avz.json b/data/brands/avz.json deleted file mode 100644 index dd5cd8b..0000000 --- a/data/brands/avz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Avz", - "brand_id": "avz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "csm-utm412" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/awfa-cam.json b/data/brands/awfa-cam.json deleted file mode 100644 index c176290..0000000 --- a/data/brands/awfa-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Awfa-cam", - "brand_id": "awfa-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/awow.json b/data/brands/awow.json deleted file mode 100644 index 801fbe4..0000000 --- a/data/brands/awow.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Awow", - "brand_id": "awow", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E97A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/axenta.json b/data/brands/axenta.json deleted file mode 100644 index 016dbe3..0000000 --- a/data/brands/axenta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Axenta", - "brand_id": "axenta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EB8909W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/axeon.json b/data/brands/axeon.json deleted file mode 100644 index 7f6a1b2..0000000 --- a/data/brands/axeon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Axeon", - "brand_id": "axeon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD 720P", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/axgio.json b/data/brands/axgio.json deleted file mode 100644 index b281bb0..0000000 --- a/data/brands/axgio.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Axgio", - "brand_id": "axgio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H03-SD", - "H03-SD(08)", - "H03-SD(8G)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/axis.json b/data/brands/axis.json deleted file mode 100644 index 931884a..0000000 --- a/data/brands/axis.json +++ /dev/null @@ -1,4127 +0,0 @@ -{ - "brand": "Axis", - "brand_id": "axis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1", - "207", - "207w", - "210a", - "211", - "211 W", - "211a", - "2130 PTZ", - "214 PTZ", - "214ptz", - "215 PTZ", - "215 ptz network camera", - "216 MFD", - "221", - "241Q Video Server", - "270", - "370w", - "Axis 215 PTZ", - "F41", - "Jake", - "M Series IP Cam", - "M1004-W", - "M1104", - "M2025-LE", - "m3007", - "M3007-PV", - "m3015", - "M3104-LVE", - "m3105", - "M3105-L", - "M3215", - "M4318", - "M5065", - "m5525", - "N/A", - "P1265", - "p1355", - "P3344", - "P3367 new", - "P3384-VE", - "P5512", - "P5512-e", - "P7214", - "q1785-le", - "q6035-e", - "Q6135-LE" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/image.jpg?size=3" - }, - { - "models": [ - "1_GENERIC", - "IP8362" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "1010", - "1034", - "1034W", - "1114", - "1144", - "207", - "207mw", - "211D", - "215 ptz", - "216 FD", - "240", - "3005", - "3045", - "3905", - "40", - "5014", - "7011", - "7614", - "A8004", - "a8105", - "Axis 211M", - "AXIS M1034-W", - "AXIS M20-LE", - "AXIS M3057-PLVE", - "AXIS P1214-E", - "AXIS P1357", - "Axis P1405-LE", - "AXIS P1427-LE", - "AXIS P1428-E", - "AXIS P3364", - "axis p3807-pve", - "AXIS P5534", - "AXIS Q1755", - "axiss", - "BLF3MP", - "CAU", - "Doorbell", - "Doorbell2", - "F34", - "F44", - "Group1", - "m1004", - "M1004-W", - "M1013", - "M1025", - "M1034", - "M1034-W", - "M1051", - "m1054", - "M1054", - "M1065-L", - "M1065-LW", - "m1113", - "M1114", - "M1124", - "M2025", - "M2025-LE", - "M2026-LE Mk II", - "M2026-LE mk2", - "M2035", - "M2035-LE", - "M3004", - "M3004V", - "M3005", - "M3005-V", - "M3006", - "M3006-V", - "M3006-V Dome", - "m3007", - "M3007", - "M3014", - "M3024-L", - "m3025ve", - "M3025-VE", - "m3026", - "M3037", - "M3044-V", - "M3045", - "m3045v", - "M3045-v", - "M3046-V", - "M3047-P", - "M3104", - "M3105-L", - "M3106-LVE", - "M3106-LVE MK II", - "M3113", - "M3114", - "M3203", - "M3204", - "M327-P", - "M5014", - "M5054", - "M5525", - "M5525-E", - "M7010", - "M7011", - "M7014", - "M7016", - "M7104", - "max", - "ONVIF", - "Other", - "P12", - "P1204", - "P1214", - "P1344", - "P1346", - "p1353", - "P1354", - "P1364", - "P1365", - "P1365 MK II", - "P1427 LE", - "P1435-E", - "P1435-le", - "P1435-LE", - "P3214-V", - "P3215-V", - "P3225-LV Mk II", - "P3225-LVE Mk II", - "P3225-V Mk II", - "P3228", - "P3245-LVE", - "P3245-V", - "P3304", - "P3343", - "P3344", - "p3346", - "P3353", - "P3354", - "P3364", - "P3364-L", - "P3365", - "P3367", - "p3384", - "P3715-PLVE", - "P3807-PVE", - "P3905", - "P3915", - "P3915R", - "p5414-e", - "P5415-E", - "P5512", - "P5512-E", - "P5515", - "P5532", - "P5534", - "P7214 VIDEO ENCODER", - "p7224", - "p7304", - "P8514", - "Q1602", - "Q1604", - "Q1615", - "Q1615 Mk II", - "Q1635", - "Q1755", - "Q1765-LE", - "Q1941-E", - "Q2901-E", - "Q3505-v", - "Q3708-PVE", - "Q3819-PVE", - "Q6032-E", - "q6042", - "Q6044", - "Q6044-E", - "Q6045", - "Q6045-EMkII", - "Q6055-E", - "Q6114-E", - "Q6125", - "Q6215", - "Q7401", - "Q7404", - "Q7406", - "q7411", - "Q7424-R-MkII", - "Q8741", - "Q8741-E", - "QL1765", - "V5915" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-media/media.amp" - }, - { - "models": [ - "1010", - "1011", - "1011w", - "1013", - "1031", - "1031-w", - "1034", - "1054", - "1103", - "1114", - "1125", - "1245", - "1310", - "1343", - "1356", - "1435", - "154", - "1615E", - "203", - "205", - "206", - "206M", - "206rw", - "206W", - "207", - "207MW", - "207W", - "209", - "209fd", - "209mfd", - "210", - "210 jpeg", - "2100", - "210A", - "211", - "2110", - "211a", - "211M", - "211W", - "212 PTZ", - "2120", - "213", - "213 PTZ", - "2130", - "2130 PTZ", - "2130R ptz", - "214", - "214 PZT", - "214ptz", - "215", - "215PTZ", - "216", - "216 FD", - "216 MFD", - "219a", - "221", - "223M", - "225", - "225 FD2", - "225fd", - "225FD", - "231D+", - "232D+", - "233d", - "2400", - "2400 SERVER SERIES", - "2401", - "240Q", - "241Q", - "241Q Video Server", - "241s", - "2420", - "243Q", - "243sa", - "297", - "3004", - "3005", - "3011", - "3024", - "3024 LVE", - "3025", - "3114", - "313", - "3203", - "3301", - "3342", - "3364", - "3905", - "5013", - "5014", - "5414E", - "5512", - "5515-E PTZ", - "5534-E", - "6055", - "Axis 211M", - "axis 221", - "axis 2400 server series", - "AXIS M1034-W", - "AXIS M1054", - "AXIS M3204", - "AXIS M7010", - "AXIS P1214-E", - "Axis P1405-LE", - "AXIS P3343", - "AXIS P3364", - "AXIS P5512-E", - "AXIS P5534", - "Axis Teich", - "Axis:M1065-L", - "axis231", - "Axix", - "cam2", - "DAXIS M Series IP Cam", - "F1004", - "F1035-E", - "F3110", - "F41", - "F44", - "FR40", - "Illustra", - "IP VIDEO SERVER", - "ipc33", - "lvii", - "M 10 Network", - "M 3027", - "m 7014", - "M1004-W", - "M1011", - "m-1011-w", - "M1011W", - "M1013", - "M1025", - "m1031w", - "M1031-W", - "M1033-W", - "M1034", - "M-1034W", - "M1052", - "m1054", - "M1054", - "M1054 NETWORK CAMERA", - "m1065-L", - "M1065-LW", - "m1101", - "M1103", - "M1104", - "m1113", - "m1114", - "M1114", - "M1124", - "M1124-E", - "M1125", - "M113", - "M1144-L", - "M1145-L", - "M114N", - "M1304", - "M2014-E", - "M2025", - "M2026-LE", - "M3004", - "M3004-V", - "M3005", - "M3005-V", - "M3006-V", - "M3007", - "M3011", - "M3014", - "m3024", - "M3025-VE", - "M3027-PVE", - "M3044-V", - "M3045", - "M3045-v", - "M3045V", - "M310", - "m3104", - "m3105-LVE", - "M3106-LVE", - "M3113", - "m3113-r", - "m3114", - "m3114-ve", - "m3203", - "m3204", - "M3204", - "m3805", - "M5013", - "M5014", - "M5014 PTZ", - "M5054 PTZ", - "M7001", - "M7011", - "M7014", - "M7016", - "m7214", - "MKii", - "mkv", - "mkvii", - "onvif", - "Other", - "P1103", - "P1204", - "P1214-E", - "P1224-E", - "P1234", - "P1311", - "P1343", - "P1344", - "P1346", - "P1347E", - "P1353", - "P1354", - "P1355", - "P1357", - "P1364", - "p1365", - "P1375", - "P1405", - "P1424-LE", - "P1425", - "P1427-LE", - "P1428-E", - "p225d", - "P3024-LVE", - "p3214", - "P3214-V", - "P3215-V", - "P3215-VE NETWORK CAMERA", - "p3224", - "p3224-v mkii", - "P3224-VE", - "P3225 LV", - "P3225-LVE", - "p3301", - "P3301", - "p3304", - "P3334", - "P3343", - "P3344", - "P3346", - "P3346-VE", - "P3353", - "P3354", - "P3364", - "p3364 L", - "P3364 VE", - "P3367", - "P3384", - "P3384-VE", - "P3707-PE", - "P3717-PLE", - "P3904-R", - "P3905-R", - "P5512", - "P5512-E", - "p5514-e", - "P5515", - "P5522", - "P5522-E", - "P5532", - "p5532 ptz", - "p5532-e", - "P5532-E", - "p5534", - "p5534-e", - "p5544", - "P5624", - "p5624-E", - "P5635-E", - "p7126", - "P7214", - "p7216", - "PC133", - "pin", - "PTZ 214", - "q1755", - "Q1765", - "Q1765-LE", - "Q1921", - "Q3708", - "Q3709", - "Q6032", - "Q6032-E", - "Q6034", - "Q6042E", - "Q6044-E", - "Q6045-E", - "Q6114E", - "Q6115-E", - "Q6128E", - "Q6155E", - "Q7401", - "Q7404", - "Q7406", - "Q7424-R-MKII", - "Q8414-lvs", - "V5915" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "1010", - "205", - "206m", - "207", - "207w", - "209FD", - "2100", - "210A", - "211", - "2110", - "211A", - "211m", - "212 PTZ", - "214", - "216fd", - "2400", - "2400 Server Series", - "2401+ Video Server", - "240Q", - "241Q VIDEO SERVER", - "Hof", - "Laube", - "M1033", - "M206", - "M3007", - "m3204", - "Other", - "P1311", - "P1405-LE", - "P3225-V", - "P3707-PE", - "p5522-e" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1010", - "1011", - "1025", - "1114", - "1311", - "2025M-LE", - "205", - "206", - "206 REV2", - "206M", - "206W", - "207", - "207MW", - "207W", - "209FD", - "209fd-r", - "210", - "2100", - "210A", - "211", - "2110", - "211A", - "212", - "212 PTZ", - "2120", - "213 PTZ", - "2130", - "2130R", - "213ptz", - "214", - "214ptz", - "215 PTZ", - "215ptz", - "216 FD", - "216 MFD", - "221", - "232D", - "233D", - "2400", - "2401+ Video Server", - "240Q", - "241Q", - "241Q Video Server", - "241S", - "3114", - "3301", - "3354", - "5515-E PTZ", - "5534-E", - "7701", - "a11s", - "AXIS M7010", - "AXIS P1214-E", - "AXIS P3343", - "Illustra", - "IP video server", - "M 10 Network", - "M1004-W", - "M1011", - "M1011-W", - "M1013", - "M1014", - "M1014 Network", - "M1014 Network Camera", - "M1025", - "M1031", - "m1031w", - "m1054", - "M1054 Network Camera", - "m1101", - "M1103", - "M1104", - "m1113", - "M1114", - "m1125", - "M1144-L", - "M2025", - "M2025-LE", - "m211", - "M3004", - "M3005", - "M3005-V", - "M3006-V", - "M3007", - "m3014", - "M3024-L", - "M3025", - "M3027", - "M3045-V", - "M3203", - "M5014", - "M5014 PTZ", - "M7001", - "M7014", - "M7016", - "MKii", - "mkv", - "MKVII", - "OQ6032-E", - "Other", - "p12", - "P1204", - "P1214", - "P1224-E", - "p1234", - "p1320", - "P1344", - "P1346", - "P1347E", - "P1355", - "P1357", - "P1364", - "p1405-LE", - "P1435-E", - "P1435-le", - "P3214-V", - "P3215-V", - "P3225 LVE", - "P3227-LVE", - "P3228-LV", - "P3301", - "p3304", - "P3343", - "p3344", - "P3344", - "P3346", - "P3353", - "P3354", - "P3363", - "P3364 L", - "P3364-l", - "P3367", - "P3384", - "P5415-E", - "P5532-E", - "P5635-E", - "P5635E Mk II", - "P7210", - "P7214", - "P7214 VIDEO ENCODER", - "P7216", - "P7304", - "PE-1214E", - "Q1755", - "Q1922", - "Q6032-E", - "Q6035-E", - "Q6042-E", - "Q6044", - "Q6044-E", - "Q6045-E", - "Q6045-EMKII", - "Q6055", - "Q6115-E", - "Q7401", - "Q7424-R-MKII" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "1010", - "1054", - "205", - "206", - "207", - "207MW", - "207W", - "209", - "210", - "2100", - "211", - "2110", - "211D", - "212 PTZ", - "213 PTZ", - "214", - "214 PTZ", - "214ptz", - "215 PTZ", - "216 FD", - "216 MFD", - "216fd", - "223mfd", - "233D", - "240Q", - "241Q Video Server", - "3024 LVE", - "331", - "361631", - "axis 2400 server series", - "AXIS M1054", - "axis1034", - "axism206", - "F41", - "f44", - "M1004", - "M1004-W", - "M1011", - "M1011-W", - "M1013", - "m1031", - "M1031-W", - "m1054", - "M1054 NETWORK CAMERA", - "m1101", - "M1113", - "M1113_Orbita", - "M1114", - "M3004", - "m3005", - "M3005-V", - "M3006", - "M3007", - "M3011", - "M3014", - "M3024", - "M3024-L", - "M3024-LVE", - "m3025ve", - "M3025-VE", - "M3026-VE", - "M3045-V", - "m3105", - "M3114", - "M3203", - "Other", - "P1343", - "P1344", - "P1347", - "P1355", - "P1365 Mk II", - "p1405", - "p1427", - "P1427-LE", - "P3215-VE NETWORK CAMERA", - "P3225-V", - "p3301", - "P3322-E", - "P3343", - "P3344", - "P3346", - "P3363", - "p3364", - "p3364 L", - "P3374-LV", - "P3384", - "p5522-e", - "p5534", - "p5534-e", - "P5534E", - "ptz214", - "Q1602", - "Q1604", - "Q1604-E", - "q1785-le", - "Q1922-E", - "Q1941-E", - "Q6034", - "q6035-e", - "Q6035-E", - "Q6045-C", - "Q6045-EMKII" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "1010", - "1011", - "1025", - "1125", - "205", - "207MW", - "209FD", - "2100", - "211", - "212 PTZ", - "2130R", - "2130R ptz", - "231D", - "2400", - "240Q", - "241Q Video Server", - "3024 LVE", - "5522-E", - "5624E", - "7014", - "921", - "AXIS M3057-PLVE", - "ILS", - "M1025", - "M1031", - "M1031-W", - "m1034-w", - "M1054 Network Camera", - "M1144-L", - "M2025-LE", - "M3004", - "M3004-V", - "M3007", - "M3045-V", - "M3113-R", - "m3114", - "m3203", - "M7014", - "Other", - "P1355", - "P1357", - "p1445-le", - "p3214 ve", - "P3215-V", - "P3215-VE NETWORK CAMERA", - "P3304", - "p3344", - "P3346", - "P3353", - "P3354", - "P3707-PE", - "p3717", - "p5534-e", - "P7216", - "q6045", - "Q6045-E", - "Q7401", - "spy" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "1011", - "206", - "207", - "207w", - "209fd", - "210", - "211", - "211m", - "212 PTZ", - "213 ptz", - "2130", - "2130 PTZ", - "214 PTZ", - "215 ptz", - "215 ptz network camera", - "216 FD", - "216MFD", - "221", - "223m", - "2401+", - "240Q", - "241Q Video Server", - "7614", - "AXIS M3204", - "AXIS Q1755", - "F44", - "M1004-W", - "M1013", - "M1031-W", - "M1054", - "M1065-L", - "M1124-E", - "M1134", - "M1145-L", - "M2025-LE", - "M2026-LE", - "M2026-LE Mk II", - "m2035", - "M2036-LE", - "M215", - "M3004", - "m3004-v", - "M3005V", - "M3006", - "m3014", - "m3015", - "M3024-L", - "m3025ve", - "m3026", - "M3027", - "m3045v", - "M3045-v", - "M3058-PLVE", - "M3064-V Dome", - "M3065", - "M-3065", - "M3065- V", - "M3067-P", - "M3075", - "M3085-V", - "M3104-LVE", - "m3105", - "m3105-l", - "m3114", - "M3114-R", - "m3203", - "m3204", - "M3204", - "M4206-LV", - "M4327-P", - "M4328-P", - "M5000-G", - "m5525e", - "M5525-E", - "M7011", - "M7104", - "ms3104-lve", - "ONVIF", - "P12", - "P12 MKII", - "P1405-E", - "P1425-LE", - "P1427-LE", - "p1445-le", - "P1447LE", - "P1455-LE", - "p215", - "P3214-V", - "P3225 LV Mk II", - "P3225-LV", - "P3225-LVE Mk II", - "P3225-V Mk II", - "P3227-LVE", - "P3245-LV", - "P3267-LV", - "P3268-LV", - "p3304", - "P3343", - "p3344", - "p3346", - "p3354", - "p3364", - "p3364 L", - "p3364 VE", - "p3365", - "P3367", - "P3374-LV", - "P3704", - "P3707-PE", - "P3717-PLE", - "P3807", - "p3874", - "P5512", - "p7224", - "ptz", - "PTZ 212", - "ptz 214", - "Q1604", - "Q1614", - "Q1615", - "Q1775", - "Q3708-PVE", - "Q3709", - "q6035-e", - "Q6045-E", - "Q6155-E", - "Q7401" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "url": "/mjpg/1/video.mjpg" - }, - { - "models": [ - "1011", - "1013", - "1031W", - "105", - "1054", - "1427", - "206", - "207-202", - "207-204", - "207-207", - "207MW", - "207W", - "210", - "2100", - "2100 H", - "210a", - "211", - "2110", - "212 PTZ", - "2120", - "213", - "214 PZT", - "214ptz", - "215 PTZ", - "216 FD", - "216 MFD", - "216MDF", - "221", - "225fd", - "2400 SERVER SERIES", - "3114", - "3344", - "M1004-W", - "M1011", - "M1011-W", - "M1031-W", - "M1033-W", - "M1034W", - "M1103", - "M1125", - "M1144-L", - "M2026-LE MK II", - "M3004", - "M3005", - "M3006", - "M3007", - "M3011", - "m3014", - "M3026", - "M3045V", - "M3065-V", - "M3114", - "M3203", - "m3204", - "M5014", - "M5065", - "Other", - "P1214", - "P1343", - "P1344", - "P1347-E", - "P1353", - "P1378-LE", - "P3215-VE NETWORK CAMERA", - "P3301", - "P3304", - "P3344", - "P3346", - "P3346-VE", - "P3363", - "p3364", - "P3364 L", - "p3364 VE", - "P3365", - "P3367", - "p5414-e", - "p5522-e", - "p5534", - "P5534-E", - "P5635-E", - "Q1765", - "Q3709", - "Q6034", - "Q6035", - "Q6044", - "Q6128E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1011", - "1013", - "1033", - "1034", - "1114", - "1615E", - "200", - "205", - "206", - "207", - "207MW", - "207W", - "209 MFD", - "210", - "2100", - "210A", - "211", - "211m", - "212 PTZ", - "213", - "213 PTZ", - "214ptz", - "215", - "215 PTZ", - "221", - "223", - "223m", - "225fd", - "233D", - "2400 SERVER SERIES", - "241Q", - "241Q Video Server", - "243Q VIDEO SERVER", - "3004", - "3005", - "AXIS 213", - "AXIS M1054", - "AXIS P1428-E", - "fdp7-3", - "M1004-W", - "M1011", - "M1011-W", - "M1013", - "M1014 Network Camera", - "m1025", - "M1031", - "M1031-W", - "M1033-W", - "M-1034W", - "M1054", - "M1113", - "M1124", - "M2025", - "M3004", - "M3005V", - "m3007", - "M3011", - "M3114", - "M3114-VE", - "m3204", - "M5014", - "Other", - "P1214", - "P1311", - "P1343", - "P1344", - "P1346", - "P1347E", - "P1355", - "P1365", - "P1427-LE", - "P1428-E", - "P1448-LE", - "P3214-V", - "P3215-VE NETWORK CAMERA", - "p3301", - "P3343", - "P3344", - "P3353", - "P3354", - "P3364", - "P3367", - "PTZ 212", - "Q6000E", - "Q6155E", - "V5915" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1011", - "1214", - "207", - "207MW", - "207w", - "210", - "2100", - "211", - "211 W", - "2110", - "212", - "215 PTZ", - "225 FD", - "233d", - "233D", - "240Q", - "241Q", - "241Q Video Server", - "241S", - "270w", - "3014", - "5915", - "axis 207mw", - "Axis PTZ", - "f44", - "IP video server", - "M1011", - "M1011-W", - "M1013", - "M1025", - "M1054", - "M1054 Network Camera", - "M1113", - "M2025-LE", - "M3004", - "M3006-V", - "M3014", - "m3065-v", - "m310", - "M3106-LVE MK II", - "m3114", - "m3203", - "M3204", - "M5013", - "Other", - "P1344", - "P1347E", - "p1353", - "P1354", - "p1355", - "P1357", - "P1365", - "P1435-E", - "P3027", - "p3203", - "P3214-V", - "P3215-VE NETWORK CAMERA", - "P3343", - "P3344", - "p3354", - "P3363", - "P3364", - "P3367", - "P3807", - "P3905-R", - "P5534", - "Public Guardian", - "q1615 mk iii", - "Q1755", - "Q3505", - "Q6055" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1011", - "1013", - "10142", - "1054", - "1110", - "1245-le", - "2026", - "205", - "206", - "206M", - "207", - "207MW", - "207W", - "210", - "2100", - "210A", - "211", - "2110", - "211m", - "212 PTZ", - "213 PTZ", - "2130R ptz", - "213ptz", - "214 PTZ", - "214ptz", - "215", - "215 ptz", - "215 PTZ", - "216FD", - "216MFD", - "221", - "223", - "225 FD", - "232D", - "232D+", - "2400 Server Series", - "2401+ VIDEO SERVER", - "240Q", - "241Q", - "241Q Video Server", - "270w", - "3024 LVE", - "3304", - "3364", - "6052", - "7014", - "A8105-E", - "AXIS M1034-W", - "AXIS M1054", - "Axis P5534", - "Axis PTZ", - "AXIS-P5624", - "b45", - "F34", - "IP video server", - "LEYKADA", - "M1004-W", - "M1011", - "M1011 w", - "M1011W", - "M1013", - "M1031", - "m1031w", - "M1034-W", - "m1035-w", - "M1045-LW", - "m1054", - "M1054", - "M1054 Network Camera", - "M1103", - "M1104", - "M1135", - "M1143-L", - "M1144-L", - "M2025-LE", - "M2026-LE", - "M2026-LE mk2", - "M206", - "M3004", - "M3004V", - "M3005", - "M3005V", - "M3006-V", - "M3007", - "M3007-PV", - "M3024-LVE", - "M3026", - "M3037", - "M3044V", - "M3044-WV", - "M3045-V", - "M3047-P", - "M3057-PLVE", - "M3058-PLVE", - "M3064-V Dome", - "m3065-v", - "m3075-v", - "M3085-V", - "m31", - "m310", - "m3105", - "m3105-l", - "m3105lve", - "M3113", - "M3114", - "M3203", - "M3204", - "M3304", - "M4216-V", - "M5014", - "M5054", - "M5055", - "M7001", - "M7014", - "mkv", - "mkvii", - "Other", - "P12", - "P1311", - "P1347e", - "P1354", - "P1357", - "P1368-E", - "P1375-E", - "P1405-E", - "p1425le", - "P1448-LE", - "P1455-LE", - "P3215-VE NETWORK CAMERA", - "P3225 LV Mk II", - "P3225 VE", - "P3227-LVE", - "P3228-LVE", - "P3245-LVE", - "P3245-V", - "p3301", - "P3304", - "P3344", - "P3346", - "P3354", - "P3364", - "P3364-L", - "P3364-LV", - "p3365", - "P3367", - "P3374-L", - "p3374-v", - "P3384", - "p3446", - "P3717-PLE", - "P3719-PLE", - "P3738-PLE Panoramic", - "P3807", - "P3905-R", - "P5414-E", - "p5522-e", - "p5534", - "P5624E", - "P7214 Video Encoder", - "P7216", - "P7701", - "PTZ", - "ptz 214", - "Q1645", - "Q1647-LE", - "Q1700", - "Q1755", - "Q1765", - "Q1765-LE", - "Q1785-LE", - "Q1786-LE", - "Q3708", - "Q3708-PVE", - "Q6032", - "Q6032-E", - "Q6042-E", - "Q6045-EMKII", - "Q6055", - "Q7404", - "Q7436", - "Q8414-LVS", - "V5914 PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "1011", - "1025", - "1054", - "1056", - "1145", - "1346", - "1347", - "1435", - "2025M-LE", - "205", - "206", - "206 rev2", - "206M", - "206w", - "207", - "207MW", - "207w", - "208 OEM", - "209", - "209 MFD", - "209fd", - "209FD-R", - "210", - "2100", - "210A", - "211", - "211 W", - "2110", - "211A", - "211-LSO", - "211m", - "212", - "212 PTZ", - "2120", - "2130", - "214", - "214 PTZ", - "214 PZT", - "214ptz", - "215", - "215 PTZ", - "216 MFD", - "221", - "223", - "223M", - "225FD", - "232D+", - "233", - "241Q", - "241Q Video Server", - "241S", - "3005v", - "3301", - "3344", - "5414E", - "5515-E PTZ", - "5915", - "A210", - "AXIS M1034-W", - "AXIX", - "M1004", - "M101", - "M1011", - "M1011W", - "M1013", - "M1025", - "M1030", - "M1031", - "M1031W", - "M1033-W", - "M1034", - "M1034-W", - "M1054", - "M1054 Network Camera", - "M1104", - "M1113", - "M1114", - "M1124", - "M1124/-E", - "M1125", - "M1144-L", - "M1145-L", - "M2014", - "M2014-E", - "M2025-LE", - "M3004", - "M3004-V", - "m3005", - "M3005-V", - "M3006", - "M3007", - "m3014", - "M3026-new", - "M3026-VE", - "M3044", - "m3045v", - "M3045-V", - "M3046-V", - "M3113-R", - "M3113-VE", - "M3114-VE", - "M3203", - "M3204", - "M5013", - "M5014", - "M7014", - "MKii", - "ML1113", - "NMPHC", - "OQ6032-E", - "Other", - "P1204", - "P1224-E", - "P1343", - "P1344", - "P1346", - "P1347-E", - "p1353", - "P1354", - "P1357", - "P1364", - "P1405", - "p1405-LE", - "p-1428e", - "P1428-E", - "P1435-LE", - "p1445-le", - "P1448-LE", - "P3214-V", - "P3215-VE NETWORK CAMERA", - "P3225 LVE", - "P3227-LVE", - "p3301", - "p3301m", - "P3322-e", - "P3344", - "P3363", - "P3364", - "p3364 VE", - "P3367", - "P3367 new", - "P3375", - "P33XX", - "P3904-R", - "P5512", - "p5514-e", - "P5522-e", - "P5532-E", - "p5534", - "P5534-E", - "P5624-E", - "P5654-E PTZ", - "P7210", - "P7214 VIDEO ENCODER", - "PTZ 212", - "Q1604", - "Q1604-E", - "Q1614", - "Q1756", - "Q6032", - "Q6032-E", - "Q6034", - "Q6035e", - "Q6045-E", - "Q6055", - "Q6055-E", - "Q6115-E", - "Q7401", - "V5915" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "1011", - "1011W", - "1025", - "1031", - "1031-W", - "1034W", - "1354", - "1356", - "1367", - "1435", - "1645", - "286H", - "297", - "3004", - "3106", - "3114", - "3301", - "3355", - "3364", - "3517", - "5635-e", - "7-1031-rtsp", - "a8105", - "a8105-e", - "AXIS M1034-W", - "AXIS M20-LE", - "AXIS M3044-V", - "AXIS M3204", - "AXIS P1357", - "AXIS P1428-E", - "AXIS P3364", - "AXIS P5534", - "axism3203", - "AXIS-P3115", - "AXIS-P5624", - "Edge", - "f1005-3", - "F1005-E", - "M 1765", - "M10", - "M1004-W", - "M1011", - "M1011-W", - "M1014", - "M1031", - "M1031-W", - "M1033-W", - "M1045-LW", - "m1054", - "M1054 NETWORK CAMERA", - "M1065-L", - "M1065-LW", - "m1103", - "M1103", - "M1104", - "m1105", - "m1113", - "M1114", - "M1124-E", - "M1125", - "M113", - "M1135", - "M1145-L", - "M2014-E", - "M2025-LE", - "M2026-LE MK2", - "M20-LE", - "m2206", - "M3004", - "M3004V", - "M3005", - "M3006", - "M3006-V", - "M3007", - "M3025", - "M3025-VE", - "M3026", - "M3044V", - "M3045v", - "M3045-V", - "M3046", - "M3064", - "M3065- V", - "m3065-v", - "M3066-V", - "M3075-V", - "M3085", - "M3105-LVE", - "M3106", - "M3106-LVE MK II", - "M3106-LVE MKII", - "M3113", - "M3114-r", - "M3203", - "M5013", - "M5014", - "m5054", - "M5065", - "m5525e", - "M5525-E", - "M5526-E", - "N243EW2", - "ONVIF", - "Other", - "P12", - "P1214-E", - "P1344-E", - "P1347-E", - "P1353", - "p-1354", - "P1354", - "p1355", - "P1357", - "P1364", - "P1365", - "P1368-E", - "P1375", - "P1375-E", - "P1378-LE", - "P1405E", - "p1428-e", - "P1435-E", - "P1435-LE", - "P1448-LE", - "P1455", - "P1455-LE", - "P20/30", - "p3175", - "p3214", - "P3214-V", - "P3224-V MK II", - "P3225 LV", - "P3225 VE", - "P3225-V", - "P3245", - "P3245-LVE", - "P3245-V", - "P3247-LV", - "P3265-LV", - "P3301", - "P3334", - "P3343", - "P3344", - "P3346", - "P3346-VE", - "P3353", - "P3354", - "P3364", - "P3364 L", - "p-3364-l", - "P3364-LVE", - "P3367", - "P3375", - "P3375-V", - "P3707-PE", - "P3719-PLE", - "P3905-R", - "P5414", - "P5414-E", - "P5514", - "P5534", - "p5534-e", - "P5544", - "P5624-E", - "P5635-E", - "P5654-E", - "pp3374-v", - "Q1602", - "Q1604", - "Q1615", - "Q1615 MK II", - "Q1615 MK III", - "Q1615E", - "Q1645", - "Q1765-LE", - "Q1775", - "Q1785-LE", - "Q1786-LE", - "Q1798-LE", - "Q1808", - "Q3505", - "Q3515", - "Q3517", - "Q6034", - "Q6034-E", - "Q-6035", - "Q6045-EMKII", - "Q6055-E", - "Q6075-E", - "Q6114-E", - "Q6115-E", - "Q6125-LE", - "Q6215", - "Q6215-LE", - "Q6315-LE", - "V5915" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp?videocodec=h264&resolution=640x480" - }, - { - "models": [ - "1011", - "1011W", - "205", - "206", - "206M", - "206W", - "207", - "207mine", - "207mw", - "207MW", - "207w", - "207W", - "209FD", - "210", - "210 225", - "210 252", - "2100", - "210A", - "211", - "211 W", - "2110", - "211a", - "211M", - "211W", - "212 ptz", - "212 PTZ", - "2120", - "213", - "213 ptz", - "213PTZ", - "214 PTZ", - "214ptz", - "215", - "215 PTZ", - "215 ptz network camera", - "216 FD", - "216 MFD", - "216fd", - "216MFD", - "221", - "223m", - "223M", - "225FD", - "232D", - "233D", - "2400 SERVER SERIES", - "2401 SERVER SERIES", - "2401+ VIDEO SERVER", - "241Q", - "241S", - "241s server", - "243Q Video Server", - "AXIS 211M", - "AXIS 221", - "AXIS TEICH", - "AXIS-ESCOLA", - "IP VIDEO SERVER", - "m1011", - "M1011", - "M1011W", - "M1011-W", - "M1013", - "M1031", - "M1031-W", - "M-1034W", - "M1054 NETWORK CAMERA", - "M3114-VE", - "Other", - "P1311", - "P1344", - "P3344", - "P3367", - "P5512", - "PTZ 212", - "PTZ 214" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "1011w", - "1031", - "1031-W", - "1054", - "1103", - "1114", - "1125", - "1343", - "1344", - "1346", - "1357", - "1365", - "1435-le", - "1615E", - "1755", - "205", - "206", - "206M", - "206W", - "207", - "207MW", - "207W", - "210", - "2100", - "211", - "211 W", - "212 PTZ", - "2130", - "213PTZ", - "221", - "2400 SERVER SERIES", - "2401 SERVER SERIES", - "241Q", - "241S", - "3204", - "7001", - "7001 m", - "A8105-E", - "AXIS 1", - "AXIS M1054", - "AXIS M3057-PLVE", - "AXIS M3204", - "AXIS P1214-E", - "AXIS P1357", - "axis p322-lve mk", - "AXIS P3364", - "AXIS P5534", - "AXIS Q1755", - "AXIS Q3505", - "Axius", - "F9111", - "IP VIDEO SERVER", - "M1004-W", - "M1011", - "M1011W", - "M1011-W", - "M1013", - "M1025", - "M1031W", - "M1034", - "M1045-LW", - "M1054", - "M1054 NETWORK CAMERA", - "m1103", - "M1103", - "M1104", - "m1113", - "M1113", - "M1114", - "M1124", - "M1134", - "M1137", - "M2025-LE", - "M2026-LE", - "M2026-LE MK2", - "M3004", - "M3005", - "M3005-V", - "M3006-V", - "M3007", - "M3014", - "M3024", - "M3024-L", - "M3024-LVE", - "M3025-VE", - "M3027", - "M3027-PVE", - "M3037", - "M3045", - "M3045V", - "M3047-P", - "M3058-PLVE", - "M3085-V", - "m3105-l", - "M3105LVE", - "M3113", - "M3113-VE", - "M3114", - "M3114-E", - "M3114-VE", - "m3203", - "M3203", - "M3204", - "m3402", - "M5014", - "M5014 PTZ", - "M5055", - "M5085", - "M5525-E", - "M7001", - "M7014", - "OQ6032-E", - "Other", - "P1204", - "P1224-E", - "P1245", - "P1343", - "P1344", - "P1344-E", - "P1346", - "P1347", - "P1354", - "p1355", - "P1355", - "p1357", - "P1357", - "P1364", - "P1365", - "p1405e", - "P1425-LE", - "P1427-LE", - "P1435-E", - "P1435-LE", - "P1445-E", - "p1445-le", - "P1448-LE", - "P3215-V", - "P3215-VE NETWORK CAMERA", - "P3225 VE", - "P3225-LV", - "P3225-LVE", - "P3227-LVE", - "p3301", - "P3301", - "p3304", - "P3343", - "P3344", - "P3346", - "P3353", - "p3354", - "P3354", - "P3364", - "p3364 L", - "p3364 VE", - "P3365", - "P3367", - "p33xx", - "P3717", - "P3717-PLE", - "P3904-R", - "P3905-R", - "P4707-PLVE", - "P5512", - "P5512-E", - "P5514-E", - "P5522", - "p5522-e", - "P5532-E", - "p5534-e", - "P5534E", - "p5534-vlc", - "P5655-E", - "P7214", - "P7216", - "P7304", - "Q1604-E", - "Q1615E", - "Q1755", - "Q1775", - "Q1808", - "Q1910", - "q2901-e", - "Q3505", - "Q3505-V", - "Q3515", - "Q3708", - "Q3709", - "Q6034-E", - "Q6035", - "q6035-e", - "Q6035-E", - "Q6042-E", - "Q6044", - "Q6045", - "Q6045-E", - "Q6045-EMkII", - "Q6045-EMKII", - "Q6055", - "Q6114-E", - "Q6125-le", - "Q6155-E", - "Q7041", - "Q7401", - "Q7404", - "Q7411", - "Q7XXX", - "Q8741-E", - "V5915" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp" - }, - { - "models": [ - "1013", - "1014", - "1114", - "1124", - "1145", - "1245", - "1344", - "1755", - "205", - "206", - "206M", - "206W", - "207", - "207MW", - "207W", - "209FD", - "209FD-R", - "209MFD", - "210", - "2100", - "211", - "2110", - "2113", - "211a", - "211M", - "212", - "212 PTZ", - "2120", - "2130", - "2130R ptz", - "213PTZ", - "214", - "214 PTZ", - "214ptz", - "215 PTZ", - "216", - "216FD", - "221", - "223m", - "223w", - "225 FD", - "232D", - "232D+", - "233D", - "240", - "2400", - "2400 SERVER SERIES", - "2401 SERVER SERIES", - "2401 video server", - "2401+ Video Server", - "240Q", - "241q", - "241Q", - "241Q VIDEO SERVER", - "241S", - "2600", - "3004", - "3301m", - "3344", - "6044E", - "A8004", - "Axis 213", - "Axis Fix", - "AXIS P1428-E", - "Axis PTZ", - "Axis332", - "AXIX", - "IP VIDEO SERVER", - "M1004-W", - "m1011", - "M1011", - "M1011-W", - "M1013", - "M1014", - "M1014 NETWORK CAMERA", - "M1025", - "M1031-W", - "M1033-W", - "m1034", - "M1034-W", - "M1054", - "M1054 NETWORK CAMERA", - "M1065-LW", - "M1103", - "M1104", - "M1114", - "M1124", - "M1125", - "M113", - "M1144-L", - "M2014-E", - "M2026-LE mk2", - "M3004", - "M3004-V", - "M3005", - "M3005V", - "M3007", - "M3011", - "M3014", - "M3024", - "M3024-L", - "m3025", - "M3025-VE", - "M3027", - "M3045-V", - "M3046V", - "M3048", - "M3065-V", - "M3104", - "M3113-R", - "M3114-VE", - "M3204", - "M5014", - "M5014 PTZ", - "M7001", - "M7014", - "OQ6032-E", - "Other", - "p1214", - "P1214", - "P1214-E", - "P1333", - "P1344", - "P1344-E", - "P1346", - "P1355", - "p1405", - "p1405e", - "P1405-LE", - "P1435-LE", - "P1445-LE", - "P3214-V", - "P3215-VE Network Camera", - "P3224-V Mk II", - "P3225-V", - "P3225-VE Mk II", - "P3301", - "p3304", - "P3343", - "P3344", - "P3346", - "p3354", - "P3363", - "P3364", - "p3364 L", - "P3364 VE", - "P3364-LVE", - "p3364VE", - "P3367", - "P3374-LV", - "P3375", - "P3707-PE", - "p3904", - "P3905", - "P3915R", - "P5414", - "P5414-E", - "P5415-E", - "P5512", - "P5512-e", - "p5514", - "P5514-e", - "P5515", - "p5525", - "p5532-e", - "P5534", - "p5534-e", - "P7214 Video Encoder", - "p7224", - "Q1425E", - "Q1602", - "Q1604", - "Q1755", - "Q1765-LE", - "Q1921", - "Q3515", - "Q3708", - "Q3709", - "Q6032", - "Q6032-E", - "Q6032-E Network Camera", - "Q6035", - "Q6035-E", - "Q6044", - "Q6044-E", - "Q6054", - "Q6055-E", - "Q6115-E", - "Q7041", - "Q7401", - "Q7404", - "Q7406", - "Q7436", - "Q7XXX", - "thermal", - "V5915" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "1014", - "SpeedDome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "1014", - "205", - "206", - "207", - "207MW", - "207W", - "210", - "2100", - "210A", - "211", - "211 W", - "211a", - "211M", - "212 PTZ", - "2120", - "213 PTZ", - "2130R", - "214 PTZ", - "214ptz", - "215 ptz", - "215 PTZ", - "216 MFD", - "221", - "225", - "225FD", - "233D", - "240", - "2400", - "2400 Server Series", - "2401 Server Series", - "2401+ Video Server", - "240Q", - "241Q", - "241S", - "3024", - "6505", - "AXIS 221", - "DAOXANH", - "F34", - "F44", - "M1011", - "M1011-W", - "M1031-W", - "M1114", - "M3007", - "M3037", - "M3047-P", - "m3204", - "M7014", - "Other", - "P3346", - "P3367", - "P3707", - "P3707-PE", - "p5522-e", - "p5534-e", - "P5635-E", - "P7210", - "P7214", - "P7214 VIDEO ENCODER", - "P7304", - "ptz 214", - "Q1755", - "Q3708", - "Q7404" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "1025", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "1031", - "1427", - "205", - "206", - "206 rev2", - "206M", - "206W", - "207", - "207MW", - "207w", - "209FD", - "209MFD", - "210", - "2100", - "210A", - "211", - "2110", - "211m", - "212 PTZ", - "2120", - "2130R", - "214 PTZ", - "214ptz", - "216FD", - "221", - "225 FD", - "243Q", - "247S", - "apsporting", - "AXIS P1428-E", - "Hex Grote C", - "M1004-W", - "M1011", - "M-1011-W", - "m1031w", - "M1031-W", - "M1033", - "M1034-W", - "M1114", - "M1125", - "M3004", - "M3005", - "M3006-V", - "M3024", - "M3024-L", - "M3045-V", - "M3048-P", - "m3105-l", - "M3203", - "m3204", - "M7001", - "OQ6032-E", - "Other", - "P1343", - "P1344", - "P1353", - "P1357", - "p1425le", - "P3225-V", - "p3304", - "P3344", - "P3346-VE", - "P3364", - "P3384-VE", - "P5414-E", - "P5512", - "P5512-e", - "P5512E", - "p5534-e", - "Q1604", - "Q1615", - "Q1765", - "Q6230", - "Q7401", - "Q7404" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "1031-w", - "m1101", - "M3006-V Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/axis-media/media.amp?videocodec=mpeg4" - }, - { - "models": [ - "1031-w", - "1144", - "1447", - "207", - "211", - "214 PTZ", - "5FM3045-V", - "7614", - "axis M2525-LE", - "AXIS M3047-V", - "AXIS M7010", - "AXIS P1427-LE", - "AXIS P3343", - "AXIS Q3505", - "axism3203", - "I8016-LVE", - "M1004-W", - "M1013", - "M1031-W", - "m1034-w", - "M1034-W", - "M1045-LW", - "M1054", - "M1054 Network Camera", - "M1114", - "m1125", - "M2025-LE", - "M2026-LE mk2", - "M2035-LE Bullet", - "M2036-LE", - "M3004", - "m3005", - "M3005-V", - "m3014", - "M3015", - "M3020", - "M3024-L", - "M3044-V", - "M3045-v", - "M3045V", - "m3075-v", - "M3085-V", - "M3086V", - "M3104L", - "m3105", - "M3105-LVE", - "M3106-LVE", - "m3114", - "M3115", - "M3115-LVE", - "m3203", - "M3204", - "M3205", - "M4206-V", - "M5014 PTZ", - "M-5525-E PTZ", - "Other", - "P12-MkII", - "P1343", - "P1346", - "p1353", - "P1354", - "P1375-E", - "P1377-LE", - "P1405-E", - "P1425-LE", - "P1428-E", - "P1435-LE", - "P1447-LE", - "P1448-LE", - "P1467", - "p3214 ve", - "P3214-V", - "P3215-V", - "P3225-V Mk II", - "P3245-LV", - "P3247-LV", - "p3248-lv", - "P3248-LVE", - "P3255-LVE", - "P3265", - "p3265-lve", - "P3265-V", - "P3267-LV", - "P3267-LVE", - "p3301m", - "P3344", - "P3346-VE", - "p3364 L", - "P3364-L", - "P3367", - "P3375-VE", - "P3707", - "p3715-PLVE", - "P3717-PLE", - "P3719-PLE", - "P3727-PLE", - "P3807", - "P3915-R mk ii", - "P3925-R", - "p5534-e", - "P5624", - "P5635-E", - "P5635E Mk II", - "P5655-E", - "P7214", - "Q 1602", - "Q1612", - "Q1614", - "q1715", - "Q1775", - "Q3505MK2", - "Q6045-E", - "Q6045-EMkII", - "Q6055-E", - "q615ee", - "Q6705-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/axis-media/media.amp?videocodec=h264&resolution=640x480" - }, - { - "models": [ - "1054", - "241S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "1135", - "1435", - "Area View", - "AXIS M3204", - "Axis M-5525-E PTZ", - "AXIS Q3505", - "axism3203", - "c360p", - "FA1125", - "M1014", - "M1065-L", - "M1065-LW", - "M1145-L", - "M2014-E", - "M2026-LE Mk2", - "m3007", - "m3014", - "M3045-v", - "M3046-V", - "M3066", - "M3205", - "M4216-LV", - "ONVIF", - "Other", - "p-1354", - "P1354", - "P1364", - "P1405-E", - "P1447-LE", - "P3214-V", - "P3215-V", - "P3225 LV", - "P3225-V MkII", - "P3245-LVE", - "P3344", - "p3346", - "p3354", - "P3364-L", - "P3364-LV", - "P3707-PE", - "P3717-PLE", - "P3807", - "P3807-PVE", - "P5512", - "P5635-E", - "P5654-E", - "P7214", - "PTZ", - "Q1615 Mk II", - "Q1645", - "q1755", - "Q1765-LE", - "Q3708", - "vsavfsa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/axis-media/media.amp?videocodec=h264" - }, - { - "models": [ - "1234", - "205", - "206", - "207", - "207w", - "209fd", - "211", - "214 PTZ", - "215fd", - "216 FD", - "Axis 2100", - "AXIS P3343", - "M1031W", - "M1031W2", - "M1065-L", - "M2026-LE mk2", - "m3045v", - "m3204", - "M5000-g", - "M5013", - "P1265", - "P1343", - "P1364", - "P3375-V", - "P3904-R", - "P5654-E", - "P5655-E", - "Q1604", - "V5915" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8088, - "url": "/axis-cgi/mjpg/video.cgi?camera=1&resolution=640x480" - }, - { - "models": [ - "1301" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "1357", - "206", - "206 rev2", - "207", - "209fd", - "211", - "212 ptz", - "214 PTZ", - "215 ptz network camera", - "216 FD", - "216MFD", - "221", - "240Q", - "241Q Video Server", - "5065", - "5074", - "axis", - "AXIS 1", - "AXIS 211", - "axis 221", - "AXIS M1054", - "AXIS M3204", - "AXIS P1427-LE", - "M1004-W", - "m1113", - "M1134", - "M2025-LE", - "M2026-LE", - "M207W", - "m3007", - "m3014", - "M3027-PVE", - "M3065- V", - "M3105-L", - "M3113", - "m3203", - "M3203", - "M3204", - "m3205", - "M3206-LVE", - "M5013", - "M5054 PTZ", - "M5065", - "m5075", - "Other", - "P12", - "P12 MKII", - "P1265", - "p1353", - "P1354", - "P1365 Mk II", - "P1427-LE", - "P1435-LE", - "P3225 LV Mk II", - "P3225-V Mk II", - "P3225-VE Mk II", - "P3245-V", - "P3267-LV", - "P3301", - "P3343", - "P3343-VE", - "P3344", - "P3354", - "P3375-V", - "P3904-R", - "P5414-E", - "Q1755", - "v5925" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=320x240" - }, - { - "models": [ - "1755", - "201", - "205", - "206", - "207", - "207w", - "207W", - "209fd", - "209FD", - "209mfd", - "209MFD", - "210", - "210 manu", - "2100", - "211", - "212 PTZ", - "2120", - "213 PTZ", - "2130", - "213ptz", - "214 PTZ", - "215 PTZ", - "221", - "223M", - "225FD", - "240Q", - "241Q Video Server", - "241Q VIDEO SERVER", - "241s server", - "3344", - "Area View", - "AXIS 1", - "axis 207w", - "axis p1343", - "AXIS P3343", - "Axis:M1065-L", - "M1011", - "M1013", - "m1031", - "M1031-W", - "M-1034W", - "M1054 Network Camera", - "M1054 NETWORK CAMERA", - "M1103", - "M1104", - "M1113", - "M1114", - "M1135", - "M2035", - "M207W", - "M3004", - "m3004-v", - "M3004-v", - "M3005", - "M3005-V", - "M3006-V", - "M3007", - "m3014", - "M3025", - "m3026", - "M3045", - "M3047-P", - "M3064-V Dome", - "M3066-V", - "M3085", - "M3104-LVE", - "M3113-VE", - "M3114", - "M3114-E", - "m3204", - "M3204", - "M5014", - "M5014 PTZ", - "ms3104-lve", - "Other", - "P1204", - "P1214", - "P1265 ok!", - "P1344", - "P1354", - "p1357", - "P1435-LE", - "p215", - "P3224-LV Mk II", - "P3225 LV Mk II", - "P3225-LV", - "P3225-VE Mk II", - "P3245-LV", - "P3268-LVE", - "P3343", - "P3344", - "p3346", - "p3354", - "p3364", - "P3364", - "p3364 L", - "P3364-LV", - "P3367", - "P3375-V", - "P3407-PE", - "P3719-PLE", - "P3738-PLE", - "P5365", - "P5512", - "P5512E", - "P5534", - "P5534E", - "P7214", - "P8514", - "Q1602", - "Q1604-E", - "Q175", - "Q1755", - "Q1775", - "Q6035", - "Q6035e", - "Q6042E", - "Q6052E", - "Q6135-LE", - "q7041", - "Q7401", - "V5925", - "V5983", - "vsavfsa" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "200", - "200+", - "2100", - "240", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "fullsize.jpg?camera=1" - }, - { - "models": [ - "200+", - "2100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "hugesize.jpg?camera=[CHANNEL]" - }, - { - "models": [ - "2021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/view/view.shtml" - }, - { - "models": [ - "205", - "206", - "207W", - "2100", - "211", - "211 W", - "214ptz", - "215 PTZ", - "221", - "240", - "2400", - "2400 Server Series", - "2401+ Video Server", - "240Q", - "241Q", - "241s", - "M1025", - "Other", - "P3707-PE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "205", - "207", - "207MW", - "211", - "211 W", - "212 ptz", - "215 ptz", - "221", - "M1065-LW", - "M3007-PV", - "m3014", - "M3037", - "m3203", - "M3203", - "M3204", - "M43", - "MK3225", - "P1344", - "P134-E", - "P1354", - "P1354-E", - "p3346", - "P3364-LV", - "P3367", - "P3904-R", - "P5414-E", - "Q1604", - "Q3708", - "South", - "V5915" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1&resolution=320x240" - }, - { - "models": [ - "206", - "axis 221", - "M1031-W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=[PASSWORD]&resolution=480x360" - }, - { - "models": [ - "206", - "206 rev2", - "207", - "207w", - "209fd", - "210", - "211", - "211 W", - "212 ptz", - "214 PTZ", - "215ptz", - "216 FD", - "221", - "225 FD", - "233d", - "AXIS 1", - "Axis 211M", - "axis 221", - "dsDS", - "M0346-V", - "M1004-W", - "m1011", - "M1031-W", - "M1065-L", - "M1144-L", - "M2025", - "M2025-LE", - "M3004", - "m3007", - "m3014", - "M3024-L", - "M3026", - "M3044-WV", - "M3045-v", - "M3046-V", - "M3047-P", - "M3065- V", - "m3114", - "m3203", - "M5013", - "M5014 PTZ", - "M5054 PTZ", - "M5525-E", - "M7104", - "MK11", - "MK3225", - "OQ6032-E", - "Other", - "p 10", - "P1204", - "P1254", - "P1344", - "p1355", - "P1427-LE", - "P1435-le", - "P3214-V", - "P3225 LV Mk II", - "P3301", - "p3304", - "P3343", - "p3344", - "p3354", - "p3364", - "p3364 L", - "P5512", - "p5532-e", - "Q1604", - "Q6045-EMkII", - "Q6075-E", - "Q7404", - "Reyntec", - "STD", - "V5925" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "206", - "210" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "207", - "2100", - "216 FD", - "C Cube L", - "c360p", - "Companion Bullet LE", - "Companion Cube L", - "Companion Dome V", - "Companion Eye Mini L", - "Companion V", - "eye lve", - "m3007", - "M3014", - "m3025", - "M3037", - "M3045-V", - "M3064-V Dome", - "M3086-V", - "m3105-l", - "P12-MkII", - "P1365", - "p3301", - "P3719-PLE", - "P5512", - "P5512-e", - "P5514-E" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/1/video.mjpg?Axis-Orig-Sw=true" - }, - { - "models": [ - "207", - "240Q", - "axism3203", - "p3365" - ], - "type": "JPEG", - "protocol": "http", - "port": 8081, - "url": "/jpg/1/image.jpg" - }, - { - "models": [ - "207", - "211" - ], - "type": "JPEG", - "protocol": "http", - "port": 8081, - "url": "/view/index.shtml" - }, - { - "models": [ - "207w", - "210", - "210a", - "211", - "211 W", - "213 ptz", - "214 PTZ", - "214 svt", - "215ptz", - "216 FD", - "221", - "225 FD", - "axis 221", - "M1104", - "M3011", - "Q6045-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp" - }, - { - "models": [ - "207W", - "241Q", - "241S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "210" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "2100", - "2120", - "2130 PTZ", - "214 PTZ", - "216FD", - "241Q Video Server", - "AXIS M1054", - "M1045-LW", - "M1145-L", - "meins", - "p3265-lve", - "P3365", - "Q1785-LE" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/image.jpg" - }, - { - "models": [ - "2100", - "2120", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "2100", - "b85" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "2100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "fullsize.jpg?camera=[CHANNEL]" - }, - { - "models": [ - "2100", - "211" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image640x480.jpg" - }, - { - "models": [ - "2100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image320x240.jpg" - }, - { - "models": [ - "2100", - "2401 Server Series", - "ip2100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/hugesize.jpg?camera=[CHANNEL]&clock=on&motion=0" - }, - { - "models": [ - "2100", - "2400", - "2401 Server Series", - "ip2100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fullsize.jpg?camera=[CHANNEL]&clock=on&motion=0" - }, - { - "models": [ - "2100", - "p3344" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "2100", - "2110" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "210a", - "AXIS P3364", - "M1014", - "M1134", - "M2014-E", - "M5014", - "P39", - "P3904-R" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=1280x720" - }, - { - "models": [ - "210A", - "216 FD", - "AXIS 1", - "M1134", - "M2014-E", - "P3245-LVE", - "p3344", - "P3707-PE", - "PTZ 212" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=640x480" - }, - { - "models": [ - "211", - "m3105-LVE", - "M5014 PTZ", - "P1343", - "P5635-E", - "Q3708" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.sdp" - }, - { - "models": [ - "211", - "P1435-LE", - "P5414-E", - "Q3708" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - }, - { - "models": [ - "211", - "m1011", - "M1045-LW", - "M2025", - "M3066-V", - "m3113-r", - "M5054 PTZ", - "P1447-LE", - "P3343" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/axis-cgi/mjpg/video.cgi?resolution=640x480&fps=15" - }, - { - "models": [ - "211", - "212 ptz", - "M1031-W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "211", - "a8004-ve", - "M2026-LE Mk II", - "P1214-E", - "P1346", - "Q1765-LE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg?COUNTER" - }, - { - "models": [ - "211 W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/view/viewer_index.shtml?id=16" - }, - { - "models": [ - "211a", - "3203", - "axis p1343", - "M1065-LW", - "m3014", - "M3045v", - "M3113", - "m3203", - "M5525-E", - "MK3225", - "p1204", - "P3215-V", - "P3807-PVE", - "P5635-E", - "Q1765-LE", - "Q6032-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "212 PTZ", - "216 FD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "SnapshotJPEG?Resolution=320x240" - }, - { - "models": [ - "212PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/jpg/image.cgi?date=1&clock=1&camera=0&resolution=320x240" - }, - { - "models": [ - "213 PTZ", - "233" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "214 PTZ", - "240Q", - "FA51", - "M1004-W", - "M2025-LE", - "p3304", - "p3354", - "p3364", - "p3364 L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=1280x800" - }, - { - "models": [ - "215 ptz", - "m3105", - "P1435-le", - "Q1602", - "Q6000E", - "Q6215-LE" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=320x240" - }, - { - "models": [ - "215 PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "215 PTZ", - "241S", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "215 PTZ", - "215 PTZ NETWORK CAMERA", - "2401+", - "7614", - "m3005", - "P1354", - "P3225 LV Mk II", - "P7214 Video Encoder", - "Q6032-E" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - }, - { - "models": [ - "221", - "p3715-PLVE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "2400", - "2401 Server Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/hugesize.jpg?camera=[CHANNEL]&clock=on" - }, - { - "models": [ - "2400 server series", - "240Q" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/4/image.jpg" - }, - { - "models": [ - "2400 Server Series", - "2401+ Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image.jpg" - }, - { - "models": [ - "2400 SERVER SERIES", - "M1004-W", - "P12 MkII", - "p1428-e", - "P3717", - "P3717-PLE", - "Q6032-E" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg?camera=1" - }, - { - "models": [ - "2400 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/jpg/image.cgi?camera=2&resolution=320x240&compression=25" - }, - { - "models": [ - "2400 Video Server", - "AXIS P3707-PE" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/jpg/image.cgi?camera=3&resolution=320x240&compression=25" - }, - { - "models": [ - "2401 Server Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/halfsize.jpg?camera=[CHANNEL]&clock=on&motion=0" - }, - { - "models": [ - "240q" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/4/video.mjpg" - }, - { - "models": [ - "240Q" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/3/video.mjpg" - }, - { - "models": [ - "240Q", - "241Q Video Server", - "M7014" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/2/image.jpg" - }, - { - "models": [ - "240Q", - "241Q Video Server" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/3/image.jpg" - }, - { - "models": [ - "241Q", - "241S", - "M1011", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "241Q" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "241S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "241S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "241S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "241S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2n-IP-Verso", - "M1011-W", - "m1101", - "m3014", - "M3024-L", - "P1435-le", - "P5635-E", - "p9334" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "3005", - "AXIS P3343", - "m3014", - "P12 MkII", - "p3354", - "Q 1602", - "Q1615 Mk II" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "3005v", - "3045", - "3203", - "A8105-E", - "AXIS M1034-W", - "AXIS M1054", - "AXIS M3057-PLVE", - "axis p1343", - "AXIS P3343", - "AXIS P3364", - "F41", - "F9111", - "M1013", - "M1033-W", - "M1054", - "M1065-LW", - "m1113", - "m1114", - "M1125", - "M1135", - "M2025-LE", - "M2026-LE mk2", - "M2036", - "m30", - "M3004", - "m3014", - "M3044-V", - "M3045V", - "M3057-PLVE", - "M3085-V", - "m3104", - "M3104-LVE", - "m3105", - "M3106-LVE", - "m3113-r", - "M3115", - "M3116 LVE", - "m3203", - "M3905-R Dome Camera", - "M4206-V", - "M5014", - "M5014 PTZ", - "M5065", - "M-5525-E PTZ", - "M7014", - "M7016", - "M7104", - "ME2025-LE", - "ME-2025-LE", - "ML3106-L Mk II", - "P12 MkII", - "p1204", - "P1343", - "P1344", - "P1344-E", - "P1347", - "P1365", - "P1365 Mk II", - "P1367", - "P1367-E", - "P1375", - "P1405-E", - "P1405-LE", - "P1425-LE", - "P1427-LE", - "P3204", - "P3225-LV Mk II", - "P3225-VE Mk II", - "P3228-LVE", - "P3245-LV", - "p3265-lve", - "p3301", - "P3343", - "p3344", - "p3346", - "p3354", - "p3364", - "p3364 L", - "P3367", - "P3375-V", - "P3715-PLVE", - "P3719-PLE", - "P3807-PVE", - "P3905-R", - "P5220", - "P5415-E", - "P5624-E", - "P7304", - "PTZ", - "Q1604", - "Q1615", - "Q1645", - "Q1755", - "Q3515", - "Q3536-LVE", - "Q3708-PVE", - "Q6034-E", - "q6035-e", - "Q6044-E", - "Q6054", - "q60xx", - "Q6125-le", - "Q6135-LE", - "Q6215-LE", - "Q7401", - "Q7406", - "rad", - "Shop", - "Stange", - "V5915" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/axis-media/media.amp" - }, - { - "models": [ - "5522", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "7614" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=4" - }, - { - "models": [ - "7614", - "f44" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=2" - }, - { - "models": [ - "7614", - "P7214 Video Encoder" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=3" - }, - { - "models": [ - "a8105-e", - "Axis M2025-LE", - "M1055-L", - "M2025-LE", - "M3005-V", - "M3104-LVE", - "P3344", - "Q7401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/axis-media/media.amp?" - }, - { - "models": [ - "ADT8021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "AXIS M3057-PLVE", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8083, - "url": "/axis-cgi/mjpg/video.cgi?user=[USERNAME]&pwd=[PASSWORD]&camera=2" - }, - { - "models": [ - "ben" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/2/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/axium.json b/data/brands/axium.json deleted file mode 100644 index b543c10..0000000 --- a/data/brands/axium.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Axium", - "brand_id": "axium", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/axp.json b/data/brands/axp.json deleted file mode 100644 index 877a645..0000000 --- a/data/brands/axp.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Axp", - "brand_id": "axp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ca640h3", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ca640h3", - "CA640O4/5I10WB-K", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CC1280O4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/ayrstone.json b/data/brands/ayrstone.json deleted file mode 100644 index 71496eb..0000000 --- a/data/brands/ayrstone.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ayrstone", - "brand_id": "ayrstone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ayrscout" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FR4020a2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/azemax.json b/data/brands/azemax.json deleted file mode 100644 index a1a191d..0000000 --- a/data/brands/azemax.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Azemax", - "brand_id": "azemax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "610" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "610S", - "IP610", - "ip610s", - "IP610S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/azone.json b/data/brands/azone.json deleted file mode 100644 index 9adc6e8..0000000 --- a/data/brands/azone.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Azone", - "brand_id": "azone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "960", - "960p", - "K9604-W", - "Other", - "TL-X5F440" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "960P", - "AZ-B047" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "AZ-B047", - "K9604-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "AZ-B047" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/azpen.json b/data/brands/azpen.json deleted file mode 100644 index 813cc90..0000000 --- a/data/brands/azpen.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Azpen", - "brand_id": "azpen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Tab" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/aztech.json b/data/brands/aztech.json deleted file mode 100644 index bb30b1f..0000000 --- a/data/brands/aztech.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "brand": "Aztech", - "brand_id": "aztech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "303", - "c303" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "402", - "wipc402" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "AVM357Z" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "AZTECH WIPC409HD", - "Other", - "WIPC402", - "WIPC408HD", - "WIPC409HD", - "WIPC409HD-E", - "WIPC411FHD", - "wpc408hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "AZTECH WIPC409HD", - "WIPC409HD", - "WIPC411FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other", - "WIPC302" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other", - "WIPC302" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "WIPC302" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "wipc402", - "WIPC402" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other", - "WIPC302", - "WIPC401" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other", - "WIPC", - "wipc402", - "WIPC410" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other", - "WIPC401", - "WIPC408HD", - "WIPCawrrm" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "Other", - "WIPC402" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "WIPC 480HD", - "WIPC408", - "WIPC408HD", - "WPC408HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cgi-bin/rtspStream/[CHANNEL]" - }, - { - "models": [ - "WIPC 480HD", - "wpc408hd" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live1.sdp" - }, - { - "models": [ - "WIPC302" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WIPC302", - "WIPC401", - "WIPC403" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "WIPC401" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "wipc402", - "WIPC408HD", - "WPC408HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "wipc402", - "WIPC408HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - }, - { - "models": [ - "wipc402" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "wipc402" - ], - "type": "JPEG", - "protocol": "http", - "port": 8081, - "url": "/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WIPC408HD", - "WIPC408HD2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "WIPC410" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "wpc408hd" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/b-qtech.json b/data/brands/b-qtech.json deleted file mode 100644 index 7d2435e..0000000 --- a/data/brands/b-qtech.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "B-qtech", - "brand_id": "b-qtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3007", - "bq-nr3007" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "720p", - "BQ-ND7202RW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "BQ-ND7202RW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "BQ-NO5WS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "BQ-P6182M", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "NR3007" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/b-series.json b/data/brands/b-series.json deleted file mode 100644 index 78e136b..0000000 --- a/data/brands/b-series.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "brand": "B-series", - "brand_id": "b-series", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3456" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "543", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "543" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "584" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "ACM-V3002" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "RC8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/ba-vision.json b/data/brands/ba-vision.json deleted file mode 100644 index dcdc973..0000000 --- a/data/brands/ba-vision.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Ba Vision", - "brand_id": "ba-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PROFILE S", - "X Series", - "xseries" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "S6203y-wr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/babelens.json b/data/brands/babelens.json deleted file mode 100644 index 7015b69..0000000 --- a/data/brands/babelens.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Babelens", - "brand_id": "babelens", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BABEN7HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/babicka.json b/data/brands/babicka.json deleted file mode 100644 index 483cd5d..0000000 --- a/data/brands/babicka.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Babicka", - "brand_id": "babicka", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/babycam.json b/data/brands/babycam.json deleted file mode 100644 index ee5e108..0000000 --- a/data/brands/babycam.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Babycam", - "brand_id": "babycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "baby", - "Ideanext" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "IDEANEXT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPT303" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2600, - "url": "/" - }, - { - "models": [ - "white" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4_1.sdp" - }, - { - "models": [ - "yoosee" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/baksa.json b/data/brands/baksa.json deleted file mode 100644 index 06f5676..0000000 --- a/data/brands/baksa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Baksa", - "brand_id": "baksa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dani" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/balitech.json b/data/brands/balitech.json deleted file mode 100644 index b2bf77d..0000000 --- a/data/brands/balitech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Balitech", - "brand_id": "balitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/balkon.json b/data/brands/balkon.json deleted file mode 100644 index 71156ed..0000000 --- a/data/brands/balkon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Balkon", - "brand_id": "balkon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms.jpg" - }, - { - "models": [ - "ttt" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/balkong.json b/data/brands/balkong.json deleted file mode 100644 index 811094d..0000000 --- a/data/brands/balkong.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Balkong", - "brand_id": "balkong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Billig" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/balzan.json b/data/brands/balzan.json deleted file mode 100644 index 2ce35b9..0000000 --- a/data/brands/balzan.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Balzan", - "brand_id": "balzan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Man Cave", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/banzoo.json b/data/brands/banzoo.json deleted file mode 100644 index e5db383..0000000 --- a/data/brands/banzoo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Banzoo", - "brand_id": "banzoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8021" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "8021" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/barco.json b/data/brands/barco.json deleted file mode 100644 index fa3a982..0000000 --- a/data/brands/barco.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Barco", - "brand_id": "barco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BC30003" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "BC30003" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "BC30003" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/bardi.json b/data/brands/bardi.json deleted file mode 100644 index 0a7feaf..0000000 --- a/data/brands/bardi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bardi", - "brand_id": "bardi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Outdoor Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "Outdoor Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/barlus.json b/data/brands/barlus.json deleted file mode 100644 index 993dbfe..0000000 --- a/data/brands/barlus.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Barlus", - "brand_id": "barlus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "304", - "304noir", - "316", - "ip68", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "316", - "B2G5MPBX10", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "316", - "316 TR", - "IP68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "IPC5MPIR-Pbx10", - "UW-S2-2C6X20", - "zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/bascom.json b/data/brands/bascom.json deleted file mode 100644 index 6840625..0000000 --- a/data/brands/bascom.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Bascom", - "brand_id": "bascom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hd plus", - "HD-18", - "hd-40", - "HD4P", - "HD-50" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "HD-18", - "HD-19", - "HD40", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/video_audio/profile1" - }, - { - "models": [ - "HD-19" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/video_audio/profile2" - }, - { - "models": [ - "HD-19" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - } - ] -} \ No newline at end of file diff --git a/data/brands/basler.json b/data/brands/basler.json deleted file mode 100644 index 638e828..0000000 --- a/data/brands/basler.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "brand": "Basler", - "brand_id": "basler", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1280C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg?session_id=0&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "bip1300", - "bip-2", - "bip2-1300", - "IP Camera (2)", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg?session_id=[CHANNEL]&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "bip-2", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "bip-2", - "IP CAMERA (2)", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "BIP-2", - "IP CAMERA (2)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "BIP-2", - "BIP2-1300", - "BIP-640c", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpeg?stream=[CHANNEL]" - }, - { - "models": [ - "BIP-2", - "bip2-1300c-dn", - "IP CAMERA (2)", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg" - }, - { - "models": [ - "BIP-2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "BIP2-1000C-DN", - "IP Camera (2)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpeg?session_id=[CHANNEL]&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg?stream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bavision.json b/data/brands/bavision.json deleted file mode 100644 index a655703..0000000 --- a/data/brands/bavision.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Bavision", - "brand_id": "bavision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "Profile S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "S6203Y-WR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bayit.json b/data/brands/bayit.json deleted file mode 100644 index 59e3ff0..0000000 --- a/data/brands/bayit.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Bayit", - "brand_id": "bayit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1818", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "BH1960WH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/baytech.json b/data/brands/baytech.json deleted file mode 100644 index 904cd49..0000000 --- a/data/brands/baytech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Baytech", - "brand_id": "baytech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.0.7" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bb10.json b/data/brands/bb10.json deleted file mode 100644 index 99e9461..0000000 --- a/data/brands/bb10.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bb10", - "brand_id": "bb10", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Droid" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/bcs.json b/data/brands/bcs.json deleted file mode 100644 index c644928..0000000 --- a/data/brands/bcs.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "brand": "Bcs", - "brand_id": "bcs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1100", - "4200", - "BCS-P-212RWSA", - "DIMP4200AIR", - "Other", - "P-415RWM", - "recorder", - "SCIP1100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1130AIR", - "DMIP2130AIR-M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "1130AIR", - "1200AIR", - "BCS-TIP3200IR-E", - "BIP7201", - "Other", - "TCP5200-IR E", - "TIP3200", - "universal" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "2E05EC2PAU00103", - "BCS-SDIP1204IR-II", - "DMIP", - "DMIP2401IR-M-IV", - "Other", - "TIP8801AIR-IV", - "universal" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "2E05EC2PAU00103" - ], - "type": "MJPEG", - "protocol": "http", - "port": 1935, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "414", - "BCS-P-212RWSA", - "P-212R3S-E", - "P-415RWM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/videoMain" - }, - { - "models": [ - "4401" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "BCS NVR", - "BCS-TIP3200IR-E", - "DIMP 3200IR-E", - "DIPM", - "DMIP", - "DMIP maciej", - "DMIP3401AIR", - "Other", - "TCP-3200IR_E", - "TCP5200-IR E", - "TIP3200", - "TIP3200IR-E", - "TIP8801AIR-IV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "BCS-TIP3200IR-E", - "tip5300ir-e" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BCS-TIP4501IR-Ai" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DIMP", - "DIPM", - "DMIP", - "Other", - "tip5300ir-e", - "TIP8801AIR-IV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "DIMP4200AIR", - "-P-412" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "DMIP120AIR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "HGW-b" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - }, - { - "models": [ - "HGW-bm" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "TCP5200-IR E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bdpower.json b/data/brands/bdpower.json deleted file mode 100644 index 78cbf69..0000000 --- a/data/brands/bdpower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bdpower", - "brand_id": "bdpower", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BD-IP02" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/beaulieu.json b/data/brands/beaulieu.json deleted file mode 100644 index 09cc298..0000000 --- a/data/brands/beaulieu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Beaulieu", - "brand_id": "beaulieu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/beb3.json b/data/brands/beb3.json deleted file mode 100644 index bf6cb78..0000000 --- a/data/brands/beb3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Beb3", - "brand_id": "beb3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/becam.json b/data/brands/becam.json deleted file mode 100644 index 769ddba..0000000 --- a/data/brands/becam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Becam", - "brand_id": "becam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SSkantoor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bedee.json b/data/brands/bedee.json deleted file mode 100644 index dc568e7..0000000 --- a/data/brands/bedee.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Bedee", - "brand_id": "bedee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.0 Mega", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "CT0291", - "CT0291BKEU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/beenocam.json b/data/brands/beenocam.json deleted file mode 100644 index 743374f..0000000 --- a/data/brands/beenocam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Beenocam", - "brand_id": "beenocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SN-PC-4007W10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/belco.json b/data/brands/belco.json deleted file mode 100644 index cb02d1d..0000000 --- a/data/brands/belco.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Belco", - "brand_id": "belco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HX-Series WiFi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/belder.json b/data/brands/belder.json deleted file mode 100644 index 6c61b32..0000000 --- a/data/brands/belder.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Belder", - "brand_id": "belder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P3SB-8MP-EU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/belkin-netcam.json b/data/brands/belkin-netcam.json deleted file mode 100644 index caada40..0000000 --- a/data/brands/belkin-netcam.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Belkin Netcam", - "brand_id": "belkin-netcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F7D7602V1", - "HD NETCAM", - "netcam", - "Wifi Netcam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "HD NETCAM", - "WIFICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NETCAM HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/belkin.json b/data/brands/belkin.json deleted file mode 100644 index b37adb4..0000000 --- a/data/brands/belkin.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Belkin", - "brand_id": "belkin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F7D7601v1", - "F7D7601V1", - "F7D7602v1", - "F7D7602V1", - "HD NetCam", - "NETCAM", - "NetCam F7D7601v1", - "NetCam HD", - "Netcam HD+", - "NetCam HDx", - "NetCam HDxx", - "open", - "WiFi NetCam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "HD NETCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "netcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Other", - "WiFi NetCam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/bell.json b/data/brands/bell.json deleted file mode 100644 index 4e8c6eb..0000000 --- a/data/brands/bell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bell", - "brand_id": "bell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Doorbell" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/belle.json b/data/brands/belle.json deleted file mode 100644 index a0203bc..0000000 --- a/data/brands/belle.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Belle", - "brand_id": "belle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Edimax" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/beltech.json b/data/brands/beltech.json deleted file mode 100644 index 1a4bd8c..0000000 --- a/data/brands/beltech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Beltech", - "brand_id": "beltech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bentoo.json b/data/brands/bentoo.json deleted file mode 100644 index 991836e..0000000 --- a/data/brands/bentoo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bentoo", - "brand_id": "bentoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P2P-ICP-720P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/benyuan.json b/data/brands/benyuan.json deleted file mode 100644 index 1db5a68..0000000 --- a/data/brands/benyuan.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Benyuan", - "brand_id": "benyuan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bn-hip100hcvl/ir" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "BN-HIP200HDV-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/berger.json b/data/brands/berger.json deleted file mode 100644 index d81da73..0000000 --- a/data/brands/berger.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Berger", - "brand_id": "berger", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bersan.json b/data/brands/bersan.json deleted file mode 100644 index 3cb92cc..0000000 --- a/data/brands/bersan.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bersan", - "brand_id": "bersan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BSI-D114" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "BSI-D114" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/besder.json b/data/brands/besder.json deleted file mode 100644 index c77c303..0000000 --- a/data/brands/besder.json +++ /dev/null @@ -1,507 +0,0 @@ -{ - "brand": "Besder", - "brand_id": "besder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "1080F", - "1080P", - "1MP IP CAM", - "3024PB-I201", - "50x20-wg", - "50X50-WG", - "6004MW-HX201", - "6004MW-XMA201", - "6024", - "6024PB", - "6024PB XMA201 1080P", - "6024PB-HX201", - "6024PB-I201", - "6024PB-I20H1 2OMP", - "6024pb-jw201", - "6024PB-JW201-P", - "6024PB-XMA501", - "6024PW-HX131", - "6024pw-hx201", - "6024PW-JW131", - "6024PW-XMA201", - "6036MG", - "6036MG-POE", - "6036MG-POE-1080", - "60p36mw", - "60S36MW-HXA201", - "800W", - "8mp ptz", - "8mp-f1ww", - "8MP-F1WW", - "9015MW", - "9015MW-HX201A", - "9018mb", - "A33B", - "A8B", - "A8BQ-8MP-EU", - "A8SB", - "Bald Knob 01", - "BES-3024PB-IP201", - "Besder N8-WQ", - "BES-SD05WB", - "Bes-V01", - "C6004MW-1080P", - "C6F0SgZ3N0P5L2", - "C9F0SeZ3N0P6L0", - "C9F0SgZ3N0P8L0", - "hx-6036mg-ip201", - "HX-60S04", - "HX60S4", - "hx-60so4", - "hx-s04 1080p", - "IP_CAMERA", - "ip66", - "jw131", - "mmmm", - "Other", - "P3S", - "p3sb", - "Pro", - "R50X20", - "R6006MW-HX201", - "R6036MW", - "R6063MW", - "X6E-WEQ", - "XM530", - "xm530-R80x30-PQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/11" - }, - { - "models": [ - "1024p", - "1080P", - "1080P BES-A8B", - "1MP IP CAM", - "50x20-wg", - "6004MW-HX201", - "6004mw-ip20h1", - "6004MW-XMA501", - "6024", - "6024PB XMA201 1080P", - "6024PB-HX101", - "6024pb-hx201", - "6024PB-IP20H1", - "6024PB-XM201-3.6", - "6024PB-XMA201", - "6024PB-XMA201A", - "6024PW-HX131", - "6024PW-IP20H1", - "9015MW", - "9015MW-HX201", - "9018MB", - "BE-6006MW-IP50H1", - "BES-3024PB-IP201", - "BES-A08", - "Besder6024P-XM201-3.6", - "C6F0SGZ3N0P6L2", - "IP_CAMERA", - "N703", - "Other", - "RA80X30-PQL", - "XM510" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080F", - "1080P", - "1MP IP CAM", - "6024", - "6024PB-HX101", - "6024PB-I201", - "6024PB-XM201", - "9015mw", - "9015MW-HX201", - "9016MW-HX201", - "BES-3002PW-HX201", - "BES-9004MW-HXT201", - "C6F0SGZ3N0P6L2", - "C9F0SeZ3N0P3L0", - "hx-60so4", - "IP_camera", - "Other", - "SCNEW-02812" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080F", - "1080p", - "1080P", - "180", - "1MP IP CAM", - "50x20-wg", - "6002", - "6003", - "6004MW-HX201", - "6004mw-ip201", - "6004MW-IP20H01", - "6004mw-ip20h1", - "6004MW-XMA501", - "6024", - "6024-I101", - "6024PB XMA201 1080P", - "6024PB-HX101", - "6024PB-HX201", - "6024PB-I101", - "6024pb-i201", - "6024PB-i201", - "6024PB-I201 2.0MP", - "6024PB-I20H 2.0MP", - "6024PB-IP201", - "6024PB-IP20H1", - "6024PB-IP60H01", - "6024PB-l101", - "6024PB-XM201", - "6024PB-XMA201A", - "6024PW-101", - "6024PW-I101 720P", - "6024PW-IP131-8", - "6024PW-IP20H1", - "6024pwxma201", - "60V", - "6612mw-xma501", - "720P", - "720pPOE", - "800W", - "9012MW-IA30H1 3.0MP", - "9015mw", - "9016MW-HX201", - "9024", - "9024MW-I20H1", - "9024MW-IP101", - "960", - "BES-3006PW-IP203", - "BES-3024PB-IP201", - "C062105-IP5", - "C141216-IP012", - "C160407-P03", - "C6004MW-1080P", - "I201", - "IP_CAMERA", - "ipc", - "iptv", - "mw905-lw102", - "Other", - "RA50x10", - "RA50X10", - "XM510", - "XM530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080p", - "1080P", - "50x20-wg", - "6004MW-XMA201", - "6024PB-IA40H1", - "6024PW-HX101", - "6024PW-IP131-8", - "6024PW-XMA201", - "BES-6024MG-I40H", - "R50X20", - "RA50X20", - "x6-weq_8mp", - "XM530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "1080p", - "1080P", - "4dd1e57e2b45926f", - "6004MW-XMA201", - "6024MG-I201", - "60R18MB-XMT501", - "9015MW-HX201", - "B07Y31474X", - "Besder6024P-XM201-3.6", - "Other", - "x530", - "XM530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp?real_stream" - }, - { - "models": [ - "131", - "1MP IP CAM", - "50x20-wg", - "6024", - "6024pb-hx201", - "6024PB-I20H1 2OMP", - "6024PB-IP20H1", - "6024PB-XMA501", - "6024PW-IP131-8", - "60S04MV-XMT601", - "7004MB", - "B07Y31474X", - "BES-3024PB-IP201", - "Dome", - "IP_CAMERA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "1MP IP CAM", - "50x20-wg", - "6024PB-HX201", - "p3sb", - "RA50X20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "50x20-wg", - "P3S-8MP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "50x20-wg", - "Other", - "P05-7", - "p09-18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av0" - }, - { - "models": [ - "50x20-wg", - "Other", - "RA50X20" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "50x20-wg", - "6024", - "6024pb-mx101", - "R80X30-PQ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "50x20-wg", - "B07Y31474X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp" - }, - { - "models": [ - "50x20-wg", - "60S4MW-XMT501", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=1.sdp" - }, - { - "models": [ - "50x20-wg" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "6003MW", - "6024PB-I30H1", - "60S04MW-IP50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=0&stream=0.sdp?real_stream" - }, - { - "models": [ - "6004MW-XMA201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "6024PB-I101", - "6024PW-IP131-8", - "A22QQ", - "A80", - "BES-A08", - "CP11-68ENC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "6024PW-IP131-8", - "A33" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "6612MW-IPA50H1", - "A8Q", - "P08-23", - "X0037" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "800W", - "A8Q", - "HK-P4", - "P3S", - "R80X30-PQ", - "XM530-R80X30-PQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/live/1" - }, - { - "models": [ - "a06", - "P3SB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "A33HS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0&onvif=0.sdp?real_stream" - }, - { - "models": [ - "A6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "H26", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?usr=&pwd=" - }, - { - "models": [ - "oud" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "Sec" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/bessky.json b/data/brands/bessky.json deleted file mode 100644 index 36af646..0000000 --- a/data/brands/bessky.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bessky", - "brand_id": "bessky", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BE-IPWB200ZW" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/best-buy.json b/data/brands/best-buy.json deleted file mode 100644 index ac46b71..0000000 --- a/data/brands/best-buy.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Best Buy", - "brand_id": "best-buy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Easy Home Sentinel" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Easy Home Sentinel", - "EASY HOME SENTINEL" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "EASY HOME SENTINEL", - "Sentinel" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8554, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/best-digital.json b/data/brands/best-digital.json deleted file mode 100644 index 155c1cc..0000000 --- a/data/brands/best-digital.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Best Digital", - "brand_id": "best-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BNC-771BR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ssnadmin_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/besta.json b/data/brands/besta.json deleted file mode 100644 index 9739791..0000000 --- a/data/brands/besta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Besta", - "brand_id": "besta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CLJ100L", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/image/0.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/bestek.json b/data/brands/bestek.json deleted file mode 100644 index daa02c9..0000000 --- a/data/brands/bestek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bestek", - "brand_id": "bestek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B SERIES" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bettini.json b/data/brands/bettini.json deleted file mode 100644 index 800a983..0000000 --- a/data/brands/bettini.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bettini", - "brand_id": "bettini", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TB232B121" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/beview.json b/data/brands/beview.json deleted file mode 100644 index c055928..0000000 --- a/data/brands/beview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Beview", - "brand_id": "beview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/beward.json b/data/brands/beward.json deleted file mode 100644 index dedd151..0000000 --- a/data/brands/beward.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "brand": "Beward", - "brand_id": "beward", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1210", - "1710DM", - "2015", - "2710", - "2710R", - "B1070", - "B1710RV", - "B2.980FP", - "B2230RVZ", - "b2710dr", - "B2720RV", - "B4230RVZ", - "B5350RVZ", - "BN1250-1", - "dacha", - "DK103", - "DS06M", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "13102", - "N Series", - "N Series 2", - "N1250", - "N13102", - "N13103", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "2710-p2", - "B1011", - "b108", - "BD SERIES", - "DK103", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - }, - { - "models": [ - "4370", - "BD4640RCV", - "laguna" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264" - }, - { - "models": [ - "B1114", - "BD SERIES", - "N500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "B1710RV", - "BD Series", - "N SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "B2.920", - "BD SERIES", - "BD4330", - "BD4330D", - "bd4330dh", - "BD4640DS", - "BD4640RC", - "bw4370rv" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "B2.920F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "BD", - "BD Series", - "BD43...", - "BN1250-1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "BD Series", - "bd3370", - "BD43", - "BD43...", - "bd4330dh", - "denemeeee", - "N Series", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "BD SERIES", - "N Series", - "N1250", - "N13103", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "BD SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "BD4640RC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_1" - }, - { - "models": [ - "cd600", - "N Series", - "N Series 2", - "n300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "DSN23215PS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "n100", - "N13103", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "N1000", - "N13103" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "n500" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.pro1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "SV3210RC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/main" - }, - { - "models": [ - "SV3210RC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/bholt.json b/data/brands/bholt.json deleted file mode 100644 index 626cbff..0000000 --- a/data/brands/bholt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bholt", - "brand_id": "bholt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/bigasua.json b/data/brands/bigasua.json deleted file mode 100644 index e0ea97a..0000000 --- a/data/brands/bigasua.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bigasua", - "brand_id": "bigasua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BMT101016034" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BMT101016034" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bigfoot.json b/data/brands/bigfoot.json deleted file mode 100644 index 8abe0cd..0000000 --- a/data/brands/bigfoot.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bigfoot", - "brand_id": "bigfoot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ICAMERA-1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/bikal-ip-cctv.json b/data/brands/bikal-ip-cctv.json deleted file mode 100644 index eb913af..0000000 --- a/data/brands/bikal-ip-cctv.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Bikal Ip Cctv", - "brand_id": "bikal-ip-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B22" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user.pin.mp2" - } - ] -} \ No newline at end of file diff --git a/data/brands/biltema.json b/data/brands/biltema.json deleted file mode 100644 index f04c144..0000000 --- a/data/brands/biltema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Biltema", - "brand_id": "biltema", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "megapixel ip camera", - "motion v1", - "Other", - "piha", - "Vetej" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/binnencamera.json b/data/brands/binnencamera.json deleted file mode 100644 index 8b6515e..0000000 --- a/data/brands/binnencamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Binnencamera", - "brand_id": "binnencamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc100" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bins.json b/data/brands/bins.json deleted file mode 100644 index 1141319..0000000 --- a/data/brands/bins.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bins", - "brand_id": "bins", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5033sw-uk" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/bionics.json b/data/brands/bionics.json deleted file mode 100644 index 9526335..0000000 --- a/data/brands/bionics.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "brand": "Bionics", - "brand_id": "bionics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c7824wip", - "Robo2", - "robocam2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DOMEH264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other", - "Robo2", - "ROBOCAM 3", - "robocam2", - "ROBOT3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "ROBOCAM 4", - "t6892wp" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "ROBOCAM", - "Robocam 4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Robo2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Robocam 4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ROBOCAM 4", - "SAFECAM 4", - "safecam4", - "UNLISTED", - "WXH-118320-DCEEE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Robocam5 (ninos)", - "T6892WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Safe cam 5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/biovision.json b/data/brands/biovision.json deleted file mode 100644 index 5d96fe5..0000000 --- a/data/brands/biovision.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Biovision", - "brand_id": "biovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "biovison", - "BIOVISON", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "c6f0sg", - "C6F0SgZONOPfLt", - "C6F0SgZONOPgL2", - "HD22M102M", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/bioxo.json b/data/brands/bioxo.json deleted file mode 100644 index 4ad4522..0000000 --- a/data/brands/bioxo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bioxo", - "brand_id": "bioxo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BF342506A-RS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/bip-2.json b/data/brands/bip-2.json deleted file mode 100644 index 4dc33ea..0000000 --- a/data/brands/bip-2.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Bip-2", - "brand_id": "bip-2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1280c", - "1920" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bipcam.json b/data/brands/bipcam.json deleted file mode 100644 index 02ce2f9..0000000 --- a/data/brands/bipcam.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Bipcam", - "brand_id": "bipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002drwi", - "002drwk" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "002drwk", - "3425", - "432", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3425", - "546577" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ddns" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "F-Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipc3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/biqu.json b/data/brands/biqu.json deleted file mode 100644 index 797ff73..0000000 --- a/data/brands/biqu.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Biqu", - "brand_id": "biqu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F-Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "F-Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/birdsy.json b/data/brands/birdsy.json deleted file mode 100644 index ff0d754..0000000 --- a/data/brands/birdsy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Birdsy", - "brand_id": "birdsy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BirdsyPole" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "BirdsyPole" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/bitron.json b/data/brands/bitron.json deleted file mode 100644 index f11e8bc..0000000 --- a/data/brands/bitron.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Bitron", - "brand_id": "bitron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AV7002/0101", - "B-Focus Vari 2 AV7210/10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/biwond.json b/data/brands/biwond.json deleted file mode 100644 index 0bfc704..0000000 --- a/data/brands/biwond.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Biwond", - "brand_id": "biwond", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "i9812", - "i99812" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bl-ip-cam.json b/data/brands/bl-ip-cam.json deleted file mode 100644 index e3e73c0..0000000 --- a/data/brands/bl-ip-cam.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Bl Ip-cam", - "brand_id": "bl-ip-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1212", - "234" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "546577", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "HTC Glacier", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/black-eagle.json b/data/brands/black-eagle.json deleted file mode 100644 index a49c316..0000000 --- a/data/brands/black-eagle.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Black Eagle", - "brand_id": "black-eagle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K7-IPC100WA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/black-label.json b/data/brands/black-label.json deleted file mode 100644 index fa59246..0000000 --- a/data/brands/black-label.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Black Label", - "brand_id": "black-label", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B2601", - "BL2605", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "B2601" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "BL2305", - "BL2605" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/udp/av0_0" - }, - { - "models": [ - "BL2605" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/black.json b/data/brands/black.json deleted file mode 100644 index 2455272..0000000 --- a/data/brands/black.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Black", - "brand_id": "black", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "blk101", - "BLK-IPD102", - "BLK-IPS102M", - "IPD101", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 7070, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/blackat.json b/data/brands/blackat.json deleted file mode 100644 index 3433a34..0000000 --- a/data/brands/blackat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Blackat", - "brand_id": "blackat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ELC-FP215" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/blackberry.json b/data/brands/blackberry.json deleted file mode 100644 index a0c6a1e..0000000 --- a/data/brands/blackberry.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Blackberry", - "brand_id": "blackberry", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bold" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Bold" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Bold" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Z10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Z10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/blackcamera.json b/data/brands/blackcamera.json deleted file mode 100644 index 8a6e2c8..0000000 --- a/data/brands/blackcamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Blackcamera", - "brand_id": "blackcamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "model" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/blackfirst.json b/data/brands/blackfirst.json deleted file mode 100644 index 6a9926a..0000000 --- a/data/brands/blackfirst.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Blackfirst", - "brand_id": "blackfirst", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hi3507" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/blackview.json b/data/brands/blackview.json deleted file mode 100644 index 7f392e2..0000000 --- a/data/brands/blackview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Blackview", - "brand_id": "blackview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/blaupunkt.json b/data/brands/blaupunkt.json deleted file mode 100644 index 9e212fd..0000000 --- a/data/brands/blaupunkt.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Blaupunkt", - "brand_id": "blaupunkt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D30", - "VIO-B30", - "vio-D40", - "VIO-DP20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Vio-HS20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MTNWV2JyMjg=" - } - ] -} \ No newline at end of file diff --git a/data/brands/blink.json b/data/brands/blink.json deleted file mode 100644 index 71be8d6..0000000 --- a/data/brands/blink.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "brand": "Blink", - "brand_id": "blink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "53-024844", - "blink/blink xt camera", - "BSM00400U", - "G8T1-9402-2133-1T02", - "Mini", - "Mini Cam", - "outdoor 4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/blitzwolf.json b/data/brands/blitzwolf.json deleted file mode 100644 index 0e7e73f..0000000 --- a/data/brands/blitzwolf.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Blitzwolf", - "brand_id": "blitzwolf", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B1W", - "BW-SCI1", - "BW-SIC1", - "First", - "Other", - "SIC1", - "smart camera", - "smartcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "B1W", - "BW-SCI1", - "BW-SIC1", - "SIC1", - "smart camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/2.3gp" - } - ] -} \ No newline at end of file diff --git a/data/brands/bls.json b/data/brands/bls.json deleted file mode 100644 index 8f717de..0000000 --- a/data/brands/bls.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bls", - "brand_id": "bls", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC326G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/blu.json b/data/brands/blu.json deleted file mode 100644 index a64e190..0000000 --- a/data/brands/blu.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Blu", - "brand_id": "blu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bluipandroid" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Studio X 5.5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/blue-fish-cam.json b/data/brands/blue-fish-cam.json deleted file mode 100644 index 6af8c62..0000000 --- a/data/brands/blue-fish-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Blue Fish Cam", - "brand_id": "blue-fish-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/blue-iris.json b/data/brands/blue-iris.json deleted file mode 100644 index 4058af3..0000000 --- a/data/brands/blue-iris.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Blue Iris", - "brand_id": "blue-iris", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Iris", - "Iris v3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL]" - }, - { - "models": [ - "Iris", - "Iris v3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/[CHANNEL]" - }, - { - "models": [ - "Iris v3", - "Iris v3 H.264" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "video/cam[CHANNEL]/2.0?audio=0&stream=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/bluecherry.json b/data/brands/bluecherry.json deleted file mode 100644 index 55a2b06..0000000 --- a/data/brands/bluecherry.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bluecherry", - "brand_id": "bluecherry", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "media/mjpeg.php?multipart=true&id=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/blueeyes.json b/data/brands/blueeyes.json deleted file mode 100644 index 182ecc2..0000000 --- a/data/brands/blueeyes.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Blueeyes", - "brand_id": "blueeyes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BE-3211P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "iCam720" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/ipcam/stream.cgi?nowprofileid=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/stream.cgi?nowprofileid=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/bluejay.json b/data/brands/bluejay.json deleted file mode 100644 index f1ff5f7..0000000 --- a/data/brands/bluejay.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Bluejay", - "brand_id": "bluejay", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BCN-401" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - }, - { - "models": [ - "BCN-401" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BNC-501C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/bluepix.json b/data/brands/bluepix.json deleted file mode 100644 index d1837d8..0000000 --- a/data/brands/bluepix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bluepix", - "brand_id": "bluepix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bluestork IPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bluestork.json b/data/brands/bluestork.json deleted file mode 100644 index a93560e..0000000 --- a/data/brands/bluestork.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Bluestork", - "brand_id": "bluestork", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aman", - "BS-IPCAM/W2", - "BS-IPCAM-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "BLUEPIX IPCAM", - "BS-IPCAM-W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "BLUEPIX IPCAM-IP02", - "BS-CAM/DOME/HD", - "BS-CAM-OF/HD", - "BS-IPCAM/W2", - "Cam-R HD", - "CloudCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "BS-HOME-CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 65432, - "url": "/videostream.cgi" - }, - { - "models": [ - "BS-IPCAM/TP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BS-IPCAM/TP", - "BS-IPCAM-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BS-IPCAM/W2", - "BS-IPCAM-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BS-IPCAM-W", - "Other", - "Portail" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "fghgh" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "TP81C2300195" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/blurams.json b/data/brands/blurams.json deleted file mode 100644 index a1fe2e8..0000000 --- a/data/brands/blurams.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Blurams", - "brand_id": "blurams", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A10C", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/bmobile.json b/data/brands/bmobile.json deleted file mode 100644 index c5d8002..0000000 --- a/data/brands/bmobile.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Bmobile", - "brand_id": "bmobile", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "andriod", - "AX530", - "AX830" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "mobile rtsp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/bnc-vision.json b/data/brands/bnc-vision.json deleted file mode 100644 index fe8e9fd..0000000 --- a/data/brands/bnc-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bnc Vision", - "brand_id": "bnc-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bnt.json b/data/brands/bnt.json deleted file mode 100644 index f196be6..0000000 --- a/data/brands/bnt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bnt", - "brand_id": "bnt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BNT-5MP-840-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/boavision.json b/data/brands/boavision.json deleted file mode 100644 index 1af6c3a..0000000 --- a/data/brands/boavision.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "brand": "Boavision", - "brand_id": "boavision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P PTZ 10x zoom" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "1080P PTZ 10X ZOOM", - "4X", - "5mp", - "87.24H22M102M", - "bw8mp8x", - "Dome IR150", - "h22m102m", - "HD WIRELESS WIFI MINI PTZ", - "HD22M502M", - "HD54F", - "HD54F-4MP", - "HX-HD20H6B20A", - "hx-hd20m200as", - "HX-W54F5MP", - "IPD-E2A5L18-BS", - "IR150 30x", - "Speed Dome", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/h264major" - }, - { - "models": [ - "1080P PTZ 10X ZOOM", - "Boavision speed dome", - "by158a8aba", - "ipd-d53l02-b", - "IPD-D53M02-BS", - "IPD-E2A5L18-BS", - "IPD-E36L02", - "Other", - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "1080P PTZ 10X ZOOM", - "1080P PT'Z 5X ZOOM", - "416XNT", - "4MP", - "ABQ-A36B", - "B987W", - "C6F0SgZ0N0PfL2", - "front doorHD22M502M", - "HD IP CAMERA", - "HD WIRELESS WIFI MINI PTZ", - "hd22m", - "HD22M102M", - "HD22M-1080P", - "HD22M502M", - "HD80M", - "HHX-B03-2MPX-B03-2MP", - "HX-B03-5MP", - "HX-GK20K200AS", - "Other", - "ptz", - "PTZ", - "testmsp", - "UY-IVS2-SB6R", - "WIFI PTZ IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "1080P PTZ 5X ZOOM", - "HD22M102M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=[USERNAME]pass&balls=balls5" - }, - { - "models": [ - "1080P PTZ 5X ZOOM", - "36x", - "HD IP CAMERA", - "HX-HD20M28AS", - "R11-4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "365 degree PTZ", - "HD22M102M", - "HD22M-1080P", - "HX-W54F5MP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1/h264major" - }, - { - "models": [ - "365 DEGREE PTZ", - "4MP", - "H22M102M", - "HD IP Camera", - "HD Wifi PTZ camera", - "HD Wireless Wifi Mini PTZ", - "hd22m102m", - "hx-hc2850b1080", - "HX-HC2850B1080", - "HX-HD20H6B20A", - "hx-hd20m24as", - "MINI IR SPEED DOME", - "Other", - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "HD IP Camera", - "HD22M102M" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "HD IR Intelligent Dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "HD WIRELESS WIFI MINI PTZ", - "HD22M102M", - "IPCX-PC3034MPA-P", - "R11-4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "hd22m102m", - "HD22M102M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "HD22M102M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "HD22M102M", - "HX-W54F5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "HD22M102M", - "hx-hd50m28as" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "HD22M102M", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "hd54f", - "IPD-D53L02-B", - "IPD-D53M02-BS", - "MINI IR SPEED DOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "hd54f-5mp", - "IPD-E36L02-BS-2 series", - "sp15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "HD80M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "hdb4f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "IP DOME" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream/1/h264minor" - } - ] -} \ No newline at end of file diff --git a/data/brands/boh.json b/data/brands/boh.json deleted file mode 100644 index ca6432a..0000000 --- a/data/brands/boh.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Boh", - "brand_id": "boh", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h.264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "l series ip camera", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/bolide.json b/data/brands/bolide.json deleted file mode 100644 index 6981c6e..0000000 --- a/data/brands/bolide.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Bolide", - "brand_id": "bolide", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BN7009HA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - }, - { - "models": [ - "VCI-252-05" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "VCI-252-05" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bolin.json b/data/brands/bolin.json deleted file mode 100644 index 89c3215..0000000 --- a/data/brands/bolin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bolin", - "brand_id": "bolin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SD522B4K-IRNA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/bondfree.json b/data/brands/bondfree.json deleted file mode 100644 index 96b9174..0000000 --- a/data/brands/bondfree.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bondfree", - "brand_id": "bondfree", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BF-BK05" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/bonvision.json b/data/brands/bonvision.json deleted file mode 100644 index 9d5fc50..0000000 --- a/data/brands/bonvision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bonvision", - "brand_id": "bonvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hd22m102m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "hd22m102m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/borsystems.json b/data/brands/borsystems.json deleted file mode 100644 index 5ed5687..0000000 --- a/data/brands/borsystems.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Borsystems", - "brand_id": "borsystems", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM_720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/bortox.json b/data/brands/bortox.json deleted file mode 100644 index 1844f95..0000000 --- a/data/brands/bortox.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bortox", - "brand_id": "bortox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "corlor cctv" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/bosch.json b/data/brands/bosch.json deleted file mode 100644 index 27638ed..0000000 --- a/data/brands/bosch.json +++ /dev/null @@ -1,767 +0,0 @@ -{ - "brand": "Bosch", - "brand_id": "bosch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4000 IP HD", - "455", - "5000", - "DINION", - "DINION HD", - "dinion ip", - "DINION-IP", - "DVR RTSP 440/480/600", - "flexidome 2000hd", - "Flexidome IP INDOOR 5000 HD (CPP4)", - "flexidome ip micro 2000", - "nbc 265", - "nbc-265", - "NBC-265P", - "NBC-265W", - "NBC-455-11P", - "NDC", - "NDC-225-P", - "NDC-455", - "NTC-255-PI", - "Other", - "VG4", - "VideoJet 10", - "VIDEOJET X40", - "VIP X1", - "VIP X1 XF" - ], - "type": "JPEG", - "protocol": "http", - "port": 10600, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "4000 IP HD", - "455", - "5000", - "700", - "7000", - "7000 IP", - "7000HD", - "71022", - "800", - "Autodome", - "Autodome 7000", - "autodome jr800", - "autodome starlight 7000", - "Autodome VG5 PTZ", - "Autodome2-700", - "Autodome7xx", - "cap cam", - "ddd", - "Dinion", - "Dinion 138", - "Dinion 5000", - "Dinion 8000", - "DINION HD", - "Dinion7000", - "dmo", - "Dome", - "etet", - "flexidome", - "Flexidome", - "FlexiDome HD", - "Flexidome HP", - "Flexidome IP outdoor", - "Flexidome IP OUTDOOR 5000 IR", - "Flexidome NDN-498P", - "ghg", - "IP bullet 5000", - "junior800", - "MHM", - "nbc262", - "NBN-498-P", - "nbn-50022-v3", - "nbn921", - "NDC", - "NDC 265-P", - "NDC-225-PI", - "NDC-255-P", - "ndc265", - "NDC-265-P APA", - "NDC-274-PT", - "NDC-284-P", - "NDC-284-PT", - "NDC-455V03-21P", - "NDN 265 PIO", - "ndn832-B", - "NDN-832v-A", - "NIN733V0", - "NIN832-V0P", - "NTC", - "NTI-50022", - "NWD-495V03-20P", - "ojo", - "on 75", - "ONVIF", - "Other", - "sdds", - "second", - "Tinyon 2000 WiFi", - "Unkown", - "VG4", - "vg5-7230-epc4", - "videojet X40", - "VIP X1 XF", - "VIP X1600", - "VIP-X1600M4A", - "VIP-X1600M4S", - "vjr831" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10600, - "url": "/rtsp_tunnel" - }, - { - "models": [ - "4000 IP HD", - "455", - "495", - "500 Series 36X Day/Night Hi Res", - "700", - "7000 IP", - "7000HD", - "AUTODOME", - "autodome 4000", - "AUTODOME 7000", - "Autodome IP 4000 HD", - "AUTODOME IP 7000 HD", - "Bosch 4000", - "DINION", - "dinion ip", - "Dome", - "DVR", - "DVR RTSP 440/480/600", - "Flexi DomeIP", - "flexicome ip micro 2000 hd", - "Flexidome", - "flexidome 7000", - "Flexidome HD", - "Flexidome IP", - "Flexidome IP 7000", - "Flexidome IP INDOOR 5000 HD (CPP4)", - "Flexidome IP OUTDOOR", - "Flexidome MICRO 5MP", - "HD bullet 5K", - "ip microdome", - "IR5000", - "MC550", - "Metal MiC", - "NBC-225-P", - "nbc-265-p", - "NBC-265P", - "NBN-498-P", - "NDC 265-P", - "NDC-225-PI", - "ndc255", - "NDC-255-P", - "NDC-265-P APA", - "NDC-274P", - "NDC-455", - "NDC-455-v03-12IP", - "NDN 265 PIO", - "NDN-498-P", - "NIN-50022-A3", - "npc-20012-f2", - "NTC-255-PI", - "NTC-265-PI", - "NWC-0455-10P", - "NWC-0455-20P", - "NWC-0495-10P", - "NWD-495V03-20P", - "Other", - "VG4", - "VG4 Autodome", - "VIDEOJET 10", - "VIP X1", - "VIP X1600", - "vip10s", - "VIP-X1600M4A" - ], - "type": "JPEG", - "protocol": "http", - "port": 10600, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "4000 IP HD", - "Autodome", - "AutoDome 700 IP 24", - "Autodome II IP", - "AUTODOME IP 5000 HD", - "Flexidome IP HD", - "Flexidome IP indoor 5000 HD (CPP4)", - "Flexidome IP outdoor 5000 IR", - "Flexidome NDN-921-P", - "nbc", - "nbc265", - "nbc-265-p", - "ndc265", - "ONVIF", - "VIDEOJET X40", - "VIP X1 XF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10600, - "url": "video.h264" - }, - { - "models": [ - "500 Series 36X Day/Night Hi Res", - "7000", - "900", - "Autodome", - "Dinino", - "Dinion", - "Dinion 5000", - "DINION-IP2", - "Flexi DomeIP", - "Flexidome", - "FlexiDome 1234", - "Flexidome HD", - "Flexidome IP", - "flexidome micro 5mp", - "FlexoDome NWD-495V03-20P", - "IR5000", - "MVC455", - "nbc 265", - "nbc-225-p", - "NBC-265W", - "NDC", - "ndc 225-p", - "NDC 265-P", - "NDC-225-PI", - "NDC-255-P", - "NDC-455", - "NDN-498-V03-21S", - "NDN-832v-A", - "NIN832-V0P", - "NTC-255-PI", - "NWC-0495-10p", - "Other", - "PTZ", - "VG4 Autodome", - "VG4i", - "VG4i1", - "VideoJet 10", - "videojet X40", - "VIP X1", - "VIP X1600", - "VIP-X1600M4A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "7000", - "7000 IP", - "ddd", - "Flexidome IP 5000 HD", - "Gamma Shredder Fluff Discharge7000 IP", - "NBN-498-P", - "NDI-50022_A3", - "NTS-265-PI", - "NWC-0455-10P", - "NWC-0495-10p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "7000 IP", - "AUTODOME 7000", - "Dinion", - "DINION HD", - "DVR", - "DVR RTSP 440/480/600", - "Flexidome", - "Flexidome IP", - "Flexidome IP HD", - "Flexidome IP OUTDOOR", - "flixidome", - "MI 7000", - "NBC-225-P", - "NBN-498-P", - "ndc-225-p", - "NDC-225-PI", - "NDC-255-P", - "NDC-455", - "NIN-733V10", - "NIN-833V10", - "NWC-0455-20P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "7000 IP", - "7000HD", - "NDC-274" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "7000 IP", - "Flexidome", - "Flexidome IP INDOOR 5000 HD (CPP4)", - "FLEXIDOME IP MICRO 2000", - "Flexidome NDN-921-P", - "IP 5000", - "nbc 265", - "NDC-255-P", - "PTZ", - "Starlight 6000 vr23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1/stream1/Profile1" - }, - { - "models": [ - "Autodome", - "Autodome II IP", - "Autodome IP 5000 IR", - "Dinion", - "DINION HD", - "Dinion starlight 8000", - "Dinion_h264", - "Flexidome", - "Flexidome HD", - "Flexidome IP", - "Flexidome ndn-498-p", - "IP BULLET 5000", - "nbc-225-p", - "NBC-265P", - "NBN-498-P", - "NDC", - "NDC-265P", - "NDN-265-PIO", - "NDN-498-P", - "NIN733V0", - "NTC-265-PI", - "NTI-50022-V3", - "NWC-0455-20P", - "Other", - "VG4 Autodome", - "VG4i", - "VIP X1", - "VIP X1 XF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "Autodome", - "AUTODOME 7000", - "Dinion", - "DINION", - "DVR", - "DVR RTSP 440/480/600", - "Flexidome IP HD", - "Flexidome NDN-921-P", - "NBC-265P", - "NDC 265-P", - "NTC-255-PI", - "Other", - "VG4 Autodome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video" - }, - { - "models": [ - "AUTODOME IP 7000 HD", - "Flexidome IP 5000 HD", - "Flexidome IP outdoor 5000 IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.h264" - }, - { - "models": [ - "AUTODOME IP 7000 HD", - "Flexidome IP outdoor 5000 IR", - "Flexidome IP starlight 8000i", - "IP 5000", - "NBE-7604-AL", - "NBE-7604-AL-OC", - "nbn-733V-IP", - "npc-20012-f2", - "NWC-0455-10P", - "Other", - "werwer" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "bosch-nbc-265p" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegSize=M" - }, - { - "models": [ - "D73W", - "HR06" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Denion", - "Dinion 6000", - "DINION IP NWC 0455", - "dinion-ip", - "DVR RTSP 440/480/600", - "FLEXI DOMEIP", - "Flexidome", - "Flexidome HD", - "nbc-225-p", - "ndc-225-p", - "NDC-225-PI", - "NDC-255-P", - "NDC-265P", - "NDC-274-P", - "NDN 265 PIO", - "NTC-255-PI", - "NTI-50022", - "NWC-0455-10P", - "NWC-0455-20P", - "Other", - "Spectra", - "VG4 AUTODOME", - "VideoJet 10", - "VIP X2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Dinion 8000", - "Dinion starlight NBN80025" - ], - "type": "JPEG", - "protocol": "http", - "port": 8075, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "DINION HD", - "DINION IP 5000 HD", - "DVR RTSP 440/480/600", - "nbc 265", - "nbc-265-p", - "NBN921", - "ndc265", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cgi-bin/rtspStream/[CHANNEL]" - }, - { - "models": [ - "DINION IP 5000 HD", - "nbc 265", - "nbc-265-p", - "ndc265", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "DIVAR 3000", - "Divar5000", - "FLEXIDOME IP OUTDOOR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DIVAR 3000", - "Divar5000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DIVAR 3000", - "DIVAR 3000 AN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "DS-HD6462M-WD", - "Flexidome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch1-s1" - }, - { - "models": [ - "DVR", - "VG4 Autodome", - "VIP X1 XF" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "DVR", - "DVR RTSP 440/480/600", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "rtsp_tunnel" - }, - { - "models": [ - "Flexidome IP", - "V320" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg" - }, - { - "models": [ - "Flexidome IP 5000 HD", - "Flexidome IP indoor 5000 HD (CPP4)", - "FlexiDome NDN-921-P", - "Flexidome panaramic 5100i", - "gyhkjgh", - "IP bullet 4000 HD", - "IP micro 2000 HD", - "NBN-733V-IP", - "NDC 265-P", - "NTC-255-PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "Flexidome IP OUTDOOR", - "FLEXIDOME NDN-912-P", - "Flexidome NDN-921-P", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10600, - "url": "live3.sdp" - }, - { - "models": [ - "FLEXIDOME IP starlight 6000 VR", - "NTC-265-PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "Flexidome IP starlight 8000i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/?inst=2" - }, - { - "models": [ - "Flexidome NDN-921-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "NDC-225-PI", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "NDC-255-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video" - }, - { - "models": [ - "NTC-255-PI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "NWC-0800", - "NWC-0900", - "nwc-900" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "NWC-0800", - "nwc-900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "12" - }, - { - "models": [ - "UNKOWN" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "VIP X1600" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/line=2" - }, - { - "models": [ - "VIP-X1600M4A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/bosma.json b/data/brands/bosma.json deleted file mode 100644 index 4190b05..0000000 --- a/data/brands/bosma.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bosma", - "brand_id": "bosma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/boss.json b/data/brands/boss.json deleted file mode 100644 index d4e1c37..0000000 --- a/data/brands/boss.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Boss", - "brand_id": "boss", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP3W-2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/bosslan.json b/data/brands/bosslan.json deleted file mode 100644 index b851dd3..0000000 --- a/data/brands/bosslan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bosslan", - "brand_id": "bosslan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BOSSC31" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/botcam.json b/data/brands/botcam.json deleted file mode 100644 index 896793d..0000000 --- a/data/brands/botcam.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Botcam", - "brand_id": "botcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipcamera 1", - "ipcamera 2", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "IPCAMERA 1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/botslab.json b/data/brands/botslab.json deleted file mode 100644 index 18f0afe..0000000 --- a/data/brands/botslab.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Botslab", - "brand_id": "botslab", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C212", - "W312" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/live/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/boust.json b/data/brands/boust.json deleted file mode 100644 index 290b6ba..0000000 --- a/data/brands/boust.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Boust", - "brand_id": "boust", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/boven.json b/data/brands/boven.json deleted file mode 100644 index b75166c..0000000 --- a/data/brands/boven.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Boven", - "brand_id": "boven", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bowya.json b/data/brands/bowya.json deleted file mode 100644 index f18af5b..0000000 --- a/data/brands/bowya.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bowya", - "brand_id": "bowya", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/box.json b/data/brands/box.json deleted file mode 100644 index e36ad8b..0000000 --- a/data/brands/box.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Box", - "brand_id": "box", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BlackBox" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live1" - } - ] -} \ No newline at end of file diff --git a/data/brands/bp-power.json b/data/brands/bp-power.json deleted file mode 100644 index d29efe2..0000000 --- a/data/brands/bp-power.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bp Power", - "brand_id": "bp-power", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "36IR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/brahms.json b/data/brands/brahms.json deleted file mode 100644 index f99ad9b..0000000 --- a/data/brands/brahms.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Brahms", - "brand_id": "brahms", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XTNC20BV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/brama.json b/data/brands/brama.json deleted file mode 100644 index 92f22c1..0000000 --- a/data/brands/brama.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Brama", - "brand_id": "brama", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SgZ3N0P6L2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/braun.json b/data/brands/braun.json deleted file mode 100644 index 7c457be..0000000 --- a/data/brands/braun.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Braun", - "brand_id": "braun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD505", - "HD-560" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD505", - "HD-560" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD-560" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD-560" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bravo.json b/data/brands/bravo.json deleted file mode 100644 index b801037..0000000 --- a/data/brands/bravo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Bravo", - "brand_id": "bravo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "92902926" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "EM63xx" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bravolink.json b/data/brands/bravolink.json deleted file mode 100644 index 0e644c1..0000000 --- a/data/brands/bravolink.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Bravolink", - "brand_id": "bravolink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "series l" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "VA035K" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/breno.json b/data/brands/breno.json deleted file mode 100644 index b423e12..0000000 --- a/data/brands/breno.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Breno", - "brand_id": "breno", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/brickcom.json b/data/brands/brickcom.json deleted file mode 100644 index 7bcb809..0000000 --- a/data/brands/brickcom.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "brand": "Brickcom", - "brand_id": "brickcom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100b-ap", - "CB-100", - "CB-100ap", - "fb-100ae", - "FD-100Ae", - "FD-130AE", - "GE-100-CB", - "MB300", - "OB-300Af", - "Other", - "VD-130AE", - "VD-301AF", - "VD-302ap", - "WCB-100A", - "WCB-202Ap", - "WCB-500Ap", - "works ok 1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "channel2" - }, - { - "models": [ - "150", - "50xA", - "C2100", - "CB-200Ap", - "CB-200AP", - "OB-200AF-A1-v5", - "ob-500af", - "VD-130AE", - "VD-300Af", - "VD-302Np", - "VD-500Af", - "WCB-100Ae", - "WCB-100Ap" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "30xN", - "C2100", - "C3103-W", - "CB-040Af", - "CB-100Ae", - "cb100ae-08", - "CB-100Ap", - "CB-100AP", - "FB-100Ap", - "FD-130Ae", - "FD-130AE", - "FD-200Ap", - "MB-300AP", - "Other", - "VD-100Ae", - "vd-500Af-A1", - "VD-H200Np", - "WCB-100AP", - "WOB-100Ae" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel1" - }, - { - "models": [ - "CB-040Af-5d21", - "fd202", - "WCB-200AP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 5052, - "url": "/channel2" - }, - { - "models": [ - "CB-100", - "CB-100ap", - "MB300", - "MD-100A", - "MD-300Np-360C", - "MD-500AP-360-A1", - "OB-200AF", - "OB-300Af", - "OB-300Ap", - "Other", - "Panomorph Mini Dome", - "VD-500Af", - "WCB-100A", - "WCB-300AP", - "wmb 300ap" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "CB-100", - "CB-100AE", - "fb-100ae", - "Other", - "Panomorph Mini Dome" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/media.cgi?action=getSnapshot" - }, - { - "models": [ - "CB-100", - "MB-300Ap", - "OB-100AP", - "OB-300Af", - "Other", - "wcb-300ap", - "WFB-131Ap", - "WOB-100Ae", - "XX-100 RTSP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "channel[CHANNEL]" - }, - { - "models": [ - "CB-100AE", - "fb-100ae", - "FB-100AP", - "FD-130nP", - "FD-301Af", - "HD", - "MD-500Ap-360-A1", - "OB-100Ap", - "OB-130Np", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "FD-100Ae" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "OB-100Ap" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "Channel[CHANNEL]" - }, - { - "models": [ - "OB-300Af" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel3" - }, - { - "models": [ - "OB-E200NF", - "Other", - "VD-130Ae" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "xx-100 RTSP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream/bidirect/channel[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/brickhouse-security.json b/data/brands/brickhouse-security.json deleted file mode 100644 index c9c92f5..0000000 --- a/data/brands/brickhouse-security.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Brickhouse Security", - "brand_id": "brickhouse-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bridge.json b/data/brands/bridge.json deleted file mode 100644 index e055581..0000000 --- a/data/brands/bridge.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bridge", - "brand_id": "bridge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "md1300 ir-od" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "HighResolutionVideo" - } - ] -} \ No newline at end of file diff --git a/data/brands/bridget.json b/data/brands/bridget.json deleted file mode 100644 index 9d07259..0000000 --- a/data/brands/bridget.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bridget", - "brand_id": "bridget", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DR816" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "DR816" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/bridgevms.json b/data/brands/bridgevms.json deleted file mode 100644 index 6f729ed..0000000 --- a/data/brands/bridgevms.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bridgevms", - "brand_id": "bridgevms", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CV1300-PH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "bm3000-ir-od" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/brillcam.json b/data/brands/brillcam.json deleted file mode 100644 index 32c2536..0000000 --- a/data/brands/brillcam.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "brand": "Brillcam", - "brand_id": "brillcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20927/05", - "BRC-D150" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "20927/05" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "B780" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "//action/stream?subject=mjpeg&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BRC-B750DV2", - "BRC-B752W", - "BRC-B782", - "BRC-B782W", - "BRC-D150", - "brc-s5194p2irwl", - "BRC-S8151P2", - "D150" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/briwax.json b/data/brands/briwax.json deleted file mode 100644 index 581f3d4..0000000 --- a/data/brands/briwax.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Briwax", - "brand_id": "briwax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C2SA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/broadcom.json b/data/brands/broadcom.json deleted file mode 100644 index 8c3cae4..0000000 --- a/data/brands/broadcom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Broadcom", - "brand_id": "broadcom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "L series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/brovision.json b/data/brands/brovision.json deleted file mode 100644 index aa6ed95..0000000 --- a/data/brands/brovision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Brovision", - "brand_id": "brovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "olsen" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "WH-D5208" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/202" - }, - { - "models": [ - "WH-D5208" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/brovotech.json b/data/brands/brovotech.json deleted file mode 100644 index e780dec..0000000 --- a/data/brands/brovotech.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Brovotech", - "brand_id": "brovotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.0.0", - "600102003-BV-H0203", - "600109004-IPC-H0904", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/bsp-security.json b/data/brands/bsp-security.json deleted file mode 100644 index 5e20947..0000000 --- a/data/brands/bsp-security.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Bsp Security", - "brand_id": "bsp-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.8", - "2.8.60.4", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "bo20-fl-03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bsti.json b/data/brands/bsti.json deleted file mode 100644 index a4b2fc7..0000000 --- a/data/brands/bsti.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Bsti", - "brand_id": "bsti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "PD100DV2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "PD100DV2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "PD100DV2", - "PD100HV2", - "PD100V2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "PD100DV2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/bticam.json b/data/brands/bticam.json deleted file mode 100644 index 1e72ac5..0000000 --- a/data/brands/bticam.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Bticam", - "brand_id": "bticam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/bticino.json b/data/brands/bticino.json deleted file mode 100644 index 72e6024..0000000 --- a/data/brands/bticino.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bticino", - "brand_id": "bticino", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/btmax.json b/data/brands/btmax.json deleted file mode 100644 index 668ef22..0000000 --- a/data/brands/btmax.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Btmax", - "brand_id": "btmax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IR Speed" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/bu-720.json b/data/brands/bu-720.json deleted file mode 100644 index 836e5a5..0000000 --- a/data/brands/bu-720.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bu-720", - "brand_id": "bu-720", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Airlive BU-720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - }, - { - "models": [ - "asgari" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/buffalo.json b/data/brands/buffalo.json deleted file mode 100644 index f65dcf6..0000000 --- a/data/brands/buffalo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Buffalo", - "brand_id": "buffalo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wnc01wh" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "channel2" - }, - { - "models": [ - "WNC01WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/buffelshoek.json b/data/brands/buffelshoek.json deleted file mode 100644 index 6bd9a2e..0000000 --- a/data/brands/buffelshoek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Buffelshoek", - "brand_id": "buffelshoek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1100-2241(p)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/buitencamera.json b/data/brands/buitencamera.json deleted file mode 100644 index 5651bde..0000000 --- a/data/brands/buitencamera.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Buitencamera", - "brand_id": "buitencamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hvo", - "modem" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP618W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPt19831w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "nonaam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WXH-158840-BCCFC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/bullet.json b/data/brands/bullet.json deleted file mode 100644 index 08fc8a8..0000000 --- a/data/brands/bullet.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Bullet", - "brand_id": "bullet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6113", - "720P", - "B200", - "DS-2CD1021G0-I", - "Hikvision", - "iDS-2cd7a46G0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "720P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C062105-IP5", - "DS-2CD1021G0", - "DS-2CD1021G0-I", - "DS-2CD1321G0-I", - "DS-2CD2043G2-IU", - "DS-2CD3047G2-LS", - "IPC-T221H-L", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/bulletzoom.json b/data/brands/bulletzoom.json deleted file mode 100644 index bfcd5fd..0000000 --- a/data/brands/bulletzoom.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bulletzoom", - "brand_id": "bulletzoom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HIKVISION" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bullwark.json b/data/brands/bullwark.json deleted file mode 100644 index 1bef5c2..0000000 --- a/data/brands/bullwark.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Bullwark", - "brand_id": "bullwark", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2101IP-V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/ch0_0.264" - }, - { - "models": [ - "BLW-2024", - "BLW-2202IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 7000, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bush-plus.json b/data/brands/bush-plus.json deleted file mode 100644 index 750ac81..0000000 --- a/data/brands/bush-plus.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Bush Plus", - "brand_id": "bush-plus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BU-300WF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "BU-500WF", - "BU-CM100", - "H-264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/buyee.json b/data/brands/buyee.json deleted file mode 100644 index 4e62b0e..0000000 --- a/data/brands/buyee.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Buyee", - "brand_id": "buyee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "csmnct" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CSMNCT" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "CSMNCT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/bv-globe.json b/data/brands/bv-globe.json deleted file mode 100644 index 5923b60..0000000 --- a/data/brands/bv-globe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bv Globe", - "brand_id": "bv-globe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "jw0004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bv-security.json b/data/brands/bv-security.json deleted file mode 100644 index 5da9050..0000000 --- a/data/brands/bv-security.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Bv-security", - "brand_id": "bv-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPDF-3082M-28A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "IPDF-3082M-28A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "Tapo: C501 GW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/bvcam.json b/data/brands/bvcam.json deleted file mode 100644 index 9b7d33f..0000000 --- a/data/brands/bvcam.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Bvcam", - "brand_id": "bvcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ca-ipbf-4mp-wfii" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "on-y8", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bvusa.json b/data/brands/bvusa.json deleted file mode 100644 index 19ddf3d..0000000 --- a/data/brands/bvusa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bvusa", - "brand_id": "bvusa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR-204E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bwa.json b/data/brands/bwa.json deleted file mode 100644 index 395a167..0000000 --- a/data/brands/bwa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bwa", - "brand_id": "bwa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DiREX-Pro DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpegstream?cam=[CHANNEL]&single=1" - }, - { - "models": [ - "DiREX-Pro DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpegstream?cam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bxkam.json b/data/brands/bxkam.json deleted file mode 100644 index 17bf18d..0000000 --- a/data/brands/bxkam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Bxkam", - "brand_id": "bxkam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BX-P021" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/bytec.json b/data/brands/bytec.json deleted file mode 100644 index ed26abd..0000000 --- a/data/brands/bytec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bytec", - "brand_id": "bytec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "VET2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/bytek.json b/data/brands/bytek.json deleted file mode 100644 index 56db11f..0000000 --- a/data/brands/bytek.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Bytek", - "brand_id": "bytek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP1MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "VET1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/c2100.json b/data/brands/c2100.json deleted file mode 100644 index 57c1881..0000000 --- a/data/brands/c2100.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "C2100", - "brand_id": "c2100", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2rmo", - "Altan", - "camera1", - "CHUNGA", - "Other", - "tapo", - "Tapo C200", - "Tapo-c200", - "TPL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "Acam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel1" - }, - { - "models": [ - "c100", - "c210", - "TPlink" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "c200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream8" - } - ] -} \ No newline at end of file diff --git a/data/brands/ca-ip400mp.json b/data/brands/ca-ip400mp.json deleted file mode 100644 index 741b80e..0000000 --- a/data/brands/ca-ip400mp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ca-ip400mp", - "brand_id": "ca-ip400mp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP400MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - } - ] -} \ No newline at end of file diff --git a/data/brands/cacagoo.json b/data/brands/cacagoo.json deleted file mode 100644 index 618db51..0000000 --- a/data/brands/cacagoo.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Cacagoo", - "brand_id": "cacagoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "288ZD-2MP", - "IPCAM-100", - "MSC316DM-V02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "Other", - "XY-R9820-F4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/caddx.json b/data/brands/caddx.json deleted file mode 100644 index a0164ae..0000000 --- a/data/brands/caddx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Caddx", - "brand_id": "caddx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FV-G364B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cadyce.json b/data/brands/cadyce.json deleted file mode 100644 index 38e9b3b..0000000 --- a/data/brands/cadyce.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Cadyce", - "brand_id": "cadyce", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CA-ip 400mp", - "CA-IP300MP", - "CA-IP400MP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "CA-IP100M" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "CA-IP100M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "CA-IP200MP", - "CA-IP400MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "CA-IP600P" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/caikong.json b/data/brands/caikong.json deleted file mode 100644 index cd1c11c..0000000 --- a/data/brands/caikong.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Caikong", - "brand_id": "caikong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1602" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "SIP1016" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/caisse.json b/data/brands/caisse.json deleted file mode 100644 index 73220a3..0000000 --- a/data/brands/caisse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Caisse", - "brand_id": "caisse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/caja.json b/data/brands/caja.json deleted file mode 100644 index 064ffb6..0000000 --- a/data/brands/caja.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Caja", - "brand_id": "caja", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DSC-2103" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/calion.json b/data/brands/calion.json deleted file mode 100644 index 59b391d..0000000 --- a/data/brands/calion.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Calion", - "brand_id": "calion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAL-3008M", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camasmart.json b/data/brands/camasmart.json deleted file mode 100644 index a730791..0000000 --- a/data/brands/camasmart.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Camasmart", - "brand_id": "camasmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C-P05" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - }, - { - "models": [ - "E27" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/cambozola.json b/data/brands/cambozola.json deleted file mode 100644 index 21407db..0000000 --- a/data/brands/cambozola.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cambozola", - "brand_id": "cambozola", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/camdeor.json b/data/brands/camdeor.json deleted file mode 100644 index aa4cbea..0000000 --- a/data/brands/camdeor.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Camdeor", - "brand_id": "camdeor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAR-B2500HQIP", - "CAR-R300IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/camera-solar-led-street-light.json b/data/brands/camera-solar-led-street-light.json deleted file mode 100644 index 2233fbb..0000000 --- a/data/brands/camera-solar-led-street-light.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camera Solar Led Street Light", - "brand_id": "camera-solar-led-street-light", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LX-LD15W-S3C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/camerawelt.json b/data/brands/camerawelt.json deleted file mode 100644 index cd9322a..0000000 --- a/data/brands/camerawelt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camerawelt", - "brand_id": "camerawelt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5MP POE IP Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/camery.json b/data/brands/camery.json deleted file mode 100644 index 46f3b30..0000000 --- a/data/brands/camery.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Camery", - "brand_id": "camery", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h.264 network dvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "h.264 network dvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/cameye.json b/data/brands/cameye.json deleted file mode 100644 index f7b334a..0000000 --- a/data/brands/cameye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cameye", - "brand_id": "cameye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camhd.json b/data/brands/camhd.json deleted file mode 100644 index 5a40902..0000000 --- a/data/brands/camhd.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Camhd", - "brand_id": "camhd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1935, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camhi.json b/data/brands/camhi.json deleted file mode 100644 index df0352f..0000000 --- a/data/brands/camhi.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "brand": "Camhi", - "brand_id": "camhi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4S-B05W-720P", - "c9f0sgz0n0p7l0", - "CA-690C-R", - "CAMHI_E", - "flouren", - "IIII-338310-AEECA", - "IP02", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "4S-B05W-720P", - "CA-690C-R", - "F2-T", - "IIII-338310-AEECA", - "IIII-526059-aefca", - "ip02", - "IP03+", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "5.5.56", - "Other", - "TTTT-806651-VKNSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "at200dw", - "C6F0SgZ3N0P6L2", - "C9F0SgZ0N0P4L0", - "C9F0SGZ0N0P7L0", - "C9F0SgZ3N0P8L0", - "CA-690C-R", - "GS-GHXFSTCMA-POE", - "MEGAPIXEL IP CAMERA", - "NL4T12-8OH18WYP-30X-128G", - "Other", - "R-QS2510-HG20", - "SD13W", - "TTTT-362842-CJPLF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "at200dw", - "Floureon SD27W" - ], - "type": "JPEG", - "protocol": "http", - "port": 8082, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "C6F0SoZ3N0PcL2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2" - }, - { - "models": [ - "C6F0SoZ3N0PcL2", - "C6F0SoZ3N0PfL2", - "C6F0SoZ3N0PnL2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "C9F0SgZ0N0P4L0", - "Other", - "Pro", - "ptz", - "SN-IPC-5033SW-EU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/camius.json b/data/brands/camius.json deleted file mode 100644 index 8a427cc..0000000 --- a/data/brands/camius.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camius", - "brand_id": "camius", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SPOT828A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/camkeeper.json b/data/brands/camkeeper.json deleted file mode 100644 index c3a548e..0000000 --- a/data/brands/camkeeper.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camkeeper", - "brand_id": "camkeeper", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/camline-pro.json b/data/brands/camline-pro.json deleted file mode 100644 index 3c4c75a..0000000 --- a/data/brands/camline-pro.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Camline Pro", - "brand_id": "camline-pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6225", - "6330", - "EM6330" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "6325" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cammy.json b/data/brands/cammy.json deleted file mode 100644 index 92abc0a..0000000 --- a/data/brands/cammy.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Cammy", - "brand_id": "cammy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ci-420", - "cl-320", - "CL-320", - "cl-321", - "co-321", - "indoor", - "nighthalk", - "Other", - "outdoor 1", - "WIRELESS IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Wireless IP Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "WIRELESS IP CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camon.json b/data/brands/camon.json deleted file mode 100644 index 5765623..0000000 --- a/data/brands/camon.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Camon", - "brand_id": "camon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "APP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4848, - "url": "/video/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/campo.json b/data/brands/campo.json deleted file mode 100644 index bfd6270..0000000 --- a/data/brands/campo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Campo", - "brand_id": "campo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camqo.json b/data/brands/camqo.json deleted file mode 100644 index dbf3ba8..0000000 --- a/data/brands/camqo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camqo", - "brand_id": "camqo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CMWIFI8CHKITSHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camsafe.json b/data/brands/camsafe.json deleted file mode 100644 index 6d5fc00..0000000 --- a/data/brands/camsafe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camsafe", - "brand_id": "camsafe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "V25" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camscam.json b/data/brands/camscam.json deleted file mode 100644 index d4608f4..0000000 --- a/data/brands/camscam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camscam", - "brand_id": "camscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JWEV-372869-BCBAB" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camsee.json b/data/brands/camsee.json deleted file mode 100644 index dac9344..0000000 --- a/data/brands/camsee.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Camsee", - "brand_id": "camsee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "1080P Dome", - "GgCam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "SOME_ONVIF" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - } - ] -} \ No newline at end of file diff --git a/data/brands/camspot.json b/data/brands/camspot.json deleted file mode 100644 index b2b9ae4..0000000 --- a/data/brands/camspot.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Camspot", - "brand_id": "camspot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3.1", - "3.4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3.4", - "4.8", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/camstar.json b/data/brands/camstar.json deleted file mode 100644 index 0ccfedb..0000000 --- a/data/brands/camstar.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Camstar", - "brand_id": "camstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM-817F2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "H0202" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/camtronics.json b/data/brands/camtronics.json deleted file mode 100644 index abd01d9..0000000 --- a/data/brands/camtronics.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Camtronics", - "brand_id": "camtronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DM IP EYEFISH 2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "DM IP FISHEYE 2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/image/mjpeg.cgi" - }, - { - "models": [ - "IPSC-200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camview.json b/data/brands/camview.json deleted file mode 100644 index 7d6a4e6..0000000 --- a/data/brands/camview.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Camview", - "brand_id": "camview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2AFPL-PE3020-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "2AFPL-PE3020-W", - "CAMVIEW N SERIES", - "ic171w", - "M212w", - "Other", - "VR-130" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "2AFPL-PE3020-W", - "M212w", - "PE3020-w" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.jpg" - }, - { - "models": [ - "M212w", - "Other", - "pe3020-w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camvision.json b/data/brands/camvision.json deleted file mode 100644 index 2d054ba..0000000 --- a/data/brands/camvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camvision", - "brand_id": "camvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "jm3866w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/camwest.json b/data/brands/camwest.json deleted file mode 100644 index 1add0b8..0000000 --- a/data/brands/camwest.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Camwest", - "brand_id": "camwest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "onvif" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/camwon.json b/data/brands/camwon.json deleted file mode 100644 index cb2eb29..0000000 --- a/data/brands/camwon.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Camwon", - "brand_id": "camwon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SpZ3N0PgL2", - "Other", - "SSA-290980-BBFEF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "WIP-PB200N" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/canavis.json b/data/brands/canavis.json deleted file mode 100644 index e991144..0000000 --- a/data/brands/canavis.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Canavis", - "brand_id": "canavis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1.3", - "CA-DW672-1P1M", - "DWL672-1M1P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "ca-wl672-1p1m" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/canon.json b/data/brands/canon.json deleted file mode 100644 index 800fe88..0000000 --- a/data/brands/canon.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "brand": "Canon", - "brand_id": "canon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "740", - "CRN-300", - "VB-M50B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream/profile2=r" - }, - { - "models": [ - "CN-R500", - "H-SERIES", - "M42", - "m44", - "Other", - "vb-610", - "VB-C10", - "VB-C300", - "VB-C50I/C50IR SERIES", - "VB-C60", - "VB-H41", - "VB-H43", - "VB-H45", - "VB-h610", - "VB-H610VE", - "VB-H630VE", - "VB-H710F", - "VB-H730F", - "VB-M40", - "VB-M42", - "VB-M44", - "VB-M600D", - "VB-M700F", - "VBS30D", - "VB-S30VE", - "VB-S805D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/video.cgi" - }, - { - "models": [ - "CRN-300", - "VB-M720F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/-wvhttp-01-/GetOneShot?image_size=320x240&frame_count=0" - }, - { - "models": [ - "CR-N500", - "Unknown Model", - "VB-C60", - "VB-M44", - "VB-M50B", - "VB-M620VE", - "VB-M720F", - "VB-S30D", - "VB-S805D", - "VB-S900F", - "VB-S905F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/-wvhttp-01-/video.cgi" - }, - { - "models": [ - "DC210" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=[CHANNEL].JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "H-SERIES", - "Other", - "VB-C10", - "VB-C300", - "VB-M40" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetLiveImage" - }, - { - "models": [ - "i50", - "Other", - "Public WebCam", - "VB300", - "VB-C10", - "VB-C300", - "VB-C500D", - "VB-C50FSi", - "vb-c50i", - "VB-C50i/C50iR Series", - "VB-C60", - "vb-h41", - "VB-H43", - "VB-H630", - "VB-H630VE", - "VB-M40", - "VB-M42", - "VB-M50B", - "VBS30D", - "VB-S900F" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetOneShot?image_size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "Public WebCam", - "vb150", - "VB-C10", - "vb-c10r", - "VB-C10r", - "VB-C10R", - "VB-C300", - "VB-C50Fi", - "VB-C50FSi", - "vb-c50i", - "VB-C50i/C50iR Series", - "VB-C50İ/C50İR SERİES", - "VB-C60", - "VB-M40", - "VB-M42", - "VB-M600D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetOneShot?image_size=[WIDTH]x[HEIGHT]&frame_count=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "VB-C300" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "vb-h41", - "VB-H41", - "vb-h630", - "VB-H710F", - "VB-M42", - "VB-M50B", - "VB-M720F", - "VB-S900F", - "VB-S905F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream/profile1=r" - }, - { - "models": [ - "VB-H43", - "VB-S800D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream/profile0=r" - }, - { - "models": [ - "VB-M40" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "profile1=u" - }, - { - "models": [ - "VB-M600D" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "profile1=r" - }, - { - "models": [ - "VB-M720F", - "VB-R12VE" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/-wvhttp-01-/GetOneShot?image_size=320x240" - }, - { - "models": [ - "VB-S900F" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/viewer/admin/index.html?lang=en" - }, - { - "models": [ - "VB-S900F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/cantek.json b/data/brands/cantek.json deleted file mode 100644 index 363e631..0000000 --- a/data/brands/cantek.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Cantek", - "brand_id": "cantek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CTW-IPSD3282D", - "GNC326G2-wda", - "NC304" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/cantok.json b/data/brands/cantok.json deleted file mode 100644 index 582246c..0000000 --- a/data/brands/cantok.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cantok", - "brand_id": "cantok", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "xvr-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/cantonk.json b/data/brands/cantonk.json deleted file mode 100644 index da01a1c..0000000 --- a/data/brands/cantonk.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "brand": "Cantonk", - "brand_id": "cantonk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200SR40N", - "IPDE20A600", - "KIP-100CZ40H", - "KIP-100R30N", - "KIP-130RT45H", - "KIP-130SHR30H", - "KIP-130SHV30H", - "KIP-130SL20H", - "KIP20040N", - "kip-200a40h", - "KIP-200CY60N", - "KIP-200HV20H", - "KIP-200PT40", - "KIP200PT40N", - "KIP-200SHR30N", - "KIP30-1080p-MX", - "Other", - "WFIP500R25F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "H.264/265 port 34567", - "KHJSL200W", - "KIP-130RT45H", - "KIP-200CZ60N", - "KIP-200PT40", - "KIP-200SHR30N", - "kip-200w25n", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "H.264/265 port 34567", - "KIP-300HV20A", - "kit200nf60" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "KIP-130RT45H", - "KIP-130SL20H", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "KIP-130Y20", - "KIP-200PT40", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "KIP-200NF60N", - "KIP200PT40N" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "KIP-200SL20G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "XM76" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/carcam.json b/data/brands/carcam.json deleted file mode 100644 index 88add69..0000000 --- a/data/brands/carcam.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Carcam", - "brand_id": "carcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10x", - "chino" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile0" - }, - { - "models": [ - "5905" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "CAM-2898SD", - "IPC3516", - "V380", - "V380Q1-WiFi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Cam-360/RV5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Cam-5905MP", - "IPC3516", - "svn-840" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cas-200.json b/data/brands/cas-200.json deleted file mode 100644 index 0891d08..0000000 --- a/data/brands/cas-200.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Cas-200", - "brand_id": "cas-200", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - } - ] -} \ No newline at end of file diff --git a/data/brands/cas-700.json b/data/brands/cas-700.json deleted file mode 100644 index 47220c8..0000000 --- a/data/brands/cas-700.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Cas-700", - "brand_id": "cas-700", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/casa.json b/data/brands/casa.json deleted file mode 100644 index 26a35a5..0000000 --- a/data/brands/casa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Casa", - "brand_id": "casa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Blue" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "p06" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/casio.json b/data/brands/casio.json deleted file mode 100644 index 960911e..0000000 --- a/data/brands/casio.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Casio", - "brand_id": "casio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "comm", - "GZ1", - "GzOne Commando" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/casperi.json b/data/brands/casperi.json deleted file mode 100644 index 79eedd2..0000000 --- a/data/brands/casperi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Casperi", - "brand_id": "casperi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/catawba.json b/data/brands/catawba.json deleted file mode 100644 index e93e5e5..0000000 --- a/data/brands/catawba.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Catawba", - "brand_id": "catawba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cb-101ae.json b/data/brands/cb-101ae.json deleted file mode 100644 index 4a5002c..0000000 --- a/data/brands/cb-101ae.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cb-101ae", - "brand_id": "cb-101ae", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - } - ] -} \ No newline at end of file diff --git a/data/brands/cb-102ae.json b/data/brands/cb-102ae.json deleted file mode 100644 index 01d6cbb..0000000 --- a/data/brands/cb-102ae.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cb-102ae", - "brand_id": "cb-102ae", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cbc-america.json b/data/brands/cbc-america.json deleted file mode 100644 index d49a26a..0000000 --- a/data/brands/cbc-america.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Cbc America", - "brand_id": "cbc-america", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GANZ", - "ZN-MD243M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/gnz_media/main" - }, - { - "models": [ - "GANZ", - "zn-md243m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/gnz_media/second" - }, - { - "models": [ - "mp2", - "Mp2a" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "MP2", - "mp5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "mp5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "ZN-DT2MA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "gnz_media/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/cc-plus.json b/data/brands/cc-plus.json deleted file mode 100644 index 05bff17..0000000 --- a/data/brands/cc-plus.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cc Plus", - "brand_id": "cc-plus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E-35A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel1" - }, - { - "models": [ - "E-35A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ccam.json b/data/brands/ccam.json deleted file mode 100644 index 6ca1d35..0000000 --- a/data/brands/ccam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Ccam", - "brand_id": "ccam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "P2P IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "p2p ip" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ccd-ip-camera.json b/data/brands/ccd-ip-camera.json deleted file mode 100644 index 270fa9d..0000000 --- a/data/brands/ccd-ip-camera.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "brand": "Ccd Ip Camera", - "brand_id": "ccd-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "432", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "432", - "4356", - "ipc 1.3.0", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "ID002A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IMX178" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "NC 1600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "SN-IPC-5033SW-AU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ccd-video-camera.json b/data/brands/ccd-video-camera.json deleted file mode 100644 index 5a7d185..0000000 --- a/data/brands/ccd-video-camera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ccd Video Camera", - "brand_id": "ccd-video-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AP-11614GA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ccdcam.json b/data/brands/ccdcam.json deleted file mode 100644 index 6338edb..0000000 --- a/data/brands/ccdcam.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "brand": "Ccdcam", - "brand_id": "ccdcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "EC-IP5815" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "EC-IP5815", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "EC-IP5815", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "EC-IP5815" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "IPC-C34000 series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cci.json b/data/brands/cci.json deleted file mode 100644 index 9fd92d4..0000000 --- a/data/brands/cci.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cci", - "brand_id": "cci", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/cco.json b/data/brands/cco.json deleted file mode 100644 index f3b0630..0000000 --- a/data/brands/cco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cco", - "brand_id": "cco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CYBO-T555V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "CYBO-T555V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctv-sentry.json b/data/brands/cctv-sentry.json deleted file mode 100644 index ecabb92..0000000 --- a/data/brands/cctv-sentry.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Cctv Sentry", - "brand_id": "cctv-sentry", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "180" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "H264-IPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctv.json b/data/brands/cctv.json deleted file mode 100644 index 6adc05e..0000000 --- a/data/brands/cctv.json +++ /dev/null @@ -1,425 +0,0 @@ -{ - "brand": "Cctv", - "brand_id": "cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0032014", - "5mp ebay", - "aote", - "AOTE 5MP", - "ccd", - "lmdcs300", - "manfire", - "Other", - "poe", - "TP-MS200POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "1080pip", - "IP6C21-P1", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "1080PIP", - "HD IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - }, - { - "models": [ - "2AFPL-PE3020-W", - "ipc", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "614e6f4ecc107bfa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ADIVA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "AK-IP1.3-DLA", - "HD IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "B1", - "Other", - "VR-DC540W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "cam0981", - "sp015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "cctv2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "cctv2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "csp-ipb4-a", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CSP-ipb4-a" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CSP-IPB4-A" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "csp-iped3", - "csp-ipmx3-a", - "IPh-2p matt", - "iphc-2p", - "Other", - "T136B", - "w932cahz37" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "csp-ipm3", - "csp-ipmx3", - "csp-ipmx3-a", - "IP6C21-P1", - "ipch-2", - "Other", - "w921rg-b-poe" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "CTV-IPB2840VRM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "Good", - "manfire", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "H.264", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "H264-IPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "hik", - "Onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "IPC", - "khorgoei", - "P22" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "K-EP104LWE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "No Model" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other", - "wip130-dt30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/ch1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/ch4" - }, - { - "models": [ - "RG-IP07" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SN-IPC-5031CSW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctvhotdeals.json b/data/brands/cctvhotdeals.json deleted file mode 100644 index c04a57e..0000000 --- a/data/brands/cctvhotdeals.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "brand": "Cctvhotdeals", - "brand_id": "cctvhotdeals", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mobile/channel[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "screen.jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[USERNAME]/cam[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/stream_[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot_ch0[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "H9008 w/ Web Port" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "pokus" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctvman.json b/data/brands/cctvman.json deleted file mode 100644 index 4980d90..0000000 --- a/data/brands/cctvman.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Cctvman", - "brand_id": "cctvman", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM03E02MWI", - "CM512VWI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CM03E02MWI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "cm405ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "CM405IP-V10", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctvr3.json b/data/brands/cctvr3.json deleted file mode 100644 index c5a9a93..0000000 --- a/data/brands/cctvr3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cctvr3", - "brand_id": "cctvr3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DCS-930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctvsecuritypros.json b/data/brands/cctvsecuritypros.json deleted file mode 100644 index 1056fac..0000000 --- a/data/brands/cctvsecuritypros.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cctvsecuritypros", - "brand_id": "cctvsecuritypros", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Model" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "MODEL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cctvstar.json b/data/brands/cctvstar.json deleted file mode 100644 index 3852aef..0000000 --- a/data/brands/cctvstar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cctvstar", - "brand_id": "cctvstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CIVD-20MSI2812" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ccy.json b/data/brands/ccy.json deleted file mode 100644 index 2057787..0000000 --- a/data/brands/ccy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ccy", - "brand_id": "ccy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FC0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "L100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/cd-cam.json b/data/brands/cd-cam.json deleted file mode 100644 index 12663f8..0000000 --- a/data/brands/cd-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cd-cam", - "brand_id": "cd-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SN-IPC-HW16" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cda.json b/data/brands/cda.json deleted file mode 100644 index 4827c62..0000000 --- a/data/brands/cda.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cda", - "brand_id": "cda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INTELBRAS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cdr-king.json b/data/brands/cdr-king.json deleted file mode 100644 index 8e6746e..0000000 --- a/data/brands/cdr-king.json +++ /dev/null @@ -1,398 +0,0 @@ -{ - "brand": "Cdr King", - "brand_id": "cdr-king", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "am series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "APM-J011-WS", - "B Series", - "Other", - "SEC-016-NE", - "SEC-023-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "APM-J011-WS", - "Other", - "SEC-015-C", - "sec-016-ne", - "SEC-016-NE", - "SEC-029-NE", - "SEC-039-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "B Series", - "B SERIES", - "Dome", - "Other", - "SEC006NE", - "SEC-006-SED", - "SEC-016-NE", - "SEC-023-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "B Series", - "Other", - "Projects", - "SEC-001-NE", - "SEC-015-C", - "SEC-016-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "B Series", - "Other", - "SEC-016-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "B SERIES", - "Other", - "SEC-006-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "B SERIES", - "LP001377", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "b-series", - "Other", - "SEC-016-NE", - "SEC-023-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "B-Series", - "Other", - "SEC-001-NE", - "SEC-016-NE" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CW-IP01W", - "Other", - "sec-026-am", - "SEC-026-AM", - "SEC-026-AM/A", - "sec-26am" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other", - "sec-016-ne", - "SEC-016-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other", - "SEC-037 NE", - "SEC-037-ne" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other", - "Q SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other", - "SEC-016-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other", - "SEC-036-NE", - "SEC-037-ne" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "SEC-029-NE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other", - "SEC-016-NE", - "SEC-023-NE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SEC-016-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other", - "se-039-ne", - "SEC-016-NE", - "SEC-028-NE", - "SEC-039-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other", - "SEC-028-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other", - "SEC-028-NE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Q Series" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "Q Series" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_post.cgi" - }, - { - "models": [ - "Q Series" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "SEC006NE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "sec-016-ne" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "sec-016-ne" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "sec-026-ne" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "sec-036-ne" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cdr.json b/data/brands/cdr.json deleted file mode 100644 index c22725d..0000000 --- a/data/brands/cdr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cdr", - "brand_id": "cdr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/cdxx.json b/data/brands/cdxx.json deleted file mode 100644 index 861fc82..0000000 --- a/data/brands/cdxx.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cdxx", - "brand_id": "cdxx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/cdxxcamera.json b/data/brands/cdxxcamera.json deleted file mode 100644 index 21f2051..0000000 --- a/data/brands/cdxxcamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cdxxcamera", - "brand_id": "cdxxcamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5030-E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cechas.json b/data/brands/cechas.json deleted file mode 100644 index 0bd5608..0000000 --- a/data/brands/cechas.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cechas", - "brand_id": "cechas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC202" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/celestrom.json b/data/brands/celestrom.json deleted file mode 100644 index 12e5524..0000000 --- a/data/brands/celestrom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Celestrom", - "brand_id": "celestrom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/celius.json b/data/brands/celius.json deleted file mode 100644 index 3d26359..0000000 --- a/data/brands/celius.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Celius", - "brand_id": "celius", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP18W", - "IP61W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cell-cam.json b/data/brands/cell-cam.json deleted file mode 100644 index 5fbbb71..0000000 --- a/data/brands/cell-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cell Cam", - "brand_id": "cell-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Nexus" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/cellinx-sth775.json b/data/brands/cellinx-sth775.json deleted file mode 100644 index 6ab088f..0000000 --- a/data/brands/cellinx-sth775.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cellinx-sth775", - "brand_id": "cellinx-sth775", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DY-IR2020HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/AVStream1_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cellinx.json b/data/brands/cellinx.json deleted file mode 100644 index 63bec38..0000000 --- a/data/brands/cellinx.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Cellinx", - "brand_id": "cellinx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR IP Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "NVR IP CAMERA", - "STH780" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/AVStream1_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cellvision.json b/data/brands/cellvision.json deleted file mode 100644 index 24cdadf..0000000 --- a/data/brands/cellvision.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Cellvision", - "brand_id": "cellvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "351clpk330w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/celu.json b/data/brands/celu.json deleted file mode 100644 index a9acc7c..0000000 --- a/data/brands/celu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Celu", - "brand_id": "celu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cengiz.json b/data/brands/cengiz.json deleted file mode 100644 index 1c9e8c7..0000000 --- a/data/brands/cengiz.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Cengiz", - "brand_id": "cengiz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/cennan.json b/data/brands/cennan.json deleted file mode 100644 index b103008..0000000 --- a/data/brands/cennan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cennan", - "brand_id": "cennan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rc8021v" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cenova.json b/data/brands/cenova.json deleted file mode 100644 index 8859e51..0000000 --- a/data/brands/cenova.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Cenova", - "brand_id": "cenova", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "103ip", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "180pl", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/censee.json b/data/brands/censee.json deleted file mode 100644 index a85920d..0000000 --- a/data/brands/censee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Censee", - "brand_id": "censee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C57TW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/centechia.json b/data/brands/centechia.json deleted file mode 100644 index 64979f6..0000000 --- a/data/brands/centechia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Centechia", - "brand_id": "centechia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v360pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/centrium.json b/data/brands/centrium.json deleted file mode 100644 index 259387a..0000000 --- a/data/brands/centrium.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Centrium", - "brand_id": "centrium", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVHN20H130C", - "Bullet", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 37777, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/centrix.json b/data/brands/centrix.json deleted file mode 100644 index 11a7cea..0000000 --- a/data/brands/centrix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Centrix", - "brand_id": "centrix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/centronics.json b/data/brands/centronics.json deleted file mode 100644 index 486a7a5..0000000 --- a/data/brands/centronics.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Centronics", - "brand_id": "centronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/cepsa.json b/data/brands/cepsa.json deleted file mode 100644 index f5255c4..0000000 --- a/data/brands/cepsa.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Cepsa", - "brand_id": "cepsa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CPB643W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "H Series", - "H Series IP Camera", - "H Sries" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "H Sries" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "H Sries" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "H Sries", - "IPD-WO2210R-DZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/cesnet.json b/data/brands/cesnet.json deleted file mode 100644 index 44bef70..0000000 --- a/data/brands/cesnet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cesnet", - "brand_id": "cesnet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/chacon.json b/data/brands/chacon.json deleted file mode 100644 index 5a578b9..0000000 --- a/data/brands/chacon.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "brand": "Chacon", - "brand_id": "chacon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "345", - "34535", - "34546", - "34547", - "345473", - "34548", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "34530" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 29931, - "url": "/image.jpg" - }, - { - "models": [ - "34535", - "345473" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "34535" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "34535-frich" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "34537", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "CHa", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "CHa" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "IPCAM FI02" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "IPCAM FI02" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "IPCAM-FI02" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/chakir.json b/data/brands/chakir.json deleted file mode 100644 index b9ba86c..0000000 --- a/data/brands/chakir.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chakir", - "brand_id": "chakir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "seetong" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/chambre.json b/data/brands/chambre.json deleted file mode 100644 index b56db67..0000000 --- a/data/brands/chambre.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chambre", - "brand_id": "chambre", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SA-IPC1200HG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/channel-vision.json b/data/brands/channel-vision.json deleted file mode 100644 index 1f6c7f1..0000000 --- a/data/brands/channel-vision.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Channel Vision", - "brand_id": "channel-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6521", - "SC565w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v2" - }, - { - "models": [ - "6521", - "6522", - "6522-new", - "6564", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "6554", - "6564", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/channel01.json b/data/brands/channel01.json deleted file mode 100644 index d1f2325..0000000 --- a/data/brands/channel01.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Channel01", - "brand_id": "channel01", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AIPC-420BM", - "anni", - "qrt-601", - "SZS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "IP WIFI Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - }, - { - "models": [ - "novell" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/chapel.json b/data/brands/chapel.json deleted file mode 100644 index a7354d8..0000000 --- a/data/brands/chapel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chapel", - "brand_id": "chapel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/chavega.json b/data/brands/chavega.json deleted file mode 100644 index 2ff0b00..0000000 --- a/data/brands/chavega.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Chavega", - "brand_id": "chavega", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CSJ-320R-40", - "CSJ-320RP-40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "CSJ-NH4RU-130" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/Streaming/2" - }, - { - "models": [ - "CSJ-NH6RX-200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "CSJ-NH6RX-200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NH4RU-200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cheap.json b/data/brands/cheap.json deleted file mode 100644 index 92e37f5..0000000 --- a/data/brands/cheap.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cheap", - "brand_id": "cheap", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/cheapcam.json b/data/brands/cheapcam.json deleted file mode 100644 index 6c9be22..0000000 --- a/data/brands/cheapcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cheapcam", - "brand_id": "cheapcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cherry-mobile.json b/data/brands/cherry-mobile.json deleted file mode 100644 index 0ae9ec8..0000000 --- a/data/brands/cherry-mobile.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cherry Mobile", - "brand_id": "cherry-mobile", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/chicony.json b/data/brands/chicony.json deleted file mode 100644 index b4daca1..0000000 --- a/data/brands/chicony.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Chicony", - "brand_id": "chicony", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/childrenview.com.json b/data/brands/childrenview.com.json deleted file mode 100644 index 84d928f..0000000 --- a/data/brands/childrenview.com.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Childrenview.com", - "brand_id": "childrenview.com", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "treeproxy/cam[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/china-dragon.json b/data/brands/china-dragon.json deleted file mode 100644 index 439f56b..0000000 --- a/data/brands/china-dragon.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "China Dragon", - "brand_id": "china-dragon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "593amtmy6g8h", - "C9F0SEZ0N0P2L0", - "C9F0SeZ0N0P7L0", - "IIII-718128-EADFC", - "IPCAM P2P", - "Other", - "PTZ H3-187V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "c9f0sez0n0p2l0", - "C9F0SeZ0N0P7L0", - "IPCAM P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "goke", - "iCam365" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "JKN06204", - "TC55", - "TC56" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/china.json b/data/brands/china.json deleted file mode 100644 index b200f4f..0000000 --- a/data/brands/china.json +++ /dev/null @@ -1,868 +0,0 @@ -{ - "brand": "China", - "brand_id": "china", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0000", - "002hit", - "IPCAM P2P", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "0020a", - "H264DVR", - "Other", - "wifi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "01", - "General area", - "ID002A", - "ip607wx", - "Movable", - "nose2", - "ONVIF", - "Other", - "RESORT", - "SECRET CLOCK", - "Something" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1 Channel", - "CHINO", - "ONVIF", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "1080", - "12345", - "30xzoom", - "C9f0se", - "CAM-IP1402DV19l", - "china2", - "chinaEingang", - "custem", - "goke", - "gw-p2vfd-m4x", - "HDIPC", - "Hof", - "IPCAM P2P", - "nr1", - "Other", - "P2P IP CAM", - "P2P IP CAMERA", - "pinhole", - "PTZ", - "Robotics", - "SOME_ONVIF", - "V380", - "wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080P", - "IPCAM P2P", - "ONVIF", - "Other", - "SOME_ONVIF", - "V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - }, - { - "models": [ - "1122", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "12345", - "boavision", - "jk-phd54fdm523hs", - "SOME_ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "360eyes" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "360eyes" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "3D cam", - "External", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "4830", - "Other", - "W3200sG-B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "720", - "dome", - "GENERAL AREA", - "H264DVR", - "IPCAM P2P", - "ONVIF", - "Other", - "P2P IP CAMERA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "8904W", - "np-02", - "ONVIF", - "Other", - "P2P IP Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "anben" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "aussen", - "P2P IP CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/cif" - }, - { - "models": [ - "boo", - "Dome", - "domo", - "Other", - "wish" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "China 12" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "China1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - }, - { - "models": [ - "chinaEingang", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "chinaptz", - "IPC2002W", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CN-6001", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "ct-902", - "IH13-KW", - "Other", - "Tag_Nacht", - "v380", - "wifi", - "wireless", - "Xing Ling" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "dome", - "DSSS", - "H264DVR", - "HDIPC", - "HDIPCAM", - "IPC4311", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "dome", - "ec60-t11", - "IPCAM P2P", - "ivideon Bullet", - "TEE3760308451597", - "tutk" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "dome" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/onvif/device_service" - }, - { - "models": [ - "easyn p1", - "HDIPC", - "HDIPCAM", - "model", - "Other", - "ptz", - "RG-IP03+", - "SKU 64023", - "TTTT-030400THFXR", - "web", - "WVC Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "EASYN P1", - "Other", - "SN-IPC-5033SWChin" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "eyeplus", - "minispycamera", - "MSC316DM-V02", - "onvif", - "P2P IP Camera", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "fm105", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Generic Chinese Onvif", - "H264DVR", - "hc615-p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "H210", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - }, - { - "models": [ - "H246", - "y5a-wa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "HDIPC", - "idk", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "HDIPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "HDIPC", - "ONVIF", - "SOME_ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "HDIPC", - "IPC2002W", - "SECRET CLOCK", - "wifi" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "HDIPC", - "IP-02OAM", - "ONVIF", - "Other", - "SECRET CLOCK", - "Something" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "HDIPCAM", - "Other", - "P2P IP CAMERA", - "PTZCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "HDIPCAM", - "IPCAM P2P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HDIPCAM", - "P2P IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HDIPCAM", - "ONVIF", - "SOME_ONVIF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "idk", - "noname 130", - "Other", - "SOME_ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "inocom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - }, - { - "models": [ - "internet survillance" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "ip camera 002a", - "moja", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPCAM P2P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPD-D53M02-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "minispycamera", - "UniNet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "ncs601w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "nejaka" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "onvif" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264/ch1/sub/av_stream" - }, - { - "models": [ - "onvif" - ], - "type": "JPEG", - "protocol": "http", - "port": 82, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "ONVIF", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "ONVIF", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "PST-WHM10E", - "some_onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "Other", - "s5001y=bw" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other", - "R80X20" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.html" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264.sdp?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "Other", - "v380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "P2P IP CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "SD_OD_Cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "V380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "V380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "WIRELESS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "X6E-WEQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MTE3TGFrZXdvb2Q=" - } - ] -} \ No newline at end of file diff --git a/data/brands/chinavasion.json b/data/brands/chinavasion.json deleted file mode 100644 index 8d2b11b..0000000 --- a/data/brands/chinavasion.json +++ /dev/null @@ -1,329 +0,0 @@ -{ - "brand": "Chinavasion", - "brand_id": "chinavasion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.7.24 HD", - "IP611W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "133", - "CVYE-1278", - "H31", - "IPCAM P2P", - "L SERIES", - "Other", - "S06", - "street" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "2.0 mb", - "ONVIF", - "SINOCAM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "2MP", - "Chinese", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "BoatCam", - "raconteur" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "china", - "IP611W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "China" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "chinese", - "sinocam", - "SINOCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "CVABN-I369" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "CVABN-I369", - "CVAET-1561", - "CVAGN-J124", - "cvyp-1281", - "CVYP-I281", - "H31HOME", - "ONVIF", - "SINOCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CVLM-133", - "CVLM-I33", - "CVLM-I342", - "s06" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CVLM-I342" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/MAIN" - }, - { - "models": [ - "CVYE-1278", - "CVZX-I332", - "Gamma", - "HD", - "Hi3507", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "CVZX-I332" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "dome" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Eyeball" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Gunnie", - "H30", - "ip611w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H264DVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ip609aw", - "IP611W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPC_2394699" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "IPCAM P2P", - "SINOCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "L Series", - "LSERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "L SERIES", - "Other", - "super-1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "lseries", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - }, - { - "models": [ - "StrongFortress" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/chinawest.json b/data/brands/chinawest.json deleted file mode 100644 index b801c29..0000000 --- a/data/brands/chinawest.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chinawest", - "brand_id": "chinawest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/chine.json b/data/brands/chine.json deleted file mode 100644 index 35931a9..0000000 --- a/data/brands/chine.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chine", - "brand_id": "chine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vr camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/chinese-lamp-camera.json b/data/brands/chinese-lamp-camera.json deleted file mode 100644 index 44d1165..0000000 --- a/data/brands/chinese-lamp-camera.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Chinese Lamp Camera", - "brand_id": "chinese-lamp-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM HI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/chinese.json b/data/brands/chinese.json deleted file mode 100644 index 93c28f8..0000000 --- a/data/brands/chinese.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Chinese", - "brand_id": "chinese", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bosiwo", - "Bosiwoi", - "Other", - "wesecuu" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "ipc", - "WESECUU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC365" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/chineseptz.json b/data/brands/chineseptz.json deleted file mode 100644 index 284839a..0000000 --- a/data/brands/chineseptz.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Chineseptz", - "brand_id": "chineseptz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C9F0SeZ0N0P4L0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/chineseum.json b/data/brands/chineseum.json deleted file mode 100644 index 0284239..0000000 --- a/data/brands/chineseum.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chineseum", - "brand_id": "chineseum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S06" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/chingling.json b/data/brands/chingling.json deleted file mode 100644 index a038f51..0000000 --- a/data/brands/chingling.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Chingling", - "brand_id": "chingling", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Externa", - "Indefinido", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/chino.json b/data/brands/chino.json deleted file mode 100644 index 06dd4a6..0000000 --- a/data/brands/chino.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chino", - "brand_id": "chino", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/chint.json b/data/brands/chint.json deleted file mode 100644 index dd315ed..0000000 --- a/data/brands/chint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chint", - "brand_id": "chint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/choice.json b/data/brands/choice.json deleted file mode 100644 index 346f0df..0000000 --- a/data/brands/choice.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Choice", - "brand_id": "choice", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPPT250", - "IPPT250A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPPT250A", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPPT250A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPPT250A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPPT250A", - "N5304AV", - "N5304MV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "MV", - "N5304MV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4_1.sdp" - }, - { - "models": [ - "N5304MV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream1.asf" - }, - { - "models": [ - "N5304MV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "N5304MV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "N5304MV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "N5304MV" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/chongro.json b/data/brands/chongro.json deleted file mode 100644 index 9be2731..0000000 --- a/data/brands/chongro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chongro", - "brand_id": "chongro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "a1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/chortau.json b/data/brands/chortau.json deleted file mode 100644 index f36dd6a..0000000 --- a/data/brands/chortau.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "brand": "Chortau", - "brand_id": "chortau", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080 wireless outdoow", - "1080 WIRELESS OUTDOOW", - "201", - "202", - "2022", - "C63S", - "q/wsdk 001-2015", - "Q/WSDK 001-2015", - "SE2000", - "se3000", - "se4000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "2021", - "C53S", - "SE200", - "SE2000", - "SE3000", - "SE-4000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Q/WSDK" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "SE4000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "SE-4000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/chowha.json b/data/brands/chowha.json deleted file mode 100644 index 701b9c2..0000000 --- a/data/brands/chowha.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Chowha", - "brand_id": "chowha", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CloudCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "CloudCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/chrysalis.json b/data/brands/chrysalis.json deleted file mode 100644 index d3f520c..0000000 --- a/data/brands/chrysalis.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chrysalis", - "brand_id": "chrysalis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/chua.json b/data/brands/chua.json deleted file mode 100644 index 5f07f1e..0000000 --- a/data/brands/chua.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chua", - "brand_id": "chua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PGC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/chubb.json b/data/brands/chubb.json deleted file mode 100644 index 8364fbf..0000000 --- a/data/brands/chubb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Chubb", - "brand_id": "chubb", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dsr-cgi/getdsrimage.cgi?camera=[CHANNEL]&username=[USERNAME]&password=[PASSWORD]&adfa=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ciana-exports.json b/data/brands/ciana-exports.json deleted file mode 100644 index 069d94e..0000000 --- a/data/brands/ciana-exports.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ciana Exports", - "brand_id": "ciana-exports", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "antani" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "antani" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cib-security.json b/data/brands/cib-security.json deleted file mode 100644 index e38e141..0000000 --- a/data/brands/cib-security.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cib Security", - "brand_id": "cib-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CUP 5011-WS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cina.json b/data/brands/cina.json deleted file mode 100644 index de0ef8f..0000000 --- a/data/brands/cina.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cina", - "brand_id": "cina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cinnado.json b/data/brands/cinnado.json deleted file mode 100644 index 52a28c2..0000000 --- a/data/brands/cinnado.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Cinnado", - "brand_id": "cinnado", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D1/Thingino FW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1" - }, - { - "models": [ - "D1/Thingino FW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0" - }, - { - "models": [ - "dm1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/cip.json b/data/brands/cip.json deleted file mode 100644 index 456127b..0000000 --- a/data/brands/cip.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Cip", - "brand_id": "cip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "37186AT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "a2144", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CIP30D", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "CIP30D-1.3MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "CIP30D-1.3MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "GC13H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/av1" - }, - { - "models": [ - "jyho9-0501000-be" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.html" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cipem.json b/data/brands/cipem.json deleted file mode 100644 index a84708b..0000000 --- a/data/brands/cipem.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cipem", - "brand_id": "cipem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ciqurix.json b/data/brands/ciqurix.json deleted file mode 100644 index b6e9d57..0000000 --- a/data/brands/ciqurix.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ciqurix", - "brand_id": "ciqurix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FCam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "FCamX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/cisco.json b/data/brands/cisco.json deleted file mode 100644 index 1b69595..0000000 --- a/data/brands/cisco.json +++ /dev/null @@ -1,504 +0,0 @@ -{ - "brand": "Cisco", - "brand_id": "cisco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2421", - "2500", - "2500 IP Camera", - "2520", - "civis-ipc-2520v", - "civs-ipc-2520v", - "CIVS-IPC-2611", - "linksys", - "Marketing", - "Other", - "puck", - "PVC2300", - "WCV80N", - "WVC Series", - "WVC2", - "WVC200", - "WVC210", - "WVC2300", - "WVC300", - "WVC54G", - "WVC54GC", - "WVC54GCA", - "WVC80N" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "2500", - "2500 IP Camera", - "2500W", - "2600", - "Other", - "PVC2300", - "WVC SERIES", - "WVC210", - "WVC2300", - "WVC54G", - "WVC80N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "2500", - "2500 IP Camera", - "2521", - "2530v IP CAMERA", - "2531", - "2600", - "CIVS-IPC-2611", - "Other", - "PVC2300", - "WCV80N", - "WNVC80N", - "WVC Series", - "wvc-210", - "WVC210", - "WVC2300", - "WVC80N" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "2500 IP Camera", - "5010", - "5011 IP Camera", - "Cisco HD IP Camera 4500E Series", - "CIVS 2900", - "IPC5011", - "OtherJJ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "2500 IP Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "2500 IP Camera", - "2500W", - "2530v IP CAMERA", - "Cisco 2531V", - "Cisco IPC 2531V", - "CIVS-IPC-2500W", - "CIVS-IPC-2611", - "IPC 2531V", - "IPC-2500", - "Other", - "PVC2300", - "PVC300", - "Server", - "VC220", - "WCV80N", - "WMV80N", - "WVC 210", - "WVC SERIES", - "WVC200", - "WVC2300", - "wvc54g", - "WVC80N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "2500 IP CAMERA", - "Other", - "PVC2300", - "VC240", - "WVC SERIES", - "WVC210" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[code]" - }, - { - "models": [ - "2500 IP CAMERA", - "Other", - "PVC2300", - "VC220", - "VC240", - "WVC SERIES", - "WVC210" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "2500 IP CAMERA2", - "PVC2300", - "WVC SERIES", - "WVC210", - "WVC2300", - "WVC54GCA", - "WVC80N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "2530V IP CAMERA" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "8630", - "Other", - "PVC300", - "VC220", - "VC240" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video2.mjpg" - }, - { - "models": [ - "CISCO IPC 2531V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "CIVS-IPC-2520V", - "CIVS-IPC-2611", - "HPA", - "PVC2300", - "WVC 210", - "WVC Series", - "WVC210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "CIVS-IPC-2611", - "linksys", - "Other", - "PVC2300", - "VC220", - "WCV80N", - "WVC Series", - "wvc200", - "wvc-210", - "WVC210", - "WVC2300", - "wvc54g", - "WVC54GCA", - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "CIVS-IPC-6630", - "CIVS-IPC-8000P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/StreamingSetting?version=1.0&action=getRTSPStream&ChannelID=1&ChannelName=Channel1" - }, - { - "models": [ - "CIVS-IPC-8000P", - "VC220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "CIVS-IPC-8000P", - "WVC80N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/video.sav" - }, - { - "models": [ - "cv220", - "Ipc-8030", - "PVC300", - "VC220", - "VC240", - "VC240-TCR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "DCS-3220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "j", - "LINKSYS", - "PVC2300", - "WCV80N", - "WVC Series", - "WVC200", - "WVC210", - "WVC2300", - "wvc54g", - "WVC54GCA", - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "LINKSYS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "LINKSYS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other", - "WVC Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "Wvc210" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "wvc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other", - "PVC2300", - "PVC300", - "VC220", - "VC240", - "WVC300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/snapshot.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "PVC2300", - "WV200", - "WV210", - "WVC2300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "PVC2300", - "PVC300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/[code]" - }, - { - "models": [ - "PVC300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "PVC300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "PVC300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "VWC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "WCS-1130" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "WCS-1130" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play3.sdp" - }, - { - "models": [ - "WCS-1130", - "WSC-1130" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "WVC 210" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "WVC Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cita.json b/data/brands/cita.json deleted file mode 100644 index 46ce9f1..0000000 --- a/data/brands/cita.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cita", - "brand_id": "cita", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ci bt 1300i" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/citc.json b/data/brands/citc.json deleted file mode 100644 index fb2f54f..0000000 --- a/data/brands/citc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Citc", - "brand_id": "citc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FI9828" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/citronix.json b/data/brands/citronix.json deleted file mode 100644 index 217a4b2..0000000 --- a/data/brands/citronix.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Citronix", - "brand_id": "citronix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "380C", - "650C", - "AAKK-378364-DEDAF", - "P32651" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "CTIPC-690C-2MPS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/citrox.json b/data/brands/citrox.json deleted file mode 100644 index 677c710..0000000 --- a/data/brands/citrox.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Citrox", - "brand_id": "citrox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVX 5X1", - "IPD04", - "LIXODECAMERA", - "XVR 5X1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/citystar.json b/data/brands/citystar.json deleted file mode 100644 index 10354cb..0000000 --- a/data/brands/citystar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Citystar", - "brand_id": "citystar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/citysync.json b/data/brands/citysync.json deleted file mode 100644 index b3677c7..0000000 --- a/data/brands/citysync.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Citysync", - "brand_id": "citysync", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/live/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/civs-ipc-6400.json b/data/brands/civs-ipc-6400.json deleted file mode 100644 index c899471..0000000 --- a/data/brands/civs-ipc-6400.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Civs-ipc-6400", - "brand_id": "civs-ipc-6400", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6400", - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/StreamingSetting" - } - ] -} \ No newline at end of file diff --git a/data/brands/clairvoyant-mwr.json b/data/brands/clairvoyant-mwr.json deleted file mode 100644 index 6521a25..0000000 --- a/data/brands/clairvoyant-mwr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Clairvoyant Mwr", - "brand_id": "clairvoyant-mwr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av0_[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/clas.json b/data/brands/clas.json deleted file mode 100644 index b8f3e37..0000000 --- a/data/brands/clas.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Clas", - "brand_id": "clas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ohlson NC802APT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Ohlson NC802APT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/clearone.json b/data/brands/clearone.json deleted file mode 100644 index 7d72fa5..0000000 --- a/data/brands/clearone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Clearone", - "brand_id": "clearone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Unite200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/clearpix.json b/data/brands/clearpix.json deleted file mode 100644 index b316c07..0000000 --- a/data/brands/clearpix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Clearpix", - "brand_id": "clearpix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CPX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 5544, - "url": "cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/clearview.json b/data/brands/clearview.json deleted file mode 100644 index f170338..0000000 --- a/data/brands/clearview.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Clearview", - "brand_id": "clearview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-70", - "IPPTZ-889", - "ipwifi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "IP-70", - "IP-72", - "ipd-80a", - "IPD92-A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/clever-loop.json b/data/brands/clever-loop.json deleted file mode 100644 index 0c14ed9..0000000 --- a/data/brands/clever-loop.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Clever Loop", - "brand_id": "clever-loop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "251253-SLCPR", - "342405-JJWJS", - "457040-WXVZB", - "Other", - "X series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/clock.json b/data/brands/clock.json deleted file mode 100644 index 889dc98..0000000 --- a/data/brands/clock.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Clock", - "brand_id": "clock", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "UNKOWN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/cloud-ip-camera.json b/data/brands/cloud-ip-camera.json deleted file mode 100644 index 8bef9f4..0000000 --- a/data/brands/cloud-ip-camera.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "brand": "Cloud Ip Camera", - "brand_id": "cloud-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "45677" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3434455" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "826" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "CLOUDCAM", - "c-p11-68", - "c-PO5", - "Eyeplus_dev", - "nvt", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/cam/realmonitor" - }, - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/ch0_0.264" - }, - { - "models": [ - "c-p11-68" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "c-p11-68" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/0" - }, - { - "models": [ - "c-p11-68", - "C-P11-68", - "nvt", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/h264_stream" - }, - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "view-020833-zzfmt" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cloud.json b/data/brands/cloud.json deleted file mode 100644 index d2eddbb..0000000 --- a/data/brands/cloud.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Cloud", - "brand_id": "cloud", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2000", - "C-P05C", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "AJWL", - "ycc365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "CloudCam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "MV1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "MV1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "ycc365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif&event&audio&video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cloud2000.json b/data/brands/cloud2000.json deleted file mode 100644 index d3d10bf..0000000 --- a/data/brands/cloud2000.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cloud2000", - "brand_id": "cloud2000", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/cloudcam.json b/data/brands/cloudcam.json deleted file mode 100644 index b69a764..0000000 --- a/data/brands/cloudcam.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "brand": "Cloudcam", - "brand_id": "cloudcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6637R49ZHBLZ", - "BS-Y4", - "C-P05C", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "CLOUD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "GK7102" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "nc300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "nc400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "NC400", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "NC400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other", - "WFQ10H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8001, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/main" - }, - { - "models": [ - "PT312-PW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "PT312-PW", - "Version: 57.0.2.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Y365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/cloudlive.json b/data/brands/cloudlive.json deleted file mode 100644 index e7bee6a..0000000 --- a/data/brands/cloudlive.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cloudlive", - "brand_id": "cloudlive", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cmos.json b/data/brands/cmos.json deleted file mode 100644 index 7d618b7..0000000 --- a/data/brands/cmos.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cmos", - "brand_id": "cmos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Q" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "tv7204" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cms-zonet.json b/data/brands/cms-zonet.json deleted file mode 100644 index 7272b0d..0000000 --- a/data/brands/cms-zonet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cms Zonet", - "brand_id": "cms-zonet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ZVC7630" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/cms.json b/data/brands/cms.json deleted file mode 100644 index b15292d..0000000 --- a/data/brands/cms.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Cms", - "brand_id": "cms", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVT", - "oprit", - "Other", - "VoTu" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "oprit" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8899, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/cnb.json b/data/brands/cnb.json deleted file mode 100644 index 9225c4a..0000000 --- a/data/brands/cnb.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Cnb", - "brand_id": "cnb", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IDC4000T", - "ISS2765p", - "MPC1070PN KC4", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "IGP1030", - "IVC5055", - "IVP4030 VR", - "NETWORK CAMERA", - "Network Camera1", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "ISS2765P", - "Network Camera", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "IVP4030 VR", - "Network Camera", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cnet.json b/data/brands/cnet.json deleted file mode 100644 index 7cc6bbb..0000000 --- a/data/brands/cnet.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Cnet", - "brand_id": "cnet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CIC-920W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "CIC-930w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "CIC-930W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "CIC-930W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/cnm.json b/data/brands/cnm.json deleted file mode 100644 index a36775b..0000000 --- a/data/brands/cnm.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Cnm", - "brand_id": "cnm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DM365_IPNC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "IP103" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP103", - "Other", - "sec-ip-cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "sec-ip-cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "sec-ip-cam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/cobra.json b/data/brands/cobra.json deleted file mode 100644 index 5072217..0000000 --- a/data/brands/cobra.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Cobra", - "brand_id": "cobra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "369471737", - "63843", - "wireless color security camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "63843" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "63843" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ONVIF/MediaInput" - }, - { - "models": [ - "8 Channel" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/animate.cgi?[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cocoon.json b/data/brands/cocoon.json deleted file mode 100644 index c128c84..0000000 --- a/data/brands/cocoon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Cocoon", - "brand_id": "cocoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HE200074", - "IT315003" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/codnida.json b/data/brands/codnida.json deleted file mode 100644 index 151fb49..0000000 --- a/data/brands/codnida.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Codnida", - "brand_id": "codnida", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ Camera", - "PTZ Security Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/cohu.json b/data/brands/cohu.json deleted file mode 100644 index 7ef8617..0000000 --- a/data/brands/cohu.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Cohu", - "brand_id": "cohu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3940", - "3940hd", - "3960", - "3960HD", - "4269HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "3940" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam" - }, - { - "models": [ - "3960" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "3960HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "3960HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Cohu 3960HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cohuhd.json b/data/brands/cohuhd.json deleted file mode 100644 index f28ec77..0000000 --- a/data/brands/cohuhd.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cohuhd", - "brand_id": "cohuhd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4261-1000-0014" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/comcast.json b/data/brands/comcast.json deleted file mode 100644 index 65d48d6..0000000 --- a/data/brands/comcast.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Comcast", - "brand_id": "comcast", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "xcam", - "XHS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "Other", - "XCAM", - "XHS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "xcam" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/comelit.json b/data/brands/comelit.json deleted file mode 100644 index de3a497..0000000 --- a/data/brands/comelit.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Comelit", - "brand_id": "comelit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP162b", - "IPC100", - "IPCAM162A", - "IPCAM168A", - "IPCOM100", - "IPNVR004CPOE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "IPC100", - "IPCAM062A", - "IPCAM066B", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPCOD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "SDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/commend.json b/data/brands/commend.json deleted file mode 100644 index 2709164..0000000 --- a/data/brands/commend.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Commend", - "brand_id": "commend", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Duetto", - "EE980CM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "3.mjpg" - }, - { - "models": [ - "ID5" - ], - "type": "MJPEG", - "protocol": "https", - "port": 443, - "url": "/mjpeg/video.mjpg?resolution=1280x960&fps=15" - }, - { - "models": [ - "Intercom Client", - "TS8110V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "WS-300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg/video.mjpeg" - }, - { - "models": [ - "WS-CM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/communications-line.json b/data/brands/communications-line.json deleted file mode 100644 index 5d30739..0000000 --- a/data/brands/communications-line.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Communications Line", - "brand_id": "communications-line", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Indoor IP Cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "IP Camera 1", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/compro.json b/data/brands/compro.json deleted file mode 100644 index 8b6ffc8..0000000 --- a/data/brands/compro.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "brand": "Compro", - "brand_id": "compro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS40", - "CS400P", - "CS530", - "cs80", - "IP100", - "IP530", - "IP55", - "IP570", - "IP70", - "IP90", - "NC150/420/500", - "NC2200", - "NC2220", - "tn1600p", - "TN1600W", - "TN30", - "TN30W", - "TN50", - "TN500LR", - "TN500MR", - "TN500W", - "TN600", - "TN80", - "tn80w", - "tn900", - "tn920", - "TN95" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CS40", - "CS400P", - "IP50/70", - "IP540", - "IP540p", - "IP540P", - "IP55", - "IP55/60", - "IP550P", - "IP70", - "IP90P", - "NC3230", - "Other", - "TN1500" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias[CHANNEL]" - }, - { - "models": [ - "CS400P", - "IP540P", - "IP55/60", - "IP70", - "IP90P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "CS60", - "nc1200", - "TN80W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/medias2" - }, - { - "models": [ - "IP350", - "IP50/70", - "IP540", - "IP55/60", - "IP550P", - "IP70", - "IP70W", - "Other", - "TN1600W", - "TN30W", - "TN50", - "TN500W", - "TN50W", - "tn900" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IP350", - "IP50/70", - "IP530", - "ip530w", - "IP540", - "IP55/60", - "IP570", - "IP70", - "IP70W", - "NC150/420/500", - "TN30W", - "tn80w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IP350", - "IP50/70", - "IP530", - "IP540", - "IP55/60", - "IP570", - "IP70", - "NC150/420/500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpegStreamer.cgi" - }, - { - "models": [ - "IP50/70", - "IP540", - "IP55/60", - "IP570", - "IP70", - "NC2200", - "NC2220", - "TN920" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "IP50/70", - "IP530W", - "IP540", - "IP55/60", - "IP550P", - "IP570", - "IP70", - "IP70W", - "Main Entrance Int", - "Other", - "TN2200", - "TN30W", - "TN50", - "TN60", - "TN900", - "tn920", - "TN920" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "IP570", - "TN30W", - "TN500W", - "tn80w", - "TN920" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IP70", - "NC150/420/500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "IP70" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]&snapshot=on" - }, - { - "models": [ - "IP70" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "IP70" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "NC150/420/500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC150/420/500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NC150/420/500" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cgi-bin/rtspStream/[CHANNEL]" - }, - { - "models": [ - "TN 900R", - "tn900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0" - }, - { - "models": [ - "TN600", - "tn600w", - "TN80W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/compufix4u.json b/data/brands/compufix4u.json deleted file mode 100644 index 9be3db3..0000000 --- a/data/brands/compufix4u.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Compufix4u", - "brand_id": "compufix4u", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/coms.json b/data/brands/coms.json deleted file mode 100644 index fed1b65..0000000 --- a/data/brands/coms.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Coms", - "brand_id": "coms", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fd-who1a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/comtac.json b/data/brands/comtac.json deleted file mode 100644 index 65b1e78..0000000 --- a/data/brands/comtac.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Comtac", - "brand_id": "comtac", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS2", - "CS9267" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CS9267", - "Other", - "v2.0" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "CS9267", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/comtrend.json b/data/brands/comtrend.json deleted file mode 100644 index 6131120..0000000 --- a/data/brands/comtrend.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Comtrend", - "brand_id": "comtrend", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "Mini-Dome", - "Other", - "VD-21ir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/concept-pro.json b/data/brands/concept-pro.json deleted file mode 100644 index 0b8547e..0000000 --- a/data/brands/concept-pro.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Concept Pro", - "brand_id": "concept-pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVP9324DNIR-IP4M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/snl/live/1/1" - }, - { - "models": [ - "cvp9328dnir-ip4m-g", - "KCI4D-1080", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/conceptronic.json b/data/brands/conceptronic.json deleted file mode 100644 index 1a538d8..0000000 --- a/data/brands/conceptronic.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "brand": "Conceptronic", - "brand_id": "conceptronic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720", - "CIPCAM1080OD", - "CIPCAM720", - "CIPCAM720OD", - "CIPCAM720PTIWL V2", - "CIPCAM720S", - "CLOUD IP CAMERA", - "Other", - "PTZ-CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "B series", - "CIPCAMPTIWL V1", - "Rotativa" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "B SERIES", - "B-Series", - "cipcamptiwl", - "Rotativa" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "B SERIES", - "c07-082" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "C07-080", - "C54NETCAM", - "C54NETCAM2", - "CIPCAMPTIWL", - "CNETCAM2", - "Other", - "secure2", - "Slim 1320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "C54NETCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "C54NETCAM", - "C54NETCAM2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "C54NETCAM", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "C54NETCAM", - "CIPCAM720PTIWL V1", - "cipcamptiwl" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "C54NETCAM", - "C54NETCAM2", - "cnetcam2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "C54NETCAM_F", - "cipcamptiwl", - "Other", - "PTZ-Cam", - "thuis" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "C54NETCAM2", - "cipcam720ptiwl", - "cipcamptiwl", - "Other", - "PTZ-Cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C54NETCAM2", - "C54NETCAM2OK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "C54NETCAM2OK", - "cipcam720OD", - "cipcam720ptiwl", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "C8CHCCTVKITP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=0&stream=0.sdp?real_stream" - }, - { - "models": [ - "CIPCAM720", - "CIPCAM720PTIWL V1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "CIPCAM720" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=" - }, - { - "models": [ - "cipcam720OD", - "cipcam720ptiwl", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CIPCAM720OD", - "CIPCAM720PTIWL", - "CIPCAM720PTIWL V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CIPCAM720OD", - "CIPCAM720PTIWL V2", - "CIPCAMPTIWL", - "SmartP2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch2" - }, - { - "models": [ - "CIPCAM720PTIWL V2", - "cipcamptiwl", - "CIPCAMPTIWL V1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CIPCAM720PTIWL V2", - "cipcamptiwl" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "CIPCAM720PTIWL V2", - "cipcamptiwl" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cipcamptiwl", - "mkx" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cipcamptiwl" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/concord.json b/data/brands/concord.json deleted file mode 100644 index f8e4a49..0000000 --- a/data/brands/concord.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Concord", - "brand_id": "concord", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5mp", - "CNC5IDP-A", - "CNC5IDP-V2", - "CNC8IBP-A", - "CNCK", - "floodlight" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/1" - }, - { - "models": [ - "CDC5ABP-A", - "CNC5IBP-A", - "CNC5IDP-A", - "CNC5IDP-V2", - "CNC8IBPFA-V2", - "CNC8IDP-A", - "Concord 1080P", - "Concord 4K", - "RS-CM-317D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/condere.json b/data/brands/condere.json deleted file mode 100644 index ab359ce..0000000 --- a/data/brands/condere.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "brand": "Condere", - "brand_id": "condere", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "916", - "CO-111" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "co-105", - "CO-113" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "co-105", - "H.264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "CO-111", - "F Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CO-111" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CO-113", - "CO-901", - "CO-916", - "H.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CO-113" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/conico.json b/data/brands/conico.json deleted file mode 100644 index fa7b9bc..0000000 --- a/data/brands/conico.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Conico", - "brand_id": "conico", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "812E", - "gx6s", - "ZS-GX1S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "F330" - ], - "type": "MJPEG", - "protocol": "https", - "port": 7443, - "url": "/ccm/ccm_pic_get.jpg?hfrom_handle=887330&dsess=1&dsess_nid=MHkMHqeZgXPcaHyOZ.AyecFCDdpjEF7g&dsess_sn=1jfiegbqtkbxa&dtoken=p1_xxxxxxxxxx" - }, - { - "models": [ - "FI-362C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/connectec.json b/data/brands/connectec.json deleted file mode 100644 index d85d89c..0000000 --- a/data/brands/connectec.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Connectec", - "brand_id": "connectec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cas-370w", - "PE5577" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "PE5577" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "tec internet cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=320x240" - } - ] -} \ No newline at end of file diff --git a/data/brands/connectionnc.json b/data/brands/connectionnc.json deleted file mode 100644 index 954722a..0000000 --- a/data/brands/connectionnc.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Connectionnc", - "brand_id": "connectionnc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/connectsmarthome.json b/data/brands/connectsmarthome.json deleted file mode 100644 index 932cc77..0000000 --- a/data/brands/connectsmarthome.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Connectsmarthome", - "brand_id": "connectsmarthome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CSH-ODCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Outdoor Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/connex.json b/data/brands/connex.json deleted file mode 100644 index 4c99fe9..0000000 --- a/data/brands/connex.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Connex", - "brand_id": "connex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "720P PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "720P PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/stream0" - }, - { - "models": [ - "750P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/contack.json b/data/brands/contack.json deleted file mode 100644 index 5571020..0000000 --- a/data/brands/contack.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Contack", - "brand_id": "contack", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "kit-200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "kit-200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/control3d.json b/data/brands/control3d.json deleted file mode 100644 index 18814dc..0000000 --- a/data/brands/control3d.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Control3d", - "brand_id": "control3d", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/control4.json b/data/brands/control4.json deleted file mode 100644 index 73a3613..0000000 --- a/data/brands/control4.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Control4", - "brand_id": "control4", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Chime" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/convision.json b/data/brands/convision.json deleted file mode 100644 index 797463d..0000000 --- a/data/brands/convision.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "brand": "Convision", - "brand_id": "convision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CC-6400 (RTSP)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IP Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "camera.jpg?camera=[CHANNEL]" - }, - { - "models": [ - "IP Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "camera.push?camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "fullsize.push?camera=1&sleep=15" - }, - { - "models": [ - "V Series Video Server", - "V100/200 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "fullsize.jpg?camera=[CHANNEL]" - }, - { - "models": [ - "V Series Video Server", - "V100/200 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "hugesize.jpg?camera=[CHANNEL]" - }, - { - "models": [ - "V Series Video Server", - "V100/200 Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "fullsize.push?camera=[CHANNEL]" - }, - { - "models": [ - "V Series Video Server", - "V100/200 Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "hugesize.push?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/convo-kontor.json b/data/brands/convo-kontor.json deleted file mode 100644 index b2beca7..0000000 --- a/data/brands/convo-kontor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Convo Kontor", - "brand_id": "convo-kontor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FE8171V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/cooau.json b/data/brands/cooau.json deleted file mode 100644 index 6799ef1..0000000 --- a/data/brands/cooau.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "brand": "Cooau", - "brand_id": "cooau", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "1080", - "720p", - "BULLET", - "CT0258BKEU", - "CT0258BKUK", - "CT0258WHUS", - "ct0276bkeu", - "CT0276BKUK", - "IP-CAMERA", - "Other", - "ZZZZ-320984-EBFFC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080", - "1080P", - "2.0MPIX", - "362c", - "623c", - "720P", - "BULLET", - "ct0276bkuk", - "CT044SWHUK", - "CT2076BKUK", - "F300", - "Other", - "SV3C", - "x000s lhqn3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "C23S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ct0276bkuk", - "Other", - "SV3C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "CT2076BKUK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - } - ] -} \ No newline at end of file diff --git a/data/brands/coocheer.json b/data/brands/coocheer.json deleted file mode 100644 index 94b65b9..0000000 --- a/data/brands/coocheer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Coocheer", - "brand_id": "coocheer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Keller", - "SP012 HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/coolcam.json b/data/brands/coolcam.json deleted file mode 100644 index a51ab21..0000000 --- a/data/brands/coolcam.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Coolcam", - "brand_id": "coolcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "neo" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NEO", - "nip61", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "NIP-06", - "op series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "nip09", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/coolead.json b/data/brands/coolead.json deleted file mode 100644 index f559e2d..0000000 --- a/data/brands/coolead.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Coolead", - "brand_id": "coolead", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "541WS", - "L series", - "Other", - "RM-CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "L Series", - "L SERIES", - "L610WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/coolpad.json b/data/brands/coolpad.json deleted file mode 100644 index 0ade427..0000000 --- a/data/brands/coolpad.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Coolpad", - "brand_id": "coolpad", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "332QA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cooradilla.json b/data/brands/cooradilla.json deleted file mode 100644 index 92386fa..0000000 --- a/data/brands/cooradilla.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cooradilla", - "brand_id": "cooradilla", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/cootli.json b/data/brands/cootli.json deleted file mode 100644 index f84c0fe..0000000 --- a/data/brands/cootli.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Cootli", - "brand_id": "cootli", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "R80XD30-PQ", - "R80XD550-PQ_8M", - "X4C-WQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "X4C-WQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/cop.json b/data/brands/cop.json deleted file mode 100644 index 23af16a..0000000 --- a/data/brands/cop.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cop", - "brand_id": "cop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/copa-10.json b/data/brands/copa-10.json deleted file mode 100644 index 43fcda3..0000000 --- a/data/brands/copa-10.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Copa 10", - "brand_id": "copa-10", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/copbr.json b/data/brands/copbr.json deleted file mode 100644 index cb26276..0000000 --- a/data/brands/copbr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Copbr", - "brand_id": "copbr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "COP-IPSPD270X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/core.json b/data/brands/core.json deleted file mode 100644 index 13e6223..0000000 --- a/data/brands/core.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Core", - "brand_id": "core", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dum" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/corega.json b/data/brands/corega.json deleted file mode 100644 index cddc809..0000000 --- a/data/brands/corega.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Corega", - "brand_id": "corega", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CG-NC034A", - "CG-NCMNL", - "CG-NCVD031A", - "NC", - "Other", - "wlncm4g" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "cg-ncmn", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "cg-ncmnv2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "cg-ncmnv2", - "NC", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "CG-WLNCM4G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - } - ] -} \ No newline at end of file diff --git a/data/brands/corex.json b/data/brands/corex.json deleted file mode 100644 index c803419..0000000 --- a/data/brands/corex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Corex", - "brand_id": "corex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2015X" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/corprit.json b/data/brands/corprit.json deleted file mode 100644 index ca3773d..0000000 --- a/data/brands/corprit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Corprit", - "brand_id": "corprit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "clock camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/corsee.json b/data/brands/corsee.json deleted file mode 100644 index 9b3b96c..0000000 --- a/data/brands/corsee.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "brand": "Corsee", - "brand_id": "corsee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "320J" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "585", - "732695510", - "CS-320J", - "CSE313", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CS-580" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=4&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CS-580", - "UKE320" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CSE313", - "PS-320J-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "CSE313", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "CSE313", - "IPC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cosansys.json b/data/brands/cosansys.json deleted file mode 100644 index 5d71ecd..0000000 --- a/data/brands/cosansys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cosansys", - "brand_id": "cosansys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/costar.json b/data/brands/costar.json deleted file mode 100644 index 50d2848..0000000 --- a/data/brands/costar.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Costar", - "brand_id": "costar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CDIH200F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CDIH226V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "CDIH226VIRF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CR32CI00" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/costim.json b/data/brands/costim.json deleted file mode 100644 index 2359458..0000000 --- a/data/brands/costim.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Costim", - "brand_id": "costim", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CL-320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/cotier.json b/data/brands/cotier.json deleted file mode 100644 index c5de582..0000000 --- a/data/brands/cotier.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "brand": "Cotier", - "brand_id": "cotier", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2518T", - "3518T", - "534/T13", - "652", - "DM/G33", - "DM/G92", - "IP PTZ", - "IPc-631/T13", - "MEGA-PIXEL", - "Other", - "TV-534H/IP", - "TV-536W/IP", - "TV-652H/IP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "534/T13", - "631", - "FE-4L", - "FE-4L/IP", - "IPc-631", - "IPC-631/T13", - "Other", - "TV-536W/IP", - "tv-631 wip", - "tv-631w", - "TV-681H/IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "534/T13", - "631", - "IPc-3518", - "IPC-3518T", - "IPc-537/T13", - "IPc-631", - "IPc-631/T13", - "Other", - "TV-536W/IP", - "TV631", - "TV-631W", - "tv-638h2", - "TV-652H/IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "658", - "COTIER TV-631W", - "IPC", - "IPC-631/T", - "ipc-631/t13", - "Mega-Pixel", - "Other", - "StIan", - "TV 631WIP", - "tv-532W/IP", - "tv-631 w/ip", - "tv-632h2/ip", - "TV637H5", - "VN-H657" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "DM/G33" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/Streaming/2" - }, - { - "models": [ - "DM/G92", - "IPc-631/T13", - "Other", - "TV-653-IP69" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "DM/G92" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "DM-G31-2S", - "IPC-537/T13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "FE-2H5/IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "ipc", - "ipc-631/t13", - "TV-532W/IP", - "TV-631W/IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01_sub.264" - }, - { - "models": [ - "ipc-3518t", - "Other", - "TV-631W/IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "ipc-537/t13", - "IPc-537/T13" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "IPc-631", - "tv-631w/ip", - "tv-631w/p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "IPc-631/T13", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other", - "TV-653" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other", - "TV-652", - "TV-652H/IP", - "TV-653" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "TV-536W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "tv-631 wip", - "TV-638" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TV-653", - "tv-681h/ip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cour.json b/data/brands/cour.json deleted file mode 100644 index 556df98..0000000 --- a/data/brands/cour.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cour", - "brand_id": "cour", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nvt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/covisec.json b/data/brands/covisec.json deleted file mode 100644 index 1247cb1..0000000 --- a/data/brands/covisec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Covisec", - "brand_id": "covisec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALD-400HK w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cowkey.json b/data/brands/cowkey.json deleted file mode 100644 index 6ed8002..0000000 --- a/data/brands/cowkey.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Cowkey", - "brand_id": "cowkey", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/cp-plus.json b/data/brands/cp-plus.json deleted file mode 100644 index 54954b5..0000000 --- a/data/brands/cp-plus.json +++ /dev/null @@ -1,407 +0,0 @@ -{ - "brand": "Cp Plus", - "brand_id": "cp-plus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "121", - "CP-UVR-0401E1-CS" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "121", - "1MP", - "2MP", - "CN-RNP-36D", - "cp unc", - "CP:UVR-0401E1S", - "cp-unc-cs13l1-vmw", - "cp-unc-da10l3s-0360", - "CP-UNC-DA10R3", - "CP-UNC-DA20L3S-V2", - "cp-unc-da30l3s-0360", - "CP-UNC-DB21L3C-M", - "CP-UNC-DP10L3C-V2", - "CP-UNC-T2322L3", - "CP-UNC-TA10L3S-0280", - "CP-UNC-TA10L3S-0360", - "CP-UNC-TA13L2/L3", - "CP-UNC-TA13L3", - "CP-UNC-TA20L3S", - "CP-UNC-TA20L3S-0360", - "CP-UNC-TA30l3S", - "CP-UNC-TY20FL2C", - "CP-UNP-3013SL10 SPEED DOME", - "CP-UNP-3022R15DA", - "CP-UVC-T1000L2A", - "CP-UVR-1601E1", - "CP-UVR-1601E1-S", - "CP-VAC-D24L2", - "CP-VGC-T13L2", - "da10l3s", - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "1MP", - "3MP", - "cnp_unc", - "CP-UAR-0804Q1-AB", - "CP-UNC-CS10L1W", - "CP-UNC-DP10L3C-V2-0280B", - "CP-UNC-T2212L3-0360", - "CP-UNC-T2322L3", - "CP-UNC-T5254L3", - "CP-UNC-TP10L2C", - "Dine", - "dome camera", - "DVR", - "Infeed of automatic shot blasting", - "MODEL CB", - "Other", - "TP10L3C-V2-0360B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1MP", - "CP-NC9W-K", - "CP-UAR-080001-B", - "CP-UNC-DP10L2C", - "CP-UNC-DP10L3C-V2-0280B", - "CP-UNC-TA13L2/L3", - "CP-UNC-TA40L3-0360", - "CP-UNC-TE20ZL5-MD", - "CP-UNP-D2521L10-DP", - "DOME CAMERA", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "1MP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "1MP", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "2MP", - "3MP", - "cp unc", - "CP-UNC-DA10L3S-0360", - "CP-UNC-DA20L3S-V2", - "CP-UNC-DB21L3C-M", - "CP-UNC-DP10L3C-V2", - "CP-UNC-T2322L3", - "cp-unc-ta20l3s-v2-0360", - "CP-UNC-TA41PL3-D", - "cp-unc-tb13fl3-md", - "CP-UNC-TE4K082ZR5-M", - "CP-UNC-TS21PL3-0360", - "CP-UVC-T1000L2A", - "CP-UVR-1601E1", - "CP-VAC-D24L2", - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "2MP", - "CP-UNC-T2212L3-0360", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "3MP", - "CP-UNC-CS10L1W", - "CP-UNC-DP10L2C", - "CP-UNC-DP10L3C-V2", - "CP-UNC-TA10L3S-0280", - "CP-UNC-TA13L2/L3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "AData", - "CP3J00FD1PBQ03248", - "cp-unc-da30l3s-0360", - "CP-UNC-DP10L2C", - "CP-UVC-T1000L2A0360", - "CP-UVR-1601E1", - "da10l3s", - "DOME CAMERA", - "IPC V 1.37", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Bseries", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CNP_UNC", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CNP_UNC", - "CP-UNC-CS10L1W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "CN-RNP-36D", - "CP-RNP-36D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "CP", - "CP-NC9W-K", - "CP-UNC-DP10L2C", - "CP-UNP-F4521L25-DAP", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "CP E41A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel1" - }, - { - "models": [ - "CP E41A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel0" - }, - { - "models": [ - "CP4J05314PAG00023" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CP-EPK-HC10L1", - "ezykam ep10l1", - "HPK-HP10L1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CP-EPK-HC10L1", - "CP-UNC-TA21PL3", - "HPK-HP10L1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CP-RNP-36D", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "CP-UAR-0804Q1-AB", - "CP-UNC-DB21L3C-M-0360", - "CP-UNC-TA20L8S-V2-600", - "cp-unc-td41l5e-md-j", - "CP-UNC-VA51L3-MDS", - "DVR", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "CP-UAR-0804Q1-AB", - "DVR", - "IPC v 1.37", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "CP-UNC-DA13L3-0360", - "CP-UNP-2020TL10", - "CP-UNP-3013SL10 Speed Dome" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "D21" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "EPK-EP10L1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/cpcam.json b/data/brands/cpcam.json deleted file mode 100644 index 30b64ee..0000000 --- a/data/brands/cpcam.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Cpcam", - "brand_id": "cpcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5xx DVR Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "5xx DVR Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Getvideo.cgi?Cookie=" - }, - { - "models": [ - "5xx DVR Series", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "CPD541D" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/cpd.json b/data/brands/cpd.json deleted file mode 100644 index 1c3ae1f..0000000 --- a/data/brands/cpd.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cpd", - "brand_id": "cpd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cptcam.json b/data/brands/cptcam.json deleted file mode 100644 index 2a7d483..0000000 --- a/data/brands/cptcam.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Cptcam", - "brand_id": "cptcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000751", - "CP-6M201W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "CP-6M201W", - "Stasi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CP-6M201W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cp-8h801w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "H.264 720P IP-Kamera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/en/base/cgi-bin/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cpvan.json b/data/brands/cpvan.json deleted file mode 100644 index ba914c7..0000000 --- a/data/brands/cpvan.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Cpvan", - "brand_id": "cpvan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "CP-ODRIPC6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/cr2100.json b/data/brands/cr2100.json deleted file mode 100644 index 8d0d189..0000000 --- a/data/brands/cr2100.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cr2100", - "brand_id": "cr2100", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/creality.json b/data/brands/creality.json deleted file mode 100644 index a4c0c09..0000000 --- a/data/brands/creality.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Creality", - "brand_id": "creality", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Nebula Camera", - "Sonic Pad" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/creative.json b/data/brands/creative.json deleted file mode 100644 index 0397907..0000000 --- a/data/brands/creative.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Creative", - "brand_id": "creative", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "best" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Live Wireless", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Live Wireless", - "LİVE WİRELESS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "getcam" - }, - { - "models": [ - "Other", - "pc-cam750" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/getcam" - } - ] -} \ No newline at end of file diff --git a/data/brands/crenova.json b/data/brands/crenova.json deleted file mode 100644 index 1521505..0000000 --- a/data/brands/crenova.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Crenova", - "brand_id": "crenova", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "520", - "abk-q360", - "abk-qd520", - "CHS0126N", - "GQ-02", - "Other", - "pan q 360", - "q360", - "qd520" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Amazon", - "qd520" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/video0" - }, - { - "models": [ - "q-360 5.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "q-360 5.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/realmonitor" - }, - { - "models": [ - "QD520" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/crest.json b/data/brands/crest.json deleted file mode 100644 index 34f5077..0000000 --- a/data/brands/crest.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Crest", - "brand_id": "crest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCN-2824F" - ], - "type": "JPEG", - "protocol": "http", - "port": 1188, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "CCN-4824s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1188, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/crestron.json b/data/brands/crestron.json deleted file mode 100644 index 9d88fd4..0000000 --- a/data/brands/crestron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Crestron", - "brand_id": "crestron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVS100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cricket.json b/data/brands/cricket.json deleted file mode 100644 index 7e27a12..0000000 --- a/data/brands/cricket.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "brand": "Cricket", - "brand_id": "cricket", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Camera_EXT1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10556, - "url": "/rtsp/unicast/DefaultProfile-02" - }, - { - "models": [ - "CR-POE-13S2C_14181850", - "CR-POE-13S2C_14181858", - "CR-POE-13S2C_14181859", - "CR-POE-20S2C_14050067", - "CR-POE-20S3C_14241655", - "Other", - "Point Grey", - "PointGrey Cricket 1.3MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/unicast/DefaultProfile-01" - } - ] -} \ No newline at end of file diff --git a/data/brands/crl.json b/data/brands/crl.json deleted file mode 100644 index d8adaba..0000000 --- a/data/brands/crl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Crl", - "brand_id": "crl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SK-50" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/crysta-vision.json b/data/brands/crysta-vision.json deleted file mode 100644 index 7438c96..0000000 --- a/data/brands/crysta-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Crysta Vision", - "brand_id": "crysta-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cvt3010w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/crystal-vision.json b/data/brands/crystal-vision.json deleted file mode 100644 index cae67cf..0000000 --- a/data/brands/crystal-vision.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "brand": "Crystal Vision", - "brand_id": "crystal-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20wb", - "804", - "CVT20WB", - "cvt804a-20wb", - "CVT9604E", - "CVT9604E-3010W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CVT20WB" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/cs-280f53.json b/data/brands/cs-280f53.json deleted file mode 100644 index 0cdbedd..0000000 --- a/data/brands/cs-280f53.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cs-280f53", - "brand_id": "cs-280f53", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/cs2link.json b/data/brands/cs2link.json deleted file mode 100644 index 2edc15d..0000000 --- a/data/brands/cs2link.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cs2link", - "brand_id": "cs2link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SY8001-WR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "SY-8001WR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/csst.json b/data/brands/csst.json deleted file mode 100644 index 1862a72..0000000 --- a/data/brands/csst.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Csst", - "brand_id": "csst", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "n7405jv" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "N7405JV" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ct2.json b/data/brands/ct2.json deleted file mode 100644 index 10c9d7a..0000000 --- a/data/brands/ct2.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ct2", - "brand_id": "ct2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Focuseye" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/ctipc.json b/data/brands/ctipc.json deleted file mode 100644 index 8c94795..0000000 --- a/data/brands/ctipc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ctipc", - "brand_id": "ctipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "631c720POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ctronics.json b/data/brands/ctronics.json deleted file mode 100644 index 1a812d5..0000000 --- a/data/brands/ctronics.json +++ /dev/null @@ -1,389 +0,0 @@ -{ - "brand": "Ctronics", - "brand_id": "ctronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1024", - "1080p", - "224C", - "245C1080PWS-DP", - "245C720PWS", - "246cws720pan", - "285", - "295C-B", - "2K4MPFHD", - "380", - "550C", - "5Mx5", - "600C", - "651C720POE", - "660-4K", - "700c", - "700C-2MPB", - "700C-4MPB", - "700C-4MPW", - "720C", - "720P", - "760C", - "AAAA-192503-TEZSJ", - "C285", - "c640", - "c6f0", - "C6F0SeZ0N0P3L0", - "C6F0Sg3N0P6L2", - "C6F0SgZ0N0PaL2", - "C6F0SgZ0N0PfL2", - "C6F0SgZ0N0PgL2", - "C6F0SgZ0N0PnL2", - "C6F0SgZ3N0P6L2", - "C6F0SgZ3N0PcL2", - "C6F0SgZ3N0PdL2", - "C6F0SoZ0N0PfL2", - "C6F0SoZ0N0PgL2", - "C6F0SoZ0N0PnL2", - "C6F0SoZ3N0P0L2", - "C6F0SoZ3N0P9L2", - "C6F0SoZ3N0PfL2", - "C6F0SpZ3N0PfL2", - "C6F0SpZ3N0PmL2", - "C6F0SpZ3N0PnL2", - "C6F1SgZ3N1P0L2", - "C9F0SeZ0N0P2L0", - "camera1", - "CITPC-275C", - "CTIC-PTZ270", - "CTIP-640C", - "ctipc", - "CTIPC", - "CTIPC 270C5MP", - "CTIPC 600 C", - "CTIPC-224", - "CTIPC-224C1080PWS", - "CTIPC-224C720PWS", - "CTIPC-225CDS720PA", - "CTIPC-245C", - "CTIPC-245C720PWS", - "CTIPC-260pws", - "CTIPC-270C5MP", - "CTIPC-270C5MP-W", - "CTIPC-275C", - "CTIPC-275C1080P", - "ctipc-275c5mp", - "CTIPC-275C5MP-B", - "ctipc-285c", - "CTIPC-285C", - "CTIPC-285C1080P", - "CTIPC-285C5MP-B", - "CTIPC-285C-Z4", - "CTIPC-285C-Z4B", - "ctipc-295c", - "CTIPC-295C-5MP", - "CTIPC-380C", - "CTIPC-380C-2MP", - "ctipc-380c-4mp", - "CTIPC-380C-BP", - "CTIPC-500", - "CTIPC-500C", - "CTIPC-530C", - "CTIPC550C", - "CTIPC-550C-B", - "CTIPC-570C", - "CTIPC-590C", - "CTIPC-620C", - "CTIPC-640C", - "CTIPC-650C", - "CTIPC-680C-P2", - "CTIPC-690C", - "CTIPC-690C-2MPWD", - "CTIPC-690C-2MPWD-EU4G", - "ctipc-690C-4KS", - "CTIPC-690C-4MPSD", - "CTIPC-700C", - "CTIPC-700C-4MPB", - "CTIPC-710C-P2", - "CTIPC-720C", - "ctipc-750 c", - "CTIPC-760", - "CTIPC-760C", - "CTIPC-770C-B", - "ctipc-90C1080P", - "CTIPC-970C", - "CTIPC-PTZ270", - "CTIPC-PTZ270-W", - "CTIPCW 224", - "CTIPCW-123C1080PW", - "ctipcw-224c", - "CTIPO-3C", - "CTPIC-380C", - "CT-S20-G", - "EEEE-138733-DRZRK", - "LNE4422S-C", - "Other", - "PTZ", - "PTZ270", - "SSAA-029509-BBBDF", - "SSAC-530224-DFFFC", - "SSAK-375766-CABDC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "1080P", - "123C720PW", - "ctipc-123c720", - "CTIPC-123C720PW", - "CTIPCW-112C720", - "CTIPCW-123C1080PW", - "CTIPCW-123C720PW", - "CT-S20-G", - "Other", - "PWR1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080P", - "123C720PW", - "245C1080PWS", - "245C1080PWS-DP", - "245C720PWS", - "660-4k", - "720P", - "C6F0SEZ0N0P3L0", - "C6F0Sg3N0P6L2", - "C6F0SgZ0N0PfL2", - "C6F0SgZ3N0PfL2", - "C6F0SoZ3N0P9L2", - "C6F0SoZ3N0PcL2", - "CTIPC-%c", - "CTIPC-123C720PW", - "CTIPC-224", - "CTIPC-224C1080PWS", - "CTIPC-224C720720PWS", - "CTIPC-224C720PWS", - "ctipc-245c", - "CTIPC-245C1080PWS", - "CTIPC-245C720PWS", - "CTIPC-246CWS720PAN", - "CTIPC-275C1080P", - "CTIPC-275C5MP-B", - "CTIPC-285C", - "CTIPC-285C1080P", - "CTIPC-290C5MP-B", - "CTIPC-380C", - "CTIPC-380C-2MP", - "CTIPC-520c", - "CTIPC-780C", - "CTIPC-C6F0SgZ3N0PdL2", - "CTIPC-PTZ270", - "CTIPCW", - "CTIPCW 224", - "CTIPCW-245C", - "CTIPO-350C5MP", - "Other", - "PTZ", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "CTIPCW-IR06B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "123c720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "123C720", - "123C720PW", - "720P", - "C6F0Sg3N0P6L2", - "C6F0SoZ3N0P9L2", - "CTIPC-123C720PW", - "ctipc-295c", - "CTIPC-PTZ270", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "246cws720pan" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "295C-B", - "550", - "550C", - "710c", - "790", - "c690", - "C6F0SgZ0N0PnL2", - "C6F0SoZ0N0PmL2", - "C6F0SoZ0N0PnL2", - "C6F0SoZ3N0P9L2", - "C6F0SoZ3N0PmL2", - "C6F0SoZ3N0PnL2", - "camera1", - "CTIP-640C", - "CTIPC 760C", - "CTIPC-285C-Z4", - "CTIPC-295C-5MP", - "CTIPC-380C", - "ctipc-380c-4mp", - "CTIPC-500C", - "CTIPC-640C", - "CTIPC-650C", - "CTIPC-700", - "CTIPC-700C-2MPW-Z5", - "CTIPC-710C", - "CTIPC-790C", - "CTIPC-PTZ270-W", - "Dom", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "295C-B", - "C6F0SoZ0N0PfL2", - "CTIPC-380C" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "2k4MP", - "550C", - "700C", - "BU-E580", - "C6F0SgZ3N0PdL2", - "C6F0SoZ0N0PfL2", - "C6F0SoZ3N0PcL2", - "C6F0SoZ3N0PdL2", - "citpc 700", - "CITPC-690c", - "CTIP-640C", - "CTIPC-2705MP-W-US", - "CTIPC-275C5MP", - "ctipc-285c", - "CTIPC-285C1080P", - "CTIPC-380C", - "CTIPC-380C-2MP", - "CTIPC-380C-BP", - "CTIPC-510", - "ctipc-550c", - "CTIPC-590C", - "CTIPC-630C", - "CTIPC-650C", - "CTIPC-690C-4MPW", - "CTIPC-720C", - "CTIPC-770-C", - "CTIPC-PTZ270-W", - "CT-S20-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "2MP", - "720p", - "ctipc-285c", - "CTIPC-536C1080POE", - "CTIPC-631C1080POE", - "CTIPC-631C1090POE", - "ctipc-631c720poe", - "CTIPCD-631C720POE", - "CTIPO-350C5MP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "690" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmp/snap.jpg" - }, - { - "models": [ - "C6F1SgZ3N1P0L2", - "CT-S20-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 444, - "url": "/" - }, - { - "models": [ - "CTIPC-600C" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "CTIPCW-123C1080PW", - "CTIPCW-IR06B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ctvision.json b/data/brands/ctvision.json deleted file mode 100644 index bb44172..0000000 --- a/data/brands/ctvision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ctvision", - "brand_id": "ctvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "IP-255F36A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ctvison.json b/data/brands/ctvison.json deleted file mode 100644 index 8cd5bf3..0000000 --- a/data/brands/ctvison.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ctvison", - "brand_id": "ctvison", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CT-36DSWIFIBT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ctvman.json b/data/brands/ctvman.json deleted file mode 100644 index cc9a57e..0000000 --- a/data/brands/ctvman.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ctvman", - "brand_id": "ctvman", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM405IP-V10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cube.json b/data/brands/cube.json deleted file mode 100644 index c0dd58e..0000000 --- a/data/brands/cube.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cube", - "brand_id": "cube", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "g520" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "iipc-10hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/cubitech.json b/data/brands/cubitech.json deleted file mode 100644 index 6ffa61a..0000000 --- a/data/brands/cubitech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cubitech", - "brand_id": "cubitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cusxy.json b/data/brands/cusxy.json deleted file mode 100644 index 47f2e49..0000000 --- a/data/brands/cusxy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cusxy", - "brand_id": "cusxy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CXY-IPCAM001" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/cv-b13b10-odi.json b/data/brands/cv-b13b10-odi.json deleted file mode 100644 index 73d7aa6..0000000 --- a/data/brands/cv-b13b10-odi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cv-b13b10-odi", - "brand_id": "cv-b13b10-odi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "BULLET CAMERA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/cv3c.json b/data/brands/cv3c.json deleted file mode 100644 index a1620ec..0000000 --- a/data/brands/cv3c.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cv3c", - "brand_id": "cv3c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mmmm-374820-eecaf" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/cvlm.json b/data/brands/cvlm.json deleted file mode 100644 index c0f07a4..0000000 --- a/data/brands/cvlm.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Cvlm", - "brand_id": "cvlm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "133 IP Camera", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "133 IP Camera", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "133 IP Camera", - "1342", - "dome", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "255" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "cvlm1243" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cyber.json b/data/brands/cyber.json deleted file mode 100644 index d16c233..0000000 --- a/data/brands/cyber.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cyber", - "brand_id": "cyber", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/cybernetik.json b/data/brands/cybernetik.json deleted file mode 100644 index 84f5a24..0000000 --- a/data/brands/cybernetik.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cybernetik", - "brand_id": "cybernetik", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "icam-601" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cybernova.json b/data/brands/cybernova.json deleted file mode 100644 index 1b3a89c..0000000 --- a/data/brands/cybernova.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Cybernova", - "brand_id": "cybernova", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CN IPE03W", - "cn-wip031w", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "CN IPE03W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other", - "WIP604MW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "WIP604MW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "WIP604", - "WIP604MW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cyberview.json b/data/brands/cyberview.json deleted file mode 100644 index d0fc93d..0000000 --- a/data/brands/cyberview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cyberview", - "brand_id": "cyberview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVI-AI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/video_feed" - } - ] -} \ No newline at end of file diff --git a/data/brands/cybo.json b/data/brands/cybo.json deleted file mode 100644 index d4911e5..0000000 --- a/data/brands/cybo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cybo", - "brand_id": "cybo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T554" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/cycam.json b/data/brands/cycam.json deleted file mode 100644 index b53021d..0000000 --- a/data/brands/cycam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cycam", - "brand_id": "cycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cube white" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/cyclops.json b/data/brands/cyclops.json deleted file mode 100644 index bd0931c..0000000 --- a/data/brands/cyclops.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "brand": "Cyclops", - "brand_id": "cyclops", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP1200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "IP1200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - } - ] -} \ No newline at end of file diff --git a/data/brands/cygnus.json b/data/brands/cygnus.json deleted file mode 100644 index 1214740..0000000 --- a/data/brands/cygnus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cygnus", - "brand_id": "cygnus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-4M-FW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/cygonix.json b/data/brands/cygonix.json deleted file mode 100644 index 06ce924..0000000 --- a/data/brands/cygonix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cygonix", - "brand_id": "cygonix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "43558a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/cymbol.json b/data/brands/cymbol.json deleted file mode 100644 index 4539a65..0000000 --- a/data/brands/cymbol.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Cymbol", - "brand_id": "cymbol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "g3-2mpbl" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1/stream1/Profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cynics.json b/data/brands/cynics.json deleted file mode 100644 index c233d5c..0000000 --- a/data/brands/cynics.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Cynics", - "brand_id": "cynics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3335", - "CNC-3332", - "CNC-3812" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/cyrus.json b/data/brands/cyrus.json deleted file mode 100644 index ca40b67..0000000 --- a/data/brands/cyrus.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Cyrus", - "brand_id": "cyrus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P2P IP Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/cif" - }, - { - "models": [ - "P2P IP Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2/cif" - } - ] -} \ No newline at end of file diff --git a/data/brands/czarna.json b/data/brands/czarna.json deleted file mode 100644 index 015b9dc..0000000 --- a/data/brands/czarna.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Czarna", - "brand_id": "czarna", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP-088121-CBDCA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/d-link.json b/data/brands/d-link.json deleted file mode 100644 index 2f4754e..0000000 --- a/data/brands/d-link.json +++ /dev/null @@ -1,3919 +0,0 @@ -{ - "brand": "D-link", - "brand_id": "d-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0015", - "DCS 4701E", - "DCS-2121", - "DCS-2132L", - "DCS-2132L-2", - "DCS-2132LB1", - "DCS-2230", - "DCS-2310L", - "DCS2330", - "DCS-2330L", - "DCS-2332l", - "DCS-2332L", - "DCS-4614EK", - "DCS-5029L", - "DCS-5030L", - "DCS-5222L", - "dcs5222lb", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-6010L", - "DCS-6112", - "DCS-6513", - "DCS-6620", - "DCS-6818B1", - "DCS-7010L", - "DCS-7110", - "DVS-301", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "1100", - "1111", - "1130", - "2121", - "2132L", - "2132LB", - "2132LB1", - "2136l", - "2136L", - "2230L", - "2232", - "2330", - "2330l", - "2350l", - "2630", - "2630L", - "2670L", - "3420", - "4201", - "4602EV", - "4701E", - "4703E", - "5000L", - "5009", - "5009L", - "5020", - "5025L", - "5030", - "5030L", - "5211L", - "5220", - "5222", - "5222LB1", - "5225l", - "5230", - "6010L", - "6210", - "6510", - "7110", - "8000", - "8000 mc", - "8000hl", - "8000L8000H", - "8000LH", - "850L", - "8800", - "910", - "920", - "924L", - "930 L IP", - "930L a3 1.08", - "930-lb", - "930LB", - "930LB1", - "932", - "932L", - "932LB", - "932LB1", - "933", - "933-L", - "934L", - "935L", - "935L (H.264)", - "936l", - "936L (H.264)", - "936L (MJPEG)", - "940", - "940l", - "942-L", - "960L", - "AvG", - "B8820", - "d5009l", - "D5030L", - "DC920", - "DCC 933L", - "DCC 942L", - "DCS", - "DCS 2360L", - "dcs 4210", - "dcs 5029l", - "DCS 5222", - "dcs 5230", - "dcs 5320", - "DCS 7010", - "DCS 930 ut", - "DCS 930L", - "DCS 930-L", - "dcs 932l", - "DCS 932L", - "DCS 932lb1", - "DCS 935l", - "dcs 936L", - "DCS 942 K", - "DCS_5010L", - "DCS_934", - "DCS=933L", - "DCS-033L", - "dcs0930l", - "DCS0930L", - "DCS-100", - "DCS-1030", - "DCS-1100", - "DCS-1100L", - "DCS-1130", - "dcs-1130l", - "DCS-1130L", - "DCS-132L", - "DCS-132LB", - "DCS-132LB1", - "DCS-133l", - "DCS-2021", - "DCS-2030L", - "dcs-2031", - "DCS-2102", - "DCS-2103", - "DCS-2120", - "DCS-2121", - "dcs-2130", - "DCS-2130", - "DCS-2130-custom", - "DCS-2131L", - "DCS2132BL", - "DCS-2132L", - "DCS-2132LB", - "DCS-2132LB1", - "DCS-2132L-ES", - "DCS-2136l", - "DCS-2210", - "DCS-2210L", - "DCS-222L", - "DCS-2230", - "DCS-2232", - "DCS-230LB", - "DCS-2310", - "DCS-2310L", - "DCS-232", - "DCS-2326L", - "DCS2330", - "dcs2330l", - "DCS-2330L", - "DCS-2332", - "DCS-2332L", - "DCS-233OL", - "DCS-2530-L", - "DCS-2630L", - "DCS-2670", - "DCS-26700L", - "DCS-2670L", - "DCS-3010", - "DCS-3112", - "DCS-3210L", - "DCS-3410", - "DCS3411", - "DCS-3420 Series", - "DCS-3430", - "DCS3710B1", - "DCS-3715", - "DCS-3716", - "dcs-4201", - "DCS-450", - "DCS-4602EV", - "DCS-4603", - "DCS-4622", - "DCS-4662", - "dcs-4701", - "DCS-4701E", - "DCS-4703E", - "DCS-4802E", - "DCS-5000L", - "DCS-5000S", - "dcs-5009l", - "DCS-5009L", - "DCS-5010", - "DCS5020L", - "DCS-5020L/RE", - "DCS5025L", - "dcs5029", - "DCS-5029l", - "DCS-5029L", - "DCS-5030", - "dcs5030L", - "DCS-5030l", - "DCS-5030L", - "DCS-5050L", - "DCS-510L", - "DCS-520", - "DCS-5201", - "dcs-520l", - "DCS-520l", - "DCS-520L", - "DCS-5211L", - "DCS-5220", - "DCS-5220L", - "DCS-5222B1", - "DCS-5222l", - "DCS-5222L", - "DCS-5222L1B", - "DCS5222LB", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-5222l-BA", - "DCS-5229L", - "DCS-5230", - "DCS-5230L", - "DCS-5300", - "DCS-5320l", - "DCS-5330", - "DCS-5520l", - "DCS-5520L", - "DCS-555L", - "DCS-5605", - "DCS-5606", - "DCS-5615", - "dcs-5617", - "dcs-5635", - "DCS-5653", - "DCS-6004L", - "DCS-6010L", - "dcs-6045l", - "DCS-6054L", - "DCS-6112", - "DCS-6112V", - "DCS-6113", - "DCS-6113V", - "DCS-6140", - "DCS-6210", - "dcs-630L", - "DCS-6314", - "DCS-632L", - "DCS-6410", - "DCS-6511", - "DCS-6513", - "DCS-6616", - "DCS-6815", - "DCS-7000L", - "DCS-700L", - "DCS7010L", - "DCS-7110", - "DCS-7110L", - "DCS-7410", - "DCS-7413", - "DCS-7510", - "DCS-7513", - "dcs-7710", - "DCS-7710L", - "dcs8000", - "DCS-8000", - "DCS-8000l", - "dcs-8000lh", - "DCS-8000LH", - "dcs8000llh", - "DCS-800L", - "DCS-8010LH", - "DCS-8100LH", - "DCS-820L", - "DCS-825", - "DCS-825L", - "DCS-834lb", - "DCS-8525LH", - "DCS-8525LH-977F", - "DCS-8525LH-B003", - "DCS-855L", - "DCS900", - "DCS-90005L", - "DCS-903", - "DCS-910", - "DCS-920", - "DCS-920L", - "DCS-920LB1", - "DCS930", - "DCS-930BL1", - "DCS-930l", - "DCS-930L 2", - "DCS-930L-1", - "DCS930lb", - "DCS-930LB", - "dcs930lb1", - "DCS-930LB1", - "DCS-931", - "DCS-931l", - "DCS-931L", - "DCS-931L 1", - "DCS932", - "DCS-9326l", - "dcs-932b1", - "DCS932BL", - "DCS-932L (81)", - "DCS-932l B2", - "DCS-932L NEW", - "DCS-932L1", - "DCS-932LB", - "DCS-932LB1", - "DCS-933", - "DCS-9331l", - "DCS-9333L", - "dcs--933l", - "DCS-933l", - "DCS-933L", - "DCS-933L A", - "DCS-933L_CAM2", - "DCS-933lb", - "dcs-934", - "DCS-9343lb", - "DCS-934L", - "DCS-935", - "DCS-935L", - "DCS-935L MJPEG OK", - "dcs-936", - "dcs936l", - "DCS-936L", - "DCS-936L2", - "DCS93L", - "dcs942", - "DCS-942", - "DCS-942l", - "DCS-942L", - "DCS-942LA1", - "DCS-942LA3", - "DCS-942LB", - "DCS-942LB1", - "DCS-942LBI", - "DCS-950L", - "DCS-960L", - "DCS-960L PS", - "dcs-963l", - "DCS-D30L", - "DCS-D910", - "DCS-D930L", - "DCS-D930LB", - "DCS-D942L", - "DCS-G900", - "DL2332L", - "DL-936L", - "dlc-8000lh", - "Dlink 932l", - "DLINK 932L", - "D-LINK DCS-932L", - "D-LINK DCS-936L", - "DLINK-930LB", - "DS-2330", - "DS-933L", - "DSC 2132L", - "DSC 5222", - "dsc 5222l", - "DSC 5222L", - "DSC 8000-LH", - "DSC 930-L", - "DSC 960L", - "dsc-100", - "DSC-2103", - "DSC-2103_MY", - "DSC-2132L-ES", - "dsc-2330", - "DSC-2530", - "dsc-2670l", - "DSC-2670L", - "DSC3410", - "DSC-5010L", - "dsc5211l", - "DSC-8525LH", - "DSC-9000L", - "DSC-930LB", - "DSC-932L", - "DSC-932LB1", - "DSC-933", - "DSC-933L", - "DSC934L", - "DSC-935", - "DSC-936L", - "dsc-942l", - "DSL-5009L", - "DSL5020L", - "dsl-933l", - "DSL-936L", - "Other", - "rlc-411s", - "SCH-5009L", - "Shooting Waters2", - "THISONEDAMMIT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "1100", - "132l", - "132L", - "2100+", - "2121", - "2330L", - "5000L", - "5009L", - "5010L", - "5020", - "5025l", - "5025L", - "5220", - "5222L", - "5222LB1", - "732", - "910", - "920l", - "9300L", - "930L", - "930lb", - "930-LB", - "930-lb1", - "932bl", - "932BL", - "932L", - "932LB", - "932lb1", - "932LB1", - "933", - "933bl", - "933L", - "934l", - "934L", - "936L (MJPEG)", - "940L", - "952l", - "CL-5000L", - "D925", - "d930l", - "D930L", - "d932", - "DCC 932L", - "DCC 933L", - "dcl30", - "dcs", - "DCS 2330L", - "dcs 5000l", - "dcs 5010l", - "DCS 5010L", - "DCS 5029L", - "DCS 5222", - "DCS 90L", - "dcs 930", - "DCS 930", - "dcs 930lb", - "DCS 930lb1", - "DCS 932lb1", - "dcs 933 l", - "dcs=932l", - "DCS-1000", - "DCS-1000W", - "DCS-1100L", - "dcs132", - "dcs132l", - "DCS132L", - "DCS-132LB", - "DCS-202L", - "DCS-2130", - "DCS-2132L", - "DCS-232", - "DCS-2330L", - "DCS-5000L", - "DCS-5009l", - "DCS-5009L", - "DCS-5010", - "DCS-5010l", - "DCS-5010L", - "dcs5020", - "DCS-5020l", - "DCS5020L", - "DCS-5025", - "DCS5025L", - "DCS-5030", - "DCS-5030L", - "DCS-5030L-56FB", - "DCS-5092L", - "DCS-510L", - "Dcs-520l", - "DCS-520L", - "DCS-5222LB1", - "DCS-530", - "DCS-6030L", - "DCS-6818", - "DCS-700L", - "dcs-8000lh", - "DCS-800L", - "DCS-830L", - "dcs-900", - "DCS-900", - "DCS-90005L", - "DCS-900W", - "DCS-910", - "dcs-920", - "DCS-920", - "DCS-9203", - "DCS-920L", - "dcs930", - "DCS-930", - "dcs930l", - "DCS-930L", - "DCS-930L1", - "DCS-930L2", - "DCS-930Lb", - "DCS-930LB", - "DCS-930LB1", - "DCS-931L", - "DCS-931L 1", - "DCS-931LB1", - "dcs932", - "DCS-932", - "DCS-932l", - "DCS932L", - "DCS-932L NEW", - "DCS-932L.", - "DCS-932L1", - "DCS-932L2", - "DCS-932Lb", - "DCS-932LB", - "dcs-932lb1", - "DCS-932LB1", - "DCS-932LB2", - "DCS-933", - "DCS-933l", - "DCS-933L", - "dcs933la1", - "DCS-934L", - "DCS-934L-3", - "DCS-934lb", - "DCS-993L", - "DCS-D930L", - "DCS-D930LB", - "DCS-p33L", - "DL911", - "dlink", - "dlink dcs-5010", - "DLINK DCS-5010", - "dlink920", - "dlink-930lb", - "DLINK-930LB", - "DP1309", - "DS200L", - "DS-920", - "dsc 930", - "dsc132l", - "DSC-5010L", - "DSC5020L", - "dsc-5030L", - "DSC-5030L", - "DSC900", - "DSC-910", - "DSC-930", - "DSC-930L", - "DSC-930LB1", - "DSC-932L", - "DSC-932LB1", - "DSC-934L", - "DSC-S5030L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "1100", - "1130", - "132L", - "2232", - "5000L", - "5009", - "5009l", - "5009L", - "5020L", - "5220L", - "5222L", - "700L", - "924L", - "930", - "930 L", - "930 L IP", - "930 Lb", - "930LB", - "930LB1", - "931L", - "932", - "932 L", - "932LB", - "932LB CBFRONT", - "933", - "933 L", - "9340L", - "935L", - "935L (MJPEG)", - "936L (H.264)", - "Attic", - "cds-920", - "D5030L", - "d-93", - "DC 930", - "dcc930l", - "DCS 2330L", - "DCS 5020L", - "DCS 5222", - "dcs 900", - "DCS 932LB", - "DCS 932lb1", - "DCS 936L", - "DCS 942", - "DCS=933L", - "DCS-1000", - "DCS-2050L", - "dcs-5000l", - "DCS-5009L", - "DCS-5010L", - "DCS-5020L_rev", - "DCS-5025L", - "DCS5030L", - "DCS-510L", - "Dcs-5201l", - "DCS-530L", - "dcs730l", - "DCS-7513", - "DCS-800LH", - "DCS-8525LH", - "DCS-900", - "DCS-90001", - "DCS-9005l", - "DCS-910", - "DCS-920", - "DCS-920L", - "DCS-930", - "DCS-930B", - "DCS-930l", - "DCS930L", - "DCS-930L_Rev_B", - "DCS-930LB", - "DCS-930LB1", - "DCS-931L", - "dcs932", - "DCS-932", - "DCS932BL", - "DCS-932l", - "DCS-932L", - "DCS-932L.", - "DCS-932L_Rev_B", - "dcs-932LB", - "DCS-932LB1", - "DCS-933", - "DCS-9331", - "DCS-9333L", - "DCS-933l", - "DCS-933L", - "DCS-933L_CAM2", - "dcs-940lb", - "DCS-942L", - "DCS-963L", - "DCS-D910", - "DCS-D930L", - "DL-932L", - "DLINK 5020L", - "DLINK 930L", - "DLINK 932L", - "DSC-5009L", - "dsc-5020l", - "DSC5025", - "DSC-5030L", - "DSC-930", - "dsc930LB1", - "DSC-931S", - "DSC-932LB", - "dxcs 900", - "Other", - "TV-IP100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "1121", - "936L (H.264)", - "942L", - "DCS 8000-LH", - "dcs 936l", - "DCS-2630L", - "DCS-5222L", - "DCS-936L", - "dsc-936l" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video/flv.cgi" - }, - { - "models": [ - "132l", - "132L", - "2230L", - "5009", - "5009L", - "5020", - "5030", - "5030l", - "5030L", - "5222L", - "5222LB1", - "910", - "920", - "930 L", - "930lb", - "931L", - "932", - "932lb", - "932LB", - "932LB1", - "933", - "933l", - "936L", - "936L (H.264)", - "942l", - "Bac", - "Back", - "Backd930", - "CDS-6818", - "DCC 932L", - "DCL-930", - "dcs 320", - "DCS 5009", - "dcs 900", - "DCS 932lb1", - "DCS 933L", - "DCS 934L", - "DCS-1000", - "DCS-1000W", - "dcs-132l", - "DCS132L", - "DCS-202l", - "DCS-2120 SERIES", - "DCS-2330L", - "DCS-245L", - "DCS-320L", - "dcs-4602ev", - "dcs-5000l", - "DCS-5000L", - "DCS-5003DL", - "dcs-5009l", - "DCS-5009l", - "DCS-5009L", - "DCS-5010", - "DCS-5010l", - "DCS-5010L", - "DCS-5020l", - "DCS-5020L", - "dcs-5030L", - "DCS-5030l", - "DCS-5030L", - "DCS-5120L", - "DCS-5220", - "DCS-5222L", - "DCS-5520L", - "DCS-6010L", - "DCS-6818", - "DCS-7010L", - "dcs-8600lh", - "Dcs900", - "DCS-900", - "dcs-9005l", - "dcs-900-910-120", - "DCS-900W", - "DCS-910", - "dcs-920", - "DCS920", - "DCS-920", - "dcs-930", - "DCS-930", - "DCS-930 L", - "dcs930l", - "DCS-930l", - "DCS-930L2", - "DCS-930LB", - "DCS-930LB1", - "DCS-930LPGB20", - "DCS-931", - "DCS-931L", - "dcs932", - "DCS-932", - "dcs-932b1", - "DCS932L", - "DCS-932L (81)", - "DCS-932L NEW", - "DCS-932L1", - "DCS-932Lb", - "DCS-932LB", - "dcs-932lb1", - "DCS-932LB1", - "DCS-932LB2", - "DCS-933", - "DCS-9333L", - "dcs-933L", - "DCS933LA1", - "DCS-934l", - "DCS-934LB", - "DCS-936L", - "DCS-942", - "DCS-942L", - "DCS-942LB1", - "DCS-950", - "dcs-960l", - "dcsg900", - "DCS-G900", - "DCS-G932", - "DCS-link", - "DIR-825", - "dlink", - "dlink 5020L", - "DLINK 5025", - "DLINK 900", - "dlink 930L", - "Dlink 932", - "D-LINK DCS-932L", - "dlink-5000l", - "dlink920", - "dlink-dcs930lb", - "dlonk", - "DS-933L", - "dsc132;l", - "DSC-5020L", - "DSC-5020LA1", - "dsc-900", - "DSC-900", - "DSC-910", - "DSC930L", - "dsc931", - "dsc932l", - "DSC-932LB1", - "dsc-933l", - "DSC-934L", - "DSC-960L", - "dsl-5009L", - "Other", - "OTHER-DLINK2", - "ServerRmDCS 5010L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "132l", - "2132L", - "5000", - "5000L", - "5009l", - "5009L", - "5010", - "5020", - "5020L", - "5025L", - "5029L", - "5030", - "5030l", - "5030L", - "5220", - "5220L", - "5222l", - "900", - "910", - "920", - "920L", - "930", - "930L2", - "930lb", - "930-LB", - "930lb1", - "930LB1", - "931", - "932", - "932BL", - "932LB", - "932LB1", - "933L", - "934L", - "935L (H.264)", - "936L (MJPEG)", - "943l", - "CDS930", - "ckyard", - "D5030L", - "dc-5030l", - "DCC 933L", - "dcp-5030l", - "DCS 5000L", - "DCS 5010", - "dcs 5010l", - "DCS 5020l", - "DCS 5030l", - "DCS 5030lk", - "DCS 930", - "DCS 930-L", - "DCS 932L", - "dcs 933l", - "DCS- 933L", - "DCS_934", - "DCS0930L", - "dcs132l", - "dcs15000l", - "DCS2010L", - "DCS-2100", - "DCS-2121", - "DCS-2130", - "DCS-2330L", - "dcs-302", - "DCS-32L", - "DCS-360L", - "DCS-5009", - "DCS-5009l", - "DCS-5009L", - "dcs-5010", - "DCS-5010l", - "DCS-5010L", - "DCS-5020 L", - "dcs5020l", - "DCS-5020L", - "DCS5025L", - "dcs-5030", - "DCS-5030", - "dcs-5030l", - "DCS5030L", - "DCS-5030L", - "DCS-5030L-56FB", - "dcs5120l", - "dcs-520", - "DCS-5220", - "DCS-5222lb", - "DCS-5300", - "DCS-800L", - "dcs832l", - "dcs900", - "DCS-900", - "DCS-910", - "Dcs-920", - "DCS-920", - "dcs-920 l", - "dcs930", - "DCS-930BL1", - "dcs930l", - "DCS-930l", - "DCS-930L 2", - "DCS-930L-1", - "DCS-930Lb", - "DCS-930LB", - "DCS-930LB1", - "dcs-931", - "DCS-931", - "DCS-931L", - "DCS-932", - "DCS932BL", - "DCS-932l", - "DCS-932L", - "DCS-932L.", - "DCS-932L2", - "dcs-932lb", - "DCS932LB", - "dcs-932lb1", - "DCS-932lb1", - "DCS-932LB1", - "DCS932LB1_mm", - "dcs-933", - "DCS-933", - "dcs933 l-44", - "DCS-9332LB1", - "DCS-933l", - "DCS-933L_Cam2", - "dcs934L", - "DCS-934L", - "DCS-942l", - "DCS-942L", - "DCS-942LB1", - "dcs-980", - "Dfe 5030l", - "DLINK", - "D-LINK DCS-930", - "D-Link DCS-932L", - "D-Link DCS-P6000LH", - "D-Link: 930L EM", - "D-Link: DCS 930L", - "DS-930L", - "DS-933L", - "DSC-2103_MY", - "DSC-5020L", - "DSC-5020LA1", - "DSC-5030L", - "DSC-900L", - "DSC920", - "dsc930L", - "DSC-930L", - "dsc932l", - "DSC-932L", - "DSC-932LB1", - "dsc-933l", - "DSL-930", - "dsl-933l", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "132l", - "5020", - "5020L", - "5025", - "930 L", - "932-l", - "933 L", - "933L", - "DC920", - "DCC 932L", - "DCL-930L", - "dcp-930l", - "dcs 5010l", - "DCS 5020l", - "DCS 5030l", - "DCS 930lb", - "DCS 932l", - "dcs 932LB1", - "DCS 932LB1", - "DCS 934L", - "DCS_5020L", - "dcs-132", - "DCS-5000L", - "DCS-5020 L", - "dcs-5020l", - "DCS-5025", - "DCS-5025L", - "DCS-900", - "DCS-930L", - "DCS-930L1", - "DCS-930LB", - "DCS-930LB1", - "DCS-931LB1", - "DCS-932", - "dcs932l", - "DCS-932L", - "DCS-932L.", - "dcs-932lb", - "dcs932lb1", - "dcs-932lb1", - "dcs-933L", - "dcs-934L", - "Dlink 933l", - "DSC-930L", - "dsc930LB1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi" - }, - { - "models": [ - "132L", - "2121", - "2630L", - "5220", - "932-L", - "935L (MJPEG)", - "936L", - "936L (H.264)", - "942", - "942L", - "DC8942L", - "DCS 930L", - "DCS- 933L", - "DCS 935L", - "dcs 942l", - "DCS=933L", - "DCS-1100L", - "DCS-2100", - "DCS-2121", - "DCS-2630L", - "DCS-5009L", - "DCS-5222l", - "DCS-5222L", - "DCS-5222LB1", - "DCS-5605", - "DCS-8200LH", - "DCS-855L", - "DCS-930", - "DCS930l", - "DCS-932L", - "dcs-935l", - "dcs936l", - "DCS-936L", - "dcs942", - "DCS942L", - "DCS-942L", - "DCS-942LB", - "DCS-9552", - "dcs-960l", - "DCS-963L", - "DCS-993L", - "DSC-936L", - "DSC940", - "DSL-930", - "DSL-936L", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "play2.sdp" - }, - { - "models": [ - "132L", - "700l", - "900", - "910", - "920", - "930", - "930-L", - "930-LB", - "932", - "933-L", - "934L", - "DC920", - "DCS 930lb", - "DCS-202L", - "DCS-2103", - "DCS-2120 SERIES", - "DCS-2310L", - "DCS-5009", - "dcs-5009L", - "DCS-5009L", - "dcs-5010l", - "DCS-5010L", - "Dcs-5020", - "dcs-5020l", - "DCS-5020L", - "dcs-5025l", - "DCS-5025L", - "DCS-510L", - "DCS-700l", - "DCS-900", - "DCS-900 GPI", - "DCS-900-910-120", - "DCS-900W", - "DCS-910", - "DCS-920", - "DCS-930", - "DCS-930l", - "DCS-930L", - "DCS-930L 2", - "DCS-930LB", - "DCS-930LB1", - "DCS-931L", - "DCS-931L 1", - "dcs932", - "DCS-932", - "DCS932l", - "DCS932L", - "DCS-932LB", - "dcs932lb1", - "DCS-932LB1", - "DCS-933", - "DCS-9332LB1", - "DCS-933L", - "DCS-934L", - "DCS942L", - "DCS-993L", - "DCS-d332", - "DCS-D930L", - "dcs-g900", - "DCS-G900", - "DL-932L", - "DL-936L", - "dlink", - "D-LINK DCS-932L", - "DSC 930-L", - "dsc5000l", - "dsc-5010l", - "DSC-5020L", - "dsc920", - "DSC-930LB", - "DSC-932L", - "DSC-934L", - "DSL5020L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "132L", - "DCS 930L", - "DCS 934L", - "DCS-1091", - "DCS-5020L", - "L-SERIES", - "Other", - "WVC54GCA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "2000", - "2100", - "2100+", - "2121", - "5220", - "5300 G", - "5300W", - "dcs 3220g", - "dcs 3500", - "dcs 5300", - "DCS-1000W", - "DCS-2000", - "DCS-2100", - "DCS-2100+", - "DCS-2100g", - "DCS-2100G", - "DCS2120", - "DCS-2120 SERIES", - "DCS-300G", - "DCS-3220", - "DCS-3220G", - "DCS-3420", - "DCS-5220", - "dcs-5250", - "DCS-5300", - "DCS-5300 Internet Camera", - "DCS-5300 SERIES", - "DCS-5300g", - "DCS-5300G", - "DCS-5300W", - "DCS-5520", - "DCS-6620", - "DCS-6620g", - "DCS-6620G", - "DCS-950", - "DSC2000", - "DVS-301", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "2100", - "2121", - "2132L", - "2330L", - "2332L", - "2630L", - "4701E", - "4703E", - "5000L", - "5220L", - "5222lb1", - "5230", - "6513", - "7110", - "920", - "924L", - "930 L", - "930LB", - "932", - "932-L", - "935L", - "935L (H.264)", - "936l", - "936L", - "936L (MJPEG)", - "940L", - "942Lb", - "960", - "960L", - "DCC 942L", - "DCS 2360L", - "DCS 930LB", - "DCS 932lb1", - "DCS 934L", - "DCS=936L", - "DCS-1000W", - "DCS-1100", - "DCS-1130", - "DCS-1130L", - "DCS-132LB", - "DCS-2000", - "DCS-2100", - "DCS-2100 SERIES", - "DCS-2102", - "DCS-2103", - "DCS-2120", - "DCS-2120 SERIES", - "DCS-2121", - "DCS-2130", - "DCS-2132L", - "DCS-2132LB", - "DCS-2132L-ES", - "DCS-2136L", - "DCS-2210", - "DCS-222L", - "DCS-2230", - "DCS-2230L", - "DCS-2310L", - "DCS-2330L", - "DCS-2330LL", - "DCS-2332l", - "DCS-2332L", - "DCS-2350L", - "DCS-2530L", - "DCS-2630L", - "DCS-26700L", - "DCS-2670L", - "DCS-3110", - "DCS-3220", - "DCS-32L", - "dcs3410", - "DCS3410", - "DCS-3420", - "DCS-3430", - "DCS-450", - "DCS-4601EV", - "DCS-4703E", - "dcs-5000L", - "DCS-5009L", - "DCS-5010L", - "DCS-5020L", - "DCS-5022L", - "DCS-5029L", - "dcs5030", - "DCS-5030", - "dcs-5030l", - "DCS-5030L", - "DCS-5211L", - "DCS-5220", - "DCS-5220L", - "DCS-5222", - "DCS-5222l", - "DCS-5222L", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-522L", - "DCS-5230", - "DCS-5230L", - "DCS-5300", - "DCS-5552l", - "DCS-5605", - "DCS-5635", - "DCS-6010L", - "DCS-6111", - "DCS-6113", - "DCS-6201", - "DCS-6210", - "DCS-6314", - "DCS-632l", - "DCS-6513", - "DCS-6620", - "DCS-6815", - "DCS-6818", - "DCS-7000L", - "DCS700L", - "DCS7010L", - "DCS-7010Loma", - "DCS-7110", - "DCS-7110L", - "DCS-7413", - "DCS-7710L", - "dcs-8000hl", - "DCS-8000LH", - "dcs-8100lh", - "DCS-825", - "DCS-825L", - "DCS-8525LH", - "DCS-855L", - "DCS-900", - "DCS-902L", - "DCS-910", - "DCS-910L2", - "DCS-920", - "DCS-920LB1", - "DCS-930", - "DCS-930 L", - "DCS-930BL1", - "dcs930l", - "DCS-930l", - "DCS-930L2", - "DCS-930LB1", - "DCS-931l", - "DCS-931L", - "DCS-932", - "DCS-932l", - "DCS932L", - "DCS-932L", - "DCS-932LB", - "DCS-932LB1", - "dcs-933", - "DCS-933", - "DCS-9332LB1", - "DCS-933l", - "DCS-933L", - "dcs-934L", - "DCS-934L-2", - "DCS-934lb", - "DCS-935l", - "DCS-935L", - "DCS-935L MJPEG OK", - "dcs936l", - "DCS-936L", - "DCS-942", - "dcs942l", - "DCS-942l", - "DCS942L", - "DCS-942L me", - "DCS-942LB1", - "DCS-942LBI", - "DCS950G", - "DCS-960L", - "DCS-D30L", - "DCS-D942L", - "Dlink", - "DLINK", - "D-Link B", - "D-LINK DCS-932L", - "D-LINK DCS-936L", - "DOOR 1", - "DS-933L", - "DSC 8000-LH", - "DSC 942L", - "dsc-1100", - "DSC-2103", - "DSC-2230L", - "DSC2530L", - "DSC-5009L", - "DSC-5020L", - "DSC930L", - "DSC-933L", - "DSC-934L", - "DVC-5552L", - "MPEG", - "Other", - "Other 5030L", - "OTHER-DLINK2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "2100+", - "3420", - "4602EV", - "5300", - "5300 G", - "DCS 5320", - "DCS-2000", - "DCS-2021", - "DCS-2100", - "DCS-2100 Series", - "DCS-2100+", - "DCS-2102", - "dcs2120", - "DCS-2120", - "DCS-2120 Series", - "DCS-2120 SERIES", - "DCS-2121", - "DCS-2230", - "DCS-3210L", - "DCS-3220", - "DCS-3220 SERIES", - "DCS-3410", - "DCS-3420", - "DCS-3420 SERIES", - "DCS-3500", - "DCS-5010L", - "DCS-5020L", - "DCS-5220", - "DCS-5230", - "DCS-5300", - "DCS-5300 SERIES", - "DCS-5300G", - "DCS-5300w", - "DCS-5330", - "DCS-5610", - "DCS-6111", - "DCS-6513", - "DCS-6620", - "DCS-6620g", - "DCS-6620G", - "dlink", - "dsc2120", - "DSC-3220", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "2103", - "2130", - "2132", - "2132LB", - "2230L", - "2330", - "2330L", - "2530L", - "2630L", - "4201", - "4602EV", - "4701e", - "4701E", - "5220L", - "5222lb1", - "5222LB1", - "6010L", - "6210", - "7110", - "dcs", - "DCS 2132LB", - "DCS 2230", - "DCS 4703E", - "dcs 5029l", - "DCS 5222", - "DCS DCS-4605EV", - "DCS_5020L", - "DCS-1130", - "DCS-2103", - "DCS-2130", - "DCS-2132", - "DCS-2132L", - "DCS-2132LB", - "DCS-2132LB1", - "DCS-2132L-ES", - "DCS-2136", - "DCS-2136L", - "DCS-2210", - "DCS2230", - "DCS-2232", - "DCS-22x0", - "DCS-2310", - "DCS-2310L", - "DCS-2311L", - "DCS-2311L-ES", - "DCS2330l", - "DCS-2330L", - "DCS-2330L/RE", - "dcs-2332", - "DCS-2332l", - "DCS-2332L", - "DCS-2670l", - "DCS-2670L", - "DCS-3010", - "DCS-3511", - "DCS-3710", - "DCS-3716", - "DCS-4212", - "DCS-4601EV", - "DCS-4602EV", - "DCS-4602EV", - "dcs-4612EK", - "DCS-4614EK", - "DCS-4618EK", - "DCS-4622", - "DCS4701E", - "DCS-4712E", - "DCS-4714E", - "DCS-4718E", - "DCS-4802E", - "DCS-5020L", - "DCS-5029L", - "DCS-5220B", - "DCS-5222l", - "DCS-5222L", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-5222LB-sesipod", - "DCS-6002L", - "DCS-6004", - "DCS-6004L", - "DCS-6010L", - "DCS-6010LLH", - "DCS-6113V", - "DCS-6210", - "DCS-6314", - "DCS-6511", - "DCS-6513", - "DCS-6616", - "DCS-6818", - "DCS-6818B1", - "DCS-7000L", - "DCS-7010", - "DCS7010L", - "dcs-7313", - "DCS-7413", - "DCS-7513", - "dcs-7710", - "DCS-8010LH", - "DCS-930", - "DCS-932L", - "DCS-934L", - "dcs-935l", - "DCS-942L", - "DCS-D5552", - "DSC 8000-LH", - "DSC-2103", - "DSC-2132L-ES", - "DSC2210", - "DSC-2230L", - "DSC2530L", - "dsc6100lh", - "DSC-7513", - "Other", - "TV310PI", - "WVC54GCA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "2121", - "2630L", - "920", - "930 L", - "930l", - "933", - "935L", - "935L (H.264)", - "936L (H.264)", - "936L (MJPEG)", - "942L", - "960L", - "ager", - "DCC 942L", - "DCS 5222", - "DCS 932L", - "DCS- 933L", - "DCS 936L", - "DCS-1000", - "DCS-1100", - "DCS-1130", - "DCS-121", - "DCS-2000", - "DCS-2100", - "DCS-2102", - "DCS-2103", - "DCS-2120", - "DCS-2121", - "DCS-2130", - "DCS-2132L", - "DCS-2210", - "DCS-2230", - "DCS-2310L", - "DCS-2630L", - "DCS-3110", - "DCS-3220", - "DCS-3410", - "DCS-3420", - "DCS-5211L", - "DCS-5220", - "DCS-5222l", - "DCS-5222L", - "DCS-5230", - "DCS-5230L", - "DCS-5300", - "DCS-6111", - "DCS-6113", - "DCS-6620", - "DCS-6815", - "DCS-7010L", - "DCS-7110", - "DCS-820L", - "DCS-825L", - "DCS-900", - "DCS-910", - "DCS-920", - "DCS-930", - "DCS-930L", - "DCS-932", - "DCS-932L", - "DCS-932L NEW", - "DCS-935L", - "DCS-936L", - "DCS-936L2", - "dcs942", - "DCS-942", - "dcs-942l", - "DCS-942L", - "DCS-942LA1", - "DCS-942LB1", - "DCS950G", - "DCS-960L", - "D-LINK DCS-936L", - "DSC-935L", - "dsc-936l", - "DSC-942L", - "Other", - "Reno" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "2121", - "2132L", - "7110", - "DCS 5220", - "DCS-2100", - "dcs-2120", - "DCS-2120", - "DCS-2120 SERIES", - "DCS-2121", - "DCS-2332l", - "DCS-3110", - "DCS-3220", - "DCS-3415", - "DCS-3420 Series", - "DCS-5220", - "DCS-5610", - "DCS-6110", - "DCS-6111", - "DCS-6113", - "DCS-6113V", - "DCS-6915", - "DCS-7110", - "DCS-7110B", - "DCS-7110B1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "2130", - "932", - "DCS-930L", - "DCS-932L", - "DCS-932LKB", - "Other", - "TL-SC2020N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "2132BL", - "5029L", - "6010L", - "932-L", - "DCS-2103", - "DCS-2330L", - "DCS-3710", - "DCS-4802E", - "DCS-5029L", - "DCS-5222L1B", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-6511", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "dms" - }, - { - "models": [ - "2132L", - "2330L", - "2530L", - "DCS 7010", - "DCS-2130", - "DCS-2132l", - "DCS-2210", - "DCS-2230", - "DCS-2310L", - "DCS-2330", - "DCS-2330L", - "DCS-2330lL", - "DCS-3712", - "DCS-5222LB1", - "DCS-6511", - "DCS-6815", - "DCS-7010L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "2132L", - "5000", - "5000L", - "5010L", - "930 L", - "932-L", - "932-LB", - "932lb1", - "934", - "934L", - "DCS", - "DCS 5000L", - "DCS 930LB", - "DCS 935L", - "DCS-1000", - "DCS-1000W", - "DCS-1130", - "DCS-2100", - "DCS-2102", - "DCS-2103", - "DCS-2120", - "DCS-2121", - "DCS-2130", - "DCS-2132L", - "DCS-2230", - "DCS-3110", - "DCS-3220", - "DCS-3410", - "DCS-3420", - "DCS-5020L", - "DCS-5030", - "DCS-5211L", - "DCS-5220", - "DCS-5222L", - "DCS-5230", - "DCS-5300", - "DCS-6111", - "DCS-6113", - "DCS-6620", - "DCS-6815", - "DCS-7010L", - "DCS-7110", - "DCS-900", - "DCS-910", - "DCS920", - "DCS-920", - "DCS-930", - "DCS-930L", - "DCS-930LB1", - "DCS-932", - "DCS932BL", - "DCS-932L", - "DCS-933L", - "DCS-936L", - "DCS-942", - "DCS-942L", - "DCVS-930L", - "D-LINK DCS-932L", - "DSC-910", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 5544, - "url": "video.cgi" - }, - { - "models": [ - "2132L", - "DCS-932L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "2132L", - "2630L", - "5020l", - "5222l", - "932lb", - "933-L", - "935L (H.264)", - "936l", - "DCS - 5222L", - "DCS 2330L", - "DCS 4703E", - "DCS 5009", - "DCS 5020l", - "DCS 5222L", - "DCS 8000-LH", - "dcs 9", - "DCS 934L", - "DCS- 935l", - "DCS_5020L", - "DCS=936L", - "DCS-2121", - "dcs-2130", - "DCS-2132l", - "DCS-2210", - "DCS-2350L", - "DCS3411", - "dcs-4602ev", - "DCS-4701E", - "DCS-4705E", - "DCS-5000L", - "dcs-5009l", - "DCS-5020 L", - "dcs5020l", - "DCS-5020L", - "DCS-5030L", - "DCS-5222B1", - "DCS5222L", - "DCS-5222L1B", - "DCS-5222lb", - "DCS-6112", - "DCS-7110", - "DCS-7513", - "dcs-8100lh", - "DCS-825L", - "DCS-910", - "DCS-930", - "DCS-930BL1", - "DCS-930L", - "DCS-930Lb", - "DCS-930LB1", - "dcs932l", - "DCS-932l", - "DCS-932L", - "DCS-933L", - "DCS-933L A", - "dcs934L", - "DCS-934lb", - "dcs-935l", - "DCS-935L", - "DCS-935L MJPEG OK", - "DCS-936L", - "DCS-936L2", - "DCS-942", - "dcs942l", - "dcs-942l", - "DCS-942LB", - "DCS-942LB1", - "dcs-960l", - "DCS-960L", - "Dlink 522lB1", - "D-LINK DCS-936L", - "DSC-2103", - "dsc6100lh", - "dsc-930L", - "DSC-930LB1", - "dsc-933l", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video/mjpg.cgi" - }, - { - "models": [ - "2132L", - "5020L", - "5222l", - "5222LB1", - "6110", - "DCS 2330L", - "DCS 4602EV", - "DCS 5029L", - "DCS 5222", - "DCS 6314", - "DCS-2103", - "DCS-2130", - "DCS-2132l", - "DCS-2132L", - "DCS-2132LB", - "DCS-2210", - "DCS-2230", - "DCS-2310L", - "DCS-2330L", - "DCS-2332l", - "DCS-2332L", - "DCS-2530L", - "DCS-2670L", - "DCS-3010", - "DCS-3110", - "DCS-3716", - "DCS-4603", - "DCS-4633EV", - "DCS-4718E", - "DCS-4802E", - "DCS-5029l", - "DCS-5221", - "dcs-5222l", - "DCS-5222L", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-6004L", - "DCS-6010L", - "DCS-6111", - "DCS-6112", - "DCS-6113", - "DCS-6210", - "DCS-6513", - "DCS-7000l", - "DCS-7000L", - "DCS-7010", - "DCS-7010L", - "dcs7110", - "DCS-7110", - "DCS-7413", - "DCS-7513", - "dsc 2210", - "DSC-2103", - "DSC2530", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live2.sdp" - }, - { - "models": [ - "2132LB", - "2330L", - "2332L", - "5220L", - "D6511", - "DCS-2100", - "DCS-2103", - "DCS-2130", - "DCS-2132L", - "DCS-2132LB", - "DCS-2136L", - "DCS-2200", - "DCS-222L", - "DCS-2230", - "DCS-2310L", - "DCS-2330LL", - "DCS-2332l", - "DCS-5020L", - "DCS5222L", - "dcs-5222lb1", - "DCS-5222LB1", - "DCS-7000L", - "DCS-7010L", - "DCS-7413", - "DSC-2230L", - "dsc-2330l", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/stream.cgi?nowprofileid=2" - }, - { - "models": [ - "2132LB", - "2132LB1", - "2330L", - "2332L", - "5222L", - "5222LB1", - "6510", - "6511", - "DCS 2132LB", - "DCS 7517", - "DCS-2103", - "DCS-2130", - "DCS-2130L", - "DCS-2131L", - "DCS-2132l", - "DCS-2132L", - "dcs-2132lb", - "dcs2132lb1", - "DCS-2136", - "DCS-2136L", - "DCS-2200", - "DCS-2210", - "DCS-2230", - "DCS-2310L", - "dcs2330l", - "DCS-2330L", - "DCS-2332L", - "DCS-2530-L", - "DCS-3110", - "DCS-3710", - "DCS-3716", - "DCS-5029l", - "DCS-5029L", - "DCS5222L", - "DCS-5222L1B", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-5610", - "DCS-6212L", - "DCS-6511", - "DCS-6818", - "DCS-7010", - "DCS-7010L", - "DCS-930L", - "DCS-935L", - "DL2332L", - "DLINK", - "DSC 2132L", - "DSC-2132l", - "DSC-2230L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video2.mjpg" - }, - { - "models": [ - "2132LB", - "2332L", - "5222LB1", - "6110", - "7110", - "DCS 2132LB", - "DCS 5222", - "DCS_2330L", - "DCS-1130", - "DCS-2103", - "DCS2132BL", - "DCS-2132L", - "DCS-2230", - "DCS-2330L", - "DCS-2332L", - "DCS-3716", - "dcs-4602ev", - "DCS-4622", - "DCS-4701E", - "DCS-4714E", - "dcs-4718E", - "DCS-5220", - "DCS-5222L", - "DCS-5222LB1", - "DCS-6010L", - "DCS-6112", - "DCS-6113", - "DCS700L", - "DCS7010L", - "DCS-7010L", - "DCS-7110", - "DCS-935L", - "DCS-936L", - "ds2330l", - "DSC-2230L", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live3.sdp" - }, - { - "models": [ - "2530L", - "D-Link: 4622" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/dms?nowprofileid=2&0.7186259560150474" - }, - { - "models": [ - "2530L", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2530L", - "4602ev", - "4602EV", - "5222", - "5222LB1", - "7513", - "DCS 4703E", - "DCS 5222", - "DCS-2102", - "DCS-2103", - "DCS-2123L1B", - "DCS-2130", - "DCS-2130-CUSTOM", - "DCS2132BL", - "DCS-2132L", - "DCS-2132LB", - "DCS-2132LB1", - "DCS-2136", - "DCS-2136L", - "DCS-2210", - "DCS-2230", - "DCS-2310l", - "DCS-2310L", - "DCS-2330", - "DCS-2330L", - "DCS-2332l", - "DCS-2332L", - "DCS-2350", - "DCS-2530-L", - "DCS-26700L", - "DCS-2670L", - "DCS-3112", - "DCS-3223L", - "DCS-3716", - "DCS-3716 SERIES", - "dcs-4602", - "DCS-4602", - "DCS-4622", - "dcs-4701", - "DCS-4701E", - "DCS-5010l", - "DCS-5020L", - "DCS-5029L", - "DCS-5220L", - "DCS-5222l", - "DCS-5222L", - "DCS-5222L1B", - "DCS-5222lb", - "DCS-5222LB", - "DCS-5222lb1", - "DCS-5222LB1", - "DCS-6010", - "DCS-6010L", - "DCS-6010L_cso", - "DCS-6210", - "DCS-6314", - "DCS-6511", - "DCS-6616", - "DCS-7010", - "DCS-7010l", - "DCS-7010L", - "DCS-7110", - "DCS-7413", - "DCS-7513", - "DCS930L", - "DCS-932L", - "DS-2330L", - "DSC-2103_my", - "DSC2530L", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=2" - }, - { - "models": [ - "2630L", - "5222L", - "8000LH", - "936L", - "936L (MJPEG)", - "DCS 936L", - "DCS 942", - "DCS-8000LH", - "DCS-8525LH", - "dcs-936", - "DCS-936L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "video/flv.cgi" - }, - { - "models": [ - "329", - "5010L", - "5020l", - "930 L", - "930L", - "930lb", - "932 L", - "932LB", - "DCS", - "DCS 5010", - "DCS 5020l", - "DCS 5030l", - "dcs 900", - "DCS 930lb1", - "dcs 932l", - "DCS 932LB", - "DCS 932lb1", - "DCS- 933L", - "DCS 934L", - "DCS_5010L", - "DCS_5020L", - "DCS0930L", - "DCS-2050L", - "dcs-2130", - "DCS-4020", - "dcs-5000l", - "dcs-5010l", - "DCS-5020 L", - "dcs-5020l", - "DCS-5030L", - "DCS-6618", - "DCS-900", - "dcs-9005l", - "DCS-910", - "dcs-930", - "DCS-930 MJPG", - "DCS-930l", - "DCS-930L", - "DCS-930Lb", - "DCS-930LB1", - "DCS-932l", - "DCS-932L", - "DCS-932L (81)", - "DCS-932L (B1)", - "DCS-932l B2", - "DCS-932L.", - "dcs-932lb", - "dcs-933L", - "dcs934L", - "dlink 5020L", - "D-Link 930L", - "D-LINK DCS-930", - "dns", - "DS5 500L", - "DSC 930", - "DSC 932L", - "dsc-5010l", - "DSC5020L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 800, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "4860", - "8010LH", - "c100", - "DCP-8010LH", - "DCS 5020l", - "DCS 8515LH", - "DCS 932LB1", - "DCS-2330L", - "DCS-6111", - "dcs-7710", - "DCS-8000-LH", - "DCS-8010LH", - "DCS-8300LH", - "DCS-8525LH", - "dcs-8600lh", - "dcs-942l", - "DCS-942LB1", - "DHC 8000", - "DSC-2230", - "dsc6100", - "dsc-936l", - "tapo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "500", - "DCS-2100", - "DCS-2102", - "dcs-2103", - "DCS-2103", - "DCS-2121", - "DCS-2130", - "DCS-2132L", - "DCS-2210", - "DCS-2230", - "DCS-2310L", - "DCS-2330L", - "DCS-2332l", - "DCS-2332L", - "DCS-3110 Series", - "DCS-3110 SERIES", - "DCS-3112", - "DCS-3716", - "DCS-5222", - "DCS-5222LB1", - "DCS-6010L", - "DCS-6113", - "DCS-7010L", - "DCS-933L", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live1.sdp" - }, - { - "models": [ - "5000", - "5020l", - "5220L", - "930L", - "931L", - "932", - "932l", - "932-L", - "932lb", - "932LB", - "932LB1", - "933", - "933l", - "933L", - "934L", - "935L", - "DC8942L", - "DCC 932L", - "DCS 5000L", - "DCS_5020L", - "DCS-1000", - "DCS-1000w", - "DCS-132L", - "DCS-2103", - "DCS-245L", - "DCS-5009L", - "DCS-5010L", - "DCS-5020", - "DCS-5030L-56FB", - "DCS-5230L", - "DCS-600", - "DCS-900", - "DCS-900a", - "DCS-900W", - "DCS-910", - "DCS-920", - "DCS-930", - "DCS-930BL1", - "dcs930l", - "DCS-930L", - "DCS-930LB1", - "DCS-931L", - "DCS-932", - "DCS932BL", - "dcs932l", - "DCS932L", - "DCS-932Lb", - "DCS-932LB 2", - "DCS-932lb1", - "DCS-932LB1", - "DCS-933l", - "DCS-933L", - "DCS-934L", - "DCS-942", - "DCS-942L", - "DCS-G900", - "D-LINK DCS-932L", - "dsc-5020l", - "dsc-930L", - "DSC-930L", - "dsc-932", - "Other", - "Other 5030L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "50009", - "5030L", - "5222l", - "920", - "930 L", - "930 L IP", - "930LB", - "932", - "932LB1", - "933l", - "933-L", - "934L", - "940l", - "D5030L", - "dcs 900", - "dcs 932", - "DCS 932L", - "DCS 932lb1", - "DCS 933", - "DCS-1000", - "DCS-1000W", - "DCS-132L", - "DCS-2230", - "DCS-3220", - "DCS-5009L", - "DCS-5010L", - "DCS-5020 L", - "DCS5020l", - "DCS5020L", - "DCS-502L", - "dcs-5030l", - "DCS-5030L", - "DCS-5030L FAF", - "DCS-510L", - "DCS-533L", - "DCS-700L", - "DCS-800L", - "DCS-900", - "DCS-900W", - "DCS-903L", - "DCS-910", - "DCS-920", - "DCS-930", - "DCS-930BL1", - "DCS-930l", - "DCS930L", - "DCS-930L s", - "DCS-930L1", - "DCS-930LB", - "DCS-930LB1", - "DCS-931l", - "DCS-931L", - "DCS-932", - "dcs-932-l", - "DCS-932L", - "DCS-932L NEW", - "DCS-932L-00", - "DCS-932LB", - "dcs-932lb1", - "DCS-932LB1", - "DCS-933L", - "DCS-933L-00", - "DCS-934L", - "DCS-D930L", - "DSC 930-L", - "DSC-5020LA1", - "DSC-932L", - "DSC-932LB1", - "dsc-943l", - "DSL-930L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "5009", - "5009l", - "5010L", - "5030L", - "5220L", - "930 L", - "930 Ll", - "931l", - "932-L", - "933-L", - "934", - "DCS 5009", - "DCS 5020L", - "DCS 5025", - "DCS 900W", - "DCS 932lb1", - "DCS 934L", - "DCS-5009L", - "DCS-5010L", - "DCS-5020", - "dcs-5020L", - "dcs-5030l", - "DCS-600", - "DCS-6010L", - "DCS-700L", - "DCS-900", - "DCS-910", - "DCS-920", - "DCS-920L", - "DCS-930", - "DCS-930L", - "DCS-931l", - "DCS-931L", - "DCS-932", - "DCS-932L", - "DCS-932L (81)", - "DCS-932L NEW", - "DCS-932L_3", - "DCS-932L-00", - "DCS-932LB1", - "DCS-933", - "DCS-9332LB1", - "DCS-933l", - "DCS-933L", - "DCS-936L", - "DCS-942L", - "DCS-D30L", - "dfe5030l", - "DLink 900", - "DSC-5009L", - "DSC930L", - "DSC931", - "DSC-932LB1", - "Other", - "SCH-5009L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "5010L", - "910", - "930 L", - "930 L IP", - "930-lb", - "932l", - "932LB2", - "DC932L", - "DCS 2130", - "DCS 2330L", - "DCS 4622", - "DCS 5020l", - "DCS 5020L", - "dcs 930l", - "DCS 932L", - "DCS_5010L", - "dcs-132", - "DCS-2000 SERIES", - "DCS-2210", - "DCS-2530-L", - "DCS-2670l", - "DCS-32LB", - "DCS4701E", - "DCS-4705E", - "dcs-5009l", - "dcs-5010l", - "DCS-5222L", - "DCS-5222LB1", - "DCS-6210", - "DCS-8000-LH", - "DCS-8010LH", - "dcs-8100lh", - "dcs-832l", - "dcs910", - "DCS-910", - "DCS-920", - "DCS-920LB1", - "DCS-930 L", - "dcs-930l", - "DCS-930-Lb", - "DCS-930lb1", - "DCS-930LB1", - "DCS-932l", - "DCS-932L", - "DCS-932L (B1)", - "dcs-932lb", - "DCS-932LB", - "dcs-933", - "DCS-933L", - "DCS-933L A", - "DCS-936L", - "DCS-942LB", - "d-link", - "Dlink 932l", - "dsc-5030L", - "DSC-7010" - ], - "type": "JPEG", - "protocol": "https", - "port": 443, - "url": "/image/jpeg.cgi" - }, - { - "models": [ - "5010L", - "5020", - "932 L", - "932lb", - "DCL-930L", - "DCS 5020l", - "Dcs 930L", - "DCS 934L", - "DCS_5010L", - "DCS-32l", - "DCS-5000l", - "DCS-5009L", - "DCS-5010L", - "DCS-5020L", - "DCS-5022L", - "dcs-5030l", - "DCS-5030l", - "DCS-900", - "dcs-920 l", - "dcs-930l", - "DCS-930L", - "DCS-930LB", - "DCS-932l", - "DCS-932L", - "DCS-932L (81)", - "DCS-932L (B1)", - "DCS-932L.", - "dcs-932lb", - "DCS-933L", - "DSC-5009L", - "DSC5020L", - "DSC-934L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/VIDEO.CGI" - }, - { - "models": [ - "5020", - "5025L", - "5029L", - "933l", - "DCS 5020l", - "DCS 5030l", - "DCS_5010L", - "dcs-5020L", - "dcs-5030l", - "DCS5030L", - "DCS-5030L", - "DCS-5900L", - "DCS-933L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/dgh264.raw?Profile=1" - }, - { - "models": [ - "5020l", - "5029L", - "5222L", - "5222LB1", - "DCS-2103", - "DCS-2130", - "DCS-2132l", - "DCS-2132L", - "DCS-2132L-2", - "DCS-2132LB1", - "DCS-2200", - "DCS-2210", - "DCS-2230", - "DCS-2310L", - "DCS-2330L", - "DCS-2332L", - "DCS-3112", - "DCS-3710", - "DCS-4802E", - "DCS-5029L", - "DCS-5092L", - "DCS-5222l", - "DCS-5222L", - "DCS-5222L1B", - "DCS-5222LB", - "DCS-5222LB1", - "DCS-522L", - "DCS-6210", - "DCS-6513", - "DCS-6616", - "DCS-7413", - "DCS-7710L", - "DCS-930L", - "DCS-933", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms.jpg" - }, - { - "models": [ - "5020L", - "DCS-910", - "DCS-930L", - "L-series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5020L", - "5220L", - "930 LB", - "DCL-930L", - "dcs 5000l", - "DCS 5010L", - "DCS 5020l", - "dcs 932l", - "DCS 934L", - "DCS-5020L", - "dcs-5030L", - "DCS-820L", - "DCS-930-lb", - "DCS-930LB", - "DCS-932L", - "DCS-932L (81)", - "DCS-932L (B1)", - "DCS-932LB 2", - "DCS932LB1", - "DCS-933L", - "DCS-d5009l", - "DSC-5000L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/dgvideo.cgi" - }, - { - "models": [ - "5029L", - "932 L", - "DCS 2330L", - "DCS 5030l", - "DCS_5020L", - "DCS-2103", - "DCS-2332L", - "DCS-2630L", - "DCS-2670L", - "DCS-4603", - "DCS-4701E", - "DCS-5020", - "DCS-5020/RE", - "DCS-5030L", - "DCS-5222L1B", - "DCS-910", - "DCS-930L", - "DCS-931L", - "DCS932LB", - "DCS-932lb1", - "DCS-932LB1", - "DCS-942l", - "DCS-942L", - "DS-930L", - "dsc 7513" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video/mjpg.cgi?profileid=1" - }, - { - "models": [ - "5220L", - "935L (H.264)", - "936L (H.264)", - "d-932", - "DCC 942L", - "dcs 936L", - "dcs 942l", - "DCS l935", - "DCS L935", - "dcs-2103", - "DCS-2630L", - "DCS-5222L", - "DCS-8010LH", - "DCS-930B", - "DCS-935", - "dcs-935L", - "DCS-935l", - "DCS-935L", - "dcs936l", - "DCS-936L", - "dcs-942l", - "DCS942L", - "DCS-942LB", - "DCS-942LB1", - "DCS-960", - "dcs-960l", - "DCS-960L2", - "DL935", - "DSC 942L", - "DSC-2630L", - "DSC-820L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/play1.sdp" - }, - { - "models": [ - "5222L", - "DCS-2630L", - "DCS-5222", - "dcs-5222l", - "DCS-5222L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/OVProfile01" - }, - { - "models": [ - "5222LB1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "6110", - "DCS-3110", - "DCS-5220", - "DCS-5610", - "DCS-6111", - "DCS-6113", - "DCS-7110", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "6110", - "DCS-5220", - "DCS-5610", - "DCS-6002L", - "DCS-6112", - "DCS-6113", - "DCS-7110", - "DCS-7110B", - "DCS-7710", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "6116", - "DCS-3110", - "DCS-3110 SERIES", - "DCS-3410", - "DCS-5220", - "DCS-5610", - "DCS-5615", - "DCS-6110", - "DCS-6111", - "DCS-6112", - "DCS-6113", - "DCS-6113B1", - "DCS-700L", - "DCS-7110", - "DCS-7110B1", - "DCS-7513", - "DSC-5020L", - "DSC5610", - "DSC-6112", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "7110", - "DCS-3415", - "DCS-3514", - "DCS-5220", - "DCS-6110", - "DCS-6111", - "DCS-6113", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "7110", - "DCS-1091", - "DCS-3415", - "DCS-5220", - "DCS-5610", - "DCS-930L", - "DSC5610", - "Other", - "TL-SC2020N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "7xxx", - "DCS - 5222L", - "dcs 5029l", - "DCS 5029L", - "DCS 5222", - "dcs-4602ev", - "DCS-5222L1B", - "DCS-5222LB1", - "DCS-6517", - "DCS-7513", - "DCS-931l", - "D-Link dcs-4701E", - "DSC-2230" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video1.mjpg" - }, - { - "models": [ - "8000L-HV2", - "8350H", - "8526LH", - "DCS 8000-LH", - "DCS 8526LH", - "DCS-8000LH", - "DCS-8000LHV2", - "DCS-8300LH", - "DCS-8300LHV2", - "DCS-8302LH", - "DCS-8320LH", - "DCS-8350LH", - "DCS-8627LH", - "DCS-8630LH", - "DCS-8635LH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/profile.0" - }, - { - "models": [ - "8526", - "910", - "930l", - "DCL-930L", - "DCS 5020", - "Dcs 930L", - "dcs 932LB", - "DCS-2050L", - "DCS-5020 L", - "dcs5030L", - "DCS-900", - "DCS-910", - "DCS-930L", - "DCS-930Lb", - "DCS-932bl", - "DCS-932l" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0" - }, - { - "models": [ - "900", - "930", - "930LB", - "932", - "932LB", - "933-L", - "DC 930", - "dcc930l", - "dcs", - "DCS 932", - "DCS 932LB", - "DCS 932lb1", - "DCS:231L", - "DCS=933l", - "DCS-1000", - "DCS-1000w", - "DCS-1000W", - "DCS-1100L", - "DCS-1150", - "DCS-132L", - "DCS-132LB", - "DCS-2332l", - "DCS-245L", - "DCS-3220", - "DCS-5009L", - "DCS-5010l", - "DCS-5010L", - "DCS-5020", - "DCS-5020l", - "DCS5020L", - "DCS-5030l", - "DCS-5030L", - "DCS-520L", - "DCS-5222L", - "DCS-5300", - "DCS-5520L", - "DCS-636", - "DCS-6811", - "DCS-900", - "dcs900w", - "DCS-900W", - "DCS-910", - "DCS-920", - "DCS-930", - "DCS-930BL1", - "dcs930L", - "DCS-930l", - "DCS-930L", - "DCS-930LB", - "DCS-930LB1", - "DCS-931L", - "dcs932", - "DCS-932l", - "DCS-932L", - "dcs932lb", - "DCS-932Lb1", - "DCS-932LB1", - "DCS-932lbs", - "DCS-933", - "DCS-9333l", - "DCS933l", - "DCS-933L", - "DCS934L", - "DCS-942L", - "DCS-960", - "DCS-D930L", - "DCS-D930LB", - "DCS-l", - "DIR-825", - "Dlink", - "DSC 930-L", - "dsc-930L", - "DSC-932L", - "DSC-932LB1", - "dsc934l", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "930 L", - "936L (MJPEG)", - "DCS- 933L", - "DCS 936L", - "DCS-5020L", - "DCS-920", - "DCS-930L", - "DCS-934L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "930 L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/aview.htm" - }, - { - "models": [ - "930 L", - "932-L", - "933-L", - "dcs 4602", - "DCS 5010", - "DCS 5020l", - "DCS 5030L", - "DCS 930", - "DCS 934L", - "DCS_5020L", - "dcs-2103", - "DCS-2121", - "DCS-2210", - "DCS-2630L", - "dcs-4602ev", - "DCS4701E", - "dcs-5009l", - "dcs-5010l", - "DCS-5030L-56FB", - "DCS5222L", - "DCS-5222L1B", - "DCS-5222lb", - "DCS-8300LH", - "DCS-910", - "DCS-930Lb", - "DCS-930LB", - "DCS-932L.", - "dcs-960l", - "DHC 8000", - "D-Link DCS-P6000LH", - "D-Link: DCS 930L", - "DSC 932L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "930 L", - "932-L", - "dcs 5010l", - "DCS 5020l", - "DCS 5030l", - "DCS 5030L", - "DCS 932LB", - "dcs 932LB1", - "dcs 933l", - "DCS_5010L", - "DCS_5020L", - "dcs-5020L", - "dcs-6045l", - "DCS-8302LH", - "DCS-8526LH", - "DCS-900", - "dcs910", - "DCS-910", - "DCS-930 L", - "dcs-930lb", - "DCS-930Lb", - "dcs930lb1", - "DCS-930LB1", - "DCS-931l", - "dcs932l", - "DCS-932LB", - "dcs-933L", - "DCS-933L", - "dcs934L", - "dcs-934L", - "DCS-942LA1", - "D-Link 930L", - "DSC-5009L", - "DSC-910", - "DSC-930LB1", - "DSC-931S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/MJPEG.CGI" - }, - { - "models": [ - "930 Lb", - "933-L", - "dcs 5000l", - "DCS 5020l", - "DCS 930L", - "DCS 934L", - "DCS-5020L", - "dcs-930l", - "DCS-930lb", - "DCS-930LB1", - "DCS-932l", - "dsc-930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=320x240" - }, - { - "models": [ - "930L" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0&snapshot=on" - }, - { - "models": [ - "930L", - "932", - "932LB", - "CDS930", - "DCS 5030l", - "DCS-5020 L", - "dcs-5030l", - "DCS-5222L", - "DCS-6620", - "DCS-910", - "DCS-920", - "DCS-920", - "DCS-930 L", - "DCS-930LB1", - "DCS-931l", - "DCS-931LA1", - "DCS-932", - "DCS-932l", - "DCS-932L", - "DCS-932L.", - "dcs-933L", - "DCS-L5020L" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg" - }, - { - "models": [ - "930-L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "932" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "932", - "DCS-930L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "932 L", - "DCL-930L", - "DCS 932L", - "DCS-5000L", - "dcs-5009l", - "DCS-930L" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/Image.jpg" - }, - { - "models": [ - "932 L", - "DCS 933L", - "DCS-5020 L", - "Dcs-920" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/IMAGE.JPG" - }, - { - "models": [ - "932L", - "960L", - "DCS-2230", - "DCS-910", - "DCS920", - "dcs-930l", - "DCS-930L", - "DCS-932L", - "DSC932L", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "933", - "DCS-5300G", - "DCS-930 L", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "933", - "DCS-930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "933L", - "935L", - "935L (H.264)", - "935L (MJPEG)", - "960L", - "DCS-920", - "DCS-930L", - "DCS-932L", - "DCS-935L", - "DCS-935L MJPEG OK", - "DCS-960L", - "DCS-960L2", - "dlink", - "DSC 930-L", - "DSC 960L", - "DSC-935L", - "Other", - "TV-IP110W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "935L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "935L (H.264)", - "936l", - "936L (H.264)", - "942l", - "DCC 942L", - "DCS 5020l", - "DCS 5220", - "dcs 930", - "DCS 935l", - "DCS-5222L1B", - "DCS933l", - "DCS-935L", - "DCS-935L MJPEG OK", - "DCS-936l", - "DCS-936L", - "dcs-942l", - "D-LINK DCS-936L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/play2.sdp" - }, - { - "models": [ - "936L (MJPEG)", - "DCS-1130", - "DCS-2102", - "DCS-2121", - "DCS-5222l", - "DCS-5222L", - "DCS-5230L", - "DCS-5552l", - "DCS-820L", - "DCS-825L", - "DCS-930", - "DCS-942", - "DCS-942L", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play3.sdp" - }, - { - "models": [ - "940L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "942L", - "dcs 942", - "DCS 942l", - "DCS-5222B1", - "DCS5222L", - "DCS-942L", - "DCS-942LB", - "DCS-942LB1", - "DVS-301", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/OVProfile00" - }, - { - "models": [ - "942L", - "DCS 942", - "dcs 942l", - "dcs942l", - "DCS-942L", - "DCS-942LA1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/OVProfile02" - }, - { - "models": [ - "960l", - "960L", - "DCS-8300LH", - "DCS-935L", - "DCS-935L MJPEG OK", - "DCS-960L", - "DSC 960L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "C935IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "DC932L", - "DCS 932L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/image/jpeg.cgi?user=" - }, - { - "models": [ - "dcs", - "DCS 930lb1", - "DCS-5020 L", - "DCS-932LB1", - "dsc931" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi" - }, - { - "models": [ - "DCS 2330L", - "DCS 5220", - "DCS3411", - "dcs-4602ev", - "DCS-4602EV", - "DCS-4718E", - "DCS-4802E", - "DCS-5220", - "dcs-5610", - "DCS-6010", - "DCS-6112", - "DCS-6113", - "DCS-6113VB1", - "DCS-7110", - "DCS-942LB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "DCS 2332L", - "DCS 930L", - "DCS-2210", - "DCS-2330L", - "dcs-4602ev", - "DCS-4602EV Vigliance", - "DCS-5222L1B", - "DCS-5222lb", - "DCS-6511", - "DCS-6517", - "DCS700L", - "DCS-7010l", - "DCS-7110B1", - "DSC-2230" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video2.mjpg" - }, - { - "models": [ - "dcs 4602", - "DCS-2050L", - "dcs-4602ev", - "DCS5222L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=appletvstream" - }, - { - "models": [ - "dcs 4602ev", - "DCS-2630L", - "dcs-6100lh" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "DCS 5010" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "DCS 5010l", - "Other", - "WVC54GCA" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "DCS 5020l" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DCS 5020l" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "DCS 5020L", - "DCS 5030l", - "DCS 934L", - "DCS_5010L", - "DCS-1130", - "DCS-2630L", - "DCS-2670L", - "dcs-5020L", - "DCS530", - "DCS-930L", - "DCS-930LB1", - "DCS-932L (81)", - "DCS-933l", - "DCS-942L", - "DSC 5020L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video/mjpg.cgi?profileid=3" - }, - { - "models": [ - "dcs 5300" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "DCS 7110B", - "DCS-7110B1" - ], - "type": "JPEG", - "protocol": "http", - "port": 1570, - "url": "/cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "DCS 8515LH", - "DCS-8000", - "DSC-2230-91" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "DCS 8526LH" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DCS 930L", - "dcs-8200LH", - "DCS920" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DCS 934L", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DCS 934L", - "DCS-5020L", - "DCS-930LB1", - "DCS-932L", - "DCS-932LB1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=640x480" - }, - { - "models": [ - "DCS 935l", - "DCS 960L", - "dcs-960l" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "DCS 935l", - "DCS-7110B1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/video.mjpg" - }, - { - "models": [ - "dcs 936L", - "dcs-5222l", - "NC450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_hd.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/d-tech.json b/data/brands/d-tech.json deleted file mode 100644 index 1afa949..0000000 --- a/data/brands/d-tech.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "D-tech", - "brand_id": "d-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DT-231" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "dtech" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/d2ip.json b/data/brands/d2ip.json deleted file mode 100644 index 35e759a..0000000 --- a/data/brands/d2ip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "D2ip", - "brand_id": "d2ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "215D2iP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/d3d.json b/data/brands/d3d.json deleted file mode 100644 index 7acd5f4..0000000 --- a/data/brands/d3d.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "D3d", - "brand_id": "d3d", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8801", - "8809", - "8810", - "8862", - "D8801", - "D8810", - "Other", - "TH661" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "8810", - "D8810" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "D3D T8801", - "JPT3815W-HD", - "T8801" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "D6022Y" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/d5118-acfsvt7.json b/data/brands/d5118-acfsvt7.json deleted file mode 100644 index 33f2907..0000000 --- a/data/brands/d5118-acfsvt7.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "D5118-acfsvt7", - "brand_id": "d5118-acfsvt7", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pelco" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/d5118-acnkf13.json b/data/brands/d5118-acnkf13.json deleted file mode 100644 index 49b5421..0000000 --- a/data/brands/d5118-acnkf13.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "D5118-acnkf13", - "brand_id": "d5118-acnkf13", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dae.json b/data/brands/dae.json deleted file mode 100644 index 1e95ac1..0000000 --- a/data/brands/dae.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Dae", - "brand_id": "dae", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/dafang.json b/data/brands/dafang.json deleted file mode 100644 index 19775a5..0000000 --- a/data/brands/dafang.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dafang", - "brand_id": "dafang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/unicast" - } - ] -} \ No newline at end of file diff --git a/data/brands/dagro.json b/data/brands/dagro.json deleted file mode 100644 index 806eca0..0000000 --- a/data/brands/dagro.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Dagro", - "brand_id": "dagro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DAGRO-003368-JLWYX", - "DAGRO-003485-SVMRV", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EC75D-P12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dahua.json b/data/brands/dahua.json deleted file mode 100644 index 316aab6..0000000 --- a/data/brands/dahua.json +++ /dev/null @@ -1,2850 +0,0 @@ -{ - "brand": "Dahua", - "brand_id": "dahua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VTO2202F-P-S2 2MP", - "1408", - "5442", - "AXW-890A", - "DH DVR", - "dhi-hcvr4104HS-S2", - "DH-IPC-HDBW4431F-AS", - "IPC-HDW1220S", - "IPC-HDW1431S-S4", - "IPC-HDW2231T-AS-S2", - "ipc-hdw4431c-a-v2", - "IPC-HDW5449TM-SE-LED", - "IPC-HFW1531S", - "k42a", - "N42BJ62", - "N64BJ62", - "Other", - "Perso1", - "PZC4LX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "03vfdm", - "4300s", - "dh-ipc-hdw4631c-a", - "DH-IPC-K15AP", - "hs400z6-p", - "HWF2100", - "IPC-EB5541-AS", - "IPC-HDBW5502N", - "IPC-HDW2431", - "IPC-HFW2431T-ZS-S2", - "IPC-HFW5442E-ZE", - "N42BJ62", - "N64BJ62" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "1", - "2M", - "1000", - "1100", - "1100s", - "1100sp", - "200", - "2010", - "2100", - "2200", - "2201", - "2400", - "2MP", - "2MPBullet", - "2MPDome", - "2MPDome2", - "3200", - "3200c", - "3300C", - "3400", - "3MP", - "3MP Vandal Dome", - "3MPcam", - "3MPix", - "4100", - "4100S", - "4200", - "4200C", - "4300", - "4300C", - "4300s", - "5108", - "5300", - "6mp", - "720", - "7200N", - "axess04", - "Bullet_720p", - "bullet_cam", - "CAISSE ZAI", - "chaina", - "china", - "CP Plus", - "DA630HDa", - "DAHUA DH-IPC-HFW1000SN-W-0360B", - "DAHUAe", - "DH HFW 4631F ZSA", - "DHI-HCVR4116HS-S3", - "DH-IPC-HDBW4300R-Z", - "DH-IPC-HDW1226SP-0280B", - "DH-IPC-HDW4300C-0280B", - "DH-IPC-HF2100P", - "DH-IPC-HFW1200SP-W", - "DH-IPC-HFW2100P", - "DH-IPC-KW12P", - "DHI-XVR4108HS-S2", - "dhs", - "DH-SD22404T-GN", - "DH-SD3282D-GN", - "dh-se128", - "DH-SF125", - "dome", - "Dome", - "Dome Cam", - "DOME_VB", - "Dror1", - "dsd-59230s-hn", - "DVR", - "DVR 5108", - "Factory", - "g", - "HBF2100", - "HCMI-IPS5200A-IR", - "hcvr4104he-s2", - "HDB3200C", - "HDB3200CP", - "HDB4300C", - "HDB4300CN", - "HDBW1000EP", - "HDBW2431E", - "hdbw3300", - "HDCVI-DVR", - "HD-IPC-K100wn", - "HDVCI", - "HDW1100S_1105S", - "HDW2100", - "HDW4300s", - "HDW4431C", - "HFW2100", - "hfw2100p", - "HFW3200C", - "hfw3200sn", - "hfw4100e", - "HFW4200EN", - "hfw4200s", - "HFW4300S", - "IP66", - "ipc hdb3200", - "IPC HDB4300CN", - "IPC HFW3301C", - "IPC2100", - "IPC2100W", - "IPC-HD2100", - "IPC-HDB3200C", - "IPC-HDB3200CN", - "IPC-HDB3200CP", - "IPC-HDBW3300", - "IPC-HDBW3300N", - "IPC-HDBW4200EN-0280B", - "IPC-HDBW4300E", - "IPC-HDBW4431R-ZS", - "IPC-HDBW4831E-ASE", - "IPC-HDW2100", - "IPC-HDW3200", - "IPC-HDW3200C", - "IPC-HDW4300C", - "IPC-HDW4300S", - "IPC-HF3300P-W", - "IPC-HF5100", - "IPC-HF8301E", - "IPC-HFW1100", - "IPC-HFW1100s", - "IPC-HFW2100", - "IPC-HFW2100P", - "IPC-HFW2200", - "IPC-HFW2300R-Z", - "IPC-HFW3200C", - "IPC-HFW3200CP", - "IPC-HFW3200S", - "IPC-HFW3300CP", - "IPC-HFW4100s", - "ipc-hfw4100sp", - "IPC-HFW4300S", - "IPC-HFW4300SP", - "IPC-HW2100", - "IPCHW4200S", - "IPC-V7163-EPT", - "IPC-V7163F-EPT", - "ipc-vec", - "ipc-vec7142pf", - "IPOF EL1MPIR30-W", - "ipptz", - "IPW2100", - "mini", - "minidome", - "moje_1", - "MP1801", - "NVR", - "onvif", - "Other", - "prsOnvif", - "QCN7001B", - "qcn7005b", - "qcn8001d", - "qsee", - "qv-2010", - "Schuur", - "SD1A203T", - "SD3282D-GN", - "sd59230", - "SD59230S", - "sd-59230s-hn", - "SD59230S-HN", - "sd5930", - "SD6", - "SD6582C", - "Techview", - "Test 01", - "TZC3EV1200", - "Undknow", - "Unk", - "x720b" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1", - "2M", - "1020", - "1080P", - "1100", - "1120", - "1120sp", - "1225", - "1300", - "1320S", - "1320SP", - "1Mpeg", - "1MPEG", - "2010", - "2100", - "2MP", - "2MPBULLET", - "2MPBULLETGenns", - "3200", - "35A", - "3MP", - "4 chan fhd", - "4 MP", - "4104", - "4300", - "4300s", - "4413", - "4431", - "4431B", - "4433", - "44330", - "5108", - "a35", - "B1A20P", - "B1A30P", - "b1b40p", - "BULLET_720P", - "c15", - "CAMS-DAH02", - "Dahua DH DVR", - "Dahua DH-IPC-HFW1120SP", - "dahua ipc hdw 4431C", - "dahua malka", - "dg-98754", - "dh ipc hdw2220rp", - "dh ipc hdw4220mp", - "dh ipc hfw4431 r-z", - "DH-HCVR4108HS-S2", - "dhi xvr4104c", - "dhi-dvr5104h-v2", - "DHI-HCVR4104HS-S2", - "DHI-HCVR4116HS-S3", - "DHI-HCVR5216AN-S3", - "DHI-NVR4104HS-4KS2", - "DHI-NVR4104HS-4KS2/L", - "DHI-NVR4104HS-P-4KS2", - "DHI-NVR4204-P-KS2/L", - "DHI-NVR4208-8P-4KS2", - "DH-IPC-4231D-AS", - "DH-IPC-AW12W", - "DH-IPC-C15", - "DH-IPC-HDB4100FP-PT", - "DH-IPC-HDBW1200EP-0280B", - "DH-IPC-HDBW1230EP", - "DH-IPC-HDBW1420EP", - "dh-ipc-hdbw2421rp-zs", - "DH-IPC-HDBW4231EP-AS", - "DH-IPC-HDBW4231FP-AS", - "DH-IPC-HDBW4300R-Z", - "DH-IPC-HDBW4421FP", - "DH-IPC-HDBW4431F", - "DH-IPC-HDBW4431FP-AS", - "DH-IPC-HDBW4431R-ZS", - "DH-IPC-HDBW44A1EN-AS", - "dh-ipc-hdbw4631r-as", - "DH-IPC-HDBW4631R-ZS", - "DH-IPC-HDW1220SN-0360B", - "dh-ipc-hdw1220sp", - "DH-IPC-HDW2220R-Z", - "DH-IPC-HDW2431RP-ZS", - "DH-IPC-HDW3441TP-ZAS", - "dh-ipc-hdw3549hp", - "DH-IPC-HDW3841EMP-AS-0280B", - "DH-IPC-HDW4231MP", - "DH-IPC-HDW4300C", - "DH-IPC-HDW4300C-0280B", - "DH-IPC-HDW4431C-A", - "dh-ipc-hdw4631c-a", - "DH-IPC-HF2100P", - "DH-IPC-HF5231EP", - "DH-IPC-HFW1200SP-W", - "DH-IPC-HFW1220SN-0360B-S2", - "DH-IPC-HFW1320", - "DH-IPC-HFW1320SP-W", - "DH-IPC-HFW1320S-W", - "dh-ipc-hfw1531sp", - "DH-IPC-HFW1831EP", - "DH-IPC-HFW2125B", - "DH-IPC-HFW2230SP-S-S2", - "DH-IPC-HFW2325S-W", - "DH-IPC-HFW2431SP-S-0360B-S2", - "DH-IPC-HFW2531S-S-S2", - "DH-IPC-HFW4100", - "dh-ipc-hfw4431m-as-i2", - "DH-IPC-HFW4631H-ZSA", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-HFW5421E-Z", - "DH-IPC-K15P", - "DHI-XVR4108C", - "DHI-xvr4108hs", - "DHI-XVR5104C", - "DHI-XVR5116HS", - "DHI-XVR5216AN-S2", - "DH-PTZ11204-GN-P", - "DH-SD2220", - "DH-SD22204T", - "DH-SD22204T-GN", - "DH-SD22204T-GN-W", - "DH-SD22204TN-G", - "DH-SD22204TN-GN", - "dh-sd22204UE-GN", - "DH-SD22A204TN-GNI-W", - "DH-SD29204T-GN", - "dh-sd2a200-hb-gn-a-pv-s2", - "DH-SD59430U-HNI", - "DH-SD6A32DH-SD6AE830V-HNI0-HN", - "DH-SF1200SE", - "DH-SF120P", - "DH-SF125", - "DH-SF125-S2", - "DH-VTO2211g-WP", - "DH-XVR4108HS", - "DH-XVR4116HS-X", - "dome", - "DOME", - "DutchDre.66", - "DVR", - "DVR 5104", - "DVR 5108C", - "DVR2104H-V2", - "EB5531", - "ESIP-MP3-DM3", - "h.265", - "HCVR", - "hcvr5116hs-s3", - "HDB4300C", - "HDB4300C/2.8", - "HDB4300F-PT", - "HDBW1000EP", - "HDBW1320E", - "HDBW1420E", - "HDBW2200EP", - "HDBW4431R-S", - "HDBW4431R-ZS", - "HDBW5842", - "HDCVI-DVR", - "HDW1220S", - "hdw4321em-as", - "HDW4431C", - "HDW4431EM", - "HDW4433C", - "hf2320", - "HFW", - "HFW1235SP-W", - "hfw1320s-w", - "hfw1420sp", - "HFW2100", - "hfw2230sp-sa-s2", - "HFW3200C", - "HFW3441EP", - "HFW4239T", - "HFW4300S", - "hfw4431R", - "HFW4831", - "IP66", - "IPC", - "IPC HFW3849T1P", - "IPC T1A30P", - "IPC-118", - "IPC-1220S", - "IPC-7442-H", - "IPC-A26HI", - "IPC-A26P", - "ipc-a35", - "IPC-A35P", - "IPC-B1A30P", - "IPC-C15", - "IPC-C35", - "ipc-c46", - "ipc-dh-hdw1220sp", - "IPC-EB5500", - "ipc-eb5531", - "IPC-EBW81230", - "IPC-HD2100", - "ipc-hdb3200c", - "IPC-HDB4300F-PT", - "IPC-HDB4431C-AS", - "IPC-HDBW1320E", - "IPC-HDBW1435E-W", - "ipc-hdbw2300r", - "IPC-HDBW2421R-ZS/VFS", - "IPC-HDBW2431R-ZS", - "IPC-HDBW4200EN-0280B", - "IPC-HDBW4300EP-AS-0360B", - "IPC-HDBW4421R", - "ipc-hdbw4431-as", - "ipc-hdbw4431f-as", - "IPC-HDBW4431R-AS", - "IPC-HDBW4431R-S-v2", - "IPC-HDBW4433R-ZS", - "IPC-HDBW5120R", - "IPC-HDBW5220E-Z", - "IPC-HDBW5302", - "IPC-HDBW5830RP-Z", - "ipc-hdbw8331e-z", - "ipc-hdw1100", - "IPC-HDW1100S", - "IPC-HDW1220", - "IPC-HDW1220SN-0360B", - "IPC-HDW1320S", - "IPC-HDW2100", - "IPC-HDW2231R-ZS", - "IPC-HDW2431", - "IPC-HDW3241TM-AS", - "IPC-HDW3549H-AS-PV", - "IPC-HDW4200s", - "IPC-HDW4300C", - "IPC-HDW4421M", - "IPC-HDW4431C-A", - "IPC-HDW4431EM-ASE", - "IPC-HDW4431M", - "IPC-HDW4433C-A", - "IPC-HDW4631C-A", - "IPC-HDW4631EM-ASE", - "ipc-hdw4830emp", - "IPC-HDW5231", - "IPC-HDW5231R-Z", - "IPC-HF3500", - "IPC-HF7442F-FR", - "IPC-HFW1020S", - "IPC-HFW1100S", - "IPC-HFW1120S", - "IPC-HFW1200SN-0360B", - "ipc-hfw1200sp", - "IPC-HFW1200S-W", - "IPC-HFW1220S", - "IPC-HFW1220SP", - "IPC-HFW1230S", - "IPC-HFW1235S", - "IPC-HFW1239S1-LED-S4", - "IPC-HFW1239SIPC-HFW1239S1-LED-S41-LED-S4", - "ipc-hfw1320s", - "IPC-HFW1320SP", - "IPC-HFW1320S-W", - "IPC-HFW1435S-W", - "IPC-HFW1831E", - "IPC-HFW2100", - "ipc-hfw2200sn", - "IPC-HFW2221R-ZS-IRE6", - "IPC-HFW2231S-S-028B-S2", - "IPC-HFW2300R-Z", - "IPC-HFW2320R-ZS", - "IPC-HFW2431S-S-S2", - "ipc-hfw3200cp", - "IPC-HFW3200SN", - "IPC-HFW3300CP", - "IPC-HFW4100S", - "IPC-HFW4231E-S", - "IPC-HFW4300R-Z", - "IPC-HFW4300S", - "IPC-HFW4431R-Z", - "IPC-HFW5200-IRA", - "IPC-HFW5231E-Z5", - "ipc-hfw8232", - "IPC-K100WP", - "ipc-k15", - "ipc-k15-2", - "ipc-k42p", - "IPC-KW12W", - "ipw12w", - "IS 13252", - "K-100", - "K26", - "K35", - "N24CG52", - "N42BJ62", - "n42bk62", - "N43CG62", - "N53CG62", - "NVR", - "ONVIF", - "Other", - "Other 1.2", - "PTZ", - "rtc", - "SAM-2443", - "sd22204", - "SD22204T-GN", - "SD49225T", - "SD59220S-HN", - "SD5923", - "SD6AL230-HNI", - "SF125-S2", - "TEST 01", - "TZC3LW686D00108", - "vkd 1320p", - "VTO", - "VTO2111D=W", - "xl-ica-206M1", - "XVR 4116" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "1", - "2M", - "1000", - "1020", - "1020c", - "1080P", - "1100SP", - "1320S", - "1320SP", - "1a203tni", - "2320", - "2400", - "2MP", - "2MPDoma", - "2MPDOME", - "3MP", - "3MP VANDAL DOME", - "3MPCAM", - "4300", - "4300R-Z", - "4300s", - "4430", - "4433", - "4MP", - "A35", - "AHD", - "BULLET_720P", - "C26EP", - "c-35", - "Dahua 2M", - "DAHUA DH DVR", - "DH-125SF-S2", - "dh-22204t-gn", - "DH-HCVR4108HS-S2", - "DH-HCVR5108H-S2", - "dhi-hcvr4104HS-S2", - "DHI-HCVR4116HS-S3", - "DHI-NVR2108HS-8P-I", - "DHI-NVR4204-P-KS2/L", - "DHI-NVR42A16-16P", - "DH-IPC-AW12W", - "DH-IPC-C35", - "DH-IPC-HDBW1200EP-0280B", - "dh-ipc-hdbw1230ep", - "DH-IPC-HDBW-4431FP-AS", - "dh-ipc-hdw1220sp", - "DH-IPC-HDW1230SP-0280B", - "DH-IPC-HDW1431SP-0280B", - "DH-IPC-HDW4221EP", - "DH-IPC-HDW4300", - "DH-IPC-HDW4431C-A", - "DH-IPC-HF5431E-E", - "DH-IPC-HFW1220SP-0360B", - "DH-IPC-HFW1230SP-0360B", - "DH-IPC-HFW1320", - "DH-IPC-HFW1320SP-W", - "DH-IPC-HFW1320S-W", - "dh-ipc-hfw1531sp", - "DH-IPC-HFW2300RP-Z", - "DH-IPC-HFW2325S-W", - "DH-IPC-HFW2431SP-S-0360B-S2", - "DH-IPC-HFW4100", - "DH-IPC-HFW4231E", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-K100A", - "DHI-xvr4108hs", - "DHI-XVR5116HS", - "DHI-XVR5216AN-S2", - "DH-SD2220", - "DH-SD22204T", - "DH-SD22204T-GN-W", - "DH-SD22204TN-G", - "DH-SD22204TN-GN", - "DH-SD22A204TN-GNI-W", - "DH-SD29204S-GN", - "DH-SD29204T-GN", - "DH-SD40212SN-HN", - "DH-SD49425XB-HNR", - "DH-SD50225U-HNI", - "DH-SD59131U-HN1", - "DH-SD59230T-HN", - "DH-SD6C120SN-HN", - "DH-SD6CE445XA-HNR", - "DH-SF120P", - "DH-SF125 -S2", - "DH-XVRB108H", - "dome", - "Dome Zoom", - "DVR", - "DVR 5104", - "DVR 5108", - "HDB4300C", - "hdbw 5431EP", - "HDBW1320E", - "HDBW2200EP", - "HDBW2431RP-ZS", - "HDBW4431R", - "HDC-HFW2200S", - "HDCVI-DVR", - "HDVCI", - "HDW1300", - "HFW", - "hfw4431R", - "HNC3230", - "ip-1mpfw", - "IPC HDW", - "IPC-a35", - "ipc-c46", - "ipc-eb5531", - "ipc-hdbw1120e-w", - "IPC-HDBW1300E", - "IPC-HDBW1320E", - "IPC-HDBW2220R-ZS", - "IPC-HDBW2231R-ZS", - "IPC-HDBW2300R", - "IPC-HDBW-2320R-ZS", - "IPC-HDBW2431R-ZS", - "IPC-HDBW4300E", - "IPC-HDBW4421EP-AS", - "IPC-HDBW4421R", - "ipc-hdbw4431f-as", - "IPC-HDBW4631R-AS", - "IPC-HDBW5302", - "IPC-HDW 4421C", - "IPC-HDW1100S", - "IPC-HDW1220S", - "IPC-HDW2100", - "IPC-HDW2431", - "ipc-hdw2431r-zs", - "IPC-HDW4421EMP-AS", - "IPC-HDW4431C-A", - "IPC-HDW4433C-A", - "IPC-HDW4631C-A", - "IPC-HDW5231R-Z", - "IPC-HDW5541TM-ASE-0280B", - "IPC-HFW1020S", - "IPC-HFW1120S", - "IPC-HFW1200S-W", - "IPC-HFW-1220S", - "IPC-HFW1220SP", - "IPC-HFW12355-W", - "ipc-hfw1320s", - "IPC-HFW2100", - "IPC-HFW2200", - "IPC-HFW2221R-ZS-IRE6", - "IPC-HFW2231S-S-028B-S2", - "IPC-HFW2239", - "IPC-HFW2300R-Z", - "IPC-HFW2325", - "IPC-HFW2431", - "IPC-HFW4431", - "IPC-HFW4431R-Z", - "IPC-HFW5231E-Z5", - "IPC-HFW5421E-Z", - "IPC-HFW5431E-Z", - "IPC-HFW5502", - "ipc-hws1200", - "IPC-K26", - "IPC-K26S", - "ipck35n", - "IPC-SF125", - "IPC-V7163F-EPT", - "ISP-K35", - "K15", - "KD-D0708D", - "moja", - "N42BJ62", - "NVR_ADT", - "ONVIF", - "Other", - "Ranger pro", - "sd42212", - "SD59225", - "SD6C225U-HNI", - "sf120", - "SF-120P", - "SF125", - "sf125-s2", - "SmartPic", - "VTO", - "VTO2111D=W", - "XVR5116HS-X", - "Zoom12" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "1", - "2M", - "1000", - "1120s", - "1120SP", - "1220S", - "1320S", - "1320SP", - "1430DS", - "1MPEG", - "2104", - "2200", - "2400", - "2449s", - "2MP", - "2MPBULLET", - "3200", - "35A", - "3MP", - "3MP VANDAL DOME", - "4 MP", - "4104", - "4300", - "4413", - "4421", - "4421e", - "4431", - "4431C-A", - "4431EM-ASE", - "4431R-ZS", - "4433", - "4mp", - "A35", - "abcd", - "B1A30P", - "bullet", - "BULLET_720P", - "BULLET_CAM_JPG", - "CM-MH200", - "D26", - "Dahua DH DVR", - "DAHUA DH DVR", - "DAHUA DH-IPC-HFW1120SP", - "Dahua: IPC-HDBW4431-AS", - "dh sd2a200hb gn a pv s2", - "DH-HCVR4108HS-S2", - "DH-HCVR5108H-S2", - "dhi-hcvr4104c-s3-n", - "dhi-hcvr4104HS-S2", - "DHI-HCVR4116HS-S3", - "DHI-HCVR5216AN-S3", - "DH-IPC-HDBW1020EP-0280B-S3", - "DH-IPC-HDBW1200EP-0280B", - "DH-IPC-HDBW4431FP", - "dh-ipc-hdbw4431r-zs", - "DH-IPC-HDW1320SP", - "DH-IPC-HDW1431SP-0280B", - "DH-IPC-HDW4431c-a", - "DH-IPC-HFW1220SN-0360B-S2", - "DH-IPC-HFW1220SP-0360B", - "DH-IPC-HFW1320", - "DH-IPC-HFW1320S", - "DH-IPC-HFW2230SP-S-S2", - "DH-IPC-HFW2431SP-S-0360B-S2", - "DH-IPC-HFW4100", - "DH-IPC-HFW4431M-AS-I2", - "dh-ipc-hfw4431-z", - "DH-IPC-HFW4843F1-ZYL-PV-AS", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-HFW5421E-Z", - "dh-ipc-hfw5431r-z", - "DH-IPC-KW12P", - "dhi-xvr4104HS", - "DHI-xvr4108hs", - "DH-SD22204T-GN", - "DH-SD22204TN-GN", - "DH-SD40212SN-HN", - "DH-SD49425XB-HNR", - "DH-SD50225U-HNI", - "DH-SD59430U-HNI", - "DH-SD6C120SN-HN", - "DH-SF120P", - "DH-SF125", - "DH-SF125-S2", - "DH-XVR1B04", - "DH-XVR5108C-X", - "Dome Cam", - "DVR", - "DVR 5104", - "DVR 5108", - "DVR 5108C", - "DVR2104H-V2", - "G26P", - "h3a", - "HCVR4104HE-S2", - "HCVR5116HS-S3", - "HDBW1420E", - "HDBW2200EP", - "HDBW4431R-S", - "HDCVI-DVR", - "HDW4431C", - "HF5431EN-E", - "HFW", - "HFW2100", - "HFW2531", - "HFW4231E-S", - "HFW4830", - "HFW5231E-Z12", - "ip-1mpfw", - "IPC HDW", - "ipc k35n", - "IPC T1a30p", - "IPC_HF8231FN", - "IPC-A35P", - "IPC-C26", - "ipc-c46", - "ipc-dh-hdw1220sp", - "ipc-eb5531", - "IPC-HDBW1230E", - "IPC-HDBW1420E", - "IPC-HDBW2421R-ZS/VFS", - "IPC-HDBW2431R-ZS", - "IPC-HDBW4421F", - "IPC-HDBW4421R", - "IPC-HDBW4431F", - "IPC-HDBW4431R-AS", - "IPC-HDBW4431R-ZS", - "IPC-HDBW5431E-Z", - "IPC-HDW1220S", - "IPC-HDW1320S", - "IPC-HDW1330", - "IPC-HDW2100", - "IPC-HDW2431R-ZS", - "IPC-HDW3200", - "ipc-hdw3441tmn", - "IPC-HDW4431C-A", - "ipc-hdw4431c-a-v2", - "IPC-HDW4631C-A", - "IPC-HDW5231R-Z", - "IPC-HDW5231R-ZE", - "IPC-HDW5541TM-ASE-0280B", - "IPC-HFW1020S", - "IPC-HFW1200SN-0360B", - "IPC-HFW1230S", - "IPC-HFW1235S-W-S2", - "IPC-HFW1320S", - "IPC-HFW1320SP", - "IPC-HFW1435s-w", - "IPC-HFW2100", - "IPC-HFW2300R-Z", - "IPC-HFW2439MN-AS-LED-B-S2", - "IPC-HFW3200C", - "IPC-HFW3200S", - "IPC-HFW3300CP", - "IPC-HFW4300S", - "IPC-HFW4300S-V2", - "ipc-HFW4431R-Z", - "IPC-HFW4431R-Z", - "IPC-HFW5231E-Z5", - "IPC-HFW5541E-ZE", - "IPC-K100WP", - "IPC-K35P", - "IPC-T2B40-ZS", - "IPPTZ", - "MY2100", - "n25bl5z", - "N42BJ62", - "N43CG62", - "NVR", - "ONVIF", - "orch", - "Other", - "SAM-2443", - "SD22204T-GN", - "SD29204S-GN", - "SD52C430U-HNI", - "SD59230S", - "SD-59230S-HN", - "SD6C225U-HNI", - "TPC-SD5600", - "XVR", - "XVR5108HS-X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1", - "2M", - "1080P", - "1220S", - "1320s", - "1320sp", - "2.8m", - "2100", - "2320", - "2MPBULLET", - "3100", - "3MPIX", - "4300s", - "4421d", - "4MP", - "DAHUA DH-IPC-HFW1120SP", - "DH-IPC-HDBW5300N", - "DH-IPC-HDW2120S", - "dh-ipc-hdw4100sp", - "DH-IPC-HDW4300c", - "DH-IPC-HF2100P", - "DH-IPC-HFW2300R-Z", - "DH-IPC-HFW4800EP", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-HUM8101", - "DH-IPC-KW12WP", - "DH-SD22204T", - "DH-SD22204TN-GN", - "DH-SD49220T-HN", - "DH-SD6A320-HN", - "DVR", - "eb5400", - "HDB3200C", - "HDB4300C", - "HDB4300F-PT", - "HDW1220S", - "HDW1300", - "HFW2100", - "HFW-4300S", - "IPC-82100", - "IPC-HDB4300c", - "IPC-HDBW1300E", - "IPC-HDBW3300", - "ipc-hdbw4120e", - "IPC-HDBW4431F", - "IPC-HDW1220S", - "IPC-HDW2100", - "IPC-HDW4300C", - "IPC-HDW4300S", - "ipc-hfw1320s", - "IPC-HFW2100", - "IPC-HFW2200R-Z", - "IPC-HFW2300", - "IPC-HFW2300R-Z", - "IPC-HFW2320R-ZS", - "IPC-HFW3200S", - "ipc-hfw3200sn", - "IPC-HFW3300CP", - "IPC-HFW4100s", - "IPC-HFW4300S", - "IPC-HFW4421DP-0360B", - "ipc-hfw4421s", - "IPC-HFW4800E", - "IPC-HFW5300C-L", - "IPC-HFW5421E-Z", - "ny1", - "Other", - "PTZ CAMERA", - "SD22202T-GN", - "SD42212S-HN", - "SD50220-HN", - "VTO6110B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "1", - "2M", - "2MPBULLET", - "2MPDOME", - "DAHUA DH-IPC-HFW1000SN-W-0360B", - "DAHUA DH-IPC-HFW1120SP", - "Dahua: Dahua DH-IPC-HFW1120S", - "DH-IPC-HFW5221EN-Z", - "DH-SD22204T-GN", - "DH-SD40212SN-HN", - "DH-SD42212T-HN", - "DH-SD6A320-HN", - "HDW1220S", - "IPC-EB5500", - "IPC-HDBW4120E", - "IPC-HDW1220S", - "IPC-HFW1000S", - "IPC-HFW1200S-W", - "IPC-HFW1220S", - "IPC-HFW1220SP", - "IPC-HFW1320SPP", - "IPC-HFW5200-IRA", - "IPC-HFW81200E-Z", - "IPPTZ", - "kasa258", - "Other", - "SD6", - "SD6582C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1", - "2M", - "2MPBULLET", - "DAHUA DH DVR", - "DH-IPC-E200N", - "DH-IPC-HDW4431C-A", - "DH-IPC-HFW2300RP-Z", - "DH-IPC-HFW3101C", - "dh-ipc-hfw5221en-z", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-HFW5421E-Z", - "DH-IPC-HFW81200E-Z", - "DH-IPC-K100A", - "DH-SD22204T-GN", - "DH-SD22204T-GN-W", - "DH-SD22204TN-GN", - "DH-SD29204S-GN", - "HDB4300C", - "HFW2100", - "IPC-HDBW-2320R-ZS", - "IPC-HDBW4300EP-AS-0360B", - "IPC-HDW1220S", - "IPC-HF3300P-W", - "IPC-HFW2100", - "IPC-HFW2200R-Z", - "IPC-HFW2300R-Z", - "IPC-HFW4421S", - "IPC-K100WP", - "Other", - "VTO" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1", - "2M", - "1080P", - "1320s", - "1320S", - "4300R-Z", - "4300s", - "4300S (ITC)", - "DAHUA DH-IPC-HFW1120SP", - "DH-IPC-HDBW1200EP-0280B", - "DH-IPC-HDBW5300N", - "DH-IPC-HDW4300", - "DH-IPC-HDW4300C", - "dh-ipc-hfw1120s", - "DH-IPC-HFW1220SP-0360B", - "DH-IPC-HFW4300S", - "DH-IPC-HFW5221EN-Z", - "DH-IPC-hum8001", - "DH-IPC-KW12WP", - "DH-SD22204T", - "DH-SD29204S-GN", - "DH-SD59430U-HNI", - "DM360", - "HDB4300FP-PT", - "HDB4300F-PT", - "HDBW4200E-AS", - "HFW2100", - "hfw3200sp", - "HFW4300S", - "IP66", - "IPC-111", - "IPC-115", - "IPC-HDB3200C", - "IPC-HDB4300C", - "IPC-HDBW1000E", - "IPC-HDBW3300", - "IPC-HDBW4421R", - "ipc-hdbw5300p", - "IPC-HDBW8281P-Z", - "IPC-HDW1100S", - "IPC-HDW1320S", - "IPC-HDW2100", - "IPC-HDW4421M", - "IPC-HFW1100S", - "IPC-HFW1200SN-0360B", - "IPC-HFW1220S", - "IPC-HFW2100", - "IPC-HFW2300R-Z", - "IPC-HFW3200C", - "IPC-HFW3200sP", - "IPC-HFW4100S", - "IPC-HFW4300S", - "IPC-HFW4300SP", - "IPC-HFW4300S-V2", - "IPOF EL1MPIR50", - "Other", - "SD6A320-HN", - "SD6C225U-HNI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "1", - "2M", - "IPC-HFW3200C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1", - "2M", - "1080P", - "1225", - "1230SP", - "123456", - "1305", - "1320", - "1320S", - "1320SP", - "2010", - "2230", - "2531", - "2MP", - "2MPBULLET", - "2MPDOME", - "3MP", - "3MP VANDAL DOME", - "4 MP", - "4029", - "4431C-A", - "4431EM-ASE", - "4431R-ZS", - "4433", - "45456", - "4MP", - "5231", - "A-15", - "A35", - "A-46", - "b1b40p", - "Bullet", - "c22", - "C26P", - "c35p", - "cam1", - "D26", - "dahua 1320", - "Dahua A-15", - "dahua ipc hdw 4431C", - "DH IPC HF8232FP", - "DHI XVR4104C", - "DHI-HCVR4104C-S3", - "dhi-itc237", - "DHI-NVR4104HS-P-4KS2", - "DHI-NVR4208-8P-4KS2", - "DHI-NVR5832-16P-4KS2", - "DHI-NVR608-32-4KS2", - "DH-IPC-4631", - "DH-IPC-5421-ext", - "DH-IPC-AW12W", - "DH-IPC-C35", - "DH-IPC-EB5531P", - "dh-ipc-hdbw1230ep", - "DH-IPC-HDBW1230EP", - "DH-IPC-HDBW1230EP-AW", - "DH-IPC-HDBW1420EP", - "DH-IPC-HDBW1831RP", - "dh-ipc-hdbw2231rp-zs", - "dh-ipc-hdbw2421rp-zs", - "dh-ipc-hdbw2831rp-zas", - "DH-IPC-HDBW3541FP-AS-M", - "DH-IPC-HDBW4231EP-AS", - "DH-IPC-HDBW4231FN-E2-M", - "DH-IPC-HDBW4231FP-AS", - "DH-IPC-HDBW4431FP-AS", - "DH-IPC-HDBW44A1EN-AS", - "DH-IPC-HDBW4613R-ZS", - "DH-IPC-HDBW4631R-AS", - "DH-IPC-HDBW4631-R-AS", - "DH-IPC-HDBW4631R-ZS", - "DH-IPC-HDBW5831RP", - "DH-IPC-HDW1230SP-0280B", - "DH-IPC-HDW1325C", - "DH-IPC-HDW1431SP-0280B", - "DH-IPC-HDW2220R-Z", - "dh-ipc-hdw2231rp-zs", - "DH-IPC-HDW2431RP-ZS", - "dh-ipc-hdw3231cp-a", - "dh-ipc-hdw4100sp", - "DH-IPC-HDW4231MP", - "DH-IPC-HDW4431C-A", - "DH-IPC-HDW4433C-a", - "dh-ipc-hdw4631c-a", - "DH-IPC-HDW4631C-A", - "DH-IPC-HDW4631EMP", - "DH-IPC-HDW4631EMP-0280B", - "DH-IPC-HDW4831EMP-ASE", - "DH-ipc-hfw1230sp", - "DH-IPC-HFW1230SP-0280B", - "DH-IPC-HFW1230SP-0360B", - "DH-IPC-HFW1320S", - "DH-IPC-HFW1320SP-W", - "DH-IPC-HFW1320S-W", - "DH-IPC-HFW1531SP", - "DH-IPC-HFW1831EP", - "DH-IPC-HFW2230SP-S-S2", - "dh-ipc-hfw2231tp-zas", - "DH-IPC-HFW2231T-ZS", - "DH-IPC-HFW3101C", - "DH-IPC-HFW4239TP-ASE", - "DH-IPC-HFW4431-Z", - "DH-IPC-HFW4433F-ZSA", - "DH-IPC-HFW4631H-ZSA", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-HFW5261EP-ZE", - "DH-IPC-HFW5541EP-Z5E", - "dh-ipc-k35p", - "DH-IPC-T1A20P", - "dhi-vto21110-wp-s1", - "DH-SD22204T", - "DH-SD22204T-GN", - "DH-SD22404T-GN", - "DH-SD29204T-GN", - "DH-SD29204T-GN-W", - "DH-SD49220T-HN-W", - "DH-SD59225U-HNI", - "DH-SD59230U-HNI", - "DH-SD60230U-HNI", - "DH-sd6c230u-hni", - "DH-VTO2111D-WP", - "DH-XVR1B04H", - "DH-XVR4108HS", - "DH-XVR5108C-X", - "DH-XVR5216AN-X", - "DVR", - "DVR 5108", - "DVR2104H-V2", - "DVR2116H", - "EB5531", - "eb5531p", - "EE123", - "fyi", - "FYI", - "G26P", - "H.265+", - "h264dahua", - "HCVR", - "HCVR5216A", - "HDBW1431E-S-0360B", - "hdbw2320rp-zs", - "HDBW2431RP-ZS", - "HDCVI-DVR", - "hdpw7564n-sp", - "HDW4431mp", - "hdw4433c", - "HDW4631", - "HDW4631C", - "HDW5231", - "HFW1230S", - "hfw1230sp", - "HFW2531", - "HFW4239THFW4239T", - "hfw4433", - "hfw-4438m", - "HFW4438M", - "hfw4631k", - "HFW4HFW4239T239T", - "hk41b22?", - "idc -HFW4243", - "IP08-El8IR-EP", - "IPC", - "IPC B1B40", - "ipc c35p", - "IPC T1A30P", - "IPC_HF8231FN", - "ipc-a12p", - "IPC-A22", - "IPC-A26P", - "ipc-a35", - "IPC-A35", - "IPC-A35P", - "IPC-A46", - "IPC-B1A20P", - "ipc-b1a30p", - "IPC-B1B20P-L", - "IPC-B2A30-Z", - "IPC-C26", - "IPC-D1A20", - "IPC-D2B40-0280B", - "IPC-EB5500", - "IPC-EB5531", - "IPC-EBW81242P", - "IPC-ebw8630", - "IPC-G26E", - "IPC-HDBW1230E", - "IPC-HDBW1230E-S", - "IPC-HDBW12B0E", - "IPC-HDBW1320E", - "IPC-HDBW1320EP-W", - "IPC-HDBW1420E", - "IPC-HDBW1431E", - "IPC-HDBW1435E-W", - "IPC-HDBW1531E-S", - "IPC-HDBW2231RP-ZS", - "IPC-HDBW2231R-ZS", - "IPC-HDBW2300R", - "IPC-HDBW2431E-S-S2", - "IPC-HDBW2431R-ZS", - "IPC-HDBW3241R-ZAS", - "IPC-HDBW3441R-ZS", - "IPC-HDBW4421E4MP", - "ipc-hdbw4431-as", - "IPC-HDBW4431-AS", - "IPC-HDBW4433R-ZS", - "ipc-hdbw4631r-zs", - "ipc-hdbw4831e", - "IPC-HDBW5231RP-ZE", - "IPC-HDBW5431E-Z", - "IPC-HDBW5431E-ZE", - "IPC-HDBW5442E-ZE", - "IPC-HDBW5541R", - "IPC-HDBW5831R-ZE", - "IPC-HDBW81230E-ZE", - "IPC-HDPW1420F-AS", - "IPC-HDW 4421C", - "IPC-HDW1220S", - "IPC-HDW1320S", - "IPC-HDW1420S", - "IPC-HDW1431S", - "IPC-HDW2231R-ZS", - "IPC-HDW2431R-ZS", - "IPC-HDW4300c", - "IPC-HDW4431C-A", - "ipc-hdw4431c-a-v2", - "IPC-HDW4431EM-AS", - "IPC-HDW4431EM-ASE", - "IPC-HDW4433C", - "IPC-HDW4433C-A", - "IPC-HDW4631C-A", - "IPC-HDW4830EMP", - "IPC-HDW4831EM-ASE", - "IPC-HDW5231", - "IPC-HDW5231RP-Z", - "IPC-HDW5231R-Z", - "IPC-HDW5231R-ZE", - "IPC-HDW5431R-Z", - "IPC-HDW5442TM-AS", - "IPC-HDW5831R-ZE", - "IPC-HFW1220S", - "IPC-HFW1230S", - "IPC-HFW1320S-W", - "IPC-HFW1420S", - "IPC-HFW1431S", - "IPC-HFW1435s-w", - "IPC-HFW1435S-W", - "IPC-HFW1531S", - "ipc-hfw1831ep", - "IPC-HFW2230S-S-S2", - "IPC-HFW2231S-S-S2", - "IPC-HFW2320R-ZS", - "IPC-HFW2320R-ZS-IRE6", - "IPC-HFW2431", - "IPC-HFW2431S-S-S2", - "IPC-HFW3441E-AS", - "IPC-HFW3441E-SA", - "IPC-HFW4231E-S", - "IPC-HFW4431E-SE", - "ipc-HFW4431R-Z", - "IPC-HFW4431R-Z", - "IPC-hfw4431S", - "IPC-HFW4631T-ASE", - "IPC-HFW4831T", - "IPC-HFW5231E-Z5", - "IPC-HFW5231E-ZE", - "IPC-HFW5431E-Z", - "IPC-HFW5541E-ZE", - "IPC-HFW81230E-Z", - "ipc-k15p", - "ipc-k46", - "ipc-t5442tm-as", - "itc-215", - "itc237", - "ITC237-PW1B-IRZ", - "K-35", - "k35n", - "looc", - "LRE MotorIPC-HDW2431", - "MINIDOME", - "N24BG52", - "N41B1P2", - "n41bd12-w", - "N41BK22", - "N44BB33", - "N44CL52", - "N52BF3Z", - "N53AJ52", - "n68br4", - "N84CG54", - "NVR", - "NVR2B16", - "NVR4232-4KS2", - "ONVIF", - "Other", - "PTZ", - "PTZ Camera", - "q-see2MPwifi", - "Ranger pro", - "SD1A203T", - "SD1A203T-GN-W", - "sd1a404xb-gnr", - "SD22204T-GN", - "SD22404T-GN-W", - "SD49225T", - "SD49225T-HN", - "sd49225xa-hnr", - "SD59220S-HN", - "SD6Ce225U-HNI", - "Spro", - "TEST 01", - "vbb", - "Victor LOSANTOS", - "VTO", - "VTO2000A", - "VTO2101P", - "VTO2202F", - "VTO3211D-p2-s2", - "VTO6110B", - "xvr4104cbs2", - "XVR5104HS4M", - "XVR5116HS-X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "1", - "2M", - "1080P", - "1120S", - "2100", - "2200", - "2MPDome", - "2MPDome1", - "3200", - "4 MP", - "4300S", - "4300S (ITC)", - "DH-IPC-HDW4431C-A", - "DH-IPC-HF5200f", - "dh-ipc-hfw-2100p", - "DH-IPC-HFW2300R-Z", - "DH-IPC-HFW4100", - "DH-IPC-HFW5421E-Z", - "DVR", - "HCVR5216A", - "HDB3200C", - "HFW2100", - "IP66", - "IPC-HDB3200C", - "IPC-HDB4300", - "IPC-HDB4300/2.8", - "IPC-HDB4300F-PT", - "IPC-HDBW3300", - "IPC-HDBW4300E", - "IPC-HDBW4300EP-AS-0360B", - "IPC-HDW2100", - "IPC-HDW3200", - "IPC-HDW4421M", - "IPC-HDW4631C-A", - "IPC-HF3500", - "IPC-HFW1100S", - "IPC-HFW2100", - "IPC-HFW3200C", - "IPC-HFW3200S", - "IPC-HFW3200SN", - "IPC-HFW4100s", - "IPC-HFW4200S", - "IPC-HFW4300S", - "IPC-HFW4300S-V2", - "IPC-KW12W", - "IPC-VEC7142PF", - "Other", - "SD6582C", - "VTO", - "VTO2111D", - "vto2111d=w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "" - }, - { - "models": [ - "1", - "3Mp", - "1111", - "1320", - "3MP", - "6L00D8FPAG2CD66A", - "Dahua DH-IPC-HFW1120SP", - "DA-IPVD20", - "DH-IPC-HDW1230S-S5", - "DH-IPC-HDW3841EMP-AS-0280B", - "DH-IPC-K100A", - "HDCVI-DVR", - "ipc hfw1320S", - "IPC-F22A", - "IPC-HDBW2431R-ZS", - "IPC-HDW2231T-AS-S2", - "ipc-hdw2831t-as-s2", - "IPC-HFW2831S-S-S2", - "IPC-HFW4300S-V2", - "IPC-HFW5421E-Z", - "NDSC CHINA", - "NDSC CHINA CAM", - "Other", - "RIGS CHINA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "1000", - "988", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "1000ps", - "1120S", - "1320S", - "2MPBULLET", - "3MP", - "4300", - "4300C", - "4300e", - "4300R-Z", - "4300S", - "4421D", - "44330", - "AM002813102660", - "DH-IPC-AW12W", - "DH-IPC-HDBW4300R-Z", - "DH-IPC-HDW4300", - "DH-IPC-HDW4300C-0280B", - "DH-IPC-HFW2100P", - "DH-IPC-HFW4120EP-0360B", - "DH-IPC-HFW4436M-l1", - "DH-IPC-HFW4800EP", - "DH-IPC-HFW5231EP-ZE", - "DH-IPC-HFW8281E-Z", - "DH-IPC-KW12WP", - "DH-SD29204T-GN", - "DH-SD49220T-HN", - "DH-SD59A230TN", - "ebw-81200", - "HDBW1320E", - "HDBW4431R-ZS", - "HDW4421", - "HDW4421EP", - "hdw4421s", - "HFW 4300e", - "hfw 4300S", - "hwd5231", - "IP66", - "IPC-HDBW1320E", - "IPC-HDBW2300rp-z", - "IPC-HDBW4421R", - "IPC-HDBW5120R", - "IPC-HDW2100", - "IPC-HDW4300C", - "IPC-HDW4431C-A", - "IPC-HDW5231RP-Z", - "IPC-HFW1120S", - "IPC-HFW1200SN-0360B", - "IPC-HFW1200S-W", - "IPC-HFW1320S", - "IPC-HFW4200SP", - "IPC-HFW4300R-Z", - "IPC-HFW4300S", - "IPC-HFW4300S-V2", - "ipc-hfw4421b", - "IPC-HFW4421D", - "IPC-HFW4421E", - "IPC-HFW4800E", - "IPC-HFW5421E-Z", - "IPPTZ", - "ONVIF", - "Other", - "SD49225T", - "SD59220S-HN", - "SD6982N-HN", - "SD6AL230-HNI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "1080P", - "CCTV 1 Cam 2", - "DAHUA DH DVR", - "DVR", - "DVR0404", - "DVR2104H-V2", - "HCVR", - "HCVR4116HS-S2", - "NVR", - "Other", - "TECHVIEW DVR", - "Xam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "1120sp", - "6G05FB7PAG40A2A", - "DH-HCVR5108H-S2", - "DHI-ASA3213G-MW", - "DHI-ASI-6213J-MW", - "dh-ipc-hdw1220sp", - "DH-IPC-HDW2230TP", - "dh-ipc-hdw3241tmp-as-0280b", - "DH-IPC-HFW123S1P-S4", - "dh-sd22204UE-GN", - "hfw1230sp", - "HFW5842H", - "IPC-HDBW1435E-W", - "ipc-hdbw3202p", - "IPC-HDW1230T1-S4", - "ipc-hf8331e", - "ipc-HFW4431R-Z", - "IPC-hfw4431S", - "XVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "1230SP", - "2MP", - "b20b40", - "DHI-DVR5104H-V2", - "DH-SD49220T-HN", - "DH-XVR1B08", - "DVR0404", - "G26P", - "HDCVI-DVR", - "HFW4831", - "IPC-HDBW2231R-ZS", - "NVR", - "Other", - "TECHVIEW" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "1320s", - "hdbw2320rp-zs", - "IPC-HFW2120R-VFS", - "Test 01", - "TEST03", - "Vana" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - }, - { - "models": [ - "1435", - "B1B20P-L", - "DHI-NVR5816-16P-4KS2E", - "DH-IPC-HDW1230T1", - "DH-IPC-HDW1439T1P-LED-0280B-S4", - "DH-IPC-HDW2431TP-AS-0280B", - "DH-IPC-HFW1230S1-A-S5", - "DH-IPC-HFW2431SP-S-0360B", - "IPC-A26HI", - "IPC-HDBW5431E-ZE", - "IPC-HFW2439SP", - "IPC-HFW4431D-AS", - "IPC-HFW4431R-Z", - "IPC-K22", - "Ranger pro", - "VTO2202F-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "1435", - "2344", - "2MPDome", - "844e", - "blackstoops", - "DH-IPC-HDW2431TP-AS-0280B", - "DH-IPC-HFW1230S1-A-S5", - "DH-IPC-HFW2431SP-S-0360B", - "DH-IPC-HFW2449SP-S-IL-0280B", - "DH-IPC-HWF1x3", - "DH-P40A2", - "DH-SD49425XB-HNR", - "DH-XVR1B08H", - "IPC-G42", - "IPC-HDBW5431E-ZE", - "IPC-HDBW5442R-ASE", - "IPC-HDW2531TP", - "IPC-HFW2320R-ZS-IRE6", - "IPC-HFW2431S-S-S2", - "IPC-HFW2439SP", - "IPC-HFW3241E-SA", - "IPC-HFW4431D-AS", - "IPC-HFW4431R-Z", - "IPC-HFW5442E-ZE", - "IPC-K22", - "IPC-K35P", - "N25CB5Z", - "SD29D404-DW", - "SDZ", - "VTO", - "VTO2022F-P-S2", - "VTO2111D-WP-S", - "VTO2202F-P", - "VTO2202F-P-S2", - "xvr1a08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "172.16.2.158", - "dh-ipc-hfw4239t-ase", - "HDW4631C", - "IPC-G26E", - "IPC-HDW2431T-AS-S2", - "Other", - "SD3A205-GNP-PV", - "XVR1B16" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/onvifsnapshot/media_service/snapshot?channel=1&subtype=0" - }, - { - "models": [ - "2MPDome", - "3200", - "3200c", - "4300s", - "4300S", - "4300S (ITC)", - "DA-IPVD20", - "dh-ipc-c10", - "DH-IPC-K200AP", - "DH-SD22204T", - "DH-SD42212T-HN", - "HDB-3200", - "HDB4300C", - "HFW3200C", - "HFW-4300S", - "IP66", - "IPC-HDB4300C", - "IPC-HDBW3300N", - "IPC-HDW4300S", - "IPC-HFW1100S", - "IPC-HFW1220S", - "IPC-HFW2300R", - "IPC-HFW2300R-Z", - "IPC-HFW3200S", - "IPC-HFW3200SN", - "IPC-HFW4100s", - "IPC-HFW4300C", - "IPC-HFW4300S", - "IPC-HFW4300S-V2", - "onvif", - "Other", - "SD3282D-GN", - "SD59230S-HN" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "2MPDome", - "3200", - "3MP VANDAL DOME", - "DAHUA DH-IPC-HFW1120SP", - "DH-IPC-HFW1120SP", - "DVR", - "DVR 5104", - "HCVR", - "HCVR5216", - "HCVR5216A", - "HFW4300S", - "IPC-HDBW3300", - "IPC-HDBW4300E", - "IPC-HDBW5302", - "IPC-HDW2100", - "IPC-HFW2100", - "IPC-HFW4300R-Z", - "IPC-HFW4300S", - "IPC-HFW4300S-V2", - "Other", - "SD6C225U-HNI", - "TECHVIEW", - "VTO" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "3200", - "3MP", - "4200C", - "DH-IPC-HDBW1200EP-0280B", - "DH-IPC-HFW2300RN-Z", - "DH-IPC-HFW8281E-Z", - "DH-IPC-K100A", - "DH-SD22204T-GN", - "DH-SD42212T-HN", - "DVR", - "HDB4300C", - "HDC-HFW2200S", - "HFW2100", - "HFW4300S", - "HNC3130R-IR-Z", - "IPC-HD2100", - "IPC-HDB3200CP", - "IPC-HDB4300c", - "IPC-HDBW1320E", - "IPC-HDBW4300E", - "IPC-HDBW4300EP-AS-0360B", - "IPC-HDBW4421R", - "IPC-HDBW4433R-S", - "IPC-HDW2100", - "IPC-HDW4300S", - "IPC-HFW1220S", - "IPC-HFW1320S", - "IPC-HFW2100", - "IPC-HFW3200S", - "IPC-HFW3200SN", - "IPC-HFW4300S", - "IPC-K100WP", - "Other", - "SD42212T-HN", - "SD49225T" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "3MP VANDAL DOME", - "4 MP", - "4421D", - "DH-IPC-5421-EXT", - "DH-IPC-HDBW2421RP-ZS", - "DH-IPC-HDW4300C", - "DH-IPC-HFW2441S-S", - "DH-IPC-HFW8381E-Z", - "DH-SD22204T-GN", - "IPC-EB5500", - "IPC-EBW8600", - "IPC-HDBW4421R", - "IPC-HFW1220S", - "IPC-HFW1320SPP", - "IPC-HFW1420S", - "IPC-HFW2431", - "IPC-HFW4421E", - "IPC-HFW4421S", - "IPC-HFW5502C", - "Other", - "SD42212T-HN", - "sd49225t" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "3MP VANDAL DOME", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "live.sdp" - }, - { - "models": [ - "4 MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Abougu55555%3F" - }, - { - "models": [ - "444", - "64h", - "cruiser", - "DH-IPC-HDBW1020EP-0280B-S3", - "dh-ipc-hdbw1230ep", - "DH-IPC-HDW1230SN-S", - "DH-IPC-HDW1230SP-0280B", - "DH-IPC-HDW1239T1-LED-S5", - "DH-IPC-HDW3641TMP", - "DH-IPC-HF2100P", - "DH-IPC-HFW1230M-l1-v2", - "dh-ipc-hfw-2100p", - "DH-IPC-HFW2431SP-S-0360B-S2", - "DH-SD59225U-HNI", - "DH-VTO2111D-WP", - "grfrsde", - "h264dahua", - "HDW3641TMP", - "IPC-HDBW2531E-S-S2", - "IPC-HDBW3300", - "IPC-HDW2239TP-AS-LED", - "IPC-HDW2431", - "IPC-HDW2431T-AS-S2", - "IPC-HDW3441TM-AS", - "IPC-HDW4433C-A", - "IPC-HFW12355-W", - "IPC-HFW2431", - "k42a", - "N45EF63", - "NVR", - "SD65220-HN", - "vto 2202f", - "X51A1E" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "4APAG9DN2893EF8", - "Dome Cam", - "NT-HFW2431RP-ZS-IRE6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MzIyMzExNjEzMVNoYXl0YW4=" - }, - { - "models": [ - "50232", - "blackstoops", - "Bullet", - "cam61", - "cam62", - "DH-IPC-HDW3641EMP", - "DH-IPC-HFW1120SP", - "DH-IPC-HFW1200SP-W", - "DH-IPC-HFW2231T-ZS-S2", - "DH-SD50225U-HNI", - "Flir1", - "H.265+", - "HD46F", - "HNC324-VDZ", - "IP66", - "IPC-HDBW3300", - "IPC-HDW2431T-AS-S2", - "ipc-hdw5541h-ase-pv", - "IPC-HFW1120S", - "IPC-HFW12355-W", - "IPC-HFW3200sP", - "IPC-HFW3300c", - "Other", - "VTH", - "VTO", - "VTO2000A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/" - }, - { - "models": [ - "8mp" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "blackstoops", - "NVR4208" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=0" - }, - { - "models": [ - "cam1", - "DH-ipc-hdbw4100ep", - "DH-IPC-HFW1200SP-W", - "DH-IPC-HFW2230SP-S-S2", - "DH-SD59212S-HN", - "hdbw2320rp-zs", - "IPC-HDBW1200E-W", - "IPC-HDBW2220R-ZS", - "Jannen lahjus" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "D7111" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro2" - }, - { - "models": [ - "DA630HDa", - "DellWebCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsp_live0" - }, - { - "models": [ - "Dahua DH DVR", - "HCVR", - "IPC-k42a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "DAHUA DH DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "DAHUA DH DVR", - "DH-IPC-HDBW4231EP-AS", - "DVR", - "DVR2104H-V2", - "HCVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "Dahua P5AE-PV", - "DAHUA-4108", - "DH-C3A", - "DH-F4C-LED", - "DH-IPC_HDW3441EM-S-S2", - "DH-IPC-HDBW2230E-S-S2", - "DH-IPC-HDBW2441E-S", - "DH-IPC-HDW5442TM-ASE", - "DH-IPC-HFW1430DS-SAW", - "DH-IPC-HFW2231T-ZS-S2", - "DH-IPC-HFW2325S-W", - "HFW2441T", - "ipc", - "IPC-HDBW1235E-W-0280B-S2", - "IPC-HDBW2441E-S-0280B", - "IPC-HDBW5231R-Z", - "IPC-HDBW5241E", - "IPC-HDW1431S-S4", - "IPC-HDW1431T1-S4", - "IPC-HDW1431T-ZS-2812-S4", - "IPC-HFW1020S", - "IPC-HFW1435S-W-S2", - "IPC-HFW2100", - "IPC-HFW2320R-VFS-IRE6", - "IPC-HFW3441T-ZS", - "IPC-HFW4631F-ZSA", - "KC-35A", - "N42BJ62", - "Portail", - "tobeupdated", - "Unlisted [UNSERE!]", - "XVR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpg/video.cgi?channel=1&subtype=1" - }, - { - "models": [ - "dcs-8000lh" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Deponija", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "DH-HCVR5108H-S2", - "dhi-dvr5104h-v2", - "DH-XVR1B04", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=8&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DH-HCVR5108H-S2", - "DH-HDBW3441RP", - "DHI-NVR4204-P-4KS2/L", - "dh-ipc-hdbw1320e-w", - "DH-IPC-HFW1430DS-SAW", - "DH-IPC-HFW2231T-ZS", - "dh-ipc-hfw4431r-z", - "DH-SD1A404XB-GNR-W", - "DH-SD59225U-HNI", - "H.265+", - "HDBW1435", - "HD-IPC-HFW1230S1P-S4", - "HDW2431T-AS-S2", - "HDW3549HP-AS-PV-0280B", - "IPC-HDBW5241E", - "IPC-HDBW5541R", - "IPC-HDW4631C-A", - "IPC-HFW1430DS-SAW", - "IPC-HFW1431S", - "ipptz", - "Other", - "PTZ1A225U", - "XVR5108HS-X" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DH-HCVR5108H-S2", - "DHI-NVR4108-8P-4KS2/L", - "tobereviwed" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46RmVlZGIlNDBjazIwMjA=" - }, - { - "models": [ - "DHI-NVR2108HS-8P-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=6&subtype=1" - }, - { - "models": [ - "DH-IPC-A35P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=viVA97%23%23" - }, - { - "models": [ - "DH-IPC-HDBW1831RP", - "DH-IPC-HFW1320S", - "DH-IPC-HFW1320S-W", - "DH-IPC-T1A20P", - "G26P", - "hfw4631k", - "IPC-C35-001", - "IPC-HDBW1320E", - "IPC-HDBW5231RP-ZE", - "IPC-HFW1320S-W", - "IPC-HFW1531S", - "VTO3211D-P2-S2", - "XC-IPCV026-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=01&authbasic=[AUTH]" - }, - { - "models": [ - "DH-IPC-HDBW4231FN-E2-M", - "DH-IPC-HDBW4231FP-AS", - "IPC-HDBW1320E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "DH-IPC-HDBW4431F-AS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=2&unicast=true&proto=Onvif" - }, - { - "models": [ - "DH-IPC-HDW1230SN-S", - "DH-IPC-HDW4631EMP", - "G26C", - "IPC-HDBW2531R-ZS", - "IPC-HFW2431S-S-S2", - "sB40", - "VTO2000A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46c2VwcDQxMjM=" - }, - { - "models": [ - "DH-IPC-HDW1325C", - "IPC-HDBW1320E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "DH-IPC-HDW2441T-S", - "DH-IPC-HFW2241S-S", - "DH-IPC-HFW2441T-ZS", - "DH-IPC-HFW4300EP", - "DH-SD22204T-GN", - "DH-SD22404T-GN", - "ipc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "DH-IPC-HDW5442TM-ASE", - "tobeupdated" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpg/video.cgi?channel=1&subtype=0" - }, - { - "models": [ - "DH-IPC-HFW1120SP" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1/Profile1" - }, - { - "models": [ - "DH-IPC-HFW1200SP-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "DH-IPC-HFW1230S1P-S4", - "DH-Sd3200N-GNP-W-PV", - "ez-ip", - "IPC-HDBW3449EP", - "VTO3311Q-WP", - "XVR5116HS-X" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "DH-IPC-HFW1320S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authbasic=[AUTH]" - }, - { - "models": [ - "DH-IPC-HFW1435SN-W-0280B-S2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Da135888%2A" - }, - { - "models": [ - "DH-IPC-HFW2223M-L1", - "UNDKNOW" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=nederland1%21" - }, - { - "models": [ - "DH-IPC-HFW2431SP-S-0360B", - "SD29D404-DW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8081, - "url": "/cam/realmonitor?channel=1&subtype=2" - }, - { - "models": [ - "DH-IPC-HFW3101C", - "IPC-HFW3300c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_0" - }, - { - "models": [ - "dh-ipc-hfw5221en-z", - "IPC-HDBW5231R-Z", - "IPC-HFW1020S", - "sB40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=0" - }, - { - "models": [ - "DH-IPC-K22P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=8&u=[USERNAME]&p=VIDI3%23com" - }, - { - "models": [ - "DH-IPC-KW12WP", - "DVR", - "IPC-HDW4300", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "DHI-VTO2111D-P-S2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Devote%40m1" - }, - { - "models": [ - "DH-SD1A404XB-GNR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Feedb%40ck2020" - }, - { - "models": [ - "DH-SD22204TN-GN", - "G26-3BFD", - "ipcam 100", - "IPC-HFW5421E-Z" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/videoMain" - }, - { - "models": [ - "DH-SD49220T-HN" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Hhgnbx233112%40" - }, - { - "models": [ - "DH-SE125-S2", - "IPC-HFW1239S1-LED-S4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DH-TPC-BF5421-T", - "h264dahua" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "DH-XVR1B08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=0" - }, - { - "models": [ - "DH-XVR1B08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=1" - }, - { - "models": [ - "DH-XVR5216AN-X", - "IPC-HFW5431E-Z", - "ipc-t5442tm-as" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "DM360", - "IPC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "DS-2DC2020-I", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "DVR", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "DVR 5108" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=00" - }, - { - "models": [ - "ez-ip", - "TIOC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "FYI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/jpeg?connect=start&vmdinfo=none&UID=9&ch=1&resolution=" - }, - { - "models": [ - "HDBW2230EP-S-S2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&%20subtype=0" - }, - { - "models": [ - "HDBW2431E", - "IPC-HFW2831T-ZAS-S2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Jack%21000" - }, - { - "models": [ - "HDBW4431R-ZS", - "IPC HF 81230" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "HDW5231" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=Iws2006%40B" - }, - { - "models": [ - "iB-4H30X-IS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=[PASSWORD]&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IMOU F22AP", - "IMOU K22AP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=false" - }, - { - "models": [ - "IPC-HDBW1320E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IPC-HDBW2431R-ZS", - "IPC-HDBW5431E-ZE", - "IPC-HDW5442TM-AS", - "VTO2111D-WP-S", - "XVR1B08H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "IPC-HDBW5241E" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=1" - }, - { - "models": [ - "IPC-HDBW5241E", - "IPC-HFW4631F-ZSA" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpg/video.cgi?channel=0&subtype=1" - }, - { - "models": [ - "IPC-HDBW5431E-Z" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?cam=0&quality=3&size=2" - }, - { - "models": [ - "IPC-HDW1320S", - "IPC-HFW1320S-W", - "SD59225", - "XVR1B16" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Alert%401942" - }, - { - "models": [ - "IPC-HDW2431T-AS-S2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=12345%40Qwerty" - }, - { - "models": [ - "IPC-HFW1300s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live2.sdp" - }, - { - "models": [ - "IPC-HFW2320R-ZS-IRE6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=0" - }, - { - "models": [ - "IPC-HFW2431S-S-S2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=ADminC%40mH%40bs16" - }, - { - "models": [ - "IPC-HFW3200C", - "PGL2AZRGEZJR4HLPJHYA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dakang.json b/data/brands/dakang.json deleted file mode 100644 index 8c043a9..0000000 --- a/data/brands/dakang.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Dakang", - "brand_id": "dakang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DK-705S-GP", - "DK-7075S-GP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/dali-tech.json b/data/brands/dali-tech.json deleted file mode 100644 index 00e8684..0000000 --- a/data/brands/dali-tech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dali-tech", - "brand_id": "dali-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D8X3NT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ONVIFMedia" - } - ] -} \ No newline at end of file diff --git a/data/brands/dallmeier.json b/data/brands/dallmeier.json deleted file mode 100644 index 51629de..0000000 --- a/data/brands/dallmeier.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "brand": "Dallmeier", - "brand_id": "dallmeier", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DDF4820", - "DDF4920", - "DDF4920IR", - "DF4510", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "DF4910HD-DN", - "DF5140HD", - "MDF4220HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "encoder[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/damigou.json b/data/brands/damigou.json deleted file mode 100644 index a20442c..0000000 --- a/data/brands/damigou.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Damigou", - "brand_id": "damigou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/danale.json b/data/brands/danale.json deleted file mode 100644 index 945a91d..0000000 --- a/data/brands/danale.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Danale", - "brand_id": "danale", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SGZ3N0P6L2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/danele.json b/data/brands/danele.json deleted file mode 100644 index 138e1a6..0000000 --- a/data/brands/danele.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Danele", - "brand_id": "danele", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/danmini.json b/data/brands/danmini.json deleted file mode 100644 index b8a7746..0000000 --- a/data/brands/danmini.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Danmini", - "brand_id": "danmini", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "doorbell" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dannovo.json b/data/brands/dannovo.json deleted file mode 100644 index 08f75f9..0000000 --- a/data/brands/dannovo.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Dannovo", - "brand_id": "dannovo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dannovo PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Dannovo PTZ", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "DannovoPTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/danother.json b/data/brands/danother.json deleted file mode 100644 index a5eb990..0000000 --- a/data/brands/danother.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Danother", - "brand_id": "danother", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dante.json b/data/brands/dante.json deleted file mode 100644 index 5be31b9..0000000 --- a/data/brands/dante.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dante", - "brand_id": "dante", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DNA1435" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Smart IPCamera" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/darts.json b/data/brands/darts.json deleted file mode 100644 index 7922d52..0000000 --- a/data/brands/darts.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Darts", - "brand_id": "darts", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2 hd" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dasco.json b/data/brands/dasco.json deleted file mode 100644 index 677a88c..0000000 --- a/data/brands/dasco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dasco", - "brand_id": "dasco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dashua.json b/data/brands/dashua.json deleted file mode 100644 index 5dfb255..0000000 --- a/data/brands/dashua.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Dashua", - "brand_id": "dashua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dashua ipc-HFW-W", - "HFW1320SP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/datapartner.json b/data/brands/datapartner.json deleted file mode 100644 index 256722f..0000000 --- a/data/brands/datapartner.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Datapartner", - "brand_id": "datapartner", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/datavideo.json b/data/brands/datavideo.json deleted file mode 100644 index a591523..0000000 --- a/data/brands/datavideo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Datavideo", - "brand_id": "datavideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVS-25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/davicom.json b/data/brands/davicom.json deleted file mode 100644 index a6c4ef0..0000000 --- a/data/brands/davicom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Davicom", - "brand_id": "davicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "davi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/davislumadvr.json b/data/brands/davislumadvr.json deleted file mode 100644 index 46d041b..0000000 --- a/data/brands/davislumadvr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Davislumadvr", - "brand_id": "davislumadvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LUM-500-DVR-16CH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/902" - } - ] -} \ No newline at end of file diff --git a/data/brands/dawan.json b/data/brands/dawan.json deleted file mode 100644 index a3743b0..0000000 --- a/data/brands/dawan.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Dawan", - "brand_id": "dawan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DW-CA-DHIP20W-IR5", - "DW-CA-DHIP20W-IR8J" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "tapo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dax.json b/data/brands/dax.json deleted file mode 100644 index fe5e9ba..0000000 --- a/data/brands/dax.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "brand": "Dax", - "brand_id": "dax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DH-DAX", - "dome", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "DH-DAX", - "dome", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dome", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "dome", - "IP-CAMERA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg?type=motion" - }, - { - "models": [ - "DOME", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "DOME" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/daytech.json b/data/brands/daytech.json deleted file mode 100644 index ebe59bd..0000000 --- a/data/brands/daytech.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Daytech", - "brand_id": "daytech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "14151520", - "8815", - "DT-8815", - "DT-C8815" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "DT-H06", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/dayukeji.json b/data/brands/dayukeji.json deleted file mode 100644 index e825e73..0000000 --- a/data/brands/dayukeji.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dayukeji", - "brand_id": "dayukeji", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ-2504X-I2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/db-power.json b/data/brands/db-power.json deleted file mode 100644 index c12fe1d..0000000 --- a/data/brands/db-power.json +++ /dev/null @@ -1,855 +0,0 @@ -{ - "brand": "Db Power", - "brand_id": "db-power", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002duht", - "H264 1080P", - "HD023P", - "hd024p", - "hdo24p", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "002DUHT", - "AddyCam", - "AMAZON ONE!", - "b", - "b-series", - "C301E", - "H.264", - "HD015P", - "IP030", - "IPC", - "IPCAMERA HOF", - "MartyCam", - "mjpeg", - "Mobile_Cam", - "Other", - "P2P H264", - "PTZ", - "VA0033k", - "VA0044_M", - "VA033K", - "VA033K+", - "VA036K", - "VA038K", - "VA039K" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "002euqv", - "003abtu", - "003bniy", - "B SERIES", - "b-series", - "CAM0077", - "cam0086", - "cAM0546", - "Other", - "VA035K" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "003add series b", - "va035k" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "003agam", - "b", - "b series", - "eagleone", - "f1368", - "H.264", - "hc-wv06", - "HD011P", - "IP030", - "IPC", - "Other", - "P2P H264", - "PTZ", - "VA0038K", - "VA035K", - "WIFI IP IR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "003AGAM", - "003chpy", - "003cmqa", - "ACT-2800/3100", - "b", - "b series", - "B Series", - "B-SERIES", - "CAM0078", - "cAM0546", - "H.264", - "HD IP", - "HD011P", - "Other", - "Salis Cam", - "Shaker", - "Something", - "VA-033K", - "va035k", - "VA035K", - "VA036K", - "VA038K", - "wifi ip ir" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "003aipx" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "003akmx", - "b series", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "003apyi", - "035k", - "B serie" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "003arfu", - "b series", - "HC-WV06", - "HD011P", - "HD015P", - "HD024P", - "IPCam_HOF", - "JWEV-094466-MJHVG", - "Other", - "Other2", - "VA0033K", - "va033", - "VA033K", - "VA033K+", - "va035k", - "VA038k", - "wifi ip ir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "003axzi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "003bcwn", - "005uwzf", - "C300E", - "Cube IP", - "H022P", - "HD022P", - "HD025", - "HD027P", - "HD028P", - "M Series", - "Other", - "VA0033M", - "va035k hd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "003ciwk", - "b-series", - "ERIK", - "HD011P", - "HD012P", - "HD015P", - "L-615W", - "LA040", - "Other", - "VA0038K", - "VA003K+", - "VA033K", - "VA033K+", - "VA035K", - "VA038", - "VA039K", - "VA039K-Test", - "VA040", - "VA390k" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "003coos", - "b series", - "B-Series", - "f-series", - "hd024p", - "Other", - "VA035K" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "10003", - "1080 P", - "123456", - "700gb", - "700GB", - "700MB", - "AMAZON ONE!", - "C 754", - "c300e", - "C754 1080p", - "C754 1080P", - "C754-2", - "Decking", - "H.264 1080P", - "H264 1080p", - "HD024p", - "HD027P", - "HD028P", - "IPC", - "Other", - "V754", - "VA0129", - "X Series", - "XSERIES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "1HD", - "Other", - "va035k" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "302c", - "302e", - "720P", - "8GB", - "C300E", - "c301e", - "C301E", - "C302E", - "C303E", - "c320w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "b", - "Other", - "wifi ip ir" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "B", - "b series", - "H.264", - "HC-WV06", - "IP030", - "IPCamHof", - "Other", - "VA003K+", - "VA-033K", - "VA033K+", - "VA036K" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "B", - "B series", - "Other", - "VA-033K", - "VA-033K+", - "VA035K" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "b series", - "Other", - "VA-033K", - "VA035K", - "VA039K" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "b series", - "DBPOWER", - "extcams", - "HD015P", - "IPC", - "kiskFirstCam", - "Other", - "va033k", - "VA033K", - "VA033K+", - "VA035K", - "VA036K", - "VA038k", - "va039k", - "VA039K", - "wifi ip ir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "b series", - "Other", - "VA-033K", - "wifi ip ir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "b series", - "cAM0546", - "Other", - "VA035K" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "bhv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "C 754", - "C475", - "C75", - "C754 1080p", - "HD027P2", - "Other", - "VA0129", - "x-series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - }, - { - "models": [ - "c-100e", - "C-100E", - "C200E", - "pt100c", - "PT100C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "C300E", - "c302e" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - }, - { - "models": [ - "C300E", - "M Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "C300E", - "C302E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "CAM0989", - "h240", - "HD021P", - "HDPCI", - "Other", - "VA0074_M", - "VA0087_M", - "VA0089_M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "CameraHof", - "IP030", - "IPC", - "IPCamera Hof", - "IPCAMERA HOF", - "IPCamHof", - "Other", - "VA0033K", - "VA003K+", - "VA038k" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "DBD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DBPOWER", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "eye", - "VA-033K", - "VA033K+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "H Series", - "HD023P", - "hd024p", - "HD024P", - "HD924P", - "hdo24p", - "m series", - "Other", - "P2P H264", - "VA-003K+", - "VA033K+", - "va035k", - "VA038k" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "H.264", - "HD022P", - "HD023P", - "Other", - "VA-033K", - "va035k", - "VA060K" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "H.264", - "M SERIES", - "Other", - "VA003K+", - "VA033K+", - "wifi ip ir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "H.264", - "Other", - "VA0032_M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD011P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av0" - }, - { - "models": [ - "HD023P", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "ip030", - "L-615W", - "Other", - "VA0044_M", - "VA-033K", - "VA033K+", - "va039k" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IPCamHof" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "ipw391", - "L-615W", - "MOBILE_CAM", - "Other", - "VA0033M", - "VA0034_M", - "VA-033K", - "VA033K+", - "VA038k", - "VA039K" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "M Series", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "Other", - "VA038k" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "Other", - "va060k", - "VA060K" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "Other", - "VA036K" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other", - "Version 2", - "wifi ip ir" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VA-033K", - "VA033K+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other", - "PTZ Dome", - "VA033K+", - "va039k", - "VA040K" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "VA003K+", - "VA-033K", - "VA-033K+" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "VA038K" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/dbb.json b/data/brands/dbb.json deleted file mode 100644 index ae03944..0000000 --- a/data/brands/dbb.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Dbb", - "brand_id": "dbb", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP607W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP607W LQ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dbcam.json b/data/brands/dbcam.json deleted file mode 100644 index 3f7e332..0000000 --- a/data/brands/dbcam.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Dbcam", - "brand_id": "dbcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "003ccys" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dbpower", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dbell.json b/data/brands/dbell.json deleted file mode 100644 index 8b6f0a8..0000000 --- a/data/brands/dbell.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Dbell", - "brand_id": "dbell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dbell HD Live", - "HD live" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "DB-HD-LIVE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ha live", - "HD Live" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "hd live" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dbp.json b/data/brands/dbp.json deleted file mode 100644 index 95a5b56..0000000 --- a/data/brands/dbp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dbp", - "brand_id": "dbp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dcl.json b/data/brands/dcl.json deleted file mode 100644 index 3ba45d3..0000000 --- a/data/brands/dcl.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Dcl", - "brand_id": "dcl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F980A", - "T98186(W)" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "F980A", - "f98a", - "T98186(W)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/dcpcctv.json b/data/brands/dcpcctv.json deleted file mode 100644 index 5161cf4..0000000 --- a/data/brands/dcpcctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dcpcctv", - "brand_id": "dcpcctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS-2CD1023" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dcs.json b/data/brands/dcs.json deleted file mode 100644 index e96d294..0000000 --- a/data/brands/dcs.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Dcs", - "brand_id": "dcs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5020L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "5020L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "8100LH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/decam.json b/data/brands/decam.json deleted file mode 100644 index 0633ed8..0000000 --- a/data/brands/decam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Decam", - "brand_id": "decam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/declink.json b/data/brands/declink.json deleted file mode 100644 index 856c4d1..0000000 --- a/data/brands/declink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Declink", - "brand_id": "declink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/dedicated-micro.json b/data/brands/dedicated-micro.json deleted file mode 100644 index 2b94f13..0000000 --- a/data/brands/dedicated-micro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dedicated Micro", - "brand_id": "dedicated-micro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dedicated-micros.json b/data/brands/dedicated-micros.json deleted file mode 100644 index a27a541..0000000 --- a/data/brands/dedicated-micros.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Dedicated Micros", - "brand_id": "dedicated-micros", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CamVu DN", - "dedicated micros eco dvr", - "DS2", - "eco dvr", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "display_pic.cgi?cam=[CHANNEL]&res=hi" - }, - { - "models": [ - "CamVu DN" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias[CHANNEL]" - }, - { - "models": [ - "CamVU DN", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - } - ] -} \ No newline at end of file diff --git a/data/brands/deecam.json b/data/brands/deecam.json deleted file mode 100644 index a9b0379..0000000 --- a/data/brands/deecam.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Deecam", - "brand_id": "deecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200", - "D200", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "D200", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "D200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "D200", - "D2000" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/deep-sentinel.json b/data/brands/deep-sentinel.json deleted file mode 100644 index 20f8bd8..0000000 --- a/data/brands/deep-sentinel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Deep Sentinel", - "brand_id": "deep-sentinel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TC-C34MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/defaway.json b/data/brands/defaway.json deleted file mode 100644 index d049404..0000000 --- a/data/brands/defaway.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Defaway", - "brand_id": "defaway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CO-975" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/defender.json b/data/brands/defender.json deleted file mode 100644 index 098f85a..0000000 --- a/data/brands/defender.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Defender", - "brand_id": "defender", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "301 mobile port", - "Other", - "sn301", - "SN301-8CH w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "Guard 2k", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other", - "SN500 DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "SN301-8CH W/ WEB PORT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "SN500 DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "SN500 DVR (old)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi?Video=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/defeway.json b/data/brands/defeway.json deleted file mode 100644 index e6251b8..0000000 --- a/data/brands/defeway.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "brand": "Defeway", - "brand_id": "defeway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3004HD HVR", - "C1080A1", - "DPB", - "FNVR-KIT1304", - "K9604-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "3004HD HVR", - "DPB", - "HV-7104", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "AI-D9104H", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "C102L1", - "d1216l+2tb", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "C1080A1", - "d1216l+2tb", - "DPB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "G608-C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8000, - "url": "/" - }, - { - "models": [ - "JA2108", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "K9608-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 60001, - "url": "/cgi-bin/snapshot.cgi?chn=8&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 60001, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dekco.json b/data/brands/dekco.json deleted file mode 100644 index 1899461..0000000 --- a/data/brands/dekco.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Dekco", - "brand_id": "dekco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2K PTZ IP", - "DC2L-2P", - "DC4L", - "DC5E", - "dc5l", - "DC5P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "dc4l", - "DC5L", - "P2 DC5L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "DC4L", - "DC8E" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "DC9P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/dekel.json b/data/brands/dekel.json deleted file mode 100644 index 08f095a..0000000 --- a/data/brands/dekel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dekel", - "brand_id": "dekel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/delaval.json b/data/brands/delaval.json deleted file mode 100644 index 22c5200..0000000 --- a/data/brands/delaval.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Delaval", - "brand_id": "delaval", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FMC-IP1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/delcatec.json b/data/brands/delcatec.json deleted file mode 100644 index f6c20d6..0000000 --- a/data/brands/delcatec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Delcatec", - "brand_id": "delcatec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CNE3CDF1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/dell.json b/data/brands/dell.json deleted file mode 100644 index 024b127..0000000 --- a/data/brands/dell.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Dell", - "brand_id": "dell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2100+" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "DCS-930L", - "DCS-933L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ex 2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "ip webcam", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IP WEBCAM", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/delphi.json b/data/brands/delphi.json deleted file mode 100644 index bc47e13..0000000 --- a/data/brands/delphi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Delphi", - "brand_id": "delphi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P MINI CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/deltaco.json b/data/brands/deltaco.json deleted file mode 100644 index 0770b24..0000000 --- a/data/brands/deltaco.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Deltaco", - "brand_id": "deltaco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "Outdoor Smart Home Camera", - "SH-IPC06", - "SH-IPC07" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "SH-IPC06" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/denavo.json b/data/brands/denavo.json deleted file mode 100644 index 06d56cc..0000000 --- a/data/brands/denavo.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Denavo", - "brand_id": "denavo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DSC-720SI(P)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "DSC-720SI(P)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "DSC-720SI(P)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - }, - { - "models": [ - "DSC-720SI(P)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dentech.json b/data/brands/dentech.json deleted file mode 100644 index e256b22..0000000 --- a/data/brands/dentech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dentech", - "brand_id": "dentech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ-LR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/denver.json b/data/brands/denver.json deleted file mode 100644 index a51a579..0000000 --- a/data/brands/denver.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "brand": "Denver", - "brand_id": "denver", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1030", - "1031", - "folgt noch", - "ICP-1020", - "ICP-1030", - "ICT-221", - "IIC-215", - "IOC 221", - "IOC 232", - "ioc221", - "ioc-221", - "IOC-221", - "ioc221 K1", - "ioc-231", - "ioc-232", - "IP 1030", - "ip1320", - "ipc-1020", - "IPC-1020", - "IPC-1020+IPC-1030", - "IPC-1030", - "IPC-1030MK2", - "ipc-1031", - "IPC-1031", - "ipo-1320", - "IPO-1320 mkII", - "IPO-1320MK2", - "ipo-2030", - "Other", - "SCH-150", - "shc 150", - "SHC-110", - "shc150", - "SHC-150", - "Sho-110", - "SHO-110", - "SHO-150" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1030", - "ICP-1020", - "ICP-1030", - "ip 1030", - "IP1320", - "ipc-1020", - "ipc-1030", - "IPC-1030", - "IPC-1030MK2", - "IPC-1031", - "ipc-2031", - "ipo-1320", - "IPO-1320IPO", - "IPO-320", - "IPO-3200", - "IPO-3230", - "ipo-i320", - "Other", - "WXH-003111-FCAAF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "320", - "IPC-320", - "IPC330", - "IPO-320" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IOC-221" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "IOC-221", - "IOC-232", - "Other", - "SHC-110", - "SHC-150", - "SHO-110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11/videostream.cgi" - }, - { - "models": [ - "IP320", - "IPC-320", - "IPC330", - "IPO-320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ip360" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=&resolution=32&rate=0" - }, - { - "models": [ - "ipc330", - "IPC-330 IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Ipo 320" - ], - "type": "JPEG", - "protocol": "http", - "port": 99, - "url": "/img/snapshot.cgi?size=2" - }, - { - "models": [ - "Ipo 320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ipo-320", - "Ipo-320", - "IPO-320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?" - }, - { - "models": [ - "Ipo-320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IPO-320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPO-320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "SH0-110" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "SHC-150" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "SHC-150", - "SHO-110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "SHO-110", - "Smarthome SHO-110" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/dericam.json b/data/brands/dericam.json deleted file mode 100644 index d0f00b5..0000000 --- a/data/brands/dericam.json +++ /dev/null @@ -1,483 +0,0 @@ -{ - "brand": "Dericam", - "brand_id": "dericam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0009FB006BBD", - "801W", - "H503W", - "M2/6/8 Series", - "M601W", - "M801W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "0009FB006BBD", - "1080P", - "801W", - "B-1", - "B1 8GB", - "B2 16G", - "B2 32G", - "b23-16g", - "B2A", - "B-x", - "B-xe", - "DERICAM H502W", - "H201C", - "h206c", - "H218W", - "H501", - "H502W", - "H601W", - "M2/6/8 SERIES", - "M801W - 1", - "OHL", - "Other", - "P1/P2", - "P2 PTZ IP CAMERA", - "P2 WIFI PTP2Z IP CAMERA", - "S-1", - "S1 32G", - "S1 64G", - "S100", - "S1-16G", - "S1-16G WIFI PTZ IP CAMERA", - "S1-32G WiFi PTZ IP Camera", - "S1-N", - "S1x", - "S2-32G", - "S2A", - "S-x", - "Sx series", - "UNK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "1080Ptz", - "1536P", - "2MP", - "B-1", - "B1-16G", - "B2 32G", - "B2-16G", - "b2a", - "BBQ", - "BC2 and BC2A and B5", - "B-X", - "C6F0SgZ0N0P0L2", - "C6F0SgZ3N0P0L2", - "C6F2SlZ3N0P0L2", - "D73W", - "H206C", - "H206C-TM", - "H264", - "H306C-TM", - "H501", - "H502W", - "IP 2", - "model", - "Other", - "P1/P2", - "P2 PTZ IP CAMERA", - "P2 WIFI PTP2Z IP CAMERA", - "S-1", - "S1 32G", - "S1 32G2", - "S-1-16g", - "S1-16G", - "S1-16G WIFI PTZ IP CAMERA", - "S1-32G WIFI PTZ IP CAMERA", - "S1-N", - "S1X", - "S-2", - "S2-32G", - "S2C", - "S2E", - "sg1", - "Shed", - "unk", - "X0019FZ9DL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "206c", - "H201C", - "H601W", - "H602W", - "M801W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - }, - { - "models": [ - "206c" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias[CHANNEL]" - }, - { - "models": [ - "206c", - "H201D", - "H201WD", - "H204W", - "H502", - "H602W", - "s-2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "801w", - "DEPENDANCE", - "H216W", - "H501", - "H502", - "H502W", - "H504W", - "M2/6/8 SERIES", - "M201W", - "M204W", - "M205W", - "m206w", - "M501W", - "M502W", - "m601", - "M601W", - "M801W", - "MW801", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "801W", - "H216W", - "H264", - "M801W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "B-1", - "H218W", - "H501", - "M801W", - "Other", - "P2 WIFI PTP2Z IP CAMERA", - "S2A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "B2A", - "H218W", - "Other", - "S1-16G WIFI PTZ IP CAMERA", - "S1-32G WIFI PTZ IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Dericam H502W", - "H204W", - "H502W", - "M501W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Dericam P1", - "S1-32G WiFi PTZ IP Camera", - "S2-32G", - "S2E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "H201", - "H201D", - "H501", - "H502", - "M201W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "H206C", - "H502W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "H206C-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "H216W", - "H2A6W", - "H502W", - "M801W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "H216W", - "H502W", - "M502W", - "M601W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "H216W", - "H502W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "H216W", - "H502W", - "H502W2", - "M205W", - "M801W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H216W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "H218W", - "H502W", - "S1 32G", - "S1-32G WIFI PTZ IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "H501" - ], - "type": "JPEG", - "protocol": "http", - "port": 8074, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "H502", - "H502W", - "H503W", - "M501W", - "M601W", - "M801W", - "M801W-1", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "H502W", - "M801W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H502W", - "H601W", - "M2/6/8 Series", - "M202W", - "M501W", - "M601W", - "M801W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "H502W", - "M01W", - "M2/6/8 Series", - "M601W", - "M801W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "H502W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "H602W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "M204W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "M501W" - ], - "type": "JPEG", - "protocol": "http", - "port": 34567, - "url": "/snapshot.cgi" - }, - { - "models": [ - "M601W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "M801W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "S2C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/desertwolfblackwidow606.json b/data/brands/desertwolfblackwidow606.json deleted file mode 100644 index db6adea..0000000 --- a/data/brands/desertwolfblackwidow606.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Desertwolfblackwidow606", - "brand_id": "desertwolfblackwidow606", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dltv", - "pt606" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch2" - }, - { - "models": [ - "thermal" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/detec.json b/data/brands/detec.json deleted file mode 100644 index 451b34e..0000000 --- a/data/brands/detec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Detec", - "brand_id": "detec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "790061" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/dev_ipnc.json b/data/brands/dev_ipnc.json deleted file mode 100644 index 34e5110..0000000 --- a/data/brands/dev_ipnc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dev_ipnc", - "brand_id": "dev_ipnc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DM368_IPNC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/Streaming/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/devant.json b/data/brands/devant.json deleted file mode 100644 index 35883b1..0000000 --- a/data/brands/devant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Devant", - "brand_id": "devant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C3X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/deviceclientq.json b/data/brands/deviceclientq.json deleted file mode 100644 index 9c6fd4b..0000000 --- a/data/brands/deviceclientq.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Deviceclientq", - "brand_id": "deviceclientq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CNB" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dextel.json b/data/brands/dextel.json deleted file mode 100644 index e258183..0000000 --- a/data/brands/dextel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dextel", - "brand_id": "dextel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hobimtek 360" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/df960p.json b/data/brands/df960p.json deleted file mode 100644 index c42753b..0000000 --- a/data/brands/df960p.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Df960p", - "brand_id": "df960p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DFR960P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dgsol.json b/data/brands/dgsol.json deleted file mode 100644 index f055604..0000000 --- a/data/brands/dgsol.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Dgsol", - "brand_id": "dgsol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dg-sc2100w", - "dg-sc2600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/dharmesh.json b/data/brands/dharmesh.json deleted file mode 100644 index 77be4a7..0000000 --- a/data/brands/dharmesh.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dharmesh", - "brand_id": "dharmesh", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "moto" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/dhi-cam.json b/data/brands/dhi-cam.json deleted file mode 100644 index 49ee27b..0000000 --- a/data/brands/dhi-cam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Dhi Cam", - "brand_id": "dhi-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FACDC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/dhwe.json b/data/brands/dhwe.json deleted file mode 100644 index bb301a0..0000000 --- a/data/brands/dhwe.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dhwe", - "brand_id": "dhwe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "960" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264" - }, - { - "models": [ - "DSR20H130" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/diadromos.json b/data/brands/diadromos.json deleted file mode 100644 index 6234023..0000000 --- a/data/brands/diadromos.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Diadromos", - "brand_id": "diadromos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FCS-1040" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/diamond.json b/data/brands/diamond.json deleted file mode 100644 index 6028139..0000000 --- a/data/brands/diamond.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Diamond", - "brand_id": "diamond", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "158" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dianwan.json b/data/brands/dianwan.json deleted file mode 100644 index 37ef454..0000000 --- a/data/brands/dianwan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dianwan", - "brand_id": "dianwan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dico-800.json b/data/brands/dico-800.json deleted file mode 100644 index 54119f9..0000000 --- a/data/brands/dico-800.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dico-800", - "brand_id": "dico-800", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cam[CHANNEL].jpg" - }, - { - "models": [ - "RXT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/digicam.json b/data/brands/digicam.json deleted file mode 100644 index 1557038..0000000 --- a/data/brands/digicam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Digicam", - "brand_id": "digicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P05-7-C", - "P05-7-DF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/digicom.json b/data/brands/digicom.json deleted file mode 100644 index 3e6cc23..0000000 --- a/data/brands/digicom.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "brand": "Digicom", - "brand_id": "digicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "100W", - "300WEDNU", - "400HD", - "400HS", - "HD400", - "IPCAMERA 100WED", - "IpCamera100wed", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "IpCamera100wed" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/admin/view.cgi?profile=0" - }, - { - "models": [ - "IPCAMERA100WED" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "IPCAMERA100WED" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "image.mpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/digihero.json b/data/brands/digihero.json deleted file mode 100644 index 2b464ed..0000000 --- a/data/brands/digihero.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digihero", - "brand_id": "digihero", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DIY" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digijet.json b/data/brands/digijet.json deleted file mode 100644 index d236b1e..0000000 --- a/data/brands/digijet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digijet", - "brand_id": "digijet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ElOjo" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/digilan.json b/data/brands/digilan.json deleted file mode 100644 index 122b532..0000000 --- a/data/brands/digilan.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Digilan", - "brand_id": "digilan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7230" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "ABUS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other", - "TV7204" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/digimerge.json b/data/brands/digimerge.json deleted file mode 100644 index 28a74f7..0000000 --- a/data/brands/digimerge.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "brand": "Digimerge", - "brand_id": "digimerge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DH200 DVR", - "FLIR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "monitor.cgi?Channel=[CHANNEL]&Audio=0000&Live=1" - }, - { - "models": [ - "DHU616" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DHU616", - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "DNB13TF22", - "dne12tl2", - "DNE12TL22", - "FLIR", - "Fortress" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "DNB13TF22", - "DNE12TL22", - "FLIR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "dnd13tl2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/snl/live/1/1" - }, - { - "models": [ - "dne12tl2", - "FLIR", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "FLIR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "FLIR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digisol.json b/data/brands/digisol.json deleted file mode 100644 index da8a4ed..0000000 --- a/data/brands/digisol.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Digisol", - "brand_id": "digisol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3630", - "dg-sc2600", - "DG-SC2600", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "7100P", - "DG-SC3800P", - "dg-sc4600pi", - "dg-sc5800pi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "dg-sc2600" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "dg-sc2600", - "DS SC 3610", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "DG-SC2600", - "DS SC 3630" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other", - "RTSP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/digital-intellect.json b/data/brands/digital-intellect.json deleted file mode 100644 index 4002707..0000000 --- a/data/brands/digital-intellect.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Digital Intellect", - "brand_id": "digital-intellect", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "238" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "238" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/digital-security.json b/data/brands/digital-security.json deleted file mode 100644 index 957edd1..0000000 --- a/data/brands/digital-security.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digital Security", - "brand_id": "digital-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PT-7000HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/digital-video-recorder.json b/data/brands/digital-video-recorder.json deleted file mode 100644 index da317d3..0000000 --- a/data/brands/digital-video-recorder.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Digital Video Recorder", - "brand_id": "digital-video-recorder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DHI-XVR5108HS-S2", - "XVR5108HS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digital-watchdog.json b/data/brands/digital-watchdog.json deleted file mode 100644 index 503a9a2..0000000 --- a/data/brands/digital-watchdog.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "brand": "Digital Watchdog", - "brand_id": "digital-watchdog", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "192 . 168 . 1 . 198", - "DWC-MTT4Wi36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - }, - { - "models": [ - "421", - "421TIR", - "DWC-MD421d", - "DWC-MF21M28T", - "DWC-MF21M4TIR", - "DWC-MF21MTIR", - "DWC-MPA20M", - "DWC-mpa2M", - "DWC-MV421D", - "DWM20P", - "MD421D", - "MF21", - "MF214TIR", - "MF21M28T DREAVEWAY", - "MF21M4", - "MF21M4TIR", - "MPA20M", - "MPTZ5X", - "MV421TIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264" - }, - { - "models": [ - "DWC-BVI2R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/rtsp/unicast/DefaultProfile-01" - }, - { - "models": [ - "DWC-MD7214V", - "DWC-MF21M28T", - "DWC-MV72i28V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/channel1" - }, - { - "models": [ - "DWC-MF21M28T", - "DWC-MF21M28T 128M", - "DWC-MPTZ5X", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mjpeg" - }, - { - "models": [ - "DWC-MV82WiA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - }, - { - "models": [ - "dwc-mvh2i4wv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "MD421TIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/stream1" - }, - { - "models": [ - "MF21M4TIR", - "MP20", - "MV421D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "MV82WiA" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Watchdog VMAX-D1 Mobile", - "WATCHDOG VMAX-D1 MOBİLE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/animate.cgi?[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digitalvision.json b/data/brands/digitalvision.json deleted file mode 100644 index 3bcd453..0000000 --- a/data/brands/digitalvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digitalvision", - "brand_id": "digitalvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2016C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digitalwatchdog.json b/data/brands/digitalwatchdog.json deleted file mode 100644 index ae4fbc3..0000000 --- a/data/brands/digitalwatchdog.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digitalwatchdog", - "brand_id": "digitalwatchdog", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DWC-MTT4Wi36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/digitcam.json b/data/brands/digitcam.json deleted file mode 100644 index 71de247..0000000 --- a/data/brands/digitcam.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Digitcam", - "brand_id": "digitcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DIGITCAM IPCN2400W40W-P", - "IPCN2400W40W-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "ip2400", - "IPCN2400W40W-P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IPC-A1300W20N" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - } - ] -} \ No newline at end of file diff --git a/data/brands/digitech.json b/data/brands/digitech.json deleted file mode 100644 index c50f1dd..0000000 --- a/data/brands/digitech.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Digitech", - "brand_id": "digitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "outdoor wireless" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2600, - "url": "/stream0" - } - ] -} \ No newline at end of file diff --git a/data/brands/digitus.json b/data/brands/digitus.json deleted file mode 100644 index 5f72832..0000000 --- a/data/brands/digitus.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "brand": "Digitus", - "brand_id": "digitus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16036", - "16037", - "16037:WIFI", - "16040", - "16044", - "DN 16027", - "DN 16035", - "DN 16037", - "DN 16039", - "dn-16036", - "DN-16038", - "dn16040", - "DN-16040", - "DN-16044", - "DN-1608", - "Optidome", - "OPTIZOOM", - "Other", - "PSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "16037" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "16040", - "DN 16027", - "DN 16037", - "DN 16039", - "dn-16036", - "DN-16038", - "dn-16039", - "DN-16040", - "DN-16043", - "DN-16044", - "Other", - "slc" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "16048", - "16049", - "DN 16047", - "DN 16049", - "DN-16029", - "DN-16038", - "DN-16039", - "DN-16039R2", - "DN-16040", - "DN-16043", - "DN-16046", - "DN-16047", - "dn16048", - "MoBa 01", - "MoBa 02", - "MoBa 03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "16054", - "DN-16027", - "DN-16053", - "DN-16055", - "DN-16071", - "DN-16082", - "DN-16083", - "IP Camera Garten", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "DN 16034", - "DN-16025" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "DN 16035", - "DN-16023", - "DN-16026", - "DN-16043", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "DN 16035" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "DN-16004", - "DN-16005", - "DN-16025", - "DN-16030", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "DN-16005", - "DN-16069", - "DN-16071", - "DN-16083", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "DN-16024", - "DN-16025", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "DN-16025", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "DN-16025", - "DN-16026", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live/mjpeg" - }, - { - "models": [ - "DN-16026", - "DN-16028", - "dn-16036", - "oneway" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "DN-16026" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "DN-16026" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "DN-16026" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "DN-16027", - "DN-16028" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "DN-16028" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "DN-16029" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "DN-16030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "_gCVimage.jpg" - }, - { - "models": [ - "DN-16032" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "DN-16036", - "dn-16039r2", - "DN-16043", - "DN-16046" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "DN-16047", - "DN-16053", - "DN-16071", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "DN-16063", - "DN-16082" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264" - }, - { - "models": [ - "DN-1608", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "DN-16084" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/video/profile1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/digivue.json b/data/brands/digivue.json deleted file mode 100644 index 38af8fd..0000000 --- a/data/brands/digivue.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digivue", - "brand_id": "digivue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EDV-EX Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "op?sid=0+type=203+busid=0+devid=0+chanid=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digix.json b/data/brands/digix.json deleted file mode 100644 index 9fef759..0000000 --- a/data/brands/digix.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Digix", - "brand_id": "digix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Surveillance Center" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "viewdevice.jsp?deviceid=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digma-smart-home.json b/data/brands/digma-smart-home.json deleted file mode 100644 index 117fd7c..0000000 --- a/data/brands/digma-smart-home.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Digma Smart Home", - "brand_id": "digma-smart-home", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DiVision 100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digma.json b/data/brands/digma.json deleted file mode 100644 index 854a956..0000000 --- a/data/brands/digma.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Digma", - "brand_id": "digma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "DiVision1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dignity.json b/data/brands/dignity.json deleted file mode 100644 index 6b6b73c..0000000 --- a/data/brands/dignity.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dignity", - "brand_id": "dignity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NIP-002OAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/digoo.json b/data/brands/digoo.json deleted file mode 100644 index a0c74d4..0000000 --- a/data/brands/digoo.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "brand": "Digoo", - "brand_id": "digoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BB-M1X", - "p05" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "BB-M1X", - "BB-MI X", - "CloudCamera", - "DG-M1Q 960P", - "DG-M1X", - "DG-M1Z", - "dg-myq", - "DG-W01f", - "DG-W01F 720P", - "dg-w02f", - "DG-ZX40", - "Digoo DG WO2f", - "Eye", - "GHC", - "M1Q", - "M1Z", - "MYQ", - "Other", - "W01f", - "WIFICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "bb-m2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "BB-M2", - "DG-MYQ", - "dg-w01f", - "MM-B2", - "MYQ", - "Other", - "w01f", - "WifiCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "BB-M2", - "BB-MI", - "M2-BB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "BB-M2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BB-M2", - "B-M2", - "DG1", - "MM==BB-M2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BB-M2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BB-MI", - "DG-M1Q 960P", - "dg-w01f", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "CloudCamera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "DG-M1Q 960P", - "DG-MYQ", - "DG-W01F", - "DG-W02F", - "DG-W02F 720P", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "dg-myq", - "gk7102" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "dg-ufc", - "DG-UFC", - "DG-ULC", - "DG-W01f", - "DG-w02f", - "DG-ZXC 40", - "DG-ZXC40", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "DG-UFC", - "DG-ZXC41" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "DG-ULC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "dg-w01f", - "DG-W02F", - "dg-zxc40", - "DG-ZXC41", - "Digoo DG WO1f", - "M1Q", - "w01", - "W02F", - "WIFICAM", - "wo1f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "DG-W01F", - "DG-W01f 720P", - "DG-W10", - "DG-WO2f", - "Digoo DG WO1f", - "digoo220", - "MYQ", - "Other", - "W02f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "DG-ZX40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/dimension.json b/data/brands/dimension.json deleted file mode 100644 index f8a9f22..0000000 --- a/data/brands/dimension.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dimension", - "brand_id": "dimension", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/dimos.json b/data/brands/dimos.json deleted file mode 100644 index 6fd15d3..0000000 --- a/data/brands/dimos.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dimos", - "brand_id": "dimos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/dinesh.json b/data/brands/dinesh.json deleted file mode 100644 index a237c5a..0000000 --- a/data/brands/dinesh.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dinesh", - "brand_id": "dinesh", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dinon.json b/data/brands/dinon.json deleted file mode 100644 index 6cc3242..0000000 --- a/data/brands/dinon.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "brand": "Dinon", - "brand_id": "dinon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8475", - "8674" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "8673", - "8675", - "SEGEV-105" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "8673" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "8675" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "9300", - "9330" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "SEGEV-101", - "segev-103" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "segev-103", - "segev4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dinox.json b/data/brands/dinox.json deleted file mode 100644 index 96c6f93..0000000 --- a/data/brands/dinox.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Dinox", - "brand_id": "dinox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1223" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "DDR-2300", - "dds", - "DDX-4320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "DDR-2300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/diopoint.json b/data/brands/diopoint.json deleted file mode 100644 index 9bfbd0d..0000000 --- a/data/brands/diopoint.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Diopoint", - "brand_id": "diopoint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/discover.json b/data/brands/discover.json deleted file mode 100644 index d591db4..0000000 --- a/data/brands/discover.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Discover", - "brand_id": "discover", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DIS-9502IR-SE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/discovery.json b/data/brands/discovery.json deleted file mode 100644 index eff6279..0000000 --- a/data/brands/discovery.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Discovery", - "brand_id": "discovery", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DCNB-F468DC2F-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dish-cam.json b/data/brands/dish-cam.json deleted file mode 100644 index a4ec882..0000000 --- a/data/brands/dish-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dish-cam", - "brand_id": "dish-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD2500P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/diske.json b/data/brands/diske.json deleted file mode 100644 index b3fd5c4..0000000 --- a/data/brands/diske.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Diske", - "brand_id": "diske", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dsk-642" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/diverse.json b/data/brands/diverse.json deleted file mode 100644 index 99e7c22..0000000 --- a/data/brands/diverse.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Diverse", - "brand_id": "diverse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DCS-930LB1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "DCS-930LB1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/diviotec.json b/data/brands/diviotec.json deleted file mode 100644 index 2d0c301..0000000 --- a/data/brands/diviotec.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Diviotec", - "brand_id": "diviotec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "121" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "NBR325P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "NBR325P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/divis.json b/data/brands/divis.json deleted file mode 100644 index e86b50a..0000000 --- a/data/brands/divis.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Divis", - "brand_id": "divis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "special/Cam[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/divisat.json b/data/brands/divisat.json deleted file mode 100644 index 41e3ff7..0000000 --- a/data/brands/divisat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Divisat", - "brand_id": "divisat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S111" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dixie.json b/data/brands/dixie.json deleted file mode 100644 index 85c858b..0000000 --- a/data/brands/dixie.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dixie", - "brand_id": "dixie", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DX-IPD806A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/dizink.json b/data/brands/dizink.json deleted file mode 100644 index cb476c7..0000000 --- a/data/brands/dizink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dizink", - "brand_id": "dizink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - } - ] -} \ No newline at end of file diff --git a/data/brands/dkseg.json b/data/brands/dkseg.json deleted file mode 100644 index ef8d5c7..0000000 --- a/data/brands/dkseg.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Dkseg", - "brand_id": "dkseg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DK408P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "ip wireless" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IP WIRELESS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dl-cam.json b/data/brands/dl-cam.json deleted file mode 100644 index 34b1d60..0000000 --- a/data/brands/dl-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dl Cam", - "brand_id": "dl-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rc8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/dlt-plenty.json b/data/brands/dlt-plenty.json deleted file mode 100644 index 5ee969c..0000000 --- a/data/brands/dlt-plenty.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dlt Plenty", - "brand_id": "dlt-plenty", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C50-PRO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/dm365-ipnc.json b/data/brands/dm365-ipnc.json deleted file mode 100644 index 74d2d98..0000000 --- a/data/brands/dm365-ipnc.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "brand": "Dm365 Ipnc", - "brand_id": "dm365-ipnc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000", - "1.3mp", - "125", - "221", - "2MP", - "6900XT", - "AceSee", - "AirLive POE-5011HD", - "ait-11030", - "Anyvision", - "avh30p100", - "AVTN40P130", - "axp cb1280h3/6l24a-n", - "b-1080", - "BN20W3100S", - "cantonk", - "cantonk1.3", - "cctc", - "CO36N13", - "comandor", - "csd", - "D24A", - "DM365", - "DOM-20IP2", - "ds24a", - "DTAVZM40P200", - "EC-1061", - "eyecam 1076", - "Fisotech", - "fisotech 2M", - "Fisotech 2MP", - "Fisotech B1.3MP", - "gifram1", - "Grazs", - "gw2440i", - "Hcina", - "IP-100R20", - "IP112", - "IP-200R20", - "IP255", - "ipc", - "ipc-30", - "IPC-N2100", - "KIP_130SL20H", - "KIP-130A40H", - "kip200 2.4MP", - "kjhkh", - "LID40T130", - "LIRDNTSFP", - "LIZM40T200", - "Longse_New", - "longse102", - "Main CAM", - "MiniDome", - "mod", - "MosCam", - "NAP-100", - "NAP-100SR40H", - "nap25", - "NCIS", - "Neki", - "neznam", - "non", - "oem", - "Other", - "OVI", - "packing", - "PIP-2MP-BT", - "pippo", - "salotto", - "sega", - "T130", - "tip-200w25n", - "VACRON 621" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "001", - "0100", - "01001", - "10XMBR-1080IP", - "13245", - "18xzoom", - "202", - "222", - "368", - "36x", - "6958", - "805", - "alade", - "aladetech", - "Bik-1", - "boa", - "bs232", - "chinamala-brazo", - "chink", - "Cotier", - "Cotier G92", - "cupol", - "DM/G33", - "DM368_IPNC", - "DM36X 720P", - "Dome", - "felixtech", - "felly", - "GM/G91-A", - "goanga", - "Hisilicon", - "IMP3MP91AH", - "Imporx", - "Imporx2", - "Imporx3", - "ingresso2", - "interno 1", - "interno lab", - "interno mensa", - "ip633", - "IPCX-HD20M410", - "IPNC", - "IPNC_CAM", - "IR120", - "JT-1080P", - "MY1", - "mytech", - "netcat", - "NH4RU-200", - "Observatory", - "ObservatoryCam", - "onvif", - "Other", - "portable", - "PT-PTZ1384-L", - "ptz outdoor", - "RemotePC", - "SpeedDome", - "SUNBA", - "teste", - "WinVision1", - "xyzx", - "zking", - "ZK-MIPZ8022X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8557, - "url": "/Onvif/Streaming/2" - }, - { - "models": [ - "113", - "cantonk1.3", - "China Cam", - "China IP Cams", - "DTAVZM40P200", - "fisotech", - "gw24401", - "GW2440I", - "KIP-130H80M", - "kip200 2.4MP", - "Other", - "tseti" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Fuho" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/0" - }, - { - "models": [ - "IP-200R20" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "NBX305" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream" - }, - { - "models": [ - "tis" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/dmp.json b/data/brands/dmp.json deleted file mode 100644 index 9760a8d..0000000 --- a/data/brands/dmp.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Dmp", - "brand_id": "dmp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OC-810" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "OtOC810", - "RC8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "rc8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/dmzok.json b/data/brands/dmzok.json deleted file mode 100644 index 646c497..0000000 --- a/data/brands/dmzok.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Dmzok", - "brand_id": "dmzok", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P WiFi Camera", - "DMW5820", - "Other", - "P105", - "PTZ1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dnt.json b/data/brands/dnt.json deleted file mode 100644 index 86a922a..0000000 --- a/data/brands/dnt.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Dnt", - "brand_id": "dnt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "camdoo", - "CamDoo", - "CamDoo Fix" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CamDoo" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "CamDoo" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dnvr.json b/data/brands/dnvr.json deleted file mode 100644 index 2f9bbb9..0000000 --- a/data/brands/dnvr.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dnvr", - "brand_id": "dnvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D8208-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/docker-wyze-bridge.json b/data/brands/docker-wyze-bridge.json deleted file mode 100644 index ff54494..0000000 --- a/data/brands/docker-wyze-bridge.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Docker Wyze Bridge", - "brand_id": "docker-wyze-bridge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Flood Camera" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/floodlight-cam" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/sideway-cam" - }, - { - "models": [ - "Wyze" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/aurora" - } - ] -} \ No newline at end of file diff --git a/data/brands/docooler.json b/data/brands/docooler.json deleted file mode 100644 index ff7da9c..0000000 --- a/data/brands/docooler.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Docooler", - "brand_id": "docooler", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "kdoor" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dod-tech.json b/data/brands/dod-tech.json deleted file mode 100644 index e27f018..0000000 --- a/data/brands/dod-tech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dod Tech", - "brand_id": "dod-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "stream.av" - } - ] -} \ No newline at end of file diff --git a/data/brands/dodocool.json b/data/brands/dodocool.json deleted file mode 100644 index 3576ee7..0000000 --- a/data/brands/dodocool.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Dodocool", - "brand_id": "dodocool", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-CAMERA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/doma.json b/data/brands/doma.json deleted file mode 100644 index 6a5a103..0000000 --- a/data/brands/doma.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Doma", - "brand_id": "doma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Cotier", - "TV-631W/IP", - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/domar.json b/data/brands/domar.json deleted file mode 100644 index 7fcbbdd..0000000 --- a/data/brands/domar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Domar", - "brand_id": "domar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP DOME" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/dome.json b/data/brands/dome.json deleted file mode 100644 index 7a15408..0000000 --- a/data/brands/dome.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "brand": "Dome", - "brand_id": "dome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALC 9751" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion&camera=[CHANNEL]" - }, - { - "models": [ - "Ali" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ENP112-IR/25X", - "Other", - "Q1055RV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "SEC-001-NE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "PTZ 101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "Uteplass" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/domecam.json b/data/brands/domecam.json deleted file mode 100644 index bca8e52..0000000 --- a/data/brands/domecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Domecam", - "brand_id": "domecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ian" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/domintell.json b/data/brands/domintell.json deleted file mode 100644 index 49e07b5..0000000 --- a/data/brands/domintell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Domintell", - "brand_id": "domintell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/domogonza.json b/data/brands/domogonza.json deleted file mode 100644 index 304c26e..0000000 --- a/data/brands/domogonza.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Domogonza", - "brand_id": "domogonza", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dongjia.json b/data/brands/dongjia.json deleted file mode 100644 index ec69027..0000000 --- a/data/brands/dongjia.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Dongjia", - "brand_id": "dongjia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DA-IP3100HR", - "DA-IP8532TD-POE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "DA-IP3100HR", - "DA-IP3133HD", - "Mala", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "DA-IP3100HR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DA-IP8520TR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/doogee.json b/data/brands/doogee.json deleted file mode 100644 index 441057e..0000000 --- a/data/brands/doogee.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Doogee", - "brand_id": "doogee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DG550", - "t6 pro", - "y6 max" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "ymax" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/door-bell.json b/data/brands/door-bell.json deleted file mode 100644 index 5a0a3d8..0000000 --- a/data/brands/door-bell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Door Bell", - "brand_id": "door-bell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "huanso" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/door.json b/data/brands/door.json deleted file mode 100644 index 468a402..0000000 --- a/data/brands/door.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Door", - "brand_id": "door", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CHINA 1.0MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "gate" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/401" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 552, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "panasonic" - ], - "type": "MJPEG", - "protocol": "http", - "port": 85, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/doorbird.json b/data/brands/doorbird.json deleted file mode 100644 index 58e63eb..0000000 --- a/data/brands/doorbird.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "brand": "Doorbird", - "brand_id": "doorbird", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "d101", - "D101", - "D101S", - "D1101V", - "D2101BV", - "D2101V", - "D2103V", - "DoorBird_D101", - "DOORBIRD_D101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg/media.amp" - }, - { - "models": [ - "D101" - ], - "type": "JPEG", - "protocol": "http", - "port": 8557, - "url": "bha-api/image.cgi?http-user=[USERNAME]&http-password=[PASSWORD]" - }, - { - "models": [ - "D204" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "D2101BV" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/bha-api/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8557, - "url": "bha-api/video.cgi?http-user=[USERNAME]&http-password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/doorcam.json b/data/brands/doorcam.json deleted file mode 100644 index 8c6baf8..0000000 --- a/data/brands/doorcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Doorcam", - "brand_id": "doorcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/doorphone.json b/data/brands/doorphone.json deleted file mode 100644 index 339c59b..0000000 --- a/data/brands/doorphone.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Doorphone", - "brand_id": "doorphone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VTO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "VTO", - "VTO155" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dosilkc.json b/data/brands/dosilkc.json deleted file mode 100644 index fc16b8a..0000000 --- a/data/brands/dosilkc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dosilkc", - "brand_id": "dosilkc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS-QS23" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/doss.json b/data/brands/doss.json deleted file mode 100644 index 736e74b..0000000 --- a/data/brands/doss.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Doss", - "brand_id": "doss", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IR-30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/dotix.json b/data/brands/dotix.json deleted file mode 100644 index f05857e..0000000 --- a/data/brands/dotix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dotix", - "brand_id": "dotix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/doubleeagl.json b/data/brands/doubleeagl.json deleted file mode 100644 index 4e559bc..0000000 --- a/data/brands/doubleeagl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Doubleeagl", - "brand_id": "doubleeagl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD103POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/dowse.json b/data/brands/dowse.json deleted file mode 100644 index 6ea6f62..0000000 --- a/data/brands/dowse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dowse", - "brand_id": "dowse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS/HD8612" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dowson.json b/data/brands/dowson.json deleted file mode 100644 index e4a471b..0000000 --- a/data/brands/dowson.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dowson", - "brand_id": "dowson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/dragon-touch.json b/data/brands/dragon-touch.json deleted file mode 100644 index 1a233a0..0000000 --- a/data/brands/dragon-touch.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Dragon Touch", - "brand_id": "dragon-touch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "k4w10", - "kb10", - "kb810", - "od10", - "OD10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "k4w10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/dragoncam.json b/data/brands/dragoncam.json deleted file mode 100644 index e90c943..0000000 --- a/data/brands/dragoncam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Dragoncam", - "brand_id": "dragoncam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "thisone" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/dreamstar.json b/data/brands/dreamstar.json deleted file mode 100644 index 74a7439..0000000 --- a/data/brands/dreamstar.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Dreamstar", - "brand_id": "dreamstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DSE-IPC213F", - "IPC213F" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "IPC213F", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/drh-domotics.json b/data/brands/drh-domotics.json deleted file mode 100644 index d31291c..0000000 --- a/data/brands/drh-domotics.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Drh Domotics", - "brand_id": "drh-domotics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/droid.json b/data/brands/droid.json deleted file mode 100644 index 9f8b53e..0000000 --- a/data/brands/droid.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Droid", - "brand_id": "droid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Cell", - "Other", - "Turbo" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Nesus7", - "Nexus 7 jpg" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ds-i200.json b/data/brands/ds-i200.json deleted file mode 100644 index 781996b..0000000 --- a/data/brands/ds-i200.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ds-i200", - "brand_id": "ds-i200", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/dsc.json b/data/brands/dsc.json deleted file mode 100644 index 0c495ac..0000000 --- a/data/brands/dsc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Dsc", - "brand_id": "dsc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "930L", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "c24-cam541r" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "c24-cam541r" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/dsnny.json b/data/brands/dsnny.json deleted file mode 100644 index f91e7a8..0000000 --- a/data/brands/dsnny.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Dsnny", - "brand_id": "dsnny", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dsn-618iprt", - "IPRST" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "DSN-619IPRT" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dsp.json b/data/brands/dsp.json deleted file mode 100644 index 62daa6d..0000000 --- a/data/brands/dsp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dsp", - "brand_id": "dsp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dss.json b/data/brands/dss.json deleted file mode 100644 index 5fcc98e..0000000 --- a/data/brands/dss.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Dss", - "brand_id": "dss", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DF960P", - "DFD960P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ducki.json b/data/brands/ducki.json deleted file mode 100644 index 838713e..0000000 --- a/data/brands/ducki.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ducki", - "brand_id": "ducki", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "222" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "222" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/duhau.json b/data/brands/duhau.json deleted file mode 100644 index f730231..0000000 --- a/data/brands/duhau.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Duhau", - "brand_id": "duhau", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC HFW4300s", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/duhua.json b/data/brands/duhua.json deleted file mode 100644 index b3d6df3..0000000 --- a/data/brands/duhua.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Duhua", - "brand_id": "duhua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ipc", - "Mini Dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/dunlop.json b/data/brands/dunlop.json deleted file mode 100644 index f39756f..0000000 --- a/data/brands/dunlop.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dunlop", - "brand_id": "dunlop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dp-22xm122fwd-i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "dp-22xm122fwd-i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/durawell.json b/data/brands/durawell.json deleted file mode 100644 index de794b8..0000000 --- a/data/brands/durawell.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Durawell", - "brand_id": "durawell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8177QJ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "8177QJ", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvir.json b/data/brands/dvir.json deleted file mode 100644 index 021555a..0000000 --- a/data/brands/dvir.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dvir", - "brand_id": "dvir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VIDO.AT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvr.json b/data/brands/dvr.json deleted file mode 100644 index 850491b..0000000 --- a/data/brands/dvr.json +++ /dev/null @@ -1,382 +0,0 @@ -{ - "brand": "Dvr", - "brand_id": "dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16HYBRID", - "34567", - "ahb-8204", - "DVR CAM", - "DVR5", - "MyDVR", - "Other", - "REISS DVR", - "SCREEN RTSP 554", - "VIDEO SERVER", - "VOS4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "365", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "AHB-824", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "BH104-H", - "Dahua DVR", - "DVR CAM", - "JA7204", - "JA7204S-2", - "JA7208", - "JA7216NC", - "MR-H4708", - "Other", - "PT-4H16", - "VIDEO SERVER" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "BSV 434" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=2&stream=0.sdp" - }, - { - "models": [ - "BSV 434" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=3&stream=0.sdp" - }, - { - "models": [ - "BSV434" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "Caldera 8", - "DVR CAM", - "DVR227", - "h264", - "JA7208", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Dahua DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 37777, - "url": "/" - }, - { - "models": [ - "DAHUA DVR", - "DVR CAM", - "dvr5", - "Raster", - "VIDEO SERVER" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "DMS8108-A", - "H264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "DVR 200", - "DVR CAM", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "DVR CAM", - "Other", - "VIDEO SERVER" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "DVR CAM", - "Other", - "VIDEO SERVER" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "DVR CAM", - "H.264", - "h264", - "JA7208", - "Other", - "r7816" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "DVR CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DVR2010" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "DVR2010" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "DVR2010", - "h264", - "JA7204S", - "JA7204S-2", - "JA7208", - "JA7216CX", - "Other", - "SECAM", - "the3harts" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "h.264", - "H264", - "Other", - "UNLISTED", - "VIDEO SERVER" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "h.264" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JA7204" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "JA7204" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=" - }, - { - "models": [ - "JA7204S-2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other", - "Raster", - "VIDEO SERVER" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ivop.get?action=live&THREAD_ID=" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video[CHANNEL].jpg?size=2&quality=3" - }, - { - "models": [ - "Other", - "VIDEO SERVER" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "R2009" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "VIDEO SERVER" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "VIDEO SERVER" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvri.json b/data/brands/dvri.json deleted file mode 100644 index 4e35240..0000000 --- a/data/brands/dvri.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Dvri", - "brand_id": "dvri", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H.264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "VIDO.AT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvrn4.json b/data/brands/dvrn4.json deleted file mode 100644 index c7c923d..0000000 --- a/data/brands/dvrn4.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Dvrn4", - "brand_id": "dvrn4", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvrusa.json b/data/brands/dvrusa.json deleted file mode 100644 index ed51532..0000000 --- a/data/brands/dvrusa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dvrusa", - "brand_id": "dvrusa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Viewmaster Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvs-ip-cam.json b/data/brands/dvs-ip-cam.json deleted file mode 100644 index 9156edc..0000000 --- a/data/brands/dvs-ip-cam.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "brand": "Dvs-ip-cam", - "brand_id": "dvs-ip-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2028HT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/:554" - }, - { - "models": [ - "20xx", - "DVS", - "FULLHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "DVS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "DVS", - "FULLHD", - "Other", - "OUTDOOR/IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "Outdoor/IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvs.json b/data/brands/dvs.json deleted file mode 100644 index fdc848f..0000000 --- a/data/brands/dvs.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Dvs", - "brand_id": "dvs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "FULLHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "DVS-MP5036ET-IRWS", - "FULLHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Egal" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Lite wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/dvtel.json b/data/brands/dvtel.json deleted file mode 100644 index dea947d..0000000 --- a/data/brands/dvtel.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Dvtel", - "brand_id": "dvtel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3211", - "CM-3211-11", - "CM-4221-00", - "CM-4221-10", - "cm-4221-11", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "9420", - "DVT-9420" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "9420" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "CB-3102-01-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "CB-3102-01-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "CM-3211-11", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "CM-4321-00", - "CM-6208", - "CP-4221-200", - "cp-4221-301" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - } - ] -} \ No newline at end of file diff --git a/data/brands/dx.json b/data/brands/dx.json deleted file mode 100644 index 96dcb5c..0000000 --- a/data/brands/dx.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Dx", - "brand_id": "dx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MJPG Wireless Wired", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dygitus.json b/data/brands/dygitus.json deleted file mode 100644 index 0651500..0000000 --- a/data/brands/dygitus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Dygitus", - "brand_id": "dygitus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16036" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/dynacolor.json b/data/brands/dynacolor.json deleted file mode 100644 index e2d44a8..0000000 --- a/data/brands/dynacolor.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "brand": "Dynacolor", - "brand_id": "dynacolor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.0L-E3-BO2-IR", - "AKVATEK", - "nh-070", - "nh-073", - "NH820", - "Other", - "W3A2-6", - "xos7-j" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "AKVATEK", - "dynahawk", - "DynaHawk", - "nh073", - "NH-073", - "NH820", - "Nhx66", - "Other", - "P2V6-5", - "V5-Adv-BB300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "L08EE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264_2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "P2V6-5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "R2SD-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "W2v1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/dynamo.json b/data/brands/dynamo.json deleted file mode 100644 index 549087f..0000000 --- a/data/brands/dynamo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Dynamo", - "brand_id": "dynamo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/dynamode.json b/data/brands/dynamode.json deleted file mode 100644 index b85cca9..0000000 --- a/data/brands/dynamode.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Dynamode", - "brand_id": "dynamode", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM58-IP-B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CAM58-IP-B", - "DYN-621", - "DYN-623" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CAM58-IP-B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/e-landing.json b/data/brands/e-landing.json deleted file mode 100644 index eefe79e..0000000 --- a/data/brands/e-landing.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "E-landing", - "brand_id": "e-landing", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p H.264 20FPS fixed (NO PTZ)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "720p H.264 white 20FPS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720p H264 fixed 20fps white" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/e-lock.json b/data/brands/e-lock.json deleted file mode 100644 index be4df1e..0000000 --- a/data/brands/e-lock.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "E-lock", - "brand_id": "e-lock", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/e-tech.json b/data/brands/e-tech.json deleted file mode 100644 index c359712..0000000 --- a/data/brands/e-tech.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "E-tech", - "brand_id": "e-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "etc712ips", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Home 2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IPCM02", - "IPCM03", - "ipcm04", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/e-think.json b/data/brands/e-think.json deleted file mode 100644 index d59d37d..0000000 --- a/data/brands/e-think.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "E-think", - "brand_id": "e-think", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NH4RT-20717A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "NH4RT-20717A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/e-view.json b/data/brands/e-view.json deleted file mode 100644 index 6795332..0000000 --- a/data/brands/e-view.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "E-view", - "brand_id": "e-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WXH-056301-CFBFD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/eagle-eye.json b/data/brands/eagle-eye.json deleted file mode 100644 index 398b579..0000000 --- a/data/brands/eagle-eye.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "brand": "Eagle Eye", - "brand_id": "eagle-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVTECH", - "LANTAI 1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "B Series", - "en041", - "i spy", - "i watch" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "EN-CCUZ-001a", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ip-005" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "L SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eagle-view.json b/data/brands/eagle-view.json deleted file mode 100644 index 89c7724..0000000 --- a/data/brands/eagle-view.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Eagle View", - "brand_id": "eagle-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16-165", - "ss-IP13MPD55", - "SS-IPMP13D55" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "M13DW355", - "Other", - "SS-13MPD355" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/eagle-vision.json b/data/brands/eagle-vision.json deleted file mode 100644 index 4d9386b..0000000 --- a/data/brands/eagle-vision.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Eagle Vision", - "brand_id": "eagle-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ioImage/[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eagleeye.json b/data/brands/eagleeye.json deleted file mode 100644 index 96b10f3..0000000 --- a/data/brands/eagleeye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eagleeye", - "brand_id": "eagleeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eaglestar.json b/data/brands/eaglestar.json deleted file mode 100644 index a885c1b..0000000 --- a/data/brands/eaglestar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eaglestar", - "brand_id": "eaglestar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EAGLESTAR PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eagleview.json b/data/brands/eagleview.json deleted file mode 100644 index ebc512c..0000000 --- a/data/brands/eagleview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eagleview", - "brand_id": "eagleview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SS-IP13MPD55" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/eam.json b/data/brands/eam.json deleted file mode 100644 index 8ba6023..0000000 --- a/data/brands/eam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eam", - "brand_id": "eam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eamo.json b/data/brands/eamo.json deleted file mode 100644 index 4ba343d..0000000 --- a/data/brands/eamo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eamo", - "brand_id": "eamo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AT201" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "AT201" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eardatech.json b/data/brands/eardatech.json deleted file mode 100644 index d18cbc6..0000000 --- a/data/brands/eardatech.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Eardatech", - "brand_id": "eardatech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v380", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "v380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/east.json b/data/brands/east.json deleted file mode 100644 index 7ba6df4..0000000 --- a/data/brands/east.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "East", - "brand_id": "east", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "365IP", - "IP-5IRD4S02-W-2.8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/eastcam.json b/data/brands/eastcam.json deleted file mode 100644 index 4728ade..0000000 --- a/data/brands/eastcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eastcam", - "brand_id": "eastcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-5158" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/easternccc.json b/data/brands/easternccc.json deleted file mode 100644 index ac38e34..0000000 --- a/data/brands/easternccc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Easternccc", - "brand_id": "easternccc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-IRD2S02-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/easterncctv.json b/data/brands/easterncctv.json deleted file mode 100644 index 6224f8b..0000000 --- a/data/brands/easterncctv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Easterncctv", - "brand_id": "easterncctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-IR3S24-2.8", - "IP-IRD2S02-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eastvision.json b/data/brands/eastvision.json deleted file mode 100644 index 8fda52d..0000000 --- a/data/brands/eastvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eastvision", - "brand_id": "eastvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP5158" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/easy-ip.json b/data/brands/easy-ip.json deleted file mode 100644 index 03bf42a..0000000 --- a/data/brands/easy-ip.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Easy Ip", - "brand_id": "easy-ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4356", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "4356", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/easy.json b/data/brands/easy.json deleted file mode 100644 index d467108..0000000 --- a/data/brands/easy.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "brand": "Easy", - "brand_id": "easy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "f serie", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/easy4ip.json b/data/brands/easy4ip.json deleted file mode 100644 index e24b562..0000000 --- a/data/brands/easy4ip.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Easy4ip", - "brand_id": "easy4ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "22345" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "22345", - "K35" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/easycam.json b/data/brands/easycam.json deleted file mode 100644 index 05285d7..0000000 --- a/data/brands/easycam.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "brand": "Easycam", - "brand_id": "easycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "130V", - "E-130T", - "EC-230D", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "45666" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "E-130T", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "EC-101", - "EC-101HD", - "EC-101HDSD", - "EC-101SD", - "EC-102", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "EC-101", - "EC-101SD" - ], - "type": "VLC", - "protocol": "http", - "port": 81, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EC-101HDSD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EC-102", - "EC-220D", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "EC-102" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "EC-102", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ec-ip153" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "niidea" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/easycap.json b/data/brands/easycap.json deleted file mode 100644 index 4ff2e77..0000000 --- a/data/brands/easycap.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Easycap", - "brand_id": "easycap", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EP-101" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/easyn.json b/data/brands/easyn.json deleted file mode 100644 index 180f912..0000000 --- a/data/brands/easyn.json +++ /dev/null @@ -1,1285 +0,0 @@ -{ - "brand": "Easyn", - "brand_id": "easyn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0444", - "100", - "10D", - "1133", - "122334", - "12345", - "147T", - "147W", - "158j", - "158W", - "186", - "187", - "187V", - "196", - "1bf", - "20w", - "213344", - "21344", - "2233444", - "223445", - "22345", - "23143", - "2322", - "234", - "2345", - "23454", - "23456", - "2355", - "24444", - "3030", - "324325", - "3245", - "326667", - "333333333", - "34353", - "344", - "3444", - "345", - "34535", - "34552", - "3456", - "345656", - "3513", - "43566666", - "4556", - "4677", - "546577", - "56677", - "613A", - "678", - "720P", - "960P", - "a157w", - "A17-187V-W_F", - "A187V3E03", - "Baby Monitor", - "e345", - "EASYN H3-P1D3", - "EASYN HS-691", - "EASYN HS-691 A105", - "es100v mini", - "F SERIES", - "F-M1BF", - "FS-613", - "FS-613A", - "FS-613A-M136", - "H3", - "H3 137", - "H-3 V10D", - "H-3 V10R", - "h3-105v", - "H3-137V", - "H3-147W", - "H3-186A", - "H3-187", - "H3-187V", - "H3-691B-V186I", - "H3-BEN7", - "H3-E-31-B-E5", - "H3-E-31-E-E1", - "H3-lager", - "H3-P1D3", - "H3-V137", - "HS-691", - "HS-691B-V186I", - "IBF - ONVIF", - "IP cameras", - "IPCAM H3-V10R", - "IP-CAMERA", - "Mini 10D", - "nserie", - "Other", - "pallero", - "s2344", - "series", - "SRIRE", - "V10D" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "100", - "136", - "613A", - "720P", - "EasyN HS-691", - "ENG", - "F", - "F series", - "FI8919W", - "F-M106", - "F-M10R", - "F-M136", - "F-M166", - "F-M1BF", - "fs 613", - "FS-603A M106", - "FS-613", - "FS613 B M166", - "fs613A", - "FS-613A", - "FS-613A-M136", - "FS-613B", - "F-Series", - "FSERIES", - "FS-M136", - "H3", - "IP CAMERAS", - "L-610WS", - "Other", - "ours", - "series f", - "WCS H3-187" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "100", - "186p", - "76algo", - "F series", - "H6-M137H", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100", - "1BF", - "ENG", - "fm136", - "FS-613A", - "FS-613A-M36", - "moja", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "100", - "109", - "10R", - "115W", - "137v", - "147T", - "147W", - "158", - "15W", - "186", - "186p", - "187", - "196", - "1BF", - "201", - "202", - "203", - "345", - "546", - "720", - "720P", - "960H", - "A1BF", - "AX912", - "b187", - "E001", - "EasyN H3-P1D3", - "EasyN HS-691", - "ES100V MINI", - "ES200K", - "F_SERIES", - "F1B", - "F2-611B", - "F3-Series", - "F-M136", - "F-M166", - "H187", - "H-3 V10D", - "H-3 V10R", - "H3-137V", - "H3-18 7V", - "H3-187V", - "H3-Dan", - "H3-Dan-Wifi", - "H3-E-21-B-C2", - "H3-P1D3", - "H3-V106", - "H6-M137h", - "HS-691", - "HS-691 A105", - "ibf - onvif", - "IP CAMERAS", - "IP-CAMERA", - "JY-V136", - "mine", - "Mini 10D", - "mini Blue Eye", - "Other", - "V10R", - "VTR10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "109", - "115V", - "158", - "158 Esija", - "187 WCS", - "187V", - "189V", - "1BF", - "6461", - "720P", - "a196", - "Ext", - "F-M1BF", - "H-3 V10D", - "H3-137V", - "H3-147W", - "h3-187w", - "Other", - "Our Cam", - "WCS H3-187", - "WCS H3-187W", - "WCS-187" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/12" - }, - { - "models": [ - "1133", - "136", - "1BF", - "21344", - "223445", - "23143", - "234", - "2345", - "324325", - "3245", - "345", - "345656", - "46573", - "613A", - "677", - "EasyN F-M1BF", - "F series", - "F136", - "F3-M166", - "F-M136", - "F-M166", - "F-M181", - "FS-603A M106", - "FS613 B M166", - "FS-613B", - "FS-M136", - "H7 Series", - "H7 SERİES", - "Other", - "WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "136", - "AlfieEye5", - "EASYN HS-691", - "F", - "F series", - "F106", - "F133", - "F136", - "F2-611B", - "fm136", - "F-M136", - "F-M161", - "F-M166", - "F-M181", - "F-M1BF", - "FS-613", - "FS613 B M166", - "FS-613A-M136", - "FS-613B", - "FS-613B-MJPEG", - "FSERIES", - "FS-M136", - "H3-P1D3", - "H3-V10R", - "IP CAMERAS", - "IP-CAMERA", - "M136", - "Other", - "ours", - "ours2", - "salonEASYN HS-691", - "wifi", - "wow" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "136", - "187", - "613a", - "EasyN HS-691", - "ezcam pan/tilt v2", - "F", - "F series", - "F_M10R", - "F136", - "F166", - "F2-611B", - "F3", - "F3-166", - "f-m105", - "F-M106", - "fm-136", - "F-M136", - "F-M161", - "F-M166", - "F-M181", - "F-M1BF", - "FS-603A M106", - "FS-613", - "FS613A", - "FS-613A-M136", - "FS-613B", - "FS613B 166", - "FS-613B-M166", - "FS-613B-MJPEG", - "F-Series", - "F-SERIES", - "FS-M136", - "gtaip", - "H-3 V10R", - "H6-837", - "Hedge Camera", - "IP cameras", - "IP-CAMERA", - "m1bf", - "mitsos", - "Other", - "tayto", - "txxu", - "URSA 1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "136", - "187", - "21344", - "2233444", - "2334545", - "324325", - "34353", - "344", - "EASYN HS-691 A105", - "F series", - "F_SERIES", - "F3-M187", - "F-M10R", - "F-M136", - "FS-613", - "FS-613A-M136", - "H3-187V", - "H3-V10R", - "IP-CAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "136", - "186p", - "187", - "1bf", - "3F Series", - "EZCAM PAN/TILT V2", - "F series", - "F SERIES", - "F136", - "F2-611B", - "F2-E-21-F1", - "F3", - "F3-166", - "F3-M166", - "F3M187", - "F3-Series", - "f-m105", - "F-M136", - "F-M166", - "FS-613", - "FS613 B M166", - "FS-613A-M136", - "FS-613B-MJPEG", - "H6-837", - "IDP3", - "IP-CAMERA", - "M187", - "Other", - "T7588 HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "136", - "613A", - "EasyN HS-691 A105", - "ENG", - "F", - "F series", - "F-M10R", - "F-M136", - "F-M166", - "F-M181", - "F-M1BF", - "FS-613", - "FS-613A-M136", - "FS-613B", - "FS-613B-M166", - "F-SERIES", - "H6-M137h", - "nati", - "Other", - "WIFI" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "136", - "F", - "F series", - "F_SERIES", - "F106", - "F3-M166", - "f-m105", - "F-M10R", - "F-M136", - "F-M161", - "f-m-166", - "F-M166", - "FS-613", - "FS-613B", - "FS-613B-M166", - "F-Series", - "FS-M136", - "lb", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "186p", - "187", - "F_M10R", - "H3", - "h3 v106", - "H-3 V10R", - "H3-187V", - "H3-196V", - "H3-V106", - "H7 Series", - "hs691", - "Other", - "Pole", - "V10R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264.sdp" - }, - { - "models": [ - "187", - "720P", - "est-007660333", - "F3", - "F3-166", - "F3-M166", - "F3-Series", - "F-M166", - "F-SERIES", - "H3-V10R", - "H6-M137h", - "kitch", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "187", - "H3", - "h3-186v", - "H3-V10R", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "187", - "720P", - "ENG", - "F2-611B", - "F3-166", - "F3-M166", - "F3M187", - "F3-SERIES", - "F-M1b1", - "F-SERIES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1bf", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "1BF", - "f_series", - "F3-m187", - "F-M136", - "F-M181", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "1BF", - "EasyN HS-691", - "est-007660-611b", - "F", - "F SERIES", - "F_M10R", - "F2-611B", - "F3", - "F3-176M", - "F-M166", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "22345", - "EasyN HS-691" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "613A", - "F2-E-21-F1", - "FS-613B-M166" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "613A", - "f-Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Eastn IP F-Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?" - }, - { - "models": [ - "EasyN HS-691", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "EasyN HS-691" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "EasyN HS-691", - "HS-691", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "EasyN HS-691", - "est-007660-2", - "F", - "F series", - "F133", - "F136", - "F2-611B", - "F3-M166", - "F3-Series", - "F-M10R", - "F-M136", - "F-M161", - "F-M166", - "FS-603A M106", - "FS-613", - "FS-613A-M136", - "FS-613B", - "f-Series", - "FSERIES", - "IP Camera BO", - "Other", - "T7588 HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "EasyN HS-691", - "H3", - "H3-147W", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "ELPIDIO", - "F", - "F SERIES", - "F2-611B", - "F3M187", - "F-M105", - "F-M136", - "F-M166", - "FS-603A M106", - "FS-613", - "FS613 b M166", - "FS-613A-M136", - "FS-613B", - "f-Series", - "H3", - "H6-837", - "H6-M137H", - "H7 SERIES", - "H7 SERİES", - "HS-691", - "IP-CAMERA", - "M-F136", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "ELPIDIO", - "F", - "F series", - "F3M187", - "F-M10R", - "F-M166", - "F-M181", - "FS-603A M106", - "FS-613", - "FS-613A-M136", - "FS-613B", - "FS-613B-MJPEG", - "F-SERIES", - "H6-837", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "est-007660", - "F_M10R", - "F2-611B", - "F3M187-W", - "f-m105", - "F-M166", - "FS-613", - "FS613 B M166", - "FS-613A-M136", - "FS-613B-JPEG", - "H3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "est-007660", - "F series", - "F3-M166", - "FS-613", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "est-007660-3", - "F3-166", - "F3-SERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "F", - "F series", - "F3-M166", - "F-M136", - "F-M161", - "F-M166", - "FS-613", - "FS-613B", - "FS-613B-M166", - "F-SERIES", - "IPCAM H3-V10R", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "F", - "F SERIES", - "F_SERIES", - "F133", - "F136", - "F3M187-W", - "F3-Series", - "fseries", - "H6-837", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "F series", - "F SERIES", - "F3-166", - "F3-M166", - "H6-837", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "F series", - "F133", - "F-136", - "F2-611B", - "F3-M166", - "F3-SERIES", - "F-M136", - "f-Series", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "F series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "F series", - "F-M1BF", - "f-Series", - "H6-837", - "Other", - "TM001" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "F Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "F SERIES", - "F-136", - "f138", - "F2-611B", - "F3", - "F3-166", - "F3-M166", - "FS613", - "FS-613A-M136", - "FS-613B", - "FS-613B-M166", - "FS-613B-MJPEG", - "fseries", - "Other", - "s series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "F_M10R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "f_series", - "F-M10R", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "F_SERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "F136", - "FS-613", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "F2-611B", - "M091", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "F2-611B", - "F-M136", - "FS-613A-M136 Custom" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "F2-611B", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "F2-611B", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "F2-E-21-F1", - "F3-M166", - "F-M136" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "F3-166" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "f603", - "FM139", - "FS-613A-M136" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 91, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "FI8919W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "FS-613" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8085, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FS-613A-M136" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "FS-613A-M136" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "F-Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=&resolution=32&rate=0" - }, - { - "models": [ - "H3" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "12" - }, - { - "models": [ - "H-3 V10D", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "H3-137V", - "H3-187V", - "H3-V137", - "H6-M137h", - "H7 Series", - "IPCAM H3-V10R", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "H3-187V", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "H6-M137h" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "H7 Series" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/video[CHANNEL]" - }, - { - "models": [ - "HS-691B-V186I" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "KDX1ZL7U1FHF54LWJN51" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "n54" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/[CHANNEL]/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "TM001" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=640*480" - } - ] -} \ No newline at end of file diff --git a/data/brands/easyse.json b/data/brands/easyse.json deleted file mode 100644 index a1a14de..0000000 --- a/data/brands/easyse.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "brand": "Easyse", - "brand_id": "easyse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F/B/N/I", - "H2", - "M1", - "M2", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "F/B/N/I" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "F/B/N/I", - "M2", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "F/B/N/I", - "H2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "F/B/N/I", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "F/B/N/I", - "H2", - "M2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "F/B/N/I", - "M2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "F/B/N/I", - "H3", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "H2", - "M2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "H2", - "H3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "H3", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "H3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "H3e" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264.sdp" - }, - { - "models": [ - "H3e", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "H3e", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "H3e" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H3e" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "M1", - "M2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/easytao.json b/data/brands/easytao.json deleted file mode 100644 index ead0623..0000000 --- a/data/brands/easytao.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Easytao", - "brand_id": "easytao", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "q29" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=admin_password=[PASSWORD]_channel=0_stream=0&onvif=0.sdp" - }, - { - "models": [ - "q29" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel=0_stream=0&onvif=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/easyz.json b/data/brands/easyz.json deleted file mode 100644 index 4eed263..0000000 --- a/data/brands/easyz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Easyz", - "brand_id": "easyz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FS613B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/eazydv.json b/data/brands/eazydv.json deleted file mode 100644 index e6e411b..0000000 --- a/data/brands/eazydv.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Eazydv", - "brand_id": "eazydv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BC-881M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "BC-881M" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "BC-883" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ebode.json b/data/brands/ebode.json deleted file mode 100644 index 5224ee9..0000000 --- a/data/brands/ebode.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "brand": "Ebode", - "brand_id": "ebode", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "binnencam", - "IPV58" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPV38P2P", - "IPV38W", - "IPV38We", - "ipv58", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPV38P2P", - "ipv58", - "ipv58p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "IPV38W", - "IPV68IP_JPEG", - "IPV68P2P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "IPV38W", - "IPV38We", - "IPV58", - "ipv58p2p", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IPV38W", - "IPV58", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPV58", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPV58" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipv58p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 90, - "url": "/videoMain" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "pvp38p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/ebw.json b/data/brands/ebw.json deleted file mode 100644 index 0d7e961..0000000 --- a/data/brands/ebw.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ebw", - "brand_id": "ebw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ela nte" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/ec101.json b/data/brands/ec101.json deleted file mode 100644 index 7f76c34..0000000 --- a/data/brands/ec101.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ec101", - "brand_id": "ec101", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ecam.json b/data/brands/ecam.json deleted file mode 100644 index 7be30a8..0000000 --- a/data/brands/ecam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ecam", - "brand_id": "ecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "qd330" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "qd330" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/echo-star.json b/data/brands/echo-star.json deleted file mode 100644 index b1f6683..0000000 --- a/data/brands/echo-star.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Echo Star", - "brand_id": "echo-star", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Gobal BV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eclipse.json b/data/brands/eclipse.json deleted file mode 100644 index a809c65..0000000 --- a/data/brands/eclipse.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Eclipse", - "brand_id": "eclipse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet", - "ECL-IP55MP", - "esg-ipbms2f3", - "ESG-IPBP2V6-Z", - "IPD7", - "IPD72", - "IPPTZ", - "SURVEILLANCE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "ESG-IPDM4F2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "ESG-IPDM4F2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/eco.json b/data/brands/eco.json deleted file mode 100644 index 104fda5..0000000 --- a/data/brands/eco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eco", - "brand_id": "eco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "tv7204" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ecoline.json b/data/brands/ecoline.json deleted file mode 100644 index d5c0a5c..0000000 --- a/data/brands/ecoline.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ecoline", - "brand_id": "ecoline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TV7203" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/economato.json b/data/brands/economato.json deleted file mode 100644 index 52ec64d..0000000 --- a/data/brands/economato.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Economato", - "brand_id": "economato", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVTECH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/live/video_audio/profile3" - } - ] -} \ No newline at end of file diff --git a/data/brands/edge.json b/data/brands/edge.json deleted file mode 100644 index c41870b..0000000 --- a/data/brands/edge.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Edge", - "brand_id": "edge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EG 307" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "EGP-2104" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EGP-2104" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EGP-2104" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=3&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EGP-S45208" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/edgecore.json b/data/brands/edgecore.json deleted file mode 100644 index f00387b..0000000 --- a/data/brands/edgecore.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Edgecore", - "brand_id": "edgecore", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BL110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_s0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/edimax.json b/data/brands/edimax.json deleted file mode 100644 index 9b0798d..0000000 --- a/data/brands/edimax.json +++ /dev/null @@ -1,809 +0,0 @@ -{ - "brand": "Edimax", - "brand_id": "edimax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1115", - "1500", - "1510", - "1520", - "1520dp", - "2105", - "3005wn", - "3010WG", - "310", - "3110W", - "3115", - "3116w", - "3116W", - "7001", - "7001W", - "7110W", - "900", - "9000", - "9001", - "ic 3005wn", - "ic 3115w", - "IC-08E61D", - "IC-14F96A", - "IC-1500", - "IC-1500WG", - "ic-1510", - "ic1510w", - "IC-1510Wg", - "IC-1520DP", - "IC-161D94", - "IC30000", - "IC-3005", - "IC-3005Wn", - "IC-3010", - "IC-3015", - "IC-3015WN", - "IC-3015Ww5a", - "IC-3030", - "IC-3030WN", - "IC-3100W", - "IC-3110W", - "IC-3115w", - "IC-3116W", - "IC-4933DA", - "IC5120", - "IC-660AD1", - "IC-7000", - "IC-7000 (2)", - "IC-7000PT v2", - "ic7000ptn", - "IC-7001", - "ic-7001w", - "ic-7010", - "IC-7010PTN", - "IC7110", - "IC-7110P", - "IC-7110W", - "IC-9000", - "IC-E37C68", - "IP CAMERA IC-3030WN", - "Other", - "TV-IP110WIN", - "Uncknow" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "1224", - "IC-3115w", - "IC-EE8C99" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "1500", - "3005wn", - "3030", - "IC_3030iPE", - "IC1500", - "ic-1500wg", - "IC1510", - "IC-3005", - "IC-3030", - "IC3030iPoE", - "IC-3030iWn", - "IC-3030IWN", - "IC3030WN", - "ic-3116w", - "IC-3116W", - "ic-7001w", - "ic9000", - "IC-9000", - "IC-ED2485", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "1500", - "1510", - "1c-1510", - "3005wn", - "3005zn", - "3010WG", - "3015WN", - "3110W", - "3140w", - "5150W", - "7882", - "C3115W", - "CI-1500", - "edimax ic3010", - "IC 3115W", - "IC-1500", - "IC-1500WG", - "ic-1510", - "IC-1510Wg", - "ic-30005zn", - "IC-3005WN", - "ic-3005zn", - "ic3010", - "IC-3100W", - "IC-3110P", - "IC-3115", - "IC-3115w", - "ic3116w", - "ic3140w", - "IC-3140W", - "IC-7000 (2)", - "IC-7000PT V2", - "IC7001W", - "ic9000", - "IC-9000", - "IC-9000 RTSP", - "Other", - "v10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1510", - "3015wn", - "ic 3110w", - "ic 3115w", - "IC-1500WG", - "IC-3010", - "IC-3030IWN", - "IC3100W", - "IC-3115W", - "ic3116", - "IC-7010PTN", - "IC-7110W", - "ic-8196c1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "1510", - "1520dp", - "3010WG", - "3015wn", - "3115", - "3115w", - "3116W", - "5110", - "7110W", - "C3115W", - "chu1", - "ic 3110w", - "ic 3115w", - "IC-1500", - "IC-1500WG", - "Ic1510", - "IC-1510Wg", - "ic1510wkl", - "IC-1520", - "IC-1520DP", - "IC-2F38D8", - "ic-3005", - "ic-3005wn", - "IC-3010", - "IC-3015", - "IC-3015WN", - "IC-3030", - "IC3030iPoE", - "IC-3030IWN", - "IC-3030WN", - "IC3100P", - "IC-3110W", - "IC-3115", - "IC-3115W", - "IC-3116W", - "IC3140W", - "IC-3210W", - "IC-6220DC", - "IC-6C15D1", - "IC-7000 (2)", - "IC7001W", - "ic7010", - "ic7010PT", - "IC-7010PTN", - "IC-7110W", - "IC-7113W", - "ic-73b92f", - "IC-9000", - "IC-9000 RTSP", - "ic-9110w", - "IC-9110W", - "IP-1510", - "Other", - "Smart" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "1510", - "3010WG", - "IC_3030IPE", - "IC-1500WG", - "ic-3005", - "ic-3010", - "IC-3010", - "IC-3015WN", - "IC-3030IWN", - "IC-3030WN", - "IC-3110p", - "IC-3110W", - "IC-3115W", - "IC-7000 (2)", - "ic7000ptn", - "ic7010", - "IC-7010PTN", - "IC7110", - "IC-9000", - "IC-9000 RTSP", - "IC-BD45A4", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "1520dp", - "30", - "3100", - "3115w", - "7001W", - "ic 3115w", - "IC-1500WG", - "IC-1520DP", - "IC-3010", - "IC-3015WN", - "IC-3030", - "IC3030iPoE", - "IC-3030IWN", - "IC-3110W", - "ic3115", - "IC-3115", - "IC-3115w", - "IC-3140w", - "IC-51", - "IC-5170SC", - "IC-7000 (2)", - "ic7010", - "IC-7010PTn", - "IC-7110W", - "IC-7113W", - "IC-9000", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "1520gp", - "3015wn", - "3115", - "3116W", - "7001W", - "C3115W", - "ic 3115w", - "IC-1500", - "IC-1500WG", - "ic-3005", - "IC-3010", - "IC-3015WN", - "IC-3030IWN", - "IC-3115J", - "IC-3115W", - "IC-3116W", - "IC-3140W", - "IC-51", - "IC-7000 (2)", - "IC-7000PT v2", - "IC7001", - "IC-7010PTN", - "IC-9000", - "IC-9000 RTSP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "1b09e2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "3005wn", - "3030poe", - "IC07223w", - "IC-1520DP", - "ic-3116w", - "IC-3116W", - "IC-321430", - "IC-64D0F1", - "IC-7110W", - "IC-7223w", - "ic-9110w", - "IC9110W", - "TS-WLC2", - "TS-WRFE", - "TS-WRFE-F1DB", - "WPTCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "3010", - "3010WG", - "3015WN", - "3030", - "3100", - "3110W", - "3116", - "3116W", - "7001", - "7110W", - "7112", - "ic 3110w", - "ic-3010", - "IC-3030", - "IC-3030IWN", - "IC3030WN", - "IC-3030WN", - "IC3100P", - "IC3100W", - "IC-3110P", - "IC-3110W", - "ic3116", - "IC-3116W", - "IC3140W", - "IC-3140W", - "IC5120", - "IC-5170SC", - "ic7010", - "IC-7010PTn", - "IC-7010PTN", - "IC-7100", - "IC-7110P", - "IC-7110W", - "IC-7112W", - "ic-7113w", - "IC-7113W", - "IC-9000w", - "IC9110W", - "IC-9110W", - "IP Camera ic-3030wn", - "Other", - "UNCKNOW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "3010WG", - "3015wn", - "3030", - "3110W", - "3110W 2", - "3115W", - "3116W", - "5150w", - "7001w", - "9001", - "chter", - "ic 3110w", - "ic 3115w", - "IC_3030IPE", - "IC-08E61D", - "IC-1500WG", - "IC-1510Wg", - "IC-1520DP", - "IC-3010", - "IC-3015", - "IC-3015WN", - "IC-3030IWN", - "IC-3030WN", - "IC-3110P", - "IC-3110W", - "IC-3115", - "IC-3115w", - "IC-3116W", - "IC-3140w", - "IC3140W", - "IC-7000PT V2", - "IC7001W", - "IC-7010PTn", - "IC-7110W", - "IC-7112w", - "IC-7113W", - "IC-9110W", - "IC-BD4EB1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "3015wn", - "3115", - "3115W", - "IC-3005", - "IC-3015WN", - "IC-3030Wn", - "IC-3115W", - "IC-3116WN", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "3030poe", - "IC3030iPoE", - "IC-3030Wn", - "IC-3115w", - "IC-3116W", - "IC-7110W", - "IC-7112w", - "IC-9110W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ipcam_h264.sdp" - }, - { - "models": [ - "3100", - "3105", - "3116W", - "hvz", - "IC-1500", - "IC-1500WG", - "ic1510", - "IC-1510", - "IC-3010", - "IC-3015WN", - "IC-3030IWN", - "IC-3100W", - "IC-3110W", - "IC-3115W", - "ic-3116w", - "IC-7000 (2)", - "ic-7010", - "IC-7010PTN", - "IC-9000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "3115w", - "IC2A70", - "IC-7001W", - "IC-7110W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 84, - "url": "/mjpg/1/video.mjpg" - }, - { - "models": [ - "7001", - "IC-3115" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DIR112E", - "IR-113E", - "NC-213E", - "Other", - "PT-31E", - "TV-IP110WIN", - "VS100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "IC-1500WG" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "IC-1500WG", - "IC-3010", - "IC-3030IWN", - "IC-3115W", - "IC-7000 (2)", - "IC7001", - "IC-7010PTN", - "IC-9000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "IC-1520DP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "IC3030iPoE", - "IC-3030Wn", - "IC-7010PTn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ipcam.sdp" - }, - { - "models": [ - "ic-3116w", - "IC-9110W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ipcam_mjpeg.sdp" - }, - { - "models": [ - "IC-5000P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IC-7000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IC-7000 (2)", - "IC-9000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - }, - { - "models": [ - "IC-7001W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IC-7010PTN", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IC-7010PTN" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "IC-7110P", - "IR-112E", - "IR113E", - "ire_112", - "ND-233E", - "Other", - "PT-31E", - "VS100", - "Zewnetrzna" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "IC-7110W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "ic9000", - "IC-9000", - "IC-9000 RTSP", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "IC-9000 RTSP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[USERNAME].[PASSWORD]?udp" - }, - { - "models": [ - "IR-112", - "IR-112E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "IR-112E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "IR-112E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "MD111E", - "PT-112E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "MD111E", - "PT-112E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live1.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/edison.json b/data/brands/edison.json deleted file mode 100644 index f0c52ab..0000000 --- a/data/brands/edison.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Edison", - "brand_id": "edison", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VK1MPx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ednet.json b/data/brands/ednet.json deleted file mode 100644 index a9453e4..0000000 --- a/data/brands/ednet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ednet", - "brand_id": "ednet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "alarm" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=&p=" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/edss.json b/data/brands/edss.json deleted file mode 100644 index f961145..0000000 --- a/data/brands/edss.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Edss", - "brand_id": "edss", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FR-R8R1-NI1I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/eero.json b/data/brands/eero.json deleted file mode 100644 index 16c9603..0000000 --- a/data/brands/eero.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eero", - "brand_id": "eero", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M1500 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "M5100" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eescam.json b/data/brands/eescam.json deleted file mode 100644 index 16731c0..0000000 --- a/data/brands/eescam.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Eescam", - "brand_id": "eescam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "icsee" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "icsee", - "icseeX", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "ICSEE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/user=[USERNAME]admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ICSEE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "ICSEE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/eesee.json b/data/brands/eesee.json deleted file mode 100644 index 3f03a68..0000000 --- a/data/brands/eesee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eesee", - "brand_id": "eesee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eet.json b/data/brands/eet.json deleted file mode 100644 index f55803a..0000000 --- a/data/brands/eet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eet", - "brand_id": "eet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Etuovi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ego.json b/data/brands/ego.json deleted file mode 100644 index 44aa62d..0000000 --- a/data/brands/ego.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ego", - "brand_id": "ego", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "PT-200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/egpis.json b/data/brands/egpis.json deleted file mode 100644 index 8257e04..0000000 --- a/data/brands/egpis.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Egpis", - "brand_id": "egpis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EGPIS-IP1301HDNIR", - "EGPIS-IP1302HDNIR", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/eguard.json b/data/brands/eguard.json deleted file mode 100644 index 9714b81..0000000 --- a/data/brands/eguard.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eguard", - "brand_id": "eguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "G-N5FL-H40CD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ehea.json b/data/brands/ehea.json deleted file mode 100644 index 8701f14..0000000 --- a/data/brands/ehea.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ehea", - "brand_id": "ehea", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fss" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eickhoff.json b/data/brands/eickhoff.json deleted file mode 100644 index 463eb33..0000000 --- a/data/brands/eickhoff.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eickhoff", - "brand_id": "eickhoff", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0815" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - } - ] -} \ No newline at end of file diff --git a/data/brands/eigeek.json b/data/brands/eigeek.json deleted file mode 100644 index 3e5c6b2..0000000 --- a/data/brands/eigeek.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Eigeek", - "brand_id": "eigeek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/onvif/device_service" - }, - { - "models": [ - "bullet", - "bullet 1", - "bullet 2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "BULLET", - "BULLET 2", - "CT0414BKEU", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/eigen.json b/data/brands/eigen.json deleted file mode 100644 index 25a63b4..0000000 --- a/data/brands/eigen.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eigen", - "brand_id": "eigen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eigen cams" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eight.json b/data/brands/eight.json deleted file mode 100644 index 7655791..0000000 --- a/data/brands/eight.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eight", - "brand_id": "eight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EIP-09GBB" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - } - ] -} \ No newline at end of file diff --git a/data/brands/eighteen.json b/data/brands/eighteen.json deleted file mode 100644 index 0926f6d..0000000 --- a/data/brands/eighteen.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eighteen", - "brand_id": "eighteen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Birds" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eingangscamera.json b/data/brands/eingangscamera.json deleted file mode 100644 index 5180f6a..0000000 --- a/data/brands/eingangscamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eingangscamera", - "brand_id": "eingangscamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360 DOM China" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/einnov.json b/data/brands/einnov.json deleted file mode 100644 index 0ea5f6b..0000000 --- a/data/brands/einnov.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Einnov", - "brand_id": "einnov", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A51MW", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "A51MW", - "eis06wm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/eip.json b/data/brands/eip.json deleted file mode 100644 index 094df11..0000000 --- a/data/brands/eip.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eip", - "brand_id": "eip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5MB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/eitea.json b/data/brands/eitea.json deleted file mode 100644 index 32c857f..0000000 --- a/data/brands/eitea.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eitea", - "brand_id": "eitea", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/ekaza.json b/data/brands/ekaza.json deleted file mode 100644 index b941999..0000000 --- a/data/brands/ekaza.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ekaza", - "brand_id": "ekaza", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Nuvem Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/V_ENC_000" - } - ] -} \ No newline at end of file diff --git a/data/brands/eken.json b/data/brands/eken.json deleted file mode 100644 index 4dc8e37..0000000 --- a/data/brands/eken.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eken", - "brand_id": "eken", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h9r" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/MJPG" - } - ] -} \ No newline at end of file diff --git a/data/brands/elcom.json b/data/brands/elcom.json deleted file mode 100644 index 2303357..0000000 --- a/data/brands/elcom.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Elcom", - "brand_id": "elcom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "800ip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "c903ip" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CBM-300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ele-technology.json b/data/brands/ele-technology.json deleted file mode 100644 index 9e2d258..0000000 --- a/data/brands/ele-technology.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ele Technology", - "brand_id": "ele-technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-camera-id002a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-CAMERA-ID002A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/elec.json b/data/brands/elec.json deleted file mode 100644 index 721e5d5..0000000 --- a/data/brands/elec.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Elec", - "brand_id": "elec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "e-cloud", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "elite" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "elite", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "ELITE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=3" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/elecom.json b/data/brands/elecom.json deleted file mode 100644 index 66e00a8..0000000 --- a/data/brands/elecom.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Elecom", - "brand_id": "elecom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NCC-ENP100WH", - "tscam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "SCB-ED2M01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/electriq.json b/data/brands/electriq.json deleted file mode 100644 index e2bb518..0000000 --- a/data/brands/electriq.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Electriq", - "brand_id": "electriq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IQ-31FX", - "iq-51fx", - "IQ-51FX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/electrodh.json b/data/brands/electrodh.json deleted file mode 100644 index 5ac6ae8..0000000 --- a/data/brands/electrodh.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Electrodh", - "brand_id": "electrodh", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/elegate.json b/data/brands/elegate.json deleted file mode 100644 index c8b1508..0000000 --- a/data/brands/elegate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Elegate", - "brand_id": "elegate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "izazaga19_caja" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/elegiant.json b/data/brands/elegiant.json deleted file mode 100644 index cfedc48..0000000 --- a/data/brands/elegiant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Elegiant", - "brand_id": "elegiant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hk-a6" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/elegoo.json b/data/brands/elegoo.json deleted file mode 100644 index c1f7e2c..0000000 --- a/data/brands/elegoo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Elegoo", - "brand_id": "elegoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mars 5 Ultra AI Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/elex.json b/data/brands/elex.json deleted file mode 100644 index 79d9e24..0000000 --- a/data/brands/elex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Elex", - "brand_id": "elex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-1 if2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/elinksmart-ip-camera.json b/data/brands/elinksmart-ip-camera.json deleted file mode 100644 index 8fe861c..0000000 --- a/data/brands/elinksmart-ip-camera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Elinksmart Ip Camera", - "brand_id": "elinksmart-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "960p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live1" - }, - { - "models": [ - "960p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/elinz.json b/data/brands/elinz.json deleted file mode 100644 index b157784..0000000 --- a/data/brands/elinz.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Elinz", - "brand_id": "elinz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cctv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "cctv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "ip66" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/elisa.json b/data/brands/elisa.json deleted file mode 100644 index 69df7f5..0000000 --- a/data/brands/elisa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Elisa", - "brand_id": "elisa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RC8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "RC8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/elite.json b/data/brands/elite.json deleted file mode 100644 index 046ba4b..0000000 --- a/data/brands/elite.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Elite", - "brand_id": "elite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Tab" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/elmo.json b/data/brands/elmo.json deleted file mode 100644 index 94b2a45..0000000 --- a/data/brands/elmo.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Elmo", - "brand_id": "elmo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "PTC-200 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/qvga.jpg" - }, - { - "models": [ - "PTC-400 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture_normal.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/elp.json b/data/brands/elp.json deleted file mode 100644 index 05618e0..0000000 --- a/data/brands/elp.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "brand": "Elp", - "brand_id": "elp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "1080p", - "1280*720P", - "1881", - "1882", - "1892", - "1MEGPIX", - "2MP", - "6100", - "6200B", - "720p", - "720P MINI", - "720P MINI CAM", - "EL-IP-1882", - "ELP-IP1881", - "ELP-IP1881W", - "ELP-IP1882", - "ELP-IP1892-POE", - "ELP-IP3100HR", - "ELP-IP3100HRNC", - "ELP-IP3110HR", - "ELP-IP6200B", - "ELP-IP6200DB", - "ELP-IP9100BM-POE", - "ELP-IR3110HR", - "HD POE", - "IP1881", - "ip1891", - "ip1892", - "ip1895", - "ip3100hb", - "ip3110hr-wifi", - "IP3200HR", - "IP4100VR", - "ip5180vd", - "ip9200bm", - "ONVIF", - "TOP-201", - "X00FIBWA7" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "1080", - "1080p", - "1080P", - "1280*720p", - "1881", - "1882", - "1892", - "1megpix", - "2MP", - "720P", - "720P Mini", - "720P Mini Cam", - "ELP-1881", - "ELP-IP1881", - "ELP-IP1881W", - "ELP-IP1882", - "ELP-IP1892-POE", - "ELP-IP3100HR", - "ELP-IP3110HR", - "ELP-IP6200DB", - "ELP-IP9100BM-POE", - "IP1881", - "IP-1891POE", - "IP1892", - "IP3100HB", - "IP3120HR-POE", - "IP4100VR", - "ip6100", - "Megapixel IP Camera", - "Onvif", - "onvif 1280x768", - "Other", - "X000QY76TT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080", - "1MEGPIX", - "2MP", - "ELP-IP1881", - "ELP-IP6200DB", - "mini", - "ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "6100", - "IP3120HR-POE", - "IP4100VR", - "onvif", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "720P Mini", - "ELP-IP1881", - "ELP-IP3100HR", - "ELP-IP3100HRnc", - "IP1818", - "IP1881", - "IP200W", - "IP4100VR", - "ONVIF 1280X768", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "ELP-IP1881" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "ELP-USBBFHD01M" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/pull" - }, - { - "models": [ - "IP1892" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "IP500W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/elp201.json b/data/brands/elp201.json deleted file mode 100644 index 026a8db..0000000 --- a/data/brands/elp201.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Elp201", - "brand_id": "elp201", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1280*720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "1MEGPIX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "720P MINI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "DOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/elro.json b/data/brands/elro.json deleted file mode 100644 index c384c30..0000000 --- a/data/brands/elro.json +++ /dev/null @@ -1,676 +0,0 @@ -{ - "brand": "Elro", - "brand_id": "elro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4020", - "704IP", - "9031IP", - "903IP", - "C7031P", - "C703IP", - "C704IP", - "C704-ip 2", - "C704IP.2", - "C803IP", - "C903", - "c903ip", - "C903IP", - "C903IP.2", - "C904IP", - "hoy", - "Other", - "wert" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "700ip", - "900ip", - "901", - "c800ip", - "C801P", - "C900IP", - "C901IP", - "CS-280E2D-C901IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "7031c", - "903i", - "903IP", - "9501", - "C403IP", - "c701", - "c703", - "C7031P", - "c703ip", - "C703IP", - "c704ip", - "C704IP", - "C704-ip 2", - "C803IP", - "C901IP", - "C903IP", - "C903IP.2", - "C904IP", - "dier", - "Elro C903ip", - "ip903", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "7031C", - "704IP", - "7401ip", - "901", - "901IP", - "903", - "903IP", - "C703IP", - "C704IP", - "c730ip", - "C803IP", - "C903ip" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "704IP", - "903i", - "903IP", - "C901IP", - "ELRO C903IP.2", - "IP903IP", - "Other", - "WIFI IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "704IP", - "9031IP", - "903IP", - "C703IP", - "C704-IP 2", - "C704IP.2", - "C803IP", - "c900", - "C901IP", - "c9031p", - "C9031p", - "C903IP", - "C903IP.2", - "Other", - "WIFI IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "704IP", - "C704ip", - "C704-IP 2", - "C704IP.2", - "C803IP", - "C904IP.2", - "Other", - "WIFI IP CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "704IP", - "C704IP", - "C704IP.2", - "C803IP", - "C903IP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "900IP", - "C800IP", - "C803IP", - "C901", - "C903IP", - "Other", - "WIFI IP Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "901", - "903", - "903IP", - "C7031P", - "C703IP", - "C703IP.2", - "C704IP.2", - "C803IP", - "C903IP", - "C903IP.2", - "IP901", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "901", - "C800IP", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "901", - "903IP", - "C704IP", - "C800", - "C800IP", - "C803IP", - "C901", - "C901IP", - "C903IP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "901ip", - "9031IP", - "C7031P", - "C703IP", - "C704IP", - "C800", - "C800IP", - "C803IP", - "C901", - "C901IP", - "C903IP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "903", - "9031ip", - "903IP", - "c703ip", - "C704IP", - "C803IP", - "C903IP", - "C904IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "903", - "9031IP", - "903IP", - "C7031P", - "C705IP", - "C803IP", - "C903IP", - "C903IP.2", - "ip61" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "9031ip", - "903IP", - "c2110ip", - "C803IP", - "c900", - "C901IP", - "C903IP", - "C903IP.2", - "C930IP", - "DCS 932L", - "ELRO C903IP", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "9031ip", - "903IP", - "C704IP.2", - "C903", - "C903IP", - "C903IP.2", - "C904IP", - "Oprit", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "9031IP", - "903IP", - "C800", - "c800ip", - "C803IP", - "C900IP", - "C901", - "C903", - "C903IP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "9031IP", - "903IP", - "c2110ip", - "C703IP", - "C704IP", - "C704-ip 2", - "C803IP", - "C903IP", - "C903IP.2", - "C904IP", - "fishgrind" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "9031IP", - "C7031P", - "C703IP", - "C703IP.2", - "c703ip2", - "C801IP", - "C903IP", - "C903P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "903I", - "903IP", - "C903IP.2", - "C904IP", - "C904IP.2", - "ip904", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "903IP", - "C403IP", - "C7031P", - "C703IP", - "C703IP2", - "C704IP", - "C704IP.2", - "C803IP", - "C903", - "C903IP", - "C903IP.2", - "C903IP.2-Pass", - "C904IP", - "C904IP.2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "903IP", - "C903IP", - "C903IP.2 Pass", - "C904IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "903IP", - "C7031P", - "C703IP", - "c800ip", - "C900IP", - "C903", - "C903IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "c703ip", - "C704IP", - "c903ip", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c703ip", - "C703IP2", - "C904IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c703ip", - "C903IP.2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "c703ip" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "C704IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 5000, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C723IP", - "WIFI IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - }, - { - "models": [ - "C724IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C800", - "C800IP", - "c801IP", - "C803IP", - "C900IP", - "C901", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "c800ip" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "C802IP", - "c903" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "C803IP", - "C904IP", - "ELRO C903IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "C803IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 83, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "C901IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi" - }, - { - "models": [ - "c903ip" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "C903IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "C903IP", - "C904IP.2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "C903IP.2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "C903IP.2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "DVR 534" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Elro C903ip.2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "one" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/elsys.json b/data/brands/elsys.json deleted file mode 100644 index 705e886..0000000 --- a/data/brands/elsys.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Elsys", - "brand_id": "elsys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ESC-WB3F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "ESC-WY3F", - "ESL-WR2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ESC-WY3F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0" - }, - { - "models": [ - "ESC-WY3F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=1" - }, - { - "models": [ - "ESL-VPW1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/elver.json b/data/brands/elver.json deleted file mode 100644 index 7397b29..0000000 --- a/data/brands/elver.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Elver", - "brand_id": "elver", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M24M-Sec-Night" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=full&preview&previewsize=640x480&quality=40&fps=20.0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ematic.json b/data/brands/ematic.json deleted file mode 100644 index 24fa867..0000000 --- a/data/brands/ematic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ematic", - "brand_id": "ematic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "funtab" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/emax.json b/data/brands/emax.json deleted file mode 100644 index a284e31..0000000 --- a/data/brands/emax.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Emax", - "brand_id": "emax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/embedded-net-dvr.json b/data/brands/embedded-net-dvr.json deleted file mode 100644 index c2b6bf6..0000000 --- a/data/brands/embedded-net-dvr.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "brand": "Embedded Net Dvr", - "brand_id": "embedded-net-dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "255", - "DVR", - "HAR304-16", - "HIKVISON" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/702" - }, - { - "models": [ - "126127985", - "255", - "7208", - "Bytek", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8002, - "url": "/Streaming/Unicast/channels/101" - }, - { - "models": [ - "126127985", - "255", - "Bytek" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8002, - "url": "/Streaming/Unicast/channels/301" - }, - { - "models": [ - "1604" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/1301" - }, - { - "models": [ - "255", - "bytek" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/401" - }, - { - "models": [ - "255", - "epcom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/201" - }, - { - "models": [ - "255", - "7208", - "analog0", - "analog1", - "dvr", - "ev1016hdx", - "FFMPEG", - "HAR304-16", - "Other", - "SC16IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "255", - "anal2", - "analog1", - "HAR304-16", - "Other", - "SC16IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "255", - "FFMPEG", - "HAR304-16", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "255" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/501" - }, - { - "models": [ - "255" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/601" - }, - { - "models": [ - "255" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/701" - }, - { - "models": [ - "255" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/801" - }, - { - "models": [ - "7104" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1024, - "url": "/Streaming/Unicast/channels/202" - }, - { - "models": [ - "dvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "ffmpeg", - "HAR304-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/402" - }, - { - "models": [ - "FFMPEG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/202" - }, - { - "models": [ - "HAR304-16", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/401" - }, - { - "models": [ - "HAR304-16", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/501" - }, - { - "models": [ - "HAR304-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/601" - }, - { - "models": [ - "HAR304-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/502" - }, - { - "models": [ - "PLBN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/802" - } - ] -} \ No newline at end of file diff --git a/data/brands/emerson.json b/data/brands/emerson.json deleted file mode 100644 index e1d7eae..0000000 --- a/data/brands/emerson.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Emerson", - "brand_id": "emerson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "em 543" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "em 543" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "EVC510" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/eminent.json b/data/brands/eminent.json deleted file mode 100644 index 1822f0e..0000000 --- a/data/brands/eminent.json +++ /dev/null @@ -1,392 +0,0 @@ -{ - "brand": "Eminent", - "brand_id": "eminent", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6220", - "em6220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "6220", - "EM6220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "6220", - "6561", - "6564", - "em6561", - "EM6561", - "EM6564", - "inkel" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "6220", - "6230", - "6250", - "6350", - "6350HD", - "EM-6215", - "EM6220", - "em6225", - "em6230", - "EM6230HD", - "EM6250", - "EM-6325", - "EM6330", - "EM6330HD", - "EM6350", - "EM6350Nuz", - "EM6355", - "em6360", - "Eminent 6350 HD", - "extern IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "6225", - "6250", - "6325", - "6330", - "6331", - "6350", - "6350HD", - "6355", - "6360", - "em6220", - "EM6225", - "em6230", - "EM6230HD", - "EM6325", - "EM-63256325", - "EM6330", - "EM6330HD", - "em6331", - "EM6331", - "em6350", - "EM6355", - "em6360", - "ess", - "irobot 3", - "kassa", - "Other", - "WINKEL", - "winkel 2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "6260", - "6560", - "EM6250", - "EM6250HD", - "EM6260", - "EM6561", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "6270", - "EM6250HD", - "EM6260", - "EM-6275" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "6560", - "EM4484", - "EM6005", - "EM6015", - "EM6250HD", - "EM6260", - "EM6270" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "6561", - "em 6564", - "em6561", - "EM6564", - "emi", - "h264" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "6561", - "EM6564" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "6561", - "EM4482", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/sf.cgi" - }, - { - "models": [ - "6564" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "6564" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "6564", - "E6220", - "EM6220", - "EM6564" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "6564", - "em6220", - "EM6561", - "EM6564", - "em6620", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "6564", - "em4480", - "em4481", - "EM4482", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "em4048", - "EM4482", - "EM-6225", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "em4445", - "Em4480", - "EM4481", - "EM448x", - "EM4880" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "EM4482" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "EM4483" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "EM4484", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "EM4484" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "EM4484", - "EM6015", - "EM6250HD", - "EM6260", - "EM6564" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "EM6005" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "EM6005" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EM6005", - "EM6015" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "em6220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "EM6220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "EM6560" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "EM6564", - "em6620" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other", - "voordeur" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/empire.json b/data/brands/empire.json deleted file mode 100644 index 1ebe693..0000000 --- a/data/brands/empire.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Empire", - "brand_id": "empire", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.0MP", - "EPC1", - "ESC1", - "esc-4", - "ESC-IPC", - "esc-ipc-1 v2", - "IPC-1", - "IPC-1 V1.0", - "IPC-5 2.0", - "IPC5-mini 2.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ESC 4", - "ESC3-IP(1.3)", - "IPC-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "IPC-Color4K-T-2.8mm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=2" - }, - { - "models": [ - "IPC-Color4K-T-2.8mm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/empiretech.json b/data/brands/empiretech.json deleted file mode 100644 index a619288..0000000 --- a/data/brands/empiretech.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Empiretech", - "brand_id": "empiretech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-T54IR-ZE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "IPC-T54IR-ZE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "IPC-T54IR-ZE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=2&unicast=true&proto=Onvif" - } - ] -} \ No newline at end of file diff --git a/data/brands/emstone.json b/data/brands/emstone.json deleted file mode 100644 index 596af3c..0000000 --- a/data/brands/emstone.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Emstone", - "brand_id": "emstone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Sentry24DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]&snapshot=on" - }, - { - "models": [ - "Sentry24DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/encoder10.json b/data/brands/encoder10.json deleted file mode 100644 index 16e00e0..0000000 --- a/data/brands/encoder10.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Encoder10", - "brand_id": "encoder10", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IndigoOnvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/profile1" - }, - { - "models": [ - "INDIGOONVIF" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "INDIGOONVIF" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/encore-electronics.json b/data/brands/encore-electronics.json deleted file mode 100644 index ad138e5..0000000 --- a/data/brands/encore-electronics.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Encore Electronics", - "brand_id": "encore-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "224C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ENVCWI-G1/ANA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "ENVCWI-G1/ANA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/encore.json b/data/brands/encore.json deleted file mode 100644 index 43c426c..0000000 --- a/data/brands/encore.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Encore", - "brand_id": "encore", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CITPC-275C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ENVCWI-G1", - "ENVCWI-GX/PTGX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ENVCWI-G1", - "ENVCWI-Gx/PTGx" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "ENVCWI-G1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "ENVCWI-G1", - "ENVCWI-Gx/PTGx", - "model", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/encwi-g1.json b/data/brands/encwi-g1.json deleted file mode 100644 index 66dfa6a..0000000 --- a/data/brands/encwi-g1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Encwi-g1", - "brand_id": "encwi-g1", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HNN:1.0.0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/endoscope.json b/data/brands/endoscope.json deleted file mode 100644 index 963fc7c..0000000 --- a/data/brands/endoscope.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Endoscope", - "brand_id": "endoscope", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/endroid.json b/data/brands/endroid.json deleted file mode 100644 index 6632f51..0000000 --- a/data/brands/endroid.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Endroid", - "brand_id": "endroid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCTV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CCTV" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/endurance.json b/data/brands/endurance.json deleted file mode 100644 index 0332842..0000000 --- a/data/brands/endurance.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Endurance", - "brand_id": "endurance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "oipc-10" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "opic-10" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eneo.json b/data/brands/eneo.json deleted file mode 100644 index 0c5b714..0000000 --- a/data/brands/eneo.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "brand": "Eneo", - "brand_id": "eneo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ENC 1003 MJPEG", - "GXD-1610M", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "GLS-2302H", - "IEB-62F0036M0A", - "Jukola 1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "GXB-1710M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/ipcam/stream.cgi?nowprofileid=2" - }, - { - "models": [ - "GXC-1606M-IR", - "GXD-1610M", - "GXD-1710M/IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=2" - }, - { - "models": [ - "GXC-1606M-IR", - "GXD-1610M", - "GXD-1710M/IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "GXC-1606M-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/stream.cgi?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "GXD-1610M", - "GXD-1710M/IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/stream.cgi?nowprofileid=2" - }, - { - "models": [ - "IED63" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - }, - { - "models": [ - "IED63" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream2" - }, - { - "models": [ - "NIP-55" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NLC-1401" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - }, - { - "models": [ - "NLD/NXC/NXD camera" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/stream[CHANNEL]" - }, - { - "models": [ - "NXC-1402", - "NXD-1602M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch1/stream0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live2.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "PLD-2012PTZ", - "PXD-1010F021", - "PXD-2018PTZ1080" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "PLD-2012PTZ", - "PXD-1010F021", - "PXD-5360F01IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "PTB Series", - "PXB/PXD-2020/2080" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam0_[CHANNEL]" - }, - { - "models": [ - "PXD-2018PTZ1080" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "PXD-2018PTZ1080" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264_2" - }, - { - "models": [ - "PXD-5360F01IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/engeninus.json b/data/brands/engeninus.json deleted file mode 100644 index ac796d3..0000000 --- a/data/brands/engeninus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Engeninus", - "brand_id": "engeninus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EDS1130" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/engenius.json b/data/brands/engenius.json deleted file mode 100644 index db58643..0000000 --- a/data/brands/engenius.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Engenius", - "brand_id": "engenius", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E200", - "eds1130", - "EDS5110", - "EDS5115", - "EDS5250", - "EDS6225", - "EWS Mesh Cam", - "EWS1025CAM", - "Framsidan", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "EDS1130", - "EDS5110", - "eds5250", - "EDS6115" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch01_0" - }, - { - "models": [ - "EDS5110" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "eds5255", - "EWS1025" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/enio-bell.json b/data/brands/enio-bell.json deleted file mode 100644 index c65cb3c..0000000 --- a/data/brands/enio-bell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Enio Bell", - "brand_id": "enio-bell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ens-security.json b/data/brands/ens-security.json deleted file mode 100644 index 47f869f..0000000 --- a/data/brands/ens-security.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ens Security", - "brand_id": "ens-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ED8004TSC-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/enscam.json b/data/brands/enscam.json deleted file mode 100644 index 6c3a97f..0000000 --- a/data/brands/enscam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Enscam", - "brand_id": "enscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Brick", - "BRICK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ensidio.json b/data/brands/ensidio.json deleted file mode 100644 index 475bb9a..0000000 --- a/data/brands/ensidio.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Ensidio", - "brand_id": "ensidio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP102W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP102W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP202WN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP302P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "IP302P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_[CHANNEL].H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/enster.json b/data/brands/enster.json deleted file mode 100644 index edb5e27..0000000 --- a/data/brands/enster.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Enster", - "brand_id": "enster", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P HD WIRELESS CLOUD IP CAMERA Q5", - "2.4/5G Dual Band Wi-Fi Outdoor Security Camera", - "est-w7020c", - "ETS-IPC7142 DW", - "NST-IPC7102-PT", - "NST-IPC7115-PT", - "NST-IPC7115-PT", - "NST-IPC7142-DW", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "EST-IP741W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8091, - "url": "VIDEO.CGI" - }, - { - "models": [ - "EST-W7020B", - "NST-IPC7142-DW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "NST-4PC7102-PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "NST-4PC7102-PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=8080&subtype=1" - }, - { - "models": [ - "NST-IPC7115-PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/enter.json b/data/brands/enter.json deleted file mode 100644 index 832c49e..0000000 --- a/data/brands/enter.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Enter", - "brand_id": "enter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "e-d700ir" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "E-D700IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "E-D700IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "E-D700IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "td-w8968" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/entrematic.json b/data/brands/entrematic.json deleted file mode 100644 index be1229e..0000000 --- a/data/brands/entrematic.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Entrematic", - "brand_id": "entrematic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Entrematic cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/enviewer.json b/data/brands/enviewer.json deleted file mode 100644 index 84de503..0000000 --- a/data/brands/enviewer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Enviewer", - "brand_id": "enviewer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1130", - "ADS5250v2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/envio.json b/data/brands/envio.json deleted file mode 100644 index d03d081..0000000 --- a/data/brands/envio.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Envio", - "brand_id": "envio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MP", - "IP-Fix4.0" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/envision.json b/data/brands/envision.json deleted file mode 100644 index 06aeea8..0000000 --- a/data/brands/envision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Envision", - "brand_id": "envision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "666" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/enxun.json b/data/brands/enxun.json deleted file mode 100644 index fcb4354..0000000 --- a/data/brands/enxun.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Enxun", - "brand_id": "enxun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "MIP-813W", - "MIP-823H1", - "MP180" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/2" - }, - { - "models": [ - "MIP-812A", - "VS-MIP723Y1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/2?videoCodecType=H.264" - }, - { - "models": [ - "MIP-822a" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eonboom.json b/data/brands/eonboom.json deleted file mode 100644 index fa7931f..0000000 --- a/data/brands/eonboom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eonboom", - "brand_id": "eonboom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVI20B-2.0M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eopen.json b/data/brands/eopen.json deleted file mode 100644 index 67c14c5..0000000 --- a/data/brands/eopen.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Eopen", - "brand_id": "eopen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Open 720" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Open730" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Open730" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/eos-vision.json b/data/brands/eos-vision.json deleted file mode 100644 index 5d5b546..0000000 --- a/data/brands/eos-vision.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Eos Vision", - "brand_id": "eos-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BS-200W", - "BW-200", - "PTZ-101W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "BS-200W", - "BW-200", - "PTZ-101W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "BW-200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/epcam2.json b/data/brands/epcam2.json deleted file mode 100644 index bd97493..0000000 --- a/data/brands/epcam2.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Epcam2", - "brand_id": "epcam2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EP2036BP", - "EP2063BP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "EP2036BP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "EP2063BP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "EP2063BP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/epexis.json b/data/brands/epexis.json deleted file mode 100644 index 816a03b..0000000 --- a/data/brands/epexis.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Epexis", - "brand_id": "epexis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pipcam5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "PIPCAMHD82" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/epges.json b/data/brands/epges.json deleted file mode 100644 index 93d3478..0000000 --- a/data/brands/epges.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Epges", - "brand_id": "epges", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ephone.json b/data/brands/ephone.json deleted file mode 100644 index bedf77c..0000000 --- a/data/brands/ephone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ephone", - "brand_id": "ephone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3g plus 2g" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/epicamera.json b/data/brands/epicamera.json deleted file mode 100644 index 08dad22..0000000 --- a/data/brands/epicamera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Epicamera", - "brand_id": "epicamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "DCL-F980A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ICONNECT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - } - ] -} \ No newline at end of file diff --git a/data/brands/epine.json b/data/brands/epine.json deleted file mode 100644 index 66f5846..0000000 --- a/data/brands/epine.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Epine", - "brand_id": "epine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eigen model" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "EP-M602W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "EP-PD22W-HD", - "Other", - "PM12WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/epson.json b/data/brands/epson.json deleted file mode 100644 index 9211d22..0000000 --- a/data/brands/epson.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Epson", - "brand_id": "epson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Moverio" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ernitec.json b/data/brands/ernitec.json deleted file mode 100644 index 8a042fe..0000000 --- a/data/brands/ernitec.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "brand": "Ernitec", - "brand_id": "ernitec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hawk", - "Mercury", - "Mercury 205", - "Orion", - "Other", - "Other-2", - "Vega", - "Vega 102" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "HAWK", - "Mercury SX301IR", - "SX302IR", - "sx402m" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "Maskinrom", - "Other", - "SX302IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "OTHER-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "SX302IR", - "SX802OPH" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "SX302IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264_2" - }, - { - "models": [ - "SX302IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264_3" - }, - { - "models": [ - "SX302IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264_4" - }, - { - "models": [ - "SX302IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "SX302IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/esc.json b/data/brands/esc.json deleted file mode 100644 index 2bdc1af..0000000 --- a/data/brands/esc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Esc", - "brand_id": "esc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "esc-ipc-1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "esc-ipc-1", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/escam.json b/data/brands/escam.json deleted file mode 100644 index ad1e137..0000000 --- a/data/brands/escam.json +++ /dev/null @@ -1,693 +0,0 @@ -{ - "brand": "Escam", - "brand_id": "escam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0WL QD100", - "300", - "420D", - "brick qd300", - "BRICK QD300", - "Es300", - "Escan", - "fq001", - "fq002", - "G02", - "ICSEE", - "ICSEE1", - "Q630M", - "qd 410", - "QD100", - "QD300", - "QD320", - "QD330", - "QD500", - "qd520", - "QD520", - "qf001", - "QF001", - "QF002", - "qf007", - "QF007", - "QF100", - "qf218", - "QF218", - "QF605", - "slaba kvalietat", - "Snail QD500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "152", - "900", - "BRICK QD300", - "Brick QD900WIFI", - "G02 PTZ", - "HD3500V", - "ICSEE", - "IP2M-841W", - "Other", - "Q630M", - "Q6320", - "QD800", - "QD900", - "QD900 WF", - "QD900 Wi-Fi", - "QD900S", - "QF218" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "2mp", - "300", - "500", - "520", - "brick", - "Brick", - "BRICK", - "brick qd300", - "Brick Qd300", - "cam03", - "D520", - "DQ520", - "ES300", - "ESCAM Beick QD300", - "Escam QD420", - "Fighter", - "GD300", - "HD3500V", - "Home Security Camera", - "ICSEE", - "ims", - "NoIdea!", - "ONVIF", - "ONVVIF 720p", - "Other", - "OWL QD100", - "Peashooter", - "Peashooter (ONVIF)", - "Peashooter QD520", - "PeaShooter QD520", - "Peashooterqd520", - "pvr", - "PVR001", - "PVR008", - "Q1039", - "q300", - "Q300", - "Q500", - "Q520", - "Q630", - "Q630M", - "q645r", - "qd 300", - "QD 300", - "qd100", - "QD100", - "QD100a", - "qd300", - "QD300 HiRes Onvif", - "QD320", - "qd330", - "Qd330", - "QD330", - "QD400", - "qd500", - "QD500", - "qd520", - "QD520", - "qd520 onvif", - "QD520?", - "QD520-2", - "QD520-3", - "QD530", - "qd900", - "qf001", - "QF001", - "QF001_2", - "QF002", - "QF003", - "qf218", - "QF218", - "qf518", - "QF518", - "QF800", - "qf910", - "QP136", - "QT215", - "QT500", - "RScam", - "Snail QD500", - "SnailCam", - "V100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "300", - "ESC-IPC-1", - "G02", - "G10", - "icsee", - "ICSEE", - "Other", - "QD 500", - "QD300", - "QF001", - "qf007", - "QF007", - "QF007g", - "Snail QD500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "300", - "5MP", - "900", - "900WiFi", - "AM-Q6320-WIFI", - "Block", - "BRICK 900", - "Brick HD900", - "BRICK Q300 WIFI", - "BRICK QD300", - "Brick QD900", - "Brick QD900 WiFi", - "BRICK QD900 WIFI", - "Brick900", - "Bricks Wifi", - "D300W", - "DG9-00", - "escam 200", - "Fixed", - "G01", - "G02", - "G02 PTZ", - "G02-1", - "ICSEE", - "Other", - "OutdoorWifi", - "PT303", - "Q6230WIFI", - "Q6320", - "Q6320WIFI", - "q900", - "QD 300", - "QD 500", - "qd300", - "QD300", - "QD300 brick wifi", - "QD320", - "QD800", - "qd800 wifi", - "QD900", - "QD900 HiRes Onvif", - "QD900S", - "QD900WiFi", - "QD900WIFI", - "QF001", - "QF218", - "QF300", - "QF608", - "QPT511", - "Sentry QD900S", - "WifiOutdoor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ANT", - "Ant QF606", - "MY103", - "Other", - "pvr0008", - "QF218", - "QF605" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "Ant 605", - "diamond qf506", - "Diamond QF-506", - "ESCAM Q8", - "Other", - "PVR608", - "qf500", - "QF-500", - "QF500 Onvif", - "QF506", - "QF518", - "QF600", - "QF605", - "QF910", - "r80x50-pq" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Ant QF606", - "ELF QF200", - "Pearl QF100", - "QF100", - "QF100 P", - "QF200", - "QF280" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "CAM03", - "ESC-IPC-1", - "G02", - "go2", - "ONVVIF 720P", - "Other", - "QD900 WI-FI", - "QF002", - "QF300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "DEV.xm", - "Other", - "Peashooter QD520", - "PVR008", - "qd100", - "QD300", - "QD500", - "QD520", - "QD520RB", - "qd530", - "QF001", - "QF007", - "qf218", - "Snail QD500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "ESCAM Shark QP180", - "ESCAM SHARK QP180", - "Other", - "qd900", - "QF001", - "QP02", - "QP110", - "qp180", - "WIFIOUTDOOR", - "wnk403", - "wnk803" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "G02", - "GO2", - "ICSEE", - "ICSEE1", - "QF518" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "G02" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "GO2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "HD3100", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "hd3500" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "icsee" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "ICSEE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/live/ch00_1" - }, - { - "models": [ - "IP365", - "pvr0008", - "QP1.30", - "QP130" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/realmonitor" - }, - { - "models": [ - "KDM-A111N3", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "kdm-a131", - "Other", - "QF100", - "QF300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "k-h10-2mp" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?res=full&x0=0&y0=0&x1=100%25&y1=100%25&quality=12&doublescan=0" - }, - { - "models": [ - "NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other", - "QF001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other", - "Pearl QF100", - "qd300", - "QF100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "QP02", - "qp180", - "wnk403", - "wnk803" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=2&stream=0.sdp?real_stream%22" - }, - { - "models": [ - "Other", - "qf218" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream%22" - }, - { - "models": [ - "PEARL QF100", - "QF100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PEARL QF100", - "QF002" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "PVR002", - "QPT511" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Q630M", - "QD300", - "QD320" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "qd100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "QD-310" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8010, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "qd520" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "QF001", - "qf218", - "QF518", - "QH002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01.264" - }, - { - "models": [ - "QF100", - "QF300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "qf218", - "QF290" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/video.sav" - }, - { - "models": [ - "Qf290" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 10554, - "url": "/" - }, - { - "models": [ - "QF508" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264" - }, - { - "models": [ - "QF800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "QH002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01.264?dev=1" - }, - { - "models": [ - "QP180" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "WNK404" - ], - "type": "JPEG", - "protocol": "http", - "port": 7070, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/esecure.json b/data/brands/esecure.json deleted file mode 100644 index 1310bb7..0000000 --- a/data/brands/esecure.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Esecure", - "brand_id": "esecure", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nvp toa p2p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/esee.json b/data/brands/esee.json deleted file mode 100644 index cf66abf..0000000 --- a/data/brands/esee.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "brand": "Esee", - "brand_id": "esee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "114" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "3D Camera", - "Other", - "WIRELESS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "464478" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ip pro", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IP PRO", - "k8204-w", - "K9604-W", - "k9608-w", - "K9608-W", - "Other", - "wireless" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPC", - "K9604-W", - "Other", - "PTZ", - "WIRELESS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "neznam" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/esense.json b/data/brands/esense.json deleted file mode 100644 index 927a550..0000000 --- a/data/brands/esense.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Esense", - "brand_id": "esense", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/esky.json b/data/brands/esky.json deleted file mode 100644 index 4579f91..0000000 --- a/data/brands/esky.json +++ /dev/null @@ -1,222 +0,0 @@ -{ - "brand": "Esky", - "brand_id": "esky", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5900", - "c5900", - "H6800", - "Live", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "C5700", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "C5700", - "C5900", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "C5700" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C5700", - "c5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "C5700", - "c5900", - "H6800", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "c5900" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "c5900" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "c5900" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "c5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "c5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c5900", - "h6800", - "H6800" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "c5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "C5900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "C5900" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "h4800", - "H6800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ip003" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "L Series", - "Live" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/esmart.json b/data/brands/esmart.json deleted file mode 100644 index d375bfe..0000000 --- a/data/brands/esmart.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Esmart", - "brand_id": "esmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D-MP", - "d-mpdw1336-ip", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "ip5076-1.3m" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/esp.json b/data/brands/esp.json deleted file mode 100644 index d6b6fee..0000000 --- a/data/brands/esp.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Esp", - "brand_id": "esp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CA55", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ESP 32" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "camera.jpg?camera=[CHANNEL]" - }, - { - "models": [ - "ESP 32", - "ESP32-S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/stream" - }, - { - "models": [ - "ESP 32", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "ESP32-S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/" - }, - { - "models": [ - "ESP-EYE-v1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/esp32.json b/data/brands/esp32.json deleted file mode 100644 index 2114450..0000000 --- a/data/brands/esp32.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "brand": "Esp32", - "brand_id": "esp32", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AI thinker", - "AI_THINKER", - "AiThinker", - "Ai-Thinker", - "AITHINKER", - "esp32cam", - "esp32-cam", - "ESP32-CAM", - "ESP32-S", - "Other", - "OV2460", - "selber", - "wde", - "Wrover" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/stream" - }, - { - "models": [ - "AI THINKER", - "esp32 cam", - "ESP32CAM", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/capture" - }, - { - "models": [ - "AI THINKER", - "AI_THINKER", - "arduino", - "ESP32-CAM", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "?action=stream" - }, - { - "models": [ - "AI_THINKER", - "Enhanced Demo", - "ESP 32", - "esp32-cam", - "ESP32CAM", - "ESP32-CAM", - "ESP32-S", - "n/a", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "AiThinker", - "ESP32-CAM", - "ESP32CAM-S", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/cam.mjpeg" - }, - { - "models": [ - "Ameba82-Mini" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "diy" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/deadbeef" - }, - { - "models": [ - "esp32cam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "ch0_0.h264" - }, - { - "models": [ - "ESP32-CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "ESP32-CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/camera.jpg?camera=0" - }, - { - "models": [ - "ESP32-CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/Stream" - }, - { - "models": [ - "ESP32-CAM", - "ESP32-CAM-MINE", - "Other", - "xiao esp32 sense cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg/1" - }, - { - "models": [ - "ESP32-S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/view" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other", - "Tasmota" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Tasmota" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/espressif.json b/data/brands/espressif.json deleted file mode 100644 index 9f790d6..0000000 --- a/data/brands/espressif.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Espressif", - "brand_id": "espressif", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EP32-CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/esprit-enhanced.json b/data/brands/esprit-enhanced.json deleted file mode 100644 index 9569c5d..0000000 --- a/data/brands/esprit-enhanced.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Esprit Enhanced", - "brand_id": "esprit-enhanced", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ES6230-K090647" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1_v" - } - ] -} \ No newline at end of file diff --git a/data/brands/essay.json b/data/brands/essay.json deleted file mode 100644 index 891ed1f..0000000 --- a/data/brands/essay.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Essay", - "brand_id": "essay", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "49-52" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/essfly.json b/data/brands/essfly.json deleted file mode 100644 index 06e628a..0000000 --- a/data/brands/essfly.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Essfly", - "brand_id": "essfly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FSERIES" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "fseriess", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/est.json b/data/brands/est.json deleted file mode 100644 index 25e6407..0000000 --- a/data/brands/est.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Est", - "brand_id": "est", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ES-IP602IW", - "IP743W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPH5662" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/estcctv.json b/data/brands/estcctv.json deleted file mode 100644 index a7a9f05..0000000 --- a/data/brands/estcctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Estcctv", - "brand_id": "estcctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WCAMIPDOMO" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/esternal.json b/data/brands/esternal.json deleted file mode 100644 index d603c16..0000000 --- a/data/brands/esternal.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Esternal", - "brand_id": "esternal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "brevi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/esunstar.json b/data/brands/esunstar.json deleted file mode 100644 index 86a5b57..0000000 --- a/data/brands/esunstar.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Esunstar", - "brand_id": "esunstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C01H1W2", - "C01H4W2", - "C07H7WS4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "C07H7WS4", - "C09H4W4", - "d01h51", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ES-SP2001C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/esypop.json b/data/brands/esypop.json deleted file mode 100644 index 92bfa8e..0000000 --- a/data/brands/esypop.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Esypop", - "brand_id": "esypop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EP-2142FWD-IS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/udp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/etc.json b/data/brands/etc.json deleted file mode 100644 index a3979e8..0000000 --- a/data/brands/etc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Etc", - "brand_id": "etc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/etcam.json b/data/brands/etcam.json deleted file mode 100644 index 5abe080..0000000 --- a/data/brands/etcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Etcam", - "brand_id": "etcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ET2CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/etevision.json b/data/brands/etevision.json deleted file mode 100644 index c5a8ad3..0000000 --- a/data/brands/etevision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Etevision", - "brand_id": "etevision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/etn.json b/data/brands/etn.json deleted file mode 100644 index ff8ab91..0000000 --- a/data/brands/etn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Etn", - "brand_id": "etn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "etn-fm69" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/etrovision.json b/data/brands/etrovision.json deleted file mode 100644 index 3fdede5..0000000 --- a/data/brands/etrovision.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "Etrovision", - "brand_id": "etrovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CKSC", - "ev 8580", - "EV8180U", - "EV8580", - "EV8580A-C", - "ev8582a", - "EV8582A-BD", - "EV8781A", - "EV8782A-B", - "EV8782U-B", - "EVxx8x", - "N53", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "config/jpeg.cgi" - }, - { - "models": [ - "ev3151" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "EV3151" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video" - }, - { - "models": [ - "EV6355" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "EV8180F", - "EV8781a", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "rtpvideo[CHANNEL].sdp" - }, - { - "models": [ - "EV8780U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtpvideo1.sdp" - }, - { - "models": [ - "N76F-M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtpvideoch12.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/etupiha.json b/data/brands/etupiha.json deleted file mode 100644 index 9ddec36..0000000 --- a/data/brands/etupiha.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Etupiha", - "brand_id": "etupiha", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "kmoo" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/eu3c.json b/data/brands/eu3c.json deleted file mode 100644 index 712110f..0000000 --- a/data/brands/eu3c.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eu3c", - "brand_id": "eu3c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/eufy.json b/data/brands/eufy.json deleted file mode 100644 index e865a2d..0000000 --- a/data/brands/eufy.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "brand": "Eufy", - "brand_id": "eufy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2c pro", - "2k indoor camera", - "2K Pan and Tilt", - "C120", - "C210", - "C22", - "C220", - "Cam 2 Pro", - "Cam 2C (Regular - USA)", - "Cam2C", - "E220", - "E30", - "e42", - "Eufy 2 pro", - "eufy Security Outdoor Cam E220", - "EUFYCAM 2 PRO", - "EUFYCAM 2C", - "FloodLight Cam Pro", - "Garage-Control Cam Plus", - "Home", - "indoor 2k pan tilt", - "Indoor Cam", - "Indoor Cam 2K", - "Indoor Cam 2K / T8400X", - "Indoor Cam 2K Pan and Tilt", - "Indoor Cam C220", - "Indoor Cam C220 PTZ", - "Indoor Cam Mini", - "Indoor Cam Pan and Tilt", - "Indoor Cam S350", - "IndoorCam C24", - "indoorcam4k", - "modele E", - "Other", - "Outdoor Cam", - "Outdoor Cam Pro", - "Outdoor Pro", - "Outdoor Wired Camera Pro 2k", - "Pan and Tilt", - "Pan and tilt 2k", - "S350", - "Security Outdoor Cam E220", - "Security Solo IndoorCam C24", - "Security Solo OutdoorCam C24", - "Solo OutdoorCam L40", - "t8113", - "T8400", - "T84001W1", - "T8400X", - "T8410", - "T8410121", - "T8419", - "Tilt-Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live0" - }, - { - "models": [ - "2k Doorbell Dual", - "C24", - "Cam2c", - "Cam2c Pro", - "Eufy 2 pro", - "EufyCam 2", - "EufyCam 2C Pro", - "eufyCam S330", - "Other", - "pan en tilt", - "S330", - "T8210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live2" - }, - { - "models": [ - "C210", - "Cam 2C", - "Cam 2C Pro", - "Cam2c Pro", - "EufyCam 2 Pro", - "EufyCam 2C Pro", - "Pro2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1" - }, - { - "models": [ - "Cam2c" - ], - "type": "FFMPEG", - "protocol": "file", - "port": 0, - "url": "D:/" - }, - { - "models": [ - "Cam2c", - "eufycam2k", - "floodlight cam", - "indoor Cam 2K Pan and Tilt", - "T8210", - "t8401", - "T8401" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - }, - { - "models": [ - "E340 Floodlight", - "EufyCam S330" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live3" - }, - { - "models": [ - "eufyCam S330" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live4" - }, - { - "models": [ - "HomeBase 2", - "indoor Cam 2K Pan and Tilt", - "Pan and tilt 2k", - "Security Solo IndoorCam C24", - "T8210", - "T8410" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "Indoor Cam 2K" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "indoor Cam 2K Pan and Tilt" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10002, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "Outdoor Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/media.sav" - }, - { - "models": [ - "Outdoor Wired Camera Pro 2k" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live0.264" - }, - { - "models": [ - "Solo 2k" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "T8410" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 554, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eule.json b/data/brands/eule.json deleted file mode 100644 index ad32372..0000000 --- a/data/brands/eule.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Eule", - "brand_id": "eule", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DOM-21IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "DOM-21IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DOM-21IP_low" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eura-tech.json b/data/brands/eura-tech.json deleted file mode 100644 index 094c0e3..0000000 --- a/data/brands/eura-tech.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Eura-tech", - "brand_id": "eura-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC-01C3", - "IC-03C3", - "ic-11c3", - "IC-11C3", - "IC-12C3", - "IC-15C3" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IC-01C3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IC-03C3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IC-03C3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IC-03C3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eurolook.json b/data/brands/eurolook.json deleted file mode 100644 index 1af1913..0000000 --- a/data/brands/eurolook.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Eurolook", - "brand_id": "eurolook", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DSB-8MP04E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "EDW-3450", - "EDW-5021" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IPC08C34056E401" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/net_jpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/europ-camera.json b/data/brands/europ-camera.json deleted file mode 100644 index 7bdcb1c..0000000 --- a/data/brands/europ-camera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Europ-camera", - "brand_id": "europ-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EC-C5MP30S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/eurotek.json b/data/brands/eurotek.json deleted file mode 100644 index 0d41443..0000000 --- a/data/brands/eurotek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eurotek", - "brand_id": "eurotek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HTIPB20" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eurovideo.json b/data/brands/eurovideo.json deleted file mode 100644 index 8c153a6..0000000 --- a/data/brands/eurovideo.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Eurovideo", - "brand_id": "eurovideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bx213d", - "d213d" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/eusso.json b/data/brands/eusso.json deleted file mode 100644 index 4b8df8a..0000000 --- a/data/brands/eusso.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Eusso", - "brand_id": "eusso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "UNC7500-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "UNC7500-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ev3c.json b/data/brands/ev3c.json deleted file mode 100644 index db06e8e..0000000 --- a/data/brands/ev3c.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ev3c", - "brand_id": "ev3c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "SV-B07W-1080P-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/everest.json b/data/brands/everest.json deleted file mode 100644 index 63ebe1b..0000000 --- a/data/brands/everest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Everest", - "brand_id": "everest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hv-ly01b" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "hv-ly01b" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "hv-ly01b" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/everfocus.json b/data/brands/everfocus.json deleted file mode 100644 index edae853..0000000 --- a/data/brands/everfocus.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "brand": "Everfocus", - "brand_id": "everfocus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1360", - "3260", - "EBN268", - "EDN 3260", - "EHN3260", - "EHN3261", - "EMN2220", - "EPN4220", - "ezn", - "EZN1260", - "EZN268", - "EZN3160", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cgi-bin/rtspStreamOvf/1" - }, - { - "models": [ - "2260", - "ECOR264", - "EDN 2160", - "EDN 2260" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "2260" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "3260", - "dvr", - "EAN3220", - "EBN268", - "ECOR", - "EDN 3260", - "EDN1120", - "EHN1320", - "EHN3260", - "EPN4220", - "EPN4220d", - "EZN1260", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cgi-bin/rtspStreamOvf/0" - }, - { - "models": [ - "3260", - "EAN900", - "EDN 3260", - "EDN3240", - "EPN 4220", - "EQN2200", - "EZN3240", - "EZN3260", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "streaming/channels/0" - }, - { - "models": [ - "DVR", - "ECOR", - "EPARA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "m/camera[CHANNEL].jpg" - }, - { - "models": [ - "EBN268", - "EHN1320", - "EHN3261", - "EZN 268" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image[CHANNEL].jpg" - }, - { - "models": [ - "EDN2210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264" - }, - { - "models": [ - "EHN3200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cgi-bin/rtspStream/0" - }, - { - "models": [ - "eqn2101", - "eqn2200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "eqn2101", - "eqn2200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "eqn2200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "EZN1540-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eversecu.json b/data/brands/eversecu.json deleted file mode 100644 index 35cd961..0000000 --- a/data/brands/eversecu.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "brand": "Eversecu", - "brand_id": "eversecu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B07GPGPV67", - "ES-IP46F", - "LBC4", - "LCD4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "B2-R", - "CS770", - "W660", - "WP953" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "CS770" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "es-ipbo626", - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "idl" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "LBC4", - "LCD4", - "ptz2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif-stream2" - }, - { - "models": [ - "LBC4", - "LCD4", - "UV-8520D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/stream3/mobotix.mjpeg" - }, - { - "models": [ - "LBC4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "LCD4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp" - }, - { - "models": [ - "ptz2", - "X0031LN8WX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "UV-8520D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/eversun.json b/data/brands/eversun.json deleted file mode 100644 index c3afadf..0000000 --- a/data/brands/eversun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eversun", - "brand_id": "eversun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CLJ101L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/evgeni.json b/data/brands/evgeni.json deleted file mode 100644 index ac4b0e1..0000000 --- a/data/brands/evgeni.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Evgeni", - "brand_id": "evgeni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/evidence.json b/data/brands/evidence.json deleted file mode 100644 index 9ad37e9..0000000 --- a/data/brands/evidence.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Evidence", - "brand_id": "evidence", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "APIX Box M1", - "APIX Box M2", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "APIX Box M2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "APIX Box M2", - "Apix M1 Compact" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "APIX Box M2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/ch1/sub/" - }, - { - "models": [ - "APIX Box M2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264/ch1/sub/" - }, - { - "models": [ - "APIX Box M2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/evo3d.json b/data/brands/evo3d.json deleted file mode 100644 index f39e100..0000000 --- a/data/brands/evo3d.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Evo3d", - "brand_id": "evo3d", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Evo" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "EVO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/evocam.json b/data/brands/evocam.json deleted file mode 100644 index 4d4f049..0000000 --- a/data/brands/evocam.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Evocam", - "brand_id": "evocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL]/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/evolli.json b/data/brands/evolli.json deleted file mode 100644 index 52757a7..0000000 --- a/data/brands/evolli.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Evolli", - "brand_id": "evolli", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5050" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "5050" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "5050" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/1" - }, - { - "models": [ - "5050" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/evolution.json b/data/brands/evolution.json deleted file mode 100644 index 61aed6c..0000000 --- a/data/brands/evolution.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Evolution", - "brand_id": "evolution", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Concealed", - "Indoor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.sdp" - }, - { - "models": [ - "Evo5", - "Evo5 mini", - "Mini" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/PSIA/Streaming/channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/evolveo.json b/data/brands/evolveo.json deleted file mode 100644 index 75a32f0..0000000 --- a/data/brands/evolveo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Evolveo", - "brand_id": "evolveo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Detective POE8 Smart" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1-1" - }, - { - "models": [ - "Detective POE8 Smart" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2-1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/SubStream" - } - ] -} \ No newline at end of file diff --git a/data/brands/evolylcam.json b/data/brands/evolylcam.json deleted file mode 100644 index 1c36fc6..0000000 --- a/data/brands/evolylcam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Evolylcam", - "brand_id": "evolylcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MYDZTG3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/evonet-c-vd320ir.json b/data/brands/evonet-c-vd320ir.json deleted file mode 100644 index 239719f..0000000 --- a/data/brands/evonet-c-vd320ir.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Evonet-c-vd320ir", - "brand_id": "evonet-c-vd320ir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/media" - } - ] -} \ No newline at end of file diff --git a/data/brands/evonet.json b/data/brands/evonet.json deleted file mode 100644 index 01a2b84..0000000 --- a/data/brands/evonet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Evonet", - "brand_id": "evonet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C-SD220-Z18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/?trackID=0" - }, - { - "models": [ - "C-VD310IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/media" - } - ] -} \ No newline at end of file diff --git a/data/brands/evviz.json b/data/brands/evviz.json deleted file mode 100644 index 53a3c93..0000000 --- a/data/brands/evviz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Evviz", - "brand_id": "evviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1dbc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ewan-ko.json b/data/brands/ewan-ko.json deleted file mode 100644 index 7aad64d..0000000 --- a/data/brands/ewan-ko.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ewan Ko", - "brand_id": "ewan-ko", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dun lang" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/CH002.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ewelink.json b/data/brands/ewelink.json deleted file mode 100644 index 006da03..0000000 --- a/data/brands/ewelink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ewelink", - "brand_id": "ewelink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av_stream/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ews1025.json b/data/brands/ews1025.json deleted file mode 100644 index ed92bf3..0000000 --- a/data/brands/ews1025.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ews1025", - "brand_id": "ews1025", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EWS1025-EnGenius" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/exache.json b/data/brands/exache.json deleted file mode 100644 index 27317ce..0000000 --- a/data/brands/exache.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Exache", - "brand_id": "exache", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP DOme" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/exacqvision.json b/data/brands/exacqvision.json deleted file mode 100644 index 579017f..0000000 --- a/data/brands/exacqvision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Exacqvision", - "brand_id": "exacqvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3125IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "pull.web?[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - } - ] -} \ No newline at end of file diff --git a/data/brands/exceed.json b/data/brands/exceed.json deleted file mode 100644 index d676f43..0000000 --- a/data/brands/exceed.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Exceed", - "brand_id": "exceed", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ali" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/excelvan.json b/data/brands/excelvan.json deleted file mode 100644 index c809cbb..0000000 --- a/data/brands/excelvan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Excelvan", - "brand_id": "excelvan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCC-B15N-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/exelon.json b/data/brands/exelon.json deleted file mode 100644 index f87abed..0000000 --- a/data/brands/exelon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Exelon", - "brand_id": "exelon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ST-4 DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/exom.json b/data/brands/exom.json deleted file mode 100644 index c67bb01..0000000 --- a/data/brands/exom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Exom", - "brand_id": "exom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EIPC-D354" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/exotic-life.json b/data/brands/exotic-life.json deleted file mode 100644 index 27273ef..0000000 --- a/data/brands/exotic-life.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Exotic Life", - "brand_id": "exotic-life", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AP-001-A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/expert.json b/data/brands/expert.json deleted file mode 100644 index 73236f0..0000000 --- a/data/brands/expert.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Expert", - "brand_id": "expert", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/export-import-global.json b/data/brands/export-import-global.json deleted file mode 100644 index 19d801f..0000000 --- a/data/brands/export-import-global.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Export Import Global", - "brand_id": "export-import-global", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK-3509", - "AK-3509HD100", - "AK-3509HD1010", - "AN-H-360-1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AK-3509HD100" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/expose.json b/data/brands/expose.json deleted file mode 100644 index 48db9a9..0000000 --- a/data/brands/expose.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Expose", - "brand_id": "expose", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/extel.json b/data/brands/extel.json deleted file mode 100644 index 26b0aa8..0000000 --- a/data/brands/extel.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Extel", - "brand_id": "extel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip562m" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "mini318", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "mova" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/extend-lan.json b/data/brands/extend-lan.json deleted file mode 100644 index 9de30d2..0000000 --- a/data/brands/extend-lan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Extend Lan", - "brand_id": "extend-lan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IVS100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/extreme.json b/data/brands/extreme.json deleted file mode 100644 index 9c477db..0000000 --- a/data/brands/extreme.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Extreme", - "brand_id": "extreme", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3916", - "AP3916C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3916", - "AP3916C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "3916" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "3916c" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/extron.json b/data/brands/extron.json deleted file mode 100644 index c730ede..0000000 --- a/data/brands/extron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Extron", - "brand_id": "extron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SMP352" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/extron3-HS-06" - } - ] -} \ No newline at end of file diff --git a/data/brands/eye-360.json b/data/brands/eye-360.json deleted file mode 100644 index de0c0cb..0000000 --- a/data/brands/eye-360.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Eye 360", - "brand_id": "eye-360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360S", - "EC80_Y13" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "66WDHREBD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av1" - }, - { - "models": [ - "EC101-B3Y2", - "V380 WIFI IP CAM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "EC101-X15" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "V380 WIFI IP CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eye-sight.json b/data/brands/eye-sight.json deleted file mode 100644 index 93d5833..0000000 --- a/data/brands/eye-sight.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Eye Sight", - "brand_id": "eye-sight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ES-IP910IW", - "ipr806irw" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "IP935IW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eye-vision.json b/data/brands/eye-vision.json deleted file mode 100644 index 2e62f3b..0000000 --- a/data/brands/eye-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eye Vision", - "brand_id": "eye-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "700" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/eye01w.json b/data/brands/eye01w.json deleted file mode 100644 index 818789e..0000000 --- a/data/brands/eye01w.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Eye01w", - "brand_id": "eye01w", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "live_h264.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cgi-bin/rtspStreamOvf/0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "streaming/channels/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyecam.json b/data/brands/eyecam.json deleted file mode 100644 index 6e5d39a..0000000 --- a/data/brands/eyecam.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "brand": "Eyecam", - "brand_id": "eyecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1104", - "ec-1347", - "IPD-L21Y02", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "E8ABFA102826" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ec-1360", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "ec-1392", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "ec-1505", - "ICAM-608" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ICam-608", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "ICam-608" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "IP65IW", - "Other", - "STORAGEOPTIONS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "KaptanCam", - "Other", - "storageoptions" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other", - "STORAGEOPTIONS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "streaming/channels/0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/CH002.sdp" - }, - { - "models": [ - "STORAGEOPTIONS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "wifi5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streaming/channels/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyecloud.json b/data/brands/eyecloud.json deleted file mode 100644 index d0c1855..0000000 --- a/data/brands/eyecloud.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eyecloud", - "brand_id": "eyecloud", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C-P05C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "roiy-EyeCloud" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyeguard.json b/data/brands/eyeguard.json deleted file mode 100644 index 7e4552a..0000000 --- a/data/brands/eyeguard.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyeguard", - "brand_id": "eyeguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iipc-30" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyeipcam.json b/data/brands/eyeipcam.json deleted file mode 100644 index c06fe50..0000000 --- a/data/brands/eyeipcam.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Eyeipcam", - "brand_id": "eyeipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1212", - "23334" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP901W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP935FW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyemax.json b/data/brands/eyemax.json deleted file mode 100644 index 05a6e2c..0000000 --- a/data/brands/eyemax.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Eyemax", - "brand_id": "eyemax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9000 Series", - "HX-08 DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jstream.cgi?chid=[CHANNEL]&cnt=0" - }, - { - "models": [ - "TVST PHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyenimal.json b/data/brands/eyenimal.json deleted file mode 100644 index d8424e1..0000000 --- a/data/brands/eyenimal.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyenimal", - "brand_id": "eyenimal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nghomcam0 06" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyenix.json b/data/brands/eyenix.json deleted file mode 100644 index c2ddd33..0000000 --- a/data/brands/eyenix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyenix", - "brand_id": "eyenix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EN672" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyeon.json b/data/brands/eyeon.json deleted file mode 100644 index c14c84c..0000000 --- a/data/brands/eyeon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eyeon", - "brand_id": "eyeon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ESR5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyeonet.json b/data/brands/eyeonet.json deleted file mode 100644 index a6a457c..0000000 --- a/data/brands/eyeonet.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Eyeonet", - "brand_id": "eyeonet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam-ip9131", - "CAM-IP9741" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "IP6394" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyeplus.json b/data/brands/eyeplus.json deleted file mode 100644 index e71e55c..0000000 --- a/data/brands/eyeplus.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "brand": "Eyeplus", - "brand_id": "eyeplus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Alt", - "CloudCam", - "EYEPLUS_DEV", - "H9017D", - "HIP291G Alt", - "IL-HIP291G-2M-AI", - "Other", - "uggh" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av1" - }, - { - "models": [ - "CloudCam", - "EYEPLUS_DEV", - "RTSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "C-P08-23(EN)A", - "DEV_1", - "EYEPLUS_DEV", - "HIP291G", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "C-P80-23", - "EYEPLUS_DEV", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "DEV_1", - "EYEPLUS_DEV", - "EYEPLUS_FRT", - "Other", - "zs-gx1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "DEV_1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "Eteplus-dev" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "Eteplus-dev" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/live/1" - }, - { - "models": [ - "Eteplus-dev" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/live/2" - }, - { - "models": [ - "Eteplus-dev" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "Eteplus-dev" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "Eteplus-dev" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "EYEPLUS_DEV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "EYEPLUS_DEV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/onvif/device_service" - }, - { - "models": [ - "eyeplus-DEV", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsph2641080p" - }, - { - "models": [ - "IL-HIP291G-2M-AI", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyerely.json b/data/brands/eyerely.json deleted file mode 100644 index ad0547e..0000000 --- a/data/brands/eyerely.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyerely", - "brand_id": "eyerely", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyes-sys.json b/data/brands/eyes-sys.json deleted file mode 100644 index cd84cfe..0000000 --- a/data/brands/eyes-sys.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Eyes-sys", - "brand_id": "eyes-sys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4k POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "4K POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "ColorVu" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyesec.json b/data/brands/eyesec.json deleted file mode 100644 index 9fe8ca2..0000000 --- a/data/brands/eyesec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Eyesec", - "brand_id": "eyesec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Q16" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "Q16-20E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyesight.json b/data/brands/eyesight.json deleted file mode 100644 index ffe75cf..0000000 --- a/data/brands/eyesight.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "brand": "Eyesight", - "brand_id": "eyesight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "609", - "ES-IP601W", - "ES-IP811W", - "ES-IP902W", - "ES-IP909IW", - "ES-IP910IW", - "ES-IP935FW", - "ES-IP935IW", - "IP807TW", - "IP817TW", - "ip915iw", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP607W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ES-IP607W", - "IP613W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ES-IP607W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP607W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP607W", - "ES-IP811W", - "ip609IW", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "ES-IP607W", - "IP609IW", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "ES-IP607W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "ES-IP607W", - "ES-IP935FW", - "ES-IP935IW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP607W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP611W", - "ES-IP613W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP611W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "ES-IP611W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "ES-IP815IW M" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ES-IP902W", - "ES-IP-MP2-DM1", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "ES-IP909IW", - "ES-IP935FW", - "ip915iw", - "mjpeg 909iw", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "ES-IP910IW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "ES-IP935IW", - "ip909iw", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ES-IP-MP2-DM1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IP817TW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP910IW", - "IP915IW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyesonic.json b/data/brands/eyesonic.json deleted file mode 100644 index 7569905..0000000 --- a/data/brands/eyesonic.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Eyesonic", - "brand_id": "eyesonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ES-3422A-26", - "HNC303_MD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyespy.json b/data/brands/eyespy.json deleted file mode 100644 index 7b7c0c0..0000000 --- a/data/brands/eyespy.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Eyespy", - "brand_id": "eyespy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hdsd", - "rc8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "sp 1008z" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyespy247.json b/data/brands/eyespy247.json deleted file mode 100644 index 8612c21..0000000 --- a/data/brands/eyespy247.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Eyespy247", - "brand_id": "eyespy247", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "247", - "Ext", - "EXT+", - "EXT+ HDSD", - "Eyespy 247", - "HDSD", - "notsure", - "Other", - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Ext", - "EXT+", - "EXT+ HDSD", - "HDSD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "EXT+", - "EYESPY 247", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "EXT+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.cgi" - }, - { - "models": [ - "HDSD", - "Other", - "PTZ", - "RC8061" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "HDSD", - "Other", - "PTZ", - "RC8061" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyesurv.json b/data/brands/eyesurv.json deleted file mode 100644 index 55a7bfd..0000000 --- a/data/brands/eyesurv.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Eyesurv", - "brand_id": "eyesurv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ESIP-MP3-BT1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ESIP-MP3-BT1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "PTZ1080ipIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "PTZ1080IPIR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyetech.json b/data/brands/eyetech.json deleted file mode 100644 index c06206c..0000000 --- a/data/brands/eyetech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyetech", - "brand_id": "eyetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyetelligent.json b/data/brands/eyetelligent.json deleted file mode 100644 index d7666e2..0000000 --- a/data/brands/eyetelligent.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyetelligent", - "brand_id": "eyetelligent", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/webcam.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyevision.json b/data/brands/eyevision.json deleted file mode 100644 index 94d0750..0000000 --- a/data/brands/eyevision.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Eyevision", - "brand_id": "eyevision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EV-100B1WFIP", - "EV-100d36ipc", - "HMIFI1001-IR", - "mbg 001", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "EV-IP100M", - "NC300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "EYE-7003P 4MM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "HMIFI1001-IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyewatch.json b/data/brands/eyewatch.json deleted file mode 100644 index e02f9ef..0000000 --- a/data/brands/eyewatch.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Eyewatch", - "brand_id": "eyewatch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eyeFOUR", - "eyeFOUR iMX.6" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8111, - "url": "/mjpg/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyseo.json b/data/brands/eyseo.json deleted file mode 100644 index 93792da..0000000 --- a/data/brands/eyseo.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Eyseo", - "brand_id": "eyseo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7203", - "TV7204" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpeg" - }, - { - "models": [ - "TV7204", - "TV7230", - "TV7240" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/eyu.json b/data/brands/eyu.json deleted file mode 100644 index c177ccc..0000000 --- a/data/brands/eyu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Eyu", - "brand_id": "eyu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ez-ip.json b/data/brands/ez-ip.json deleted file mode 100644 index c131b92..0000000 --- a/data/brands/ez-ip.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Ez-ip", - "brand_id": "ez-ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B1A30p", - "IPC-B1A20P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "EZ-IP B140" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ez-watching.json b/data/brands/ez-watching.json deleted file mode 100644 index 5f21910..0000000 --- a/data/brands/ez-watching.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ez-watching", - "brand_id": "ez-watching", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ezbiz.json b/data/brands/ezbiz.json deleted file mode 100644 index e0c15fd..0000000 --- a/data/brands/ezbiz.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Ezbiz", - "brand_id": "ezbiz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cs-c6n", - "EZBIZ-CS-C6N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "cs-c6n" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "cs-c6n" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "TY2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ezcam.json b/data/brands/ezcam.json deleted file mode 100644 index 04afe93..0000000 --- a/data/brands/ezcam.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "brand": "Ezcam", - "brand_id": "ezcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C3S" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "C3-S-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "EPK-EP10L1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "EZCAM PAN/TILT V2", - "Other", - "Pan/Tilt v1", - "Pan/Tilt v2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Other", - "Pan/Tilt v2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Pan/Tilt v1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Other", - "Pan/Tilt v2", - "qp180" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Other", - "Pan/Tilt v2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Other", - "PAN/TILT V1", - "Pan/Tilt v2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EZCam Pan/Tilt v2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "EZCam Pan/Tilt v2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other", - "Pan/Tilt v1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other", - "Pan/Tilt v2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other", - "Pan/Tilt v1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "PAN/TILT V1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Pan/Tilt v2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Pan/Tilt v2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Pan/Tilt v2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/eziviewcctv.json b/data/brands/eziviewcctv.json deleted file mode 100644 index f94a3c1..0000000 --- a/data/brands/eziviewcctv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Eziviewcctv", - "brand_id": "eziviewcctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS-C6N", - "DS-2CD1141" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/eziviz.json b/data/brands/eziviz.json deleted file mode 100644 index c72e148..0000000 --- a/data/brands/eziviz.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Eziviz", - "brand_id": "eziviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C3C", - "CS-C1C", - "Ztube" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ezlink.json b/data/brands/ezlink.json deleted file mode 100644 index 2fca185..0000000 --- a/data/brands/ezlink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ezlink", - "brand_id": "ezlink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ptc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ezviz.json b/data/brands/ezviz.json deleted file mode 100644 index 209d8cd..0000000 --- a/data/brands/ezviz.json +++ /dev/null @@ -1,1060 +0,0 @@ -{ - "brand": "Ezviz", - "brand_id": "ezviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3cn", - "C1C", - "C1P", - "C2W", - "C3HW", - "C3N", - "C3S", - "C3T", - "C3TN", - "C3W", - "C3X", - "C6C", - "C6CN", - "C6N", - "C6T", - "c8c", - "C8c", - "CS_CV210", - "CS_H6C", - "CS-C1C", - "CS-C2mini-31WFR", - "CS-C3HC", - "cs-c3n", - "CS-C6CN-A0-3H2WF", - "CS-C6N-R101-1G2WF", - "CS-C8C-A0-1F2WFL1(G05708394)", - "CS-C8W", - "CS-CTQ3N", - "CS-CV200", - "CS-CV206", - "CS-CV210 (Husky)", - "CS-CV216", - "CS-CV246", - "CS-CV248", - "CS-CV248-A0-32WFR", - "CS-CV310", - "cs-cw310", - "CS-H1", - "CS-H3", - "CS-H6c", - "CS-H6c-R101-1G2WF", - "CS-H8C", - "CS-LC3", - "cs-ty1", - "CTQ3N", - "CTQ3W", - "CTQ6C", - "cv210", - "cv310", - "CV4", - "CZQ3W", - "DB1", - "DB1C", - "exCube Pro", - "ezCube pro", - "eztube", - "H1c", - "H3C", - "H6C", - "H8C", - "H8C-R200", - "H9C", - "Husky", - "LC3", - "Mini-O", - "Other", - "TY1", - "TY2", - "YT1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "3CN", - "c1c", - "C1mini", - "C3N", - "C3N(E32056121)", - "C3W", - "C3W mike", - "C3WN", - "C3X", - "C4W", - "C6c", - "C6CN", - "C6HN", - "C6N", - "C6T", - "C6W", - "C8C", - "C8W Pro", - "CP1 4MP", - "CS_CV210", - "CS_H6C", - "CS-C1C-E0-1E2WF", - "CS-C1HC", - "cs-c3n", - "CS-C6CN-A0-8C4WF", - "CS-C6HN-1C2WFR", - "CS-C6N", - "CS-C8c", - "CS-C8C-A0-1F2WF0", - "CS-C8W", - "CS-CP1", - "CS-CTQ3N", - "CS-CV206", - "cs-cv246", - "CS-CV248", - "CSCV310", - "CS-CV310", - "CS-CV311", - "CS-CY310", - "CS-DB1", - "CS-EL3", - "CS-H3", - "CS-H3c", - "CS-H3-R100", - "CS-H8", - "CS-H8c", - "CS-H8c-R100", - "CS-LC1C", - "cs-ty1", - "CS-TY2", - "CTQ2C", - "CTQ3W", - "CV206", - "CV228", - "cw3", - "DB1", - "DB1C", - "DC1P", - "Dome", - "e3s", - "EL3", - "H3c", - "H80x", - "H8c", - "H9c", - "Husky", - "LC 3", - "LC1", - "Mini O Plus", - "Other", - "TY1", - "TY2", - "ycc365 Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "3CN", - "c1c", - "C6CN", - "C6N", - "CS_CV310", - "cs-c3n", - "CS-C6N", - "CS-CV206", - "CS-CV206-C0-3B2WFR", - "CS-CV246-A0-1C2WFR", - "cs-cv310", - "CS-CV311", - "cs-ty1", - "CS-TY2", - "CTQ2C", - "CTQ3W", - "DB1", - "H1c", - "H8c", - "TY1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel1" - }, - { - "models": [ - "3CW", - "c1c", - "c3n", - "C3N", - "C3Q", - "C3TN", - "C3W", - "C3W Pro", - "C3X", - "C6 2K", - "C6 2K+", - "C6c", - "C6CN", - "C6HN", - "C6N", - "c6s", - "C6T", - "C8C", - "C8W", - "C8W Pro", - "CQ6N", - "CS-C3HW-1C2WFR", - "CS-C4", - "CS-C6", - "CS-C6C-3B2WFR", - "CS-C6H", - "CS-C8C-A0-1F2WFL1(G05708394)", - "CS-C8W", - "CS-CP1", - "CS-CTQ3N", - "CS-CV206", - "CS-CV206-C0-1A1WFR-Cube", - "cs-cv-246", - "CS-CV246", - "CS-CV248", - "cs-cv310", - "CSCV310", - "CS-CV311", - "CS-DB1", - "CS-DB1C", - "CS-DP2C", - "CS-H1c", - "CS-H1c-R101-1G2WR", - "CS-H6", - "CS-H6C", - "CSH8C", - "cs-ty1", - "CS-TY1-R101-1G2WF", - "CS-TY2", - "CT3N", - "CTQ2C", - "CTQ3W", - "CTQ6C", - "cw-c310", - "db1", - "DB1C", - "Door bell", - "DoorBell", - "DS-72xx", - "DS-72xx Series", - "EZ360", - "Ezviz CTQ3N", - "H3C", - "H8c", - "H8C 4MP", - "husky", - "Indoor", - "LC1", - "LC3", - "Mini O Plus", - "Other", - "TY1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.264" - }, - { - "models": [ - "9h9C", - "C3N(E32056121)", - "CS-C6H-31WRF", - "CS-C6N", - "CTQ3W", - "DB1", - "EL3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H_264" - }, - { - "models": [ - "c1c", - "C3X", - "C6N", - "C8c", - "C8c 2K+", - "CS-C3TN", - "CS-CV248", - "cs-cv310", - "CS-DB1C", - "DB1C", - "H8C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265_stream" - }, - { - "models": [ - "c1c", - "C1C-B", - "C1HC", - "C1Mini", - "C1P", - "C2C", - "C3A", - "c3c", - "C3N", - "C3S", - "C3T", - "C3TN", - "C3W", - "C3WN", - "C3X", - "C4W", - "C6c", - "C6C", - "C6CN", - "c6cnpro", - "C6N", - "C6TC", - "C6W", - "c8c", - "CS H8C", - "CS_CV210", - "CS-C3HC", - "cs-c3n", - "CS-C6N", - "CS-C8C-A0-1F2WF0", - "CS-CTQ2C", - "CS-CTQ3N", - "CS-CV206", - "cs-cv246", - "cs-cv-246", - "CS-CV248", - "CS-CV310", - "CS-H3", - "CS-H6c-R100-8B4WF", - "C-SH8", - "CS-H8c", - "CTQ20", - "CTQ2C", - "CTQ3N", - "CTQ3W", - "CTQ6C", - "ctq6tc", - "cw310", - "CW3N", - "cw8", - "DB1", - "DB1C", - "dp1s", - "eztube", - "H1C", - "H6C", - "H8C", - "husky", - "LC3", - "MINI O", - "Mini O Plus", - "mini pano", - "MINI PLUS", - "Mini-O", - "Other", - "OutPro", - "TY1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "c1c", - "CS-C3N", - "CS-H3", - "CS-H3C", - "CTQ2C", - "H9c", - "HUSKY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Channel/01" - }, - { - "models": [ - "c1C", - "CS-C6H-31WFR", - "CS-C8C-A0-1F2WFL1(G05708394)", - "cs-cv310", - "CS-H8c", - "Ezviz CS-TY1-R101", - "H6c PRO", - "H8c", - "LC3", - "Mini O Plus", - "Mini-O", - "TY1", - "YCC365 Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h.264" - }, - { - "models": [ - "C1C", - "C3W", - "cs-cv310", - "CS-DP2C", - "DP1C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "C1C", - "C4W", - "C6CN", - "C6T", - "CS-CV206", - "CS-CV248", - "cs-cv310", - "CS-CV310-A0-1B2WFR-Tube", - "CS-H1c", - "CS-H6c", - "H3C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "C1C", - "C3WN", - "C6CN", - "C6N", - "cs-c3n", - "CS-C8C-A0-1F2WFL1(G05708394)", - "CS-C8PF", - "CS-C8W", - "CS-CV206", - "cs-cv310", - "CS-DB1C", - "CS-H3_R100", - "CSH8C", - "CS-TY2", - "CTQ2C", - "H7c", - "h8c", - "H9c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "C1C", - "C2C", - "C3WN", - "C6CN", - "C6N", - "c6s", - "CQ6N", - "cs-c3n", - "CS-C6N", - "CS-C8PF", - "CS-cv246", - "CS-CV248", - "cs-cv310", - "CTQ2C", - "CTQ3N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel0" - }, - { - "models": [ - "C1C", - "CS-C8C-A0-1F2WFL1(G05708394)", - "CS-DB1C", - "CTQ3N", - "CTQ3W", - "H3c", - "H3C", - "H8c", - "TY2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "C1C", - "C3N", - "CS-C8C-A0-1F2WFL1(G05708394)", - "CS-DP2C", - "CSH8c", - "EL3", - "H3c", - "Mini O Plus", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "C1HC", - "C6N", - "C8C", - "CS-C6N", - "CS-C6N-D0", - "CS-C8T", - "CS-CV246-A0-1C2WFR", - "cs-cv310", - "CS-H8c-R100-1J4WKFL", - "CTQ2C", - "CTQ3N", - "CTQ3W", - "H8C", - "H8c 2K+", - "LC3", - "onvif", - "TY1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "C2C", - "C8W", - "CS-H8c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "c2cube", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "C2Q", - "C3W Pro", - "C8W Pro", - "CS-CP1", - "CS-CV228", - "CS-CV246", - "cs-cv310", - "CS-H8c", - "DB1", - "H8 3k", - "H8C", - "LC3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "C3A", - "H8C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h_264" - }, - { - "models": [ - "C3W", - "C8C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel80" - }, - { - "models": [ - "C3W", - "C8C", - "CS_CV310", - "CS-C3U-22ER", - "CS-C6N", - "CS-C6N-B0", - "CS-DB1", - "CS-H8c", - "EZVIZ H4", - "H3c", - "H8C", - "TY82" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "C3X", - "C6N", - "H3C", - "H80X", - "LC3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264/ch1/main/av_stream" - }, - { - "models": [ - "C4S", - "C6HN", - "C8C", - "CS-C1HC", - "CS-C1T", - "CS-C6HN-1C2WFR", - "CS-C6N", - "CS-C8W", - "CS-CP1", - "CS-CTQ2C", - "CS-DP2C", - "CS-H3-R100", - "CTQ2C", - "Ezviz-C6", - "H8C", - "hC1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.265" - }, - { - "models": [ - "C4W", - "C8c 2K+" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream" - }, - { - "models": [ - "C6C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/mjpeg" - }, - { - "models": [ - "C6C", - "C6CN", - "CTQ2C", - "LC3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "C6C", - "C8PF", - "CS-C8PF", - "H7c", - "H9c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "C6C", - "cs-c3tn", - "CS-C6N", - "cs-cv310", - "EZ360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "channel[CHANNEL]" - }, - { - "models": [ - "C6CN", - "CS-DB1C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//Channel/01" - }, - { - "models": [ - "C8C", - "CS-C6N-R101-1G2WF", - "CS-CTQ2C", - "CS-CV248", - "H8c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h.264_stream" - }, - { - "models": [ - "C8c 2K+" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_hd.sdp" - }, - { - "models": [ - "C8PF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "CS-C1C", - "CS-C6N", - "CS-C6N-R101-1G2WF", - "CS-C8C-A0-1F2WFL1(G05708394)", - "CSCV310", - "CS-H8C", - "CS-H8c-R100-1J4WKFL", - "CTQ2C", - "H8c", - "LC3", - "TY1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h.265" - }, - { - "models": [ - "CS-C1T", - "CS-CV248", - "Mini O Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "cs-c6n", - "cs-ty1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - }, - { - "models": [ - "CS-C6N", - "H8c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "CS-C6N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel2" - }, - { - "models": [ - "CS-C6W", - "Husky" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1/main" - }, - { - "models": [ - "CS-C8C-A0-1F2WF", - "H8C", - "H9C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/live/2" - }, - { - "models": [ - "CS-C8C-A0-1F2WF0", - "CS-H3", - "CS-H3-R100-1J3WKFL", - "CS-H6C", - "Ezviz CS-TY1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265" - }, - { - "models": [ - "CS-C8W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "CS-CP1", - "CS-CV248-B1-32WVFMR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "CS-CV206", - "CS-CV206v2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "cs-cv310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "CS-H8c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101?transportmode=unicast&profile=Profile_2" - }, - { - "models": [ - "CS-H8c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101?transportmode=unicast&profile=Profile_1" - }, - { - "models": [ - "CS-H8c-R100-1J4WKFL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "CS-TY2", - "TY2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.264" - }, - { - "models": [ - "CTQ3W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "CTQ3W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264_ulaw/HD720P" - }, - { - "models": [ - "CTQ3W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.mp4" - }, - { - "models": [ - "CTQ3W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "CTQ3W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam101/h264" - }, - { - "models": [ - "GK-200MP2B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av_stream/ch0" - }, - { - "models": [ - "H80X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264/ch1/sub/av_stream" - }, - { - "models": [ - "H80X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "H9c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streaming/Channels/201" - }, - { - "models": [ - "LC1C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "LC3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265Preview_01_main" - }, - { - "models": [ - "USB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/h264" - }, - { - "models": [ - "USB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/f-series.json b/data/brands/f-series.json deleted file mode 100644 index 345225e..0000000 --- a/data/brands/f-series.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "F-series", - "brand_id": "f-series", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xyz" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/f7210.json b/data/brands/f7210.json deleted file mode 100644 index 282494e..0000000 --- a/data/brands/f7210.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "F7210", - "brand_id": "f7210", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "zavio" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - } - ] -} \ No newline at end of file diff --git a/data/brands/facetime.json b/data/brands/facetime.json deleted file mode 100644 index 2216320..0000000 --- a/data/brands/facetime.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Facetime", - "brand_id": "facetime", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/faitt0o.json b/data/brands/faitt0o.json deleted file mode 100644 index 7ab3d53..0000000 --- a/data/brands/faitt0o.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Faitt0o", - "brand_id": "faitt0o", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "444" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/faittoo.json b/data/brands/faittoo.json deleted file mode 100644 index d6f76e8..0000000 --- a/data/brands/faittoo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Faittoo", - "brand_id": "faittoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "R5108-H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/falcon-eye.json b/data/brands/falcon-eye.json deleted file mode 100644 index ccbea2a..0000000 --- a/data/brands/falcon-eye.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "brand": "Falcon Eye", - "brand_id": "falcon-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BP2e-30p", - "cam2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mode=real&idc=1&ids=1" - }, - { - "models": [ - "Falcon", - "FE-IPC-DL202PV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01.264?ptype=udp" - }, - { - "models": [ - "fe-mtr1300", - "neye3c", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "FE-MTR1300", - "p100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01_sub.264" - }, - { - "models": [ - "fe-mtr300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "FE-MTR300", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "neye3c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/falcon.json b/data/brands/falcon.json deleted file mode 100644 index 76a2358..0000000 --- a/data/brands/falcon.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "brand": "Falcon", - "brand_id": "falcon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CL-4PRO", - "LX Series DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "FE-IPC-HSPD210PZ", - "Other", - "WD200P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/vga.jpg" - }, - { - "models": [ - "VCS001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/faleemi.json b/data/brands/faleemi.json deleted file mode 100644 index 1e348e9..0000000 --- a/data/brands/faleemi.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Faleemi", - "brand_id": "faleemi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "704", - "760", - "FCS 761", - "FSC 880", - "FSC760", - "FSC768", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - }, - { - "models": [ - "882", - "fsc750", - "FSC760", - "FSC768", - "FSC776A", - "FSC776B", - "FSC776v3.0", - "fsc776w", - "FSC850", - "FSC860", - "FSC861", - "FSC866", - "FSC880", - "fsc881", - "FSC883", - "FSC886", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/falke.json b/data/brands/falke.json deleted file mode 100644 index 25d89d4..0000000 --- a/data/brands/falke.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Falke", - "brand_id": "falke", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Vandalproof" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Vandalproof" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fam.json b/data/brands/fam.json deleted file mode 100644 index 91c00f4..0000000 --- a/data/brands/fam.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Fam", - "brand_id": "fam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002famr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "h264" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "api/video?encode=h264(1)" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "live/h264_ulaw" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "video/cam[CHANNEL]/2.0?audio=0&stream=0" - }, - { - "models": [ - "FAM-IPC3013" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/fang-hacks.json b/data/brands/fang-hacks.json deleted file mode 100644 index 03c73a8..0000000 --- a/data/brands/fang-hacks.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "fang-hacks", - "brand_id": "fang-hacks", - "last_updated": "2025-11-11", - "source": "github.com/samtap/fang-hacks", - "website": "https://github.com/samtap/fang-hacks", - "entries": [ - { - "models": [ - "XIAOFANG ARM PROCESSOR", - "XiaoFang ARM", - "Classic XiaoFang", - "ARM926EJ-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast", - "notes": "Classic XiaoFang with ARM processor (not Ingenic)" - }, - { - "models": [ - "XIAOMI XIAOFANG", - "Xiaofang", - "XiaoFang" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast", - "notes": "Xiaomi Xiaofang camera with fang-hacks" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast", - "notes": "Generic fang-hacks installation" - } - ] -} diff --git a/data/brands/fanse.json b/data/brands/fanse.json deleted file mode 100644 index d1db508..0000000 --- a/data/brands/fanse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fanse", - "brand_id": "fanse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5120" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fanshine.json b/data/brands/fanshine.json deleted file mode 100644 index c9eb48b..0000000 --- a/data/brands/fanshine.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Fanshine", - "brand_id": "fanshine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fahd1", - "fahd3", - "FiA027D", - "FSWF03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fanvil.json b/data/brands/fanvil.json deleted file mode 100644 index ba4f11a..0000000 --- a/data/brands/fanvil.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "brand": "Fanvil", - "brand_id": "fanvil", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "i10v", - "i31S", - "i62", - "i63", - "i64" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream.live0" - }, - { - "models": [ - "i10v", - "i62", - "i63" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream.live1" - }, - { - "models": [ - "i16V", - "i30", - "i32V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - }, - { - "models": [ - "i18s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "i30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "i30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?real_stream" - }, - { - "models": [ - "i32V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=2.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/fanyii.json b/data/brands/fanyii.json deleted file mode 100644 index 716a3e0..0000000 --- a/data/brands/fanyii.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fanyii", - "brand_id": "fanyii", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/fayele.json b/data/brands/fayele.json deleted file mode 100644 index c1f4d58..0000000 --- a/data/brands/fayele.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Fayele", - "brand_id": "fayele", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FY-HD54F-5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "ip-5mp-poe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "ip-5mp-poe" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "NDR-305-BGIT8", - "NDR-305D", - "NDR-305D-4X", - "ndr-6402-530x", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/fb-100ap.json b/data/brands/fb-100ap.json deleted file mode 100644 index 846394c..0000000 --- a/data/brands/fb-100ap.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fb-100ap", - "brand_id": "fb-100ap", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fd100a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fc5415e.json b/data/brands/fc5415e.json deleted file mode 100644 index 36d44ac..0000000 --- a/data/brands/fc5415e.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Fc5415e", - "brand_id": "fc5415e", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "winbok", - "winbook" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 52623, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/fcc.json b/data/brands/fcc.json deleted file mode 100644 index 8346c24..0000000 --- a/data/brands/fcc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fcc", - "brand_id": "fcc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fdt.json b/data/brands/fdt.json deleted file mode 100644 index 6a230f6..0000000 --- a/data/brands/fdt.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "brand": "Fdt", - "brand_id": "fdt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "1080P WiFi", - "1080P WIFI", - "1coo5", - "720", - "720HD", - "720P", - "720poutdoor", - "760", - "7901", - "7902", - "7903", - "7920B", - "8901W", - "8902", - "960p", - "C6F0SeZ0N0P0L0", - "CAM-WNVR2P-IN", - "FD7901", - "FD7901B", - "FD7901W", - "FD7901W/B", - "FD7902", - "FD7902W-SD16", - "FD7903", - "FD7903W", - "fd8901", - "FD8901B", - "fd8901w", - "FD8901W", - "FD8902W", - "fd8902w-sd16", - "FD8903W-SD32", - "ic005", - "Other", - "sp007", - "View", - "VIEW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P WIFI", - "720", - "7901", - "7903", - "8902", - "CAM-WNVR2P-IN", - "FD7901", - "FD7901B", - "FD7901W", - "FD7901W/B", - "fd7903", - "FD8901", - "FD8901W", - "FD8902W", - "FDTAA-023310 WBUKP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "720HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - }, - { - "models": [ - "720HD", - "720P", - "720POUTDOOR", - "7901", - "7902", - "8901W", - "8903W", - "8905W", - "C6F0SEZ0N0P0L0", - "CAM-WNVR2P-IN", - "FD7901", - "FD7901B", - "FD7901W/B", - "FD7902", - "FD7902W-SD16", - "FD7903", - "FD7903W", - "FD8901W", - "FD8902", - "Other", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "FD7901", - "FDT 7901" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "FD7901W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0" - }, - { - "models": [ - "fd7903w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "fd8901w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/feasso.json b/data/brands/feasso.json deleted file mode 100644 index a8cacaf..0000000 --- a/data/brands/feasso.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Feasso", - "brand_id": "feasso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F-IPCAM03" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/febfox-wifi-camera.json b/data/brands/febfox-wifi-camera.json deleted file mode 100644 index 028d4f8..0000000 --- a/data/brands/febfox-wifi-camera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Febfox Wifi Camera", - "brand_id": "febfox-wifi-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "UHD camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/feit-electric.json b/data/brands/feit-electric.json deleted file mode 100644 index 439784d..0000000 --- a/data/brands/feit-electric.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Feit Electric", - "brand_id": "feit-electric", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Floodlight" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/feite.json b/data/brands/feite.json deleted file mode 100644 index 438f42a..0000000 --- a/data/brands/feite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Feite", - "brand_id": "feite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8L-TZ832" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fen-joo.json b/data/brands/fen-joo.json deleted file mode 100644 index 7452b1e..0000000 --- a/data/brands/fen-joo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Fen-joo", - "brand_id": "fen-joo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HVB-2M-V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "HVB-2M-V3" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v01" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fenton.json b/data/brands/fenton.json deleted file mode 100644 index 4a06389..0000000 --- a/data/brands/fenton.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "brand": "Fenton", - "brand_id": "fenton", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "351.147", - "IP camera 351.147", - "ONVIF HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "351.147", - "351.150", - "IP CAMERA 351.147", - "ipcam 351.147", - "onvif hd", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "351.183" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ferguson.json b/data/brands/ferguson.json deleted file mode 100644 index ba0ef1c..0000000 --- a/data/brands/ferguson.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Ferguson", - "brand_id": "ferguson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Doorbel" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "Doorbell", - "Smart Eye 300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "EyeSmart", - "Smart Eye 300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/fern360.json b/data/brands/fern360.json deleted file mode 100644 index 21d02ea..0000000 --- a/data/brands/fern360.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fern360", - "brand_id": "fern360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FGSIP-B4TFA-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fhd-2mp.json b/data/brands/fhd-2mp.json deleted file mode 100644 index 0c4d1f3..0000000 --- a/data/brands/fhd-2mp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fhd-2mp", - "brand_id": "fhd-2mp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Senecta" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/fifi-spectrum.json b/data/brands/fifi-spectrum.json deleted file mode 100644 index 8f22299..0000000 --- a/data/brands/fifi-spectrum.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Fifi Spectrum", - "brand_id": "fifi-spectrum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hidden USB Wifi" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Hidden Wifi USB" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Wifi HIdden USB Power Charger" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fine.json b/data/brands/fine.json deleted file mode 100644 index c2f2a62..0000000 --- a/data/brands/fine.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "brand": "Fine", - "brand_id": "fine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3 mega", - "MDH", - "MH802DN", - "MHDB", - "MHDN", - "Other", - "tcp-irh5040c", - "TCP-VM559WI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "ACM-V3002", - "cdv-3vm301", - "fine3000", - "fine3002", - "RH5", - "TCP-HFB1080D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "ACM-V3002", - "ACM-V3002-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ACM-V3002", - "Other", - "rfg", - "tcp-irh5040c" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "cb-100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FINE_X", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "channel2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "screen.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "TCP-VM501" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/s1" - } - ] -} \ No newline at end of file diff --git a/data/brands/finesight.json b/data/brands/finesight.json deleted file mode 100644 index 0065b18..0000000 --- a/data/brands/finesight.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Finesight", - "brand_id": "finesight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "RC8021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "rc8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "rc8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "RC8021" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "RC8021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/finex.json b/data/brands/finex.json deleted file mode 100644 index f7f70cd..0000000 --- a/data/brands/finex.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Finex", - "brand_id": "finex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC-500HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "NC-500HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/fiptec.json b/data/brands/fiptec.json deleted file mode 100644 index 76726f7..0000000 --- a/data/brands/fiptec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fiptec", - "brand_id": "fiptec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LO22-PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/firas.json b/data/brands/firas.json deleted file mode 100644 index 9e9a318..0000000 --- a/data/brands/firas.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Firas", - "brand_id": "firas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/firetruck.json b/data/brands/firetruck.json deleted file mode 100644 index 0e14d44..0000000 --- a/data/brands/firetruck.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Firetruck", - "brand_id": "firetruck", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N99102" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - } - ] -} \ No newline at end of file diff --git a/data/brands/first-alert.json b/data/brands/first-alert.json deleted file mode 100644 index 3589f80..0000000 --- a/data/brands/first-alert.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "First Alert", - "brand_id": "first-alert", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "420", - "DC8810-420", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "apd-1317ufo" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "DC8810-420" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "IMS200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/first-concept.json b/data/brands/first-concept.json deleted file mode 100644 index 38376eb..0000000 --- a/data/brands/first-concept.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "First Concept", - "brand_id": "first-concept", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dassis" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/firstcam.json b/data/brands/firstcam.json deleted file mode 100644 index 9f61c25..0000000 --- a/data/brands/firstcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Firstcam", - "brand_id": "firstcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FCE-IP-20MDW3.60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "FCE-IP-20MEW3.60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/firstrend.json b/data/brands/firstrend.json deleted file mode 100644 index 2b09cad..0000000 --- a/data/brands/firstrend.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Firstrend", - "brand_id": "firstrend", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "ftus-w1080pcam-ja-h6", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fisotech.json b/data/brands/fisotech.json deleted file mode 100644 index 0dff993..0000000 --- a/data/brands/fisotech.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "brand": "Fisotech", - "brand_id": "fisotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "2MP-D", - "3MP", - "3MP-D-VF", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "2MP-D", - "3MP-D-VF", - "smart wifi ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "2MP-D", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "3MP", - "3MP-D-VF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "3MP-D-VF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DM365_IPNC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fitivision.json b/data/brands/fitivision.json deleted file mode 100644 index 6efd44e..0000000 --- a/data/brands/fitivision.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Fitivision", - "brand_id": "fitivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS1300", - "CS1330", - "netcam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "CS1300", - "CS131", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/fkyro.json b/data/brands/fkyro.json deleted file mode 100644 index 032ae6c..0000000 --- a/data/brands/fkyro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fkyro", - "brand_id": "fkyro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "oluhn" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/fla.json b/data/brands/fla.json deleted file mode 100644 index b7fefa1..0000000 --- a/data/brands/fla.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fla", - "brand_id": "fla", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/flashforge.json b/data/brands/flashforge.json deleted file mode 100644 index b5f6c72..0000000 --- a/data/brands/flashforge.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Flashforge", - "brand_id": "flashforge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Advanturer m5 Pro", - "adventurer 3", - "Adventurer3", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/?action=stream" - }, - { - "models": [ - "Creator 3", - "Creator 3 webcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Inventor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/flexidome.json b/data/brands/flexidome.json deleted file mode 100644 index ab66aa1..0000000 --- a/data/brands/flexidome.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Flexidome", - "brand_id": "flexidome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "BULLET" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/flexwatch.json b/data/brands/flexwatch.json deleted file mode 100644 index 5ca9ec0..0000000 --- a/data/brands/flexwatch.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "brand": "Flexwatch", - "brand_id": "flexwatch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1120", - "1150 Cam", - "117x Cam", - "500A", - "DVR", - "FW11xx RTSP", - "FW5470", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fwstream.cgi?ServerId=0&AppKey=0x331287e3&CameraId=[CHANNEL]&PortId=0&PauseTime=1&FwCgiVer=0x0001" - }, - { - "models": [ - "117x Cam", - "DVR", - "FW11xx RTSP", - "FW3170-PS-E", - "FW7500-TXV-R" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam0_[CHANNEL]" - }, - { - "models": [ - "117X CAM", - "500A", - "DVR", - "Kalving 1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fwstream.cgi?ServerId=0&AppKey=0x00006784&PortId=0&CameraId=[CHANNEL]&PauseTime=0&FwCgiVer=0x0001" - }, - { - "models": [ - "FW3170-PS-E", - "FW7500-TXV-R", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "cam0_1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fwstream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/flir.json b/data/brands/flir.json deleted file mode 100644 index 0f55485..0000000 --- a/data/brands/flir.json +++ /dev/null @@ -1,503 +0,0 @@ -{ - "brand": "Flir", - "brand_id": "flir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "14TF3", - "6206", - "A310f", - "AX8", - "cm-6206", - "d33", - "DNB13TF2", - "ee3", - "KENYON", - "Lorex", - "N133ED", - "NVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "6202", - "CB-6408-21-1", - "CC-3103-01", - "cc-3308", - "CM-3102-11", - "CM-3202-11-I", - "FB 695", - "FH-669", - "FXV101-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "6202", - "CM-3102-11" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "6206", - "A310f", - "D Series", - "DNB13TF2", - "F-313", - "FC-317-ID", - "FC-363-PAL", - "FC-645 S", - "Other", - "PT606" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0" - }, - { - "models": [ - "6206", - "Lorex", - "P143E4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=QWRtaW46MTIzNA==" - }, - { - "models": [ - "6206" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46OFM9KmdjI2c=" - }, - { - "models": [ - "a310f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "a310f", - "LNB4421B", - "LNE8950AB", - "LOREX", - "N258F5", - "NVR", - "Other", - "PE133E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "A400", - "A50", - "A70", - "A700", - "AX8", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/avc" - }, - { - "models": [ - "AX8", - "E75", - "LOREX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "D", - "F", - "FC-324-RN-NTSC", - "PT Series" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0" - }, - { - "models": [ - "DNB13TF2", - "DNE12TL2", - "LNB4421B", - "M3116EX-D", - "n133", - "N133BB", - "N233EE", - "N233zc", - "N336ZD1", - "NVR", - "Other", - "PE133", - "PE133E", - "PE133F", - "Players Ramp" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DNB13TF2", - "LOREX", - "N133BD", - "N233BE", - "N233EE", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "DNB13TF2", - "LNB4321B", - "LOREX", - "m-3245", - "N133", - "N133BB", - "N133BD", - "n133eb", - "N133ED", - "N233EE", - "N233VE", - "N243EW2", - "N243vw4", - "N253V8", - "N336ZD1", - "N347VW4", - "nvr", - "Other", - "pe133f" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "DNE12TL2", - "LOREX", - "N233VE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch07/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch09/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch02/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch012/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch10/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch05" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch05/0" - }, - { - "models": [ - "Lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch03/0" - }, - { - "models": [ - "LOREX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "LOREX", - "N233BE", - "Other", - "PT SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "M3108EX", - "N233zc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=0" - }, - { - "models": [ - "M364C LR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/ir.1" - }, - { - "models": [ - "M364C LR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/ir.0" - }, - { - "models": [ - "N133BB", - "N133ED", - "N253V8" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "N133BD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "N133BD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "N133ED" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=0&resolution=320x240" - }, - { - "models": [ - "N133ED" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1&resolution=320x240" - }, - { - "models": [ - "N233BE", - "N233EE", - "PE133", - "PE133E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "N233EE", - "PE133F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "N233EE", - "ThermiCam 2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "N233zc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "PB133F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true" - }, - { - "models": [ - "PE133F" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=&loginpas=" - }, - { - "models": [ - "PTZ-35x140" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "vis" - }, - { - "models": [ - "PTZ-35x140" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "wfov" - }, - { - "models": [ - "Q-See" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch04/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/floureon.json b/data/brands/floureon.json deleted file mode 100644 index 93b5adb..0000000 --- a/data/brands/floureon.json +++ /dev/null @@ -1,658 +0,0 @@ -{ - "brand": "Floureon", - "brand_id": "floureon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=0", - "auth_required": true, - "notes": "Bubble Protocol - main stream (works with go2rtc bubble:// source)" - }, - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=1", - "auth_required": true, - "notes": "Bubble Protocol - sub stream (lower quality)" - }, - { - "models": [ - "1080", - "DM523H", - "DM523HK", - "H.264", - "IPD-L26Y02-BS", - "PTZ HD IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "1080", - "1080P", - "720P", - "A6808NHS-EU", - "dvr", - "H.264", - "H.264 -JSN", - "H.264 WIRELESS P2P NVR", - "H264", - "IPD-E24Y02-BS", - "n816", - "N817", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080", - "1080P", - "1080P Patio", - "7 1080P 30X ZOOM", - "720P", - "908HF", - "b27w", - "BT-H51F/IPD-L26Y02", - "BT-HD54F", - "BT-HD817", - "Camhi", - "DID-908HF", - "DID-N49-200", - "DM326HS", - "DM326HT", - "dm523h", - "DM523HK", - "DM523HS", - "DMM523HS", - "H.264", - "H264", - "HD54F", - "HD-IPC 18x", - "HT54", - "III-724294-ECEBB", - "IPCAM HIP2P", - "IPD-C30Y02-BS", - "IPD-C34Y02-BS", - "IPD-E24Y02-BS", - "IPD-L24Y02-BS", - "IPD-L26Y02-BS", - "LN5810HH", - "M32B", - "Other", - "ptz", - "PTZ Dome", - "PTZ HD IP CAMERA", - "PTZ IP camera", - "sd 26w", - "SD17W", - "SD26W", - "SD27W", - "SD37W", - "ZD-CH130B-F9", - "zd-chi130b-f9" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "1080", - "1080N", - "1080p", - "1080PPVTW", - "CAMHI", - "dvr", - "H.264", - "H264", - "N816", - "Other", - "Q3 UK", - "QF510-UK", - "SD1", - "SD17W" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080", - "1080P", - "507w10", - "H.264", - "h.264 wireless p2p nvr", - "H264", - "K9604-W", - "NVR", - "nvr-6124nm", - "Other", - "SD26W", - "XF-16045-W-K", - "XF-A2528S-LW" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1080", - "1080p", - "6afd097cdc912bb3", - "b27w", - "H.264", - "HD 720P", - "IPCAM HiP2P", - "IPD-L26Y02-BS", - "M32B", - "MB32b", - "MH32b", - "N5810HH-E", - "Other", - "PTZ", - "Q3-UK", - "QF510-UK", - "sd13w", - "SD17", - "SD17W", - "SD26W", - "SD37W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080", - "Camera 1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "1080n", - "1080P", - "7 1080P 30X ZOOM", - "DID-N49-200", - "H.264", - "H264", - "IPCAM HIP2P", - "lN5810HH-E", - "N816", - "NVR", - "Other", - "SD17W", - "TTTT-309727-SVDWR" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1080n", - "blk", - "ka6004ns4n-a-516a-us", - "Other", - "SP012", - "TTTT-309727-SVDWR", - "wxhi100w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "1080N", - "1080PPVTW", - "N816", - "Other", - "QF510-AU", - "QF510-UK", - "TTTT-309727-SVDWR" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "1080P", - "E6812", - "nvr" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1080P", - "FD270w", - "H.264", - "H.264 WIRELESS P2P NVR", - "HIP2P", - "IPC SP018", - "IPCAM HIP2P", - "MCAM1SD37W", - "N5810HH-E", - "Other", - "PT 720", - "PTZ HD IP CAMERA", - "Q3 UK", - "Q3-AU", - "Q3-EU", - "q3-uk", - "SD17W", - "SD26W", - "sd27w", - "SD37W", - "SP017", - "sricam" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "H264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "mjpeg" - }, - { - "models": [ - "1080P", - "H.264", - "ipc", - "IPC Cam", - "Other", - "SD27W", - "XF-A2528S-ZW", - "XF-A8285" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080pPVTW", - "H.264", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp" - }, - { - "models": [ - "1600TVL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=5&stream=0.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "1600TVL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=4&stream=0.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "6666" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "6afd097cdc912bb3", - "Other", - "SD17W", - "SD26W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "6afd097cdc912bb3", - "7 1080P 30X ZOOM", - "A6808NHS-EU", - "DM523HS", - "FIW1500", - "IPD-E24Y02-BS", - "IPD-L26Y02-BS", - "Other", - "SD17W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "A6808NHS-EU" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dm326hs", - "DM326HS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "DM523HK", - "IPC365", - "PD203B-Y1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "DM523HS", - "P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "dvr", - "n817" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "dvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "dvr", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=4_stream=0.sdp" - }, - { - "models": [ - "H.264", - "kv:d4c2" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "H.264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "H.264", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "H.264", - "PT 720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "H.264", - "HiP2P", - "IPCAM HIP2P", - "Other", - "PTZ HD IP CAMERA", - "Q3-AU", - "SD26W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/12" - }, - { - "models": [ - "H.264", - "IPC_700323" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif2" - }, - { - "models": [ - "H.264", - "Other", - "PTZ HD IP CAMERA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4unicast" - }, - { - "models": [ - "ha-ja-wf960p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IPD-C30Y02-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "IPD-E24Y02-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "k2308ax-h-y03-4c" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "K8204-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "N5810HH-E" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "XF-16045-W-K", - "Xf-1604n-lw" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=4&u=[USERNAME]&p=" - }, - { - "models": [ - "XF1604H-W", - "xf1604n-lw" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=4&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "xf1604n-lw" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Xf-1604n-lw" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=" - }, - { - "models": [ - "XF-A2528F-ZW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4unicast" - } - ] -} \ No newline at end of file diff --git a/data/brands/fluesonic.json b/data/brands/fluesonic.json deleted file mode 100644 index 9da1118..0000000 --- a/data/brands/fluesonic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fluesonic", - "brand_id": "fluesonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/flying.json b/data/brands/flying.json deleted file mode 100644 index eb91a6b..0000000 --- a/data/brands/flying.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Flying", - "brand_id": "flying", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3Mp", - "3mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/main" - }, - { - "models": [ - "1.3MP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "3MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/fnkvision.json b/data/brands/fnkvision.json deleted file mode 100644 index 0eb51bc..0000000 --- a/data/brands/fnkvision.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Fnkvision", - "brand_id": "fnkvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "X4822032" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/focuscam.json b/data/brands/focuscam.json deleted file mode 100644 index a9cf68c..0000000 --- a/data/brands/focuscam.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "brand": "Focuscam", - "brand_id": "focuscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F18910W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "F18910W", - "HD IP CAM", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "FI9821P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "fr4020", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "HD IP cam", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "HD IP CAM", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/focuseye.json b/data/brands/focuseye.json deleted file mode 100644 index 79be9cf..0000000 --- a/data/brands/focuseye.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Focuseye", - "brand_id": "focuseye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/folsom.json b/data/brands/folsom.json deleted file mode 100644 index 563ccec..0000000 --- a/data/brands/folsom.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Folsom", - "brand_id": "folsom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FL4020A2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/fomei.json b/data/brands/fomei.json deleted file mode 100644 index f6fcf99..0000000 --- a/data/brands/fomei.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fomei", - "brand_id": "fomei", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h.264" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/foodtec.json b/data/brands/foodtec.json deleted file mode 100644 index 72e0522..0000000 --- a/data/brands/foodtec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Foodtec", - "brand_id": "foodtec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Solutions" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "reports/CamImage?height=480&width=640&cam=[CHANNEL]&live=&annotate=" - } - ] -} \ No newline at end of file diff --git a/data/brands/fortec.json b/data/brands/fortec.json deleted file mode 100644 index ded2880..0000000 --- a/data/brands/fortec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fortec", - "brand_id": "fortec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IDG-2020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/forti.json b/data/brands/forti.json deleted file mode 100644 index 202d838..0000000 --- a/data/brands/forti.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Forti", - "brand_id": "forti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "md20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/forticam.json b/data/brands/forticam.json deleted file mode 100644 index d4703f8..0000000 --- a/data/brands/forticam.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Forticam", - "brand_id": "forticam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel3" - }, - { - "models": [ - "20A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "20A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "20A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPC-20C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/fortinet.json b/data/brands/fortinet.json deleted file mode 100644 index 4fc048f..0000000 --- a/data/brands/fortinet.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Fortinet", - "brand_id": "fortinet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FD40" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "/" - }, - { - "models": [ - "FD40", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "FortiCam-MD20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fortis.json b/data/brands/fortis.json deleted file mode 100644 index 47da121..0000000 --- a/data/brands/fortis.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fortis", - "brand_id": "fortis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S-CAM 5.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/main/av_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/fortrek.json b/data/brands/fortrek.json deleted file mode 100644 index 80fd33a..0000000 --- a/data/brands/fortrek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fortrek", - "brand_id": "fortrek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "401ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/foscam.json b/data/brands/foscam.json deleted file mode 100644 index 10cdd84..0000000 --- a/data/brands/foscam.json +++ /dev/null @@ -1,2716 +0,0 @@ -{ - "brand": "Foscam", - "brand_id": "foscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1700", - "C1 V2", - "C1 V3", - "C2M", - "DEFAULT", - "Doorbell", - "FI8903P", - "FI8904W", - "FI8905W HD", - "FI9800 P", - "FI9803 V2", - "FI9803EP", - "FI9803P V2", - "FI9803P v2 RTSP", - "FI9803P V3", - "Fi9804W", - "FI9805", - "FI9805E", - "FI9805W", - "fi9820w", - "FI9821", - "FI9821EP", - "FI9821P", - "fi9821p v2", - "FI9821v2", - "FI9821w", - "FI9821W", - "FI9821W v2", - "FI9821W V2", - "FI9821W+V2", - "FI9826 v2", - "FI9826W", - "FI9828P V2", - "FI9828W", - "FI9831w", - "FI9851P", - "FI9853EP", - "fi9900", - "FI9900P 2", - "FI9900P V4", - "FI9900PV5", - "FI9903P", - "FI9912EP", - "FI9912P-W", - "FI9928P", - "FI9938B", - "Other", - "QJ4", - "R2C", - "R2E", - "R4M", - "RC2", - "S41", - "SD4H", - "SDX2", - "VZ4", - "X1(working)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoSub" - }, - { - "models": [ - "Aisle", - "AisleUNLISTED", - "C1 ISODOS", - "C1 ISODOS W", - "c1 isodos_P", - "C1 LIGHT", - "C1 LIte", - "C1 V3", - "C1-Lite", - "C1-LITE2", - "C1X", - "C2 V3", - "C5M", - "FI18904w", - "FI18905W", - "FI18910E", - "FI18916W", - "FI18918W", - "FI18921W", - "FI1931W", - "FI19803", - "FI19803P", - "FI19816P", - "FI19821P V3", - "FI19821W", - "FI1982w", - "FI19851P", - "FI19853ep", - "FI19900EP", - "FI19900P", - "FI2826P V2", - "FI720", - "FI8093", - "FI8602", - "FI8605W", - "FI8900E", - "FI8902W", - "FI8903EP", - "FI8903P", - "FI8903W", - "FI8904", - "FI8904W", - "FI8905", - "FI8905P", - "FI8905W", - "FI8905W hd", - "FI8909W", - "FI8910", - "FI8910W", - "FI8915p", - "FI8918W", - "FI8919W", - "FI8920W", - "FI8921", - "FI8921p", - "FI8921P", - "FI8921P V2", - "FI8921W", - "FI8921w v2", - "FI8921W v2", - "FI8921W V2", - "FI8928W", - "FI8931W", - "FI8953EP", - "FI903P", - "FI90803EP", - "FI908W", - "FI9100P", - "FI9800", - "FI9800 Pv3", - "FI98000P", - "FI98009", - "FI9800P", - "FI9801", - "FI9801W", - "FI9802W", - "FI9803", - "FI9803 EP", - "FI9803 V2", - "FI9803p", - "FI9803P", - "FI9803P v2", - "FI9803P V2", - "FI9803P V3", - "FI9803P_", - "FI9803PV4", - "FI9803W", - "FI9804", - "FI9804p", - "FI9804P", - "FI9804W", - "FI9805", - "FI9805E", - "FI9805EP", - "FI9805P", - "fI9805s", - "FI9805W", - "FI980P", - "FI980p v4", - "FI980W5", - "FI9815P", - "FI9816", - "FI9816P", - "FI9816P V2", - "FI9818W", - "FI9820P", - "FI9820w", - "FI9821", - "FI9821 v2", - "FI9821 V2", - "FI9821EP", - "FI9821p", - "FI9821P", - "FI9821p v2", - "FI9821P V2", - "FI9821P V3", - "FI9821V2", - "FI9821w", - "FI9821W", - "FI9821W v2", - "FI9821W V2.1", - "FI9821W2", - "FI9821WV2", - "FI9821W-V2", - "FI9826", - "FI9826 V2", - "FI9826/8", - "FI98269", - "FI9826p", - "FI9826P", - "FI9826P V2", - "FI9826W", - "FI9828", - "FI9828P", - "FI9828p V2", - "FI9828pv2", - "FI9828PV2", - "FI9828W", - "FI982p", - "FI9830P", - "FI9831", - "FI9831EP", - "fI9831p", - "FI9831P", - "FI9831PV2", - "FI9831W", - "FI9851P", - "fi9853", - "FI9853EP", - "FI9900", - "FI99000P", - "FI99000P V4", - "FI99002P", - "FI9900EP", - "FI9900P", - "FI9900P 2", - "FI9900PV5", - "FI9903", - "FI9903P", - "FI990P", - "FI9910EP", - "FI9912EP", - "FI9928P", - "fi9928T", - "FI9936P", - "FI9938B", - "FI9961 EP", - "FI9961EP V3", - "Other", - "Other2", - "R2 1080P", - "R2 V4", - "R2/R4", - "R2C", - "R2M", - "R2-V3", - "R2V4", - "R2V5", - "R4 V2", - "RC2", - "RD v2", - "Sala", - "stair", - "V5M" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "C1 ISODOS", - "C1 V2", - "C1 V3", - "C2 V3", - "C2M", - "FI18904w", - "FI18905E", - "FI18905W", - "FI18908W", - "FI18910w", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI18921W", - "FI19816P", - "FI19821W", - "FI19826P I made this", - "FI19828", - "FI19828P", - "FI1982w", - "FI19851P", - "FI19900EP", - "FI19900P", - "FI19903P", - "FI2981W V2", - "FI8903W", - "FI8904W", - "FI8905E", - "FI8905P", - "FI8905W", - "FI8908", - "FI8909W", - "FI8910E", - "FI8910W", - "FI8918W", - "FI8919W", - "FI8921P", - "FI8921P V2", - "FI8921W", - "FI8921w v2", - "FI8921w V2", - "FI8921W v2", - "FI8921W V2", - "FI8928W", - "fi8931w", - "FI8931W", - "FI900EP", - "FI9100P", - "fi9555ep", - "FI966IEP", - "Fi98004P", - "FI9800P", - "FI9801W", - "FI9802W", - "FI9803", - "FI9803EP", - "FI9803P", - "FI9803W", - "FI9804", - "FI9804p", - "FI9804P", - "FI9804W", - "FI9804Wx", - "FI9805", - "FI9805E", - "FI9805p", - "FI9805P", - "FI9805w", - "FI9805W", - "FI9818W", - "FI9818W V2", - "FI9820", - "FI9820w", - "fI9821", - "FI9821", - "FI9821 W", - "FI9821P", - "FI9821P V2", - "fi9821p(v2)", - "FI9821w", - "FI9821W", - "FI9821W v2", - "FI9821W V2", - "FI9821W2", - "FI9821W-k", - "FI9821Wsage", - "FI9826 v2", - "FI9826 V2", - "FI9826J", - "FI9826P", - "FI9826P V2", - "FI9826W", - "Fi9826W-V2", - "FI9828P", - "FI9828W", - "FI982P", - "FI9831", - "FI9831P", - "FI9831P v2", - "FI9831P V2", - "FI9831w", - "FI9831W", - "FI9832P", - "FI9851P", - "FI9853EP", - "FI9900", - "FI9900EP", - "FI9900p", - "FI9900P", - "FI9900P 2", - "FI9900P V3", - "fi9900p v4", - "FI9900P-1", - "FI9900PR", - "FI9901EP", - "fi9902p", - "FI9903EP", - "FI9903P", - "FI9904W", - "FI990oEP", - "FI990P", - "FI990X", - "FI9910P", - "FI9912P", - "FI9928P", - "FI9929p", - "FI9961EP", - "FI996EP", - "FI9990", - "Other", - "QJ2", - "QJ4", - "R2 1080P", - "R2 V3", - "R2 v4", - "R2 v5", - "R2/R4", - "R2B", - "R2C", - "r2e", - "R2FOSCAM R2", - "R2v3", - "R2V5", - "r4m", - "R4S", - "R4W", - "RC30", - "SD2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "C1 ISODOS", - "FI18904", - "FI18904w", - "FI18904W", - "FI18905e", - "FI18905E", - "FI18905W", - "FI18906W", - "FI18908W", - "FI1890W", - "FI18910E", - "FI18910w", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "fi1891w", - "FI18921W", - "FI19810W", - "FI19821W", - "FI8010", - "FI8180w", - "FI8198W", - "FI8601W", - "FI8602", - "FI8605W", - "FI8606W", - "FI8608W", - "FI8609W", - "FI8610w", - "FI8610W", - "FI8901", - "FI8903W", - "FI8904", - "fi8904w", - "FI8904W", - "FI8905", - "FI8905E", - "FI8905w", - "FI8905W", - "FI8906w", - "FI8906W", - "FI8907W", - "FI8908", - "FI8908W", - "FI8909W", - "FI8909W-NA", - "FI890W", - "FI891", - "FI8910", - "FI8910E", - "FI8910P", - "FI8910W", - "FI8910W-X", - "FI8916W", - "FI8918", - "FI89180W", - "FI8918E", - "FI8918W", - "FI8919", - "FI8919E", - "FI8919W", - "FI8920W", - "FI8921P", - "FI8921W", - "FI8921W V2", - "FI8931W", - "FI904W", - "FI908W", - "FI9210W", - "FI9804p", - "FI9804W", - "FI9805", - "FI9805E", - "FI9805W", - "FI9810w", - "FI9810W", - "FI9816P", - "FI9818W", - "FI9820", - "FI9821 W", - "FI9821P V2", - "FI9821W", - "FI9821W v2", - "FI9821W V2", - "FI9831", - "FI9831P", - "FI9831w", - "FI9853EP", - "Other", - "vnt", - "VNT665 6G6A40", - "vnt6656g6a40", - "VNT6656G6A40JPT3815W", - "vtn6656g6a40", - "W31" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "C1 ISODOS", - "c1 isodos w", - "C1 Light", - "C1 LITE", - "C1 V3", - "C1-Lite", - "C1-Lite2", - "C1-V2", - "C2M", - "C5M", - "DOME", - "FI18904w", - "FI18905E", - "FI18918W", - "FI18921W", - "FI1903P", - "FI19803", - "FI19803P", - "fi1982", - "FI19821P V2", - "FI19821W", - "FI19828P", - "FI19851P", - "FI19900EP", - "FI19900P", - "FI1990P", - "FI8900E", - "FI8902W", - "FI8903EP", - "FI8903EPp", - "FI8903P", - "FI8903W", - "FI8904W", - "FI8905", - "FI8905E", - "FI8905W", - "FI8905W hd", - "FI8906P", - "FI8910W", - "FI8910W TQ", - "FI8916P", - "FI8916W", - "FI8918W", - "FI8919W", - "FI8921 V2", - "FI8921P", - "FI8921P V2", - "FI8921W", - "FI8921W V2", - "FI8931W", - "FI8935EP", - "FI8953EP", - "FI903P", - "FI98005p", - "FI9800P", - "FI9801W", - "FI9802W", - "FI9803 V2", - "FI98038", - "FI9803EP", - "FI9803P", - "FI9803P V2", - "FI9803P V3", - "FI9803P_", - "FI9804", - "FI9804p", - "FI9804P", - "FI9804W", - "FI9805E", - "FI9805EP", - "FI9805P", - "fI9805w", - "FI9805W", - "FI9815p", - "FI9816P", - "FI9818W", - "FI9820w", - "fI9821", - "FI9821", - "FI9821 W", - "FI9821EP", - "FI9821P", - "FI9821P V2", - "FI9821P v3", - "FI9821P V3", - "FI9821PV2", - "FI9821V2", - "FI9821W", - "FI9821W v2", - "FI9821W V2", - "FI9821W V2.1", - "FI9821W+V2", - "FI9821W2", - "fI9821w2.1", - "FI9826", - "FI9826/8", - "FI9826P", - "FI9826P v2", - "FI9826P V2", - "FI9826W", - "FI9828P", - "FI9828PV2", - "FI9828W", - "FI9831", - "FI9831EP", - "fI9831p", - "FI9831P", - "FI9831P v2", - "FI9831PV2", - "FI9831w", - "FI9831W", - "FI9851P", - "FI9853EP", - "FI9853P", - "FI990", - "FI9900E", - "FI9900EP", - "FI9900P", - "FI9900P1", - "FI9900PV5", - "FI9901EP", - "FI9902P", - "FI9903P", - "FI9904W", - "FI990x", - "FI9961EP", - "Other", - "R2 1080P", - "R2/R4", - "R2B", - "R2C", - "RE2", - "Student Services 4 security camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C1 ISODOS W", - "C1 V2", - "C1 V3", - "C1-Lite", - "C1-LITE2", - "C1-RTSP", - "C1X", - "C1Xc", - "C2 V3", - "C2M", - "Dome", - "Doorbell", - "F19961EPV3", - "F40 Floodlight", - "FI18904", - "FI18904W", - "FI18905W", - "FI1890W", - "FI19803", - "FI19803P", - "FI19816P", - "FI19821P V2", - "FI19821W", - "FI19828", - "FI19851P", - "FI19900EP", - "FI19900P", - "fi19903", - "FI19903P", - "FI1990P", - "FI8605W", - "FI8900P", - "FI8902W", - "FI8903P", - "FI8903W", - "FI8905", - "fI8905w", - "FI8905w", - "FI8905W", - "FI8905W HD", - "FI8910", - "FI8910E", - "FI8910W", - "fi8913", - "FI8916P", - "FI8916W", - "FI8918W", - "FI8920W", - "FI8921 V2", - "FI8921EP", - "FI8921P", - "FI8921P V2", - "FI8921W", - "FI8921w v2", - "FI8921W V2", - "FI8926P", - "FI8931w", - "FI8953", - "FI8953EP", - "FI9088P", - "FI9100P", - "FI9128P", - "FI9628", - "FI9800", - "FI9800 Pv3", - "FI98000p", - "Fi98004w", - "FI9800E", - "FI9800EX", - "FI9800P", - "FI9800P V3", - "FI9800PR", - "FI9803", - "FI9803 V2", - "FI9803EP", - "FI9803P", - "FI9803P V2", - "FI9803P V3", - "FI9803pv2", - "FI9803PV3", - "FI9803PV4", - "FI9804", - "FI9804p", - "FI9804P", - "Fi9804W", - "FI9804W", - "FI9805", - "FI9805E", - "FI9805p", - "FI9805PE", - "FI9805w", - "FI9805W", - "FI9810", - "FI9815", - "FI9816P", - "FI9816P V2", - "FI9816P v3", - "FI981W V2", - "FI9820W", - "FI9821 v2", - "FI9821 W", - "FI9821E", - "FI9821EP", - "FI9821P", - "FI9821p v2", - "FI9821P v2", - "FI9821P V2", - "FI9821P V3", - "FI9821PV2", - "FI9821w", - "FI9821W", - "FI9821W V2", - "FI9821Wv2", - "FI9821W-V2", - "FI9826", - "FI98268", - "FI9826P", - "fI9826p v2", - "FI9826p v2", - "FI9826P V2", - "FI9826PB", - "FI9826w", - "FI9826W", - "FI9828", - "FI9828P", - "FI9828P v2", - "FI9828P V2", - "FI9828P V2", - "FI9828W", - "FI982W", - "fI9831p", - "FI9831P", - "FI9831P v2", - "FI9831P V2", - "FI9831v2", - "FI9831W", - "FI9832P", - "FI9851P", - "FI9853", - "FI9853EP", - "FI9853P", - "FI9900", - "FI99000P", - "FI9900EP", - "FI9900EP V1", - "FI9900P", - "FI9900P 2", - "fi9900p v3", - "FI9900P V3", - "FI9900P1", - "FI9900P-1", - "FI9900PV5", - "FI9902p", - "FI9903P", - "FI9909", - "FI990P", - "FI990X", - "FI9912EP", - "FI9912P", - "FI9912P-W", - "FI9921P", - "FI99289W", - "FI9928P", - "FI9936P", - "FI9938B", - "FI9961 EP", - "FI9961EP", - "FI99909", - "FI9999", - "FiP908p", - "fl9928Pv2", - "FS4", - "G4C", - "MDS2060", - "MDS8010", - "MGS2012", - "MPS4012", - "MPS5040", - "Other", - "PI9900", - "PI9900P", - "QJ4", - "R2 V4", - "R29", - "R2C", - "R2D2", - "R2Foscam R2", - "R2M", - "R2V1", - "r2-v3", - "R4C", - "R4M", - "R4S", - "sd2", - "SD4", - "SD4 V3", - "SD4H", - "SDX2", - "VD1", - "vsCAM06-Parkplatz", - "VZ4", - "X3E", - "ZY_H264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/videoMain" - }, - { - "models": [ - "C1 ISODOS_P", - "FI1845", - "FI18904w", - "FI18905E", - "FI18905W", - "FI18909W", - "FI18910E", - "FI18910w", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI18921W", - "FI1982", - "FI8010", - "FI8094W", - "FI8198W", - "FI8601W", - "FI8602", - "FI8602W", - "FI8605W", - "FI8607W", - "FI8608", - "FI8608W", - "FI8609W", - "FI8610w", - "FI8610W", - "FI8620", - "FI8903w", - "FI8903W", - "FI8904", - "FI8904W", - "FI8905E", - "fI8905w", - "FI8905W", - "FI8906", - "FI8906W", - "FI8907W", - "FI8908", - "FI8908W", - "FI8909W", - "FI8909W-NA", - "FI8910", - "FI8910E", - "FI8910W", - "FI8916w", - "FI8916W", - "FI8916WB", - "FI8918", - "FI89180w", - "FI8918E", - "FI8918W", - "fi8919", - "FI8919E", - "FI8919W", - "FI8920W", - "FI8921W", - "fi89904w", - "FI9205W", - "FI9801W", - "FI9802W", - "FI9804W", - "FI9805E", - "FI9805W", - "FI9810", - "FI9810W", - "FI9818W", - "FI9819w", - "FI9820", - "FI9820w", - "FI9820W", - "FI9821W", - "FI9821W v2", - "FI9826P", - "FI9826w", - "FI982w", - "FI9851P", - "Other", - "Videostream", - "VNT665 6G6A40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C1 Lite", - "C2M", - "FI19912P", - "FI9802w", - "fI9805w", - "FI9810w", - "FI9818W", - "FI9821W V2", - "FI9828p V2", - "FI99000P", - "FI9905B", - "MGS5030", - "QJ4" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C1 V2", - "C1/R2", - "C2M", - "F19821EP", - "FI19831W", - "FI8905", - "FI9800P", - "FI9802W", - "FI9803EP", - "FI9803P", - "FI9803P v2", - "FI9803PV2", - "FI9805", - "fI9805w", - "FI9805w", - "FI9816P", - "FI9816V3", - "fi9820w", - "FI9821 v2", - "FI9821 W", - "FI9821w", - "FI9821W", - "FI9821W v2", - "FI9821W V2.1", - "FI9828P", - "FI9828p V2", - "FI9828W", - "FI9831PV2", - "FI9831w", - "FI9851P", - "FI9853EP", - "fi9900", - "FI99000P", - "FI9900EP V3", - "FI9901EP", - "FI9926P", - "FI9928P", - "FI9961EP", - "FI99912EP", - "MGS5020", - "Other", - "r4m", - "R4S", - "S41", - "SD2", - "SD2X", - "T5EP", - "VD1", - "WWM HQ" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "C1-lite", - "FI9803P V3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "D2P/D2EP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=moipass&balls=balls5" - }, - { - "models": [ - "DEFAULT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DEFAULT", - "FI8608W", - "FI8918W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8554, - "url": "H264" - }, - { - "models": [ - "Dome", - "FI18908W", - "FI18918W", - "FI8904W", - "FI8905E", - "FI8905W", - "FI8908W", - "FI8909W", - "FI8910W", - "FI8918", - "FI8918W", - "FI8919W", - "FI9816P", - "Other", - "vtn6656g6a40" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "DOME", - "FI18904w", - "FI18907W", - "FI18910w", - "FI18910W", - "FI18918W", - "FI8904", - "FI8904W", - "FI8905E", - "FI8905W", - "FI8906", - "FI8907W", - "FI8908", - "FI8908W", - "FI8909w", - "FI8909W", - "FI8909W-NA", - "FI8910E", - "FI8910W", - "FI8918W", - "FI8919W", - "FI98000P", - "FI9802W", - "FI9810W", - "FI9818", - "FI9821W", - "FI9831w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "DOME", - "FI08910W", - "FI18904", - "FI18918W", - "FI8602W", - "FI8904W", - "FI8905W", - "fi8906", - "FI8906W", - "FI8908W", - "FI8918W", - "fi8919w", - "FI8919w", - "FI8919W", - "FI89XX", - "FI9816P", - "FI9818W", - "FI9820", - "FI9831P", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 88, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "DOME", - "FI18905W", - "FI720", - "FI8601", - "FI8601W", - "FI8602", - "FI8602W", - "FI8608", - "FI8608W", - "FI8610W", - "FI8620", - "FI8906w", - "FI8906W", - "FI8910W", - "FI9800", - "FI9802", - "FI9810W", - "FI9816P", - "FI9820", - "FI9820W", - "FI98269", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "F186xx", - "FI8602W", - "FI8918W", - "FI9820", - "FI9820W", - "Other", - "something", - "testing" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "F18910W", - "FI8905w?", - "fi8910w", - "FI8915", - "fI8918w", - "fi8919w", - "FI89XX", - "FI9810w", - "fI9831p", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 19930, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "F18918W", - "FI18905W", - "FI8909W-NA", - "FI8910W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "f19820 h264", - "FI9999" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "FI18904", - "FI18905W", - "FI18910E", - "FI18910w", - "FI18910W", - "FI18918W", - "FI18921W", - "FI805w", - "FI8605W", - "FI8608", - "FI8904W", - "FI8905W", - "FI8905W_VT", - "FI8906W", - "FI8907W", - "FI8908", - "FI8908W", - "FI8910", - "FI8910W", - "FI8918W", - "FI9805W", - "FI9818W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "FI18904", - "FI18905W", - "FI18918W", - "FI8601W", - "FI8605W", - "FI8904W", - "FI8905", - "FI8905E", - "FI8905W", - "FI8905W hd", - "FI8908W", - "FI8910W", - "FI8918W", - "FI9802W", - "FI9804W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "FI18904", - "FI18904w", - "FI18905E", - "FI18905W", - "FI18905WFI", - "FI18906W", - "FI18907W", - "FI18908W", - "FI18909W", - "FI18910E", - "FI18910w", - "FI18916W", - "FI18918W", - "FI18919W", - "FI18921W", - "FI7892", - "FI8094W", - "Fi8191", - "FI8198W", - "FI8505E", - "FI8602W", - "FI8605W", - "FI8608W", - "fI88918w", - "FI8901", - "FI8903W", - "FI8904", - "FI8904W", - "FI8905", - "FI8905E", - "FI8905w", - "FI8905W", - "FI8905W HD", - "FI8906", - "FI8906w", - "FI8906W", - "FI8907W", - "FI8908", - "fI8908w", - "FI8908W", - "FI8909", - "FI8909W", - "FI8909W-NA", - "FI8910", - "FI89105w", - "fI8910e", - "FI8910E", - "FI8910I", - "fi8910w", - "FI8910W", - "FI8910W-H", - "FI8916W", - "FI8918", - "FI89180W", - "FI8918E", - "fi8918w", - "FI8918W", - "FI8919", - "FI8919E", - "FI8919W", - "FI8920W", - "FI8921 V2", - "FI8921P", - "FI8921W V2", - "FI8928W", - "FI9802W", - "FI9803 V2", - "FI9804P", - "FI9804W", - "FI9805EP", - "FI9805W", - "FI9808W", - "FI9810w", - "FI9810W", - "FI9818W", - "FI9819", - "FI9820W", - "FI9821", - "FI9821 W", - "FI9821P V2", - "fi9821w", - "FI9821W", - "FI9821W v2", - "FI9821W-V2", - "FI9828P", - "FI9831P", - "FI9831P V2", - "FI9853EP", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "FI18904", - "FI18905W", - "FI18906W", - "FI18908W", - "FI18909W", - "FI18910w", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI19810W", - "FI1982w", - "FI8902W", - "FI8903W", - "FI8904", - "FI8904W", - "FI8905", - "FI8905W", - "FI8906W", - "FI8907W", - "FI8908W", - "FI8910W", - "FI8918", - "FI8918E", - "FI8918W", - "FI8919W", - "FI8953EP", - "FI9800P", - "FI9802W", - "FI9806W", - "FI9810w", - "FI9810W", - "FI9820", - "FI9900P V4", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18904w", - "FI18909W", - "FI18918W", - "FI18919W", - "FI8608W", - "FI8904", - "FI8904W", - "FI8905W", - "FI8906W", - "FI8907W", - "FI8910W", - "FI8916W", - "FI8918", - "fI8918w", - "FI8918W", - "FI8921W V2", - "FI9804W", - "FI9810W", - "FI9821W", - "FI9830P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "FI18904w", - "FI18905W", - "FI18910W", - "FI18918W", - "FI8608W", - "FI8904W", - "FI8905E", - "FI8905W", - "FI8906", - "FI8906w", - "FI8906W", - "FI8910W", - "FI8918W", - "FI8919W", - "FI9802W", - "FI9804W", - "FI9805w", - "FI9810W", - "FI9815P", - "FI9818W", - "FI9900P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18904w", - "FI18905W", - "FI18910w", - "FI18916W", - "FI18918W", - "FI18919W", - "FI8094W", - "FI8602W", - "FI8605W", - "FI8620", - "FI8904W", - "FI8905E", - "FI8905W", - "FI8905w?", - "FI8906W", - "FI8908W", - "FI8909W-NA", - "FI8910W", - "FI8918", - "FI8918W", - "FI8919W", - "FI8920W", - "FI9804w", - "FI9804W", - "FI9818W", - "FI9821W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "FI18904w", - "FI18905W", - "FI18906w", - "FI18910w", - "FI18918W", - "FI8094W", - "FI8602W", - "FI8903W", - "FI8904", - "FI8904W", - "FI8905E", - "FI8905w", - "FI8905W", - "FI8906w", - "FI8910W", - "FI8918W", - "fI8989w", - "FI903P", - "FI9804W", - "FI9816", - "FI9826P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "FI18904w", - "FI18905W", - "FI18918W", - "FI18919W", - "FI81904W", - "FI8904W", - "FI8905w", - "FI8905W", - "FI8907W", - "FI8910W", - "FI8918W", - "FI8919W", - "FI903P", - "FI908W", - "FI9800P", - "FI9804W", - "FI9805E", - "FI9821w", - "FI9821W", - "FI9821W v2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18904w", - "FI18906w", - "FI8903W", - "FI8904W", - "FI8910W", - "FI8918W", - "FI903P", - "FI904P", - "FI9804W", - "FI9828P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "FI18904w", - "FI18905E", - "FI18905W", - "FI18910w", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI18921W", - "FI1982W", - "FI8602W", - "FI8606W", - "FI8608W", - "FI8610w", - "FI8902W", - "FI8903W", - "FI8904", - "FI8904W", - "FI8905E", - "FI8905w", - "FI8905W", - "FI8906W", - "FI8907W", - "FI8908W", - "FI8909W", - "FI8910", - "FI8910e", - "FI8910E", - "FI8910W", - "FI8916w", - "FI8916W", - "FI8918", - "FI89180w", - "FI8918W", - "FI8918W/E", - "FI8919W", - "FI8920W", - "FI8921W", - "FI9802W", - "FI9805E", - "FI9805W", - "FI9816P", - "FI9818W", - "FI9819", - "FI9821W", - "FI9828PV2", - "FI9828W", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18905E", - "FI18905W", - "FI18908W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI19821P V2", - "FI8900W", - "FI8904W", - "FI8905W", - "FI8906W", - "FI8908W", - "FI8909W", - "FI8910", - "FI8910W", - "FI8916W", - "FI8918", - "FI89180w", - "FI8918W", - "FI8919w", - "FI8919W", - "FI8921W V2", - "FI89xx", - "FI9804W", - "FI9805W", - "FI9810w", - "FI9818W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FI18905E", - "FI18905W", - "FI8904W", - "FI8905", - "FI8905E", - "FI8905W", - "FI8906W", - "FI8910W", - "FI89xx", - "FI9818W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "FI18905E", - "fi1890w", - "FI18910E", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI19810W", - "FI8606W", - "FI8905w", - "FI8905W", - "FI8906w", - "Fi8910", - "FI8910E", - "FI8910W", - "FI8910W_DW", - "FI8916W", - "FI8918", - "FI8918W", - "FI8919W", - "FI9810W", - "FI9818", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18905W", - "FI18906w", - "FI18918W", - "FI18919W", - "FI8505E", - "FI8606W", - "FI8904W", - "FI8905W", - "FI8906w", - "FI8906W", - "FI8907W", - "FI8908W", - "FI8910W", - "FI8915", - "FI8918W", - "FI8919w", - "FI8919W", - "FI895w", - "FI9828P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "FI18905W", - "FI1890W", - "FI18910w", - "FI18918W", - "FI18919W", - "FI8610w", - "FI8905W", - "FI8908W", - "FI8910", - "FI8910E", - "FI8910w", - "FI8910W", - "FI8916W", - "FI8918", - "FI8918W", - "FI8919W", - "FI9810", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FI18905W", - "FI18918W", - "FI8904W", - "FI8905E", - "FI8905W", - "FI8910W", - "FI8918W", - "FI9853EP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "FI18905W", - "FI18919W", - "FI8908", - "FI8908W", - "FI8918W", - "FI9818", - "FI9821W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18905W", - "FI8601W", - "FI8602", - "FI8602W", - "FI8605W", - "FI8608", - "FI8608W", - "FI8609W", - "FI8620", - "FI8905W", - "FI8920W", - "FI8928W", - "FI9802W", - "FI9804W", - "FI9805W", - "FI9820", - "FI9820w", - "FI98290", - "Other", - "VNT665 6G6A40", - "VNT6656G6A40" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "FI18906w", - "FI18910E", - "FI18918W", - "fi8605", - "FI8900W", - "FI8906W", - "FI8908W", - "FI8910E", - "FI8910W", - "FI8918W", - "FI8919W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18908W", - "FI8910", - "FI8918w/E", - "FI8921Wv2", - "FI9810W", - "FI9821P", - "Other", - "Purple", - "VNT6656G6A4X" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "FI1890W", - "FI18910w", - "FI18910W", - "FI18916W", - "FI18918W", - "FI18919W", - "FI8905W", - "fi8906w", - "FI8908W", - "FI8909W", - "FI890W", - "FI8910", - "FI8910w", - "FI8910W", - "FI8918", - "FI89180w", - "FI8918E", - "FI8918w", - "FI8918W", - "FI-8918W", - "FI8919W", - "FI89909W", - "FI903P", - "FI9804W", - "FI9820w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FI18910w", - "FI19821W", - "FI8905W", - "FI9805W", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "FI18910w", - "FI18916W", - "FI18918W", - "FI18919W", - "FI8601W", - "FI8602", - "FI8602W", - "FI8605W", - "FI8608", - "FI8608W", - "FI8609W", - "FI8610w", - "FI8620", - "FI8904W", - "FI8905E", - "FI8905W", - "FI8907W", - "FI8908W", - "FI8909W", - "FI8910E", - "FI8910W", - "FI8916W", - "FI8918", - "FI89180w", - "FI8918E", - "FI8918W", - "FI8919W", - "FI8920W", - "FI9805W", - "FI9820", - "FI9820W", - "FI9821W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "FI18910w", - "FI18910W", - "FI8601W", - "FI8602W", - "FI8903W_Elita", - "FI8905W", - "FI8910W", - "FI8918W", - "FI903P", - "FI9810W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "FI18918W", - "FI8608W", - "FI8905W", - "FI8906W", - "FI8909W", - "FI8918W", - "fi8919w", - "FI8919W", - "FI9821W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI18918W", - "FI18919W", - "FI8601W", - "FI8602", - "FI8602W", - "FI8605W", - "FI8608", - "FI8608W", - "FI8609W", - "FI8610W", - "FI8620", - "FI8904W", - "FI8905W", - "FI8908W", - "FI8909W", - "FI8910E", - "FI8910W", - "FI8916W", - "FI8918E", - "FI8918W", - "FI8920W", - "FI8921P V2", - "FI9820", - "FI9820W", - "FI9821W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "FI18918W", - "FI8902W", - "FI8905W", - "FI8910W", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "FI18918W", - "fi8904w", - "fi8910w", - "fI8918w", - "FI8919w", - "FI9810W", - "FI9818W", - "FI9821 v2", - "FI9821EP", - "FI9821p v2", - "FI9826p", - "FI9905B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "url": "/" - }, - { - "models": [ - "FI18919w", - "FI8903w", - "FI8904", - "fI8905w", - "FI8908 W", - "FI8910_CRC", - "FI8910CRC", - "FI8910W_CRC", - "FI89180w", - "FI8918w", - "FI8918W", - "FI8919w", - "FI9805W", - "FI9821p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "FI18919W", - "ISO4030" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "FI18919W", - "fI8905w", - "FI8905W", - "fi8910w", - "fI8918w", - "FI8918w", - "FI9816P", - "FI9816P v3", - "FI9821p", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4578, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FI18919W", - "fI8905w", - "fi8910w", - "FI8916w", - "fi8919w", - "FI9821W v2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4578, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI1895W", - "fI8918w", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]" - }, - { - "models": [ - "FI805w", - "FI8909W-NA", - "FI8918E", - "fi8919w", - "FI8919W", - "FI9912P", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI81920W", - "FI8608W", - "FI8920W", - "FI9820", - "FI9820w", - "FI9831P V2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "FI81920W", - "FI8910", - "FI8910W", - "FI8918", - "FI8918W", - "FI8919W", - "FI903P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "FI81920W", - "FI8608W", - "FI8905W", - "FI9803P V3", - "FI9805W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "FI8601", - "FI8901W", - "FI8918w", - "FI9803P V3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2.3gp" - }, - { - "models": [ - "FI8601W", - "FI8602", - "FI8602W", - "FI8608W", - "FI8620", - "FI8908W", - "FI8910W", - "FI8920W", - "FI9820", - "FI9820w" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "FI8602", - "FI8608", - "FI8608w", - "FI8620", - "FI8905W", - "FI8910W", - "FI8920W", - "FI9820", - "FI9820W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "FI8602", - "FI8608W", - "FI8620", - "FI8908w", - "FI9805PE", - "FI9820", - "FI9820W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI8602W", - "FI8608W", - "FI8920W", - "FI9802W", - "FI9820", - "FI9820w", - "FI9820W", - "FI9821W", - "ZY_H264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "FI8602W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 27561, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "FI8608W", - "FI8609W", - "FI8900W", - "FI8921W", - "FI9820W", - "FI9821W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "FI8610w", - "FI8910W", - "FI8918W", - "FI9805W", - "R2V5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI8901W", - "FI8904W", - "FI8905w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0" - }, - { - "models": [ - "FI8901W", - "fI8905w", - "FI8909W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "FI8903w", - "FI8918w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 350, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FI8903w" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=1" - }, - { - "models": [ - "fi8904w", - "FI8918w", - "FI8918w/E", - "FI9821W V2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 134, - "url": "/videostream.cgi" - }, - { - "models": [ - "fi8904w", - "FI8905w", - "fi8910w", - "FI8916P", - "FI8916w", - "FI8918", - "fI8918w", - "fi8919w", - "FI89XX/w", - "FI9800 Pv3", - "FI9803P V3", - "FI9816P", - "FI9816P v3", - "FI9821P", - "FW8918W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?" - }, - { - "models": [ - "FI8904w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "FI8904W", - "FI8910W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "FI8904W", - "FI9804W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "FI8905P", - "FI9803EP", - "FI9803P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "fI8905w" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI8905w", - "FI8918W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8098, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "FI8905W", - "FI8918W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "FI8905W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "FI8905W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI8905W", - "fI8918w", - "FI8918W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8100, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "FI8905W", - "FI8906W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&password=" - }, - { - "models": [ - "fi8906w", - "fI8918w", - "FI8918w", - "FI9810w", - "FI9818W" - ], - "type": "JPEG", - "protocol": "http", - "port": 9060, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "fI8908w", - "fi8910w", - "fI8918w", - "FI8919w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "FI8908W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI8909W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "FI8909W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "FI8909W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "fi8910w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=[USERNAME]pass&balls=balls5" - }, - { - "models": [ - "fI8910w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "FI8910w", - "fi8919w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/VIDEO.CGI" - }, - { - "models": [ - "FI8910W", - "FI9804w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "FI8910W", - "FI9821W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "FI8910W", - "FI9820W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "FI8910W", - "fi9821w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 12012, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI8910W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8282, - "url": "/video.cgi?resolution=640x480" - }, - { - "models": [ - "FI8910W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=Dietz1924%24&resolution=320x240" - }, - { - "models": [ - "FI8916P", - "R2 v3", - "sd2", - "sl-130ipcwf" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "FI89180w", - "FI9810w", - "VNT665 6G6A40" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fossi.json b/data/brands/fossi.json deleted file mode 100644 index 09e8e94..0000000 --- a/data/brands/fossi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fossi", - "brand_id": "fossi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9903" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/fostar.json b/data/brands/fostar.json deleted file mode 100644 index b326e00..0000000 --- a/data/brands/fostar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fostar", - "brand_id": "fostar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FC2501P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/fosvision.json b/data/brands/fosvision.json deleted file mode 100644 index 0736fac..0000000 --- a/data/brands/fosvision.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Fosvision", - "brand_id": "fosvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FS-3F48N-PLS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mp4" - }, - { - "models": [ - "FS-3F48N-PLS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "fs-6233w13", - "FS6233W13", - "FS-6488W30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/foxcam.json b/data/brands/foxcam.json deleted file mode 100644 index 44f18f2..0000000 --- a/data/brands/foxcam.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Foxcam", - "brand_id": "foxcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aaaa" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "kutcam", - "kutmodel", - "sd2x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "PTZ2084-L" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "PTZ2084-L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "PTZ2084-L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/fracarro.json b/data/brands/fracarro.json deleted file mode 100644 index a4df012..0000000 --- a/data/brands/fracarro.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Fracarro", - "brand_id": "fracarro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/fredi.json b/data/brands/fredi.json deleted file mode 100644 index b448fae..0000000 --- a/data/brands/fredi.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Fredi", - "brand_id": "fredi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD mini wifi", - "MINI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HD mini wifi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "L17" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=&resolution=320x240" - }, - { - "models": [ - "MINI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/freesbell.json b/data/brands/freesbell.json deleted file mode 100644 index 3c31746..0000000 --- a/data/brands/freesbell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Freesbell", - "brand_id": "freesbell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E302" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/freetec.json b/data/brands/freetec.json deleted file mode 100644 index 9c48463..0000000 --- a/data/brands/freetec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Freetec", - "brand_id": "freetec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/frente.json b/data/brands/frente.json deleted file mode 100644 index 279363b..0000000 --- a/data/brands/frente.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Frente", - "brand_id": "frente", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Apexis" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "china", - "HZ-359" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile1" - }, - { - "models": [ - "DVR Intelbras" - ], - "type": "JPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "hw0024" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fs.com.json b/data/brands/fs.com.json deleted file mode 100644 index 5fa267d..0000000 --- a/data/brands/fs.com.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Fs.com", - "brand_id": "fs.com", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FS-VCD-3M", - "FS-VCF-4M", - "IPC101-5M-T", - "IPC101-SM-T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/fsan.json b/data/brands/fsan.json deleted file mode 100644 index b16646e..0000000 --- a/data/brands/fsan.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Fsan", - "brand_id": "fsan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "WD662" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "WD662" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/ftype.json b/data/brands/ftype.json deleted file mode 100644 index 4c17c00..0000000 --- a/data/brands/ftype.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ftype", - "brand_id": "ftype", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujicam.json b/data/brands/fujicam.json deleted file mode 100644 index 39648d4..0000000 --- a/data/brands/fujicam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fujicam", - "brand_id": "fujicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FI-361" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujiko.json b/data/brands/fujiko.json deleted file mode 100644 index b6b6a80..0000000 --- a/data/brands/fujiko.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Fujiko", - "brand_id": "fujiko", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fujiko-007" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Fujiko-01", - "Fujiko-02" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg.jpg" - }, - { - "models": [ - "Fujiko-01", - "Fujiko-02" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Fujiko-02" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujima.json b/data/brands/fujima.json deleted file mode 100644 index 9370b8f..0000000 --- a/data/brands/fujima.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fujima", - "brand_id": "fujima", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujinon.json b/data/brands/fujinon.json deleted file mode 100644 index f4ea866..0000000 --- a/data/brands/fujinon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Fujinon", - "brand_id": "fujinon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sx800", - "SX8000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujitel.json b/data/brands/fujitel.json deleted file mode 100644 index d559c75..0000000 --- a/data/brands/fujitel.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Fujitel", - "brand_id": "fujitel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FJ-C7837WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "I8313", - "I9811", - "I9813" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujitron.json b/data/brands/fujitron.json deleted file mode 100644 index 063a55b..0000000 --- a/data/brands/fujitron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fujitron", - "brand_id": "fujitron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FND-52CD1321" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujtech.json b/data/brands/fujtech.json deleted file mode 100644 index 01935fe..0000000 --- a/data/brands/fujtech.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Fujtech", - "brand_id": "fujtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Drop", - "Drop HD", - "DROP HD", - "mini", - "Mini", - "Mini HD", - "MINI HD", - "MINI IP camera", - "MINI IP CAMERA", - "Other", - "View" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "HD PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fujut.json b/data/brands/fujut.json deleted file mode 100644 index 497d6af..0000000 --- a/data/brands/fujut.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fujut", - "brand_id": "fujut", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "utut" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/fukuda.json b/data/brands/fukuda.json deleted file mode 100644 index 35b2b8a..0000000 --- a/data/brands/fukuda.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Fukuda", - "brand_id": "fukuda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fcm822", - "FCM822-1PTMS", - "FCM828-OFM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/fulicom.json b/data/brands/fulicom.json deleted file mode 100644 index 34a3f63..0000000 --- a/data/brands/fulicom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fulicom", - "brand_id": "fulicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FC-CR1060" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/fullsec.json b/data/brands/fullsec.json deleted file mode 100644 index deb54f9..0000000 --- a/data/brands/fullsec.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Fullsec", - "brand_id": "fullsec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DOME", - "FS-IP13E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264" - }, - { - "models": [ - "FS-IP1EW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "FS-IP1EW" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/fullward.json b/data/brands/fullward.json deleted file mode 100644 index ed3e708..0000000 --- a/data/brands/fullward.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fullward", - "brand_id": "fullward", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DC-001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/fuluva.json b/data/brands/fuluva.json deleted file mode 100644 index e5c92b1..0000000 --- a/data/brands/fuluva.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Fuluva", - "brand_id": "fuluva", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "B07L8JV3CH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "X-DFH710" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "X-DFH710" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/fundos.json b/data/brands/fundos.json deleted file mode 100644 index 0d0ad86..0000000 --- a/data/brands/fundos.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Fundos", - "brand_id": "fundos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "21331", - "360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "APM-J011" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "china" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/funlux.json b/data/brands/funlux.json deleted file mode 100644 index 74622f4..0000000 --- a/data/brands/funlux.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "brand": "Funlux", - "brand_id": "funlux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p", - "CH-S1A-WACS", - "NVR", - "ZH-IXA1D-WAC", - "ZP-IBI13-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "720P", - "ZH-IXA1D-WAC", - "ZP-IBI13-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CH-S1A-WACS", - "NVR", - "ZH-IXA15-WAC", - "ZH-IXA15-WC", - "ZP-IBI13-W", - "ZP-IBT15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_0" - }, - { - "models": [ - "CH-S1A-WACS", - "ZH-IXA15-WAC", - "ZH-IXA1D-WAC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "ZH-IXA15-WC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/udp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/funxwe.json b/data/brands/funxwe.json deleted file mode 100644 index 9f892ed..0000000 --- a/data/brands/funxwe.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Funxwe", - "brand_id": "funxwe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "fw22", - "FW35", - "FW38", - "FW38-US" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "fg12-us", - "fg13", - "FW38", - "Other", - "x series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "fs01-0", - "FS30", - "FS39", - "FW35", - "FW36", - "FW38", - "hw38" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/furbo.json b/data/brands/furbo.json deleted file mode 100644 index 08c24f5..0000000 --- a/data/brands/furbo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Furbo", - "brand_id": "furbo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Furbo2" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "Furbo2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/fures.json b/data/brands/fures.json deleted file mode 100644 index 197b8e6..0000000 --- a/data/brands/fures.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fures", - "brand_id": "fures", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "gc13h" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/fusion.json b/data/brands/fusion.json deleted file mode 100644 index 1459c08..0000000 --- a/data/brands/fusion.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Fusion", - "brand_id": "fusion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "230" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/fustes-sola.json b/data/brands/fustes-sola.json deleted file mode 100644 index 9e165ac..0000000 --- a/data/brands/fustes-sola.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Fustes Sola", - "brand_id": "fustes-sola", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/fuswlan.json b/data/brands/fuswlan.json deleted file mode 100644 index 1751129..0000000 --- a/data/brands/fuswlan.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Fuswlan", - "brand_id": "fuswlan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B09POE-5MP", - "B09W-1080P", - "B09-W1080P", - "Other", - "PTZ IP Camera (HX WiFi Series)" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 1394, - "url": "/11" - }, - { - "models": [ - "B09W-1080P" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 1935, - "url": "/img/video.asf" - }, - { - "models": [ - "HX-WI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/futura-elettronica.json b/data/brands/futura-elettronica.json deleted file mode 100644 index 66cbedc..0000000 --- a/data/brands/futura-elettronica.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Futura Elettronica", - "brand_id": "futura-elettronica", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP608IRW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/fvc-cameras.json b/data/brands/fvc-cameras.json deleted file mode 100644 index dd03e63..0000000 --- a/data/brands/fvc-cameras.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Fvc Cameras", - "brand_id": "fvc-cameras", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "P2P IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "P2P IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/fyuui.json b/data/brands/fyuui.json deleted file mode 100644 index 2c9bc83..0000000 --- a/data/brands/fyuui.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Fyuui", - "brand_id": "fyuui", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "y7-1080p-fy" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/g180.json b/data/brands/g180.json deleted file mode 100644 index 85c4523..0000000 --- a/data/brands/g180.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "G180", - "brand_id": "g180", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/g4direct.json b/data/brands/g4direct.json deleted file mode 100644 index eddbfbd..0000000 --- a/data/brands/g4direct.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "G4direct", - "brand_id": "g4direct", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HFC1300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "HFC1300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HFC1300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/gadinan.json b/data/brands/gadinan.json deleted file mode 100644 index a11484c..0000000 --- a/data/brands/gadinan.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Gadinan", - "brand_id": "gadinan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6330", - "G2106042040 POE 5MP", - "pk1100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "N/A", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "pk1100", - "Z70B6125W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "pk1100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/gadnic.json b/data/brands/gadnic.json deleted file mode 100644 index 1700e4a..0000000 --- a/data/brands/gadnic.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Gadnic", - "brand_id": "gadnic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1P23LS", - "SX24", - "SX37", - "SX70" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp?real_stream" - }, - { - "models": [ - "220", - "360", - "CAMS15", - "CS10", - "cs30", - "CS60", - "mio", - "Other", - "p20002", - "P2P00009", - "P2P00011", - "P2P00023", - "P2P00037", - "rertre", - "SX37", - "Sx9" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "4k Beast", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "CS10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P9PRO", - "sx37" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gadspot.json b/data/brands/gadspot.json deleted file mode 100644 index 810185b..0000000 --- a/data/brands/gadspot.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "brand": "Gadspot", - "brand_id": "gadspot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002drnq", - "002drnx" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "200A", - "GS-100A", - "GS2102", - "gs-w220b", - "GS-W220B", - "GS-W221A", - "GS-W2311", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "GS-1000", - "nc1000", - "NC1000-L10", - "NC1000-W10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "GS2002 DVR w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "GS2102" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "GS-W221A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "IPCAM1200", - "NC-1000/1600 Series", - "nc1200", - "NC-1200 Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=1" - }, - { - "models": [ - "N1000", - "N1250", - "NC800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "N1000", - "N1250", - "NC-1000/1600 SERIES", - "NC1000-L10", - "nc1000-w10", - "NC-1200 SERIES", - "NC800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "N1000", - "NC-1200 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "N1000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "N1000", - "N1250" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "N1250", - "NC-1200 SERIES", - "NC800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=1" - }, - { - "models": [ - "N1250" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "n600e" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - }, - { - "models": [ - "NC-1000/1600 Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "NC-1000/1600 SERIES", - "nc1000-l10", - "NC1000-W10", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "nc1000-l10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-1200 Series", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=0" - }, - { - "models": [ - "NC800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/gaines-dvr.json b/data/brands/gaines-dvr.json deleted file mode 100644 index 180228e..0000000 --- a/data/brands/gaines-dvr.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Gaines Dvr", - "brand_id": "gaines-dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/302" - }, - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/402" - }, - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/502" - }, - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/602" - }, - { - "models": [ - "LV-T9408XHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/galaxy-note-3.json b/data/brands/galaxy-note-3.json deleted file mode 100644 index ecf2d7a..0000000 --- a/data/brands/galaxy-note-3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Galaxy Note 3", - "brand_id": "galaxy-note-3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Olly1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/galaxy-note3.json b/data/brands/galaxy-note3.json deleted file mode 100644 index d8a2401..0000000 --- a/data/brands/galaxy-note3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Galaxy Note3", - "brand_id": "galaxy-note3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "samsung" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/galaxy-phone.json b/data/brands/galaxy-phone.json deleted file mode 100644 index a5f220f..0000000 --- a/data/brands/galaxy-phone.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Galaxy Phone", - "brand_id": "galaxy-phone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "700", - "note 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/galaxy-s3.json b/data/brands/galaxy-s3.json deleted file mode 100644 index 17e9fe5..0000000 --- a/data/brands/galaxy-s3.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Galaxy S3", - "brand_id": "galaxy-s3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP WebCAM", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IP WebCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/galaxy-s4.json b/data/brands/galaxy-s4.json deleted file mode 100644 index f6fc0c4..0000000 --- a/data/brands/galaxy-s4.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Galaxy S4", - "brand_id": "galaxy-s4", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP WebCAM", - "My phone" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/galaxy.json b/data/brands/galaxy.json deleted file mode 100644 index 1e647cc..0000000 --- a/data/brands/galaxy.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "brand": "Galaxy", - "brand_id": "galaxy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANDOID IP CAMERA", - "Galaxy S8" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Brokebn screen", - "Galaxy S8", - "Mini", - "note2", - "ST 7500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "GX7154mfs-ir28", - "GX724MF-IR28", - "NV743MF-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "HNC5241E-IRAS/28" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IP Webcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "samsung" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/galpon.json b/data/brands/galpon.json deleted file mode 100644 index f07b6f7..0000000 --- a/data/brands/galpon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Galpon", - "brand_id": "galpon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/ganvis.json b/data/brands/ganvis.json deleted file mode 100644 index 3e8092b..0000000 --- a/data/brands/ganvis.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Ganvis", - "brand_id": "ganvis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5mp", - "GV-T430A", - "t554f" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5MP", - "GV/T455V", - "GV-T530A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "GV-T254F" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ganz.json b/data/brands/ganz.json deleted file mode 100644 index c9bf5fc..0000000 --- a/data/brands/ganz.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Ganz", - "brand_id": "ganz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DR-16F45AT-3TB", - "ips400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "IIP-C3211", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "IIP-C3211", - "ZN-DT352VE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_unicast_firststream" - }, - { - "models": [ - "IIP-C3211" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/nvc-cgi/operator/snapshot.fcgi?channel=0&name=snapshot&resolution=custom&quality=70&width=640&height=480" - }, - { - "models": [ - "IIP-C3211" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/nvc-cgi/operator/snapshot.fcgi?channel=0&name=snapshot&resolution=custom&quality=70&width=320&height=240" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other", - "ZN-C1M", - "ZN-C2M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "gnz_media/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/gnz_media/main" - }, - { - "models": [ - "ZN\\1-N4NZN6-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "ZN-DT352VE" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/nvc-cgi/operator/snapshot.fcgi?channel=2&name=snapshot&resolution=custom&quality=70&width=320&height=240" - } - ] -} \ No newline at end of file diff --git a/data/brands/gardinan.json b/data/brands/gardinan.json deleted file mode 100644 index 631291a..0000000 --- a/data/brands/gardinan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gardinan", - "brand_id": "gardinan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H360-SN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/gate.json b/data/brands/gate.json deleted file mode 100644 index 11cbf81..0000000 --- a/data/brands/gate.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Gate", - "brand_id": "gate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0sgz3N0P6L2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "LifeTech" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gateway-security.json b/data/brands/gateway-security.json deleted file mode 100644 index f1d01da..0000000 --- a/data/brands/gateway-security.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Gateway Security", - "brand_id": "gateway-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5077mic", - "GW-2061IP", - "GW-5237ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "GW-5237ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/gateway.json b/data/brands/gateway.json deleted file mode 100644 index 785ea15..0000000 --- a/data/brands/gateway.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gateway", - "brand_id": "gateway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K-6040" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/gato.json b/data/brands/gato.json deleted file mode 100644 index 92c0973..0000000 --- a/data/brands/gato.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gato", - "brand_id": "gato", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Nohay" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gawell.json b/data/brands/gawell.json deleted file mode 100644 index 2fd2754..0000000 --- a/data/brands/gawell.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Gawell", - "brand_id": "gawell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip106", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/gazingsure.json b/data/brands/gazingsure.json deleted file mode 100644 index 980818b..0000000 --- a/data/brands/gazingsure.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gazingsure", - "brand_id": "gazingsure", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "smart camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/gbf.json b/data/brands/gbf.json deleted file mode 100644 index b0c86f9..0000000 --- a/data/brands/gbf.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gbf", - "brand_id": "gbf", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/gbo.json b/data/brands/gbo.json deleted file mode 100644 index 17ebf08..0000000 --- a/data/brands/gbo.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Gbo", - "brand_id": "gbo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "cam1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ipc 2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "One" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "QNO-6020R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "S1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264main" - }, - { - "models": [ - "S1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/2" - }, - { - "models": [ - "S1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gcam.json b/data/brands/gcam.json deleted file mode 100644 index ee7bfec..0000000 --- a/data/brands/gcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gcam", - "brand_id": "gcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nc1000-l10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/gds.json b/data/brands/gds.json deleted file mode 100644 index 847b0ca..0000000 --- a/data/brands/gds.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gds", - "brand_id": "gds", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3710" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/ge.json b/data/brands/ge.json deleted file mode 100644 index 35cb373..0000000 --- a/data/brands/ge.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Ge", - "brand_id": "ge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GE-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "channel2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "TVR30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ivop.get?action=live&THREAD_ID=" - } - ] -} \ No newline at end of file diff --git a/data/brands/gecko-security.json b/data/brands/gecko-security.json deleted file mode 100644 index 4529dd0..0000000 --- a/data/brands/gecko-security.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gecko Security", - "brand_id": "gecko-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GD-328" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "GD-328" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/gedthry.json b/data/brands/gedthry.json deleted file mode 100644 index 35f76ad..0000000 --- a/data/brands/gedthry.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gedthry", - "brand_id": "gedthry", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rehgj" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/geecam.json b/data/brands/geecam.json deleted file mode 100644 index 6a5fe73..0000000 --- a/data/brands/geecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Geecam", - "brand_id": "geecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VNT6656G6A40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/geecamvnt.json b/data/brands/geecamvnt.json deleted file mode 100644 index d1e6ff6..0000000 --- a/data/brands/geecamvnt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Geecamvnt", - "brand_id": "geecamvnt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6656g6a40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/geeni.json b/data/brands/geeni.json deleted file mode 100644 index be0abf3..0000000 --- a/data/brands/geeni.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "brand": "Geeni", - "brand_id": "geeni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CW006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CW007", - "CW033", - "GNC-CW220", - "hawk2", - "hawk3", - "MI-CW020", - "mi-cw217", - "Smart Doorbell" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HAWK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "mi-cw017-101w" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 60906, - "url": "/" - }, - { - "models": [ - "MI-CW017-101W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.jpg" - }, - { - "models": [ - "Mini 7C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/stream_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/geeya.json b/data/brands/geeya.json deleted file mode 100644 index e735339..0000000 --- a/data/brands/geeya.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "brand": "Geeya", - "brand_id": "geeya", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C601", - "C602", - "c801", - "C801", - "c802", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "C601" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "C601", - "c801", - "C802", - "Other", - "P2P C602" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "C601", - "C602" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?" - }, - { - "models": [ - "C601" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "C602", - "c801", - "P2P C602" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c801", - "c802" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c801", - "c802", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C802" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C802" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/gembird.json b/data/brands/gembird.json deleted file mode 100644 index d9c933e..0000000 --- a/data/brands/gembird.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Gembird", - "brand_id": "gembird", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM78IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "CAM78IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "CAM78IP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "video/cam[CHANNEL]/2.0?audio=0&stream=0" - }, - { - "models": [ - "CAM-IP3MP-LP24" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "DR-IPC-01", - "ICAM-WHD-01", - "ICAM-WRHD-01", - "ICAM-WRHD-02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "ICAM-WRHD-02" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gemtek.json b/data/brands/gemtek.json deleted file mode 100644 index 9c827d0..0000000 --- a/data/brands/gemtek.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Gemtek", - "brand_id": "gemtek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B1100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot[CHANNEL].jpg" - }, - { - "models": [ - "B1100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "channel[CHANNEL]" - }, - { - "models": [ - "D0100", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/gen.json b/data/brands/gen.json deleted file mode 100644 index 62cccf6..0000000 --- a/data/brands/gen.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Gen", - "brand_id": "gen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2cam", - "3200cp", - "Other", - "P18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/genbolt.json b/data/brands/genbolt.json deleted file mode 100644 index e86c95b..0000000 --- a/data/brands/genbolt.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "brand": "Genbolt", - "brand_id": "genbolt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "102h102h", - "102s", - "200", - "2013", - "202h", - "600H", - "GB100", - "GB-100s", - "GB102", - "GB102H", - "gb102s", - "GB103K", - "GB1080P", - "GB2015", - "GB201H", - "GB201H-4G", - "GB-202H", - "GB203X", - "GB-208", - "gb209h", - "gb209k", - "GB209X", - "GB212H", - "GB213", - "GB-213", - "gb213h", - "GB-213H", - "GB213V", - "GB216", - "GB216D", - "GB216D-K", - "GB-217h", - "GB220", - "GB600", - "gb600h", - "GB600S", - "GB-600S", - "GS600H", - "GS600S", - "House", - "Other", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "1080 HD", - "720", - "GB106H", - "GB-202h", - "gb-206h", - "GB600H1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "201", - "202h", - "GB103K", - "GB201H", - "GB-202H", - "GB-206H", - "GB209h", - "GB212H", - "GB213", - "GB213X", - "gb216d", - "GB216D-K" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "600H", - "720", - "GB100", - "gb102h", - "GB102S", - "GB1080P", - "GB2015", - "GB-202h", - "GB203X", - "GB-209X", - "GB600", - "GB600H", - "GB600H1", - "GB-600S", - "gb800h", - "gkh602", - "gs600h", - "iiii-657982-BDCFD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "720", - "GB100", - "GB1005", - "GB100s", - "GB-100S", - "GB-202h", - "GB600", - "GB600H", - "Other", - "X000R6XLAL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "GB100", - "GB100S", - "HDCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "gb102h", - "GB-202H", - "NNNN-130108-CDAFF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "gb102s", - "GB-202h" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "GB-202h" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/web/admin.html" - }, - { - "models": [ - "GB-202H" - ], - "type": "VLC", - "protocol": "mms", - "port": 10554, - "url": "img/video.asf" - }, - { - "models": [ - "gb600", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "gs100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "tit" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/general.json b/data/brands/general.json deleted file mode 100644 index b4a1fbf..0000000 --- a/data/brands/general.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "brand": "General", - "brand_id": "general", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0101", - "1300", - "230", - "2MP", - "3100", - "3200C", - "3200CHD", - "3200cp", - "3300", - "391789", - "4200", - "4200SP", - "4300s", - "5200", - "5300", - "7153", - "8310", - "Alhua Bullet", - "amb eye 1.3", - "AMBEYE3", - "B7 IPCAM Test", - "blachlak", - "bryan", - "Bullet", - "CameraKINGPTZ", - "Clay", - "cortile", - "Dah", - "Dahau 4300s", - "Dahaus", - "Dahua", - "dahua 2mp Bullet", - "Dahua 4200", - "Dahua PTZ", - "Dahua2", - "dahui", - "Dahus", - "Dauhu", - "dauhua", - "dge", - "DH-DAX", - "ENC4360", - "GenIV", - "Hard", - "HFW1200S-W", - "hfw2100", - "HFW3200", - "hfw4100s", - "hhhh", - "ICR", - "icrealtime", - "IP66", - "ipc", - "IPC-2200", - "IPC-DHW2100N", - "IPC-HFW2100", - "IPC-HFW3300CP", - "ip-hwb-3200s", - "LEAD1", - "Other", - "PTZ_Cam", - "qvis", - "Risco Outdoor", - "Smoker", - "ST-MD-3MP", - "templo entrada", - "Templo sarcofago", - "test gen4", - "till", - "TZC$EA", - "TZC3DW217000", - "TZC4EA", - "v390", - "van", - "vantech", - "VIP", - "voordeur", - "w3200sl-b", - "WIIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "0101", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ALL-IN-ONE", - "DAHAU 4300S", - "DAHUA 2MP BULLET", - "Other", - "QVIS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "B7 IPCAM TEST", - "DH-DAX", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "B7 IPCAM TEST", - "HDIP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "DAHUA", - "DAUHU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DAHUA PTZ", - "DAUHU", - "IPC-DHW2030-ZR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "DAHUA PTZ", - "ICREALTIME", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Funlux", - "giga", - "My ZModo", - "Other", - "RTSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channel/301/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channel/302/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channel/102/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channel/101/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/302/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/301/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/101/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/102/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/201/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/202/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/401/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/402/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/501/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/502/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/002/" - }, - { - "models": [ - "hik" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9550, - "url": "/Streaming/Channels/001/" - }, - { - "models": [ - "HK-720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IPOB-EL1IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "QVIS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "SMALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/generic.json b/data/brands/generic.json deleted file mode 100644 index 49aab6f..0000000 --- a/data/brands/generic.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "brand": "Generic", - "brand_id": "generic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0001", - "960P Audio Mini", - "as above", - "ave", - "CHINA CAM", - "Dave", - "Dome Camera", - "FrontDoor", - "Gen 1", - "ONVIF", - "Other", - "R80X20-PQ", - "Robot1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1000", - "Fluereon", - "Generic IP Cam", - "HES344-XBL", - "ONVIF", - "R80X20-PQ", - "R80X30-PQL", - "triple", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "16CH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "Bseries" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1033, - "url": "/" - }, - { - "models": [ - "c6c-P", - "H.264", - "Other", - "R80X30-PQ", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4cif" - }, - { - "models": [ - "DAHAUS" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DF-ICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4cif" - }, - { - "models": [ - "FOCUS 66", - "HIDVCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - }, - { - "models": [ - "Gen 1", - "Generic IP Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "Generic IP Cam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Generic IP Cam", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 34567, - "url": "/onvif/dev%C4%B1ce_service" - }, - { - "models": [ - "Generic IP Cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 6969, - "url": "/video" - }, - { - "models": [ - "Generic IP Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/img/video.sav" - }, - { - "models": [ - "Generic IP Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "Generic IP Cam", - "PTZ", - "Shenzhen" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "Generic IP Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - }, - { - "models": [ - "IPC365" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "IPELA HD", - "Other", - "V380", - "white_salon" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "nolist" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=0" - }, - { - "models": [ - "ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "ResX-IP-Cams" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?usr=[USERNAME]&pwd=" - }, - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "rtsp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/realmonitor?channel=0&stream=0.sdp" - }, - { - "models": [ - "rtsp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/genie.json b/data/brands/genie.json deleted file mode 100644 index e57245a..0000000 --- a/data/brands/genie.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Genie", - "brand_id": "genie", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "hd hawk" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/genius.json b/data/brands/genius.json deleted file mode 100644 index 1207688..0000000 --- a/data/brands/genius.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "brand": "Genius", - "brand_id": "genius", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "300", - "300R", - "310R", - "IPCAM SECURE 300", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage" - }, - { - "models": [ - "300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "300", - "IPCam Secure 300", - "Other", - "secure300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "300R", - "IPCam Secure 300", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage?java=0" - }, - { - "models": [ - "310R", - "350TR", - "IPCAM SECURE 300" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "avn=2" - }, - { - "models": [ - "IPCam Secure 300", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "islim 1300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/geniv-flux.json b/data/brands/geniv-flux.json deleted file mode 100644 index 0576710..0000000 --- a/data/brands/geniv-flux.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Geniv Flux", - "brand_id": "geniv-flux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPX2.3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/geniv.json b/data/brands/geniv.json deleted file mode 100644 index b477b63..0000000 --- a/data/brands/geniv.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Geniv", - "brand_id": "geniv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPPTZ", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/genrui.json b/data/brands/genrui.json deleted file mode 100644 index 57ea061..0000000 --- a/data/brands/genrui.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Genrui", - "brand_id": "genrui", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/genuine.json b/data/brands/genuine.json deleted file mode 100644 index d2cbf12..0000000 --- a/data/brands/genuine.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "brand": "Genuine", - "brand_id": "genuine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.1", - "Dome", - "fgf", - "h264", - "htf", - "hyt", - "kce" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/geo.json b/data/brands/geo.json deleted file mode 100644 index 15ae03d..0000000 --- a/data/brands/geo.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Geo", - "brand_id": "geo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1500", - "CB120", - "EBL2101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CH001.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/geovision.json b/data/brands/geovision.json deleted file mode 100644 index 9a48812..0000000 --- a/data/brands/geovision.json +++ /dev/null @@ -1,830 +0,0 @@ -{ - "brand": "Geovision", - "brand_id": "geovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1", - "2100", - "3402", - "8711", - "ABD1300", - "ABL2703", - "adb1300", - "ADR1300", - "ASSEMBLY", - "BL110", - "Bl2501", - "BL320", - "bx110d", - "BX2700", - "BX-4700", - "CB120", - "Cube220", - "domo", - "EBD2702", - "EBD4711", - "EBL 1100 2F", - "EBL 2100", - "EBL 2100E", - "EBL1100", - "edr2100", - "EDR-2100", - "FE520", - "Fisheye 3mp", - "GV CB220", - "GV EBX1100", - "GV_FD2400", - "GV2500", - "GV600", - "GV-ADR2701", - "GV-BL-1501", - "GV-BL220", - "GV-BX2400", - "GV-BX520D", - "GV-CB120", - "GV-DVR", - "GV-EBD4700", - "GV-EBD4711", - "GV-EBL 1100", - "GV-EDR1100", - "GV-EDR2100", - "GV-EDR2700", - "GV-EDR-4700", - "gv-efd2101", - "GV-EFER3700", - "GV-EVD2100", - "GV-FER3402", - "GV-FX120D", - "GV-MDF120", - "GV-MDF130", - "GV-MDR120", - "GV-MFD130", - "gv-mfd2700", - "gv-mfd520", - "GV-PPTZ7300-SD", - "GV-TDR2700", - "GV-TDR2704-2F", - "GV-tdr4700", - "GV-VD2530", - "GV-VD2540", - "GV-VD2712", - "GV-VD3400", - "GV-VD5340", - "gv-vs2800", - "HCW-120", - "MFD120", - "neye", - "Other", - "s200-s", - "SD2322", - "SNVR 1600", - "TDR2704-2F", - "use", - "VD-2712" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/CH002.sdp" - }, - { - "models": [ - "1.3 MP", - "1220", - "1224", - "1501", - "2211", - "2401", - "360_Fish", - "6.0", - "ABL2703", - "Assembly", - "BL110", - "BL1100", - "BL1300", - "BL-2400", - "bl2410", - "bl2501", - "BL-5310", - "Box Camear", - "BX120", - "bx130d", - "BX-4700", - "BX520D", - "BX5300", - "cam 201", - "cam 202", - "caw120", - "cb 220", - "CB120", - "CB220", - "CBW220", - "Cube", - "DOMO", - "DS-2CD2432F", - "DS-2CD63C2F-IVS", - "ebd-4711", - "EBD4711", - "EBL 1100 2F", - "EBL 2100", - "EBL1100", - "EBL-1100 2F", - "EBL1100F", - "EBX1100", - "EBX2100", - "EDF1100", - "edr2001-of", - "EDR2100-0F", - "EFD1100", - "EFER3700", - "EVD3100", - "FD120", - "FD-2500", - "FER521", - "FER5701", - "ffi", - "fish", - "fisheye", - "Geo120D", - "GeoBX1300", - "GV Camera", - "gv cb220", - "GV EBX1100", - "GV FE", - "GV_CB220", - "GV=EBL 1100-1f", - "gv-1100-2f", - "gv-1300", - "GV1500", - "gv220", - "GV2500", - "GV320", - "GV-ABL2701", - "GV-ADR2701", - "GV-BL1200", - "GV-BL120D", - "GV-BL130D", - "gv-bl1500", - "GV-BL-1500", - "GV-BL3400", - "GV-BL3410", - "GV-BL5311", - "GV-BX110", - "GV-BX130D", - "GV-BX1500", - "GV-BX2400", - "gv-bx2500", - "GV-BX320D", - "GV-BX-3400", - "GV-BX520D", - "GV-CA220", - "GV-CAW220", - "GV-CW220", - "GV-EBD4700", - "GVEBL1100F", - "GV-EBL2100", - "GV-EBL2100-2F", - "GV-EBL2101", - "GV-EBL2702", - "GV-EDR1100", - "GV-EDR1100-0f", - "GV-EDR2100", - "GV-EDR2100-0f", - "GV-EDR2700", - "GV-EDR-4700", - "GV-EFD1100", - "GV-EFD1100-0f", - "GV-EFD2100", - "GV-EFD2700-2F", - "gv-EFD4700", - "GV-EFD4700-0F", - "GV-EFER3700", - "GV-EFR3700", - "GV-EVD2100", - "GV-EVD3100", - "GV-EVD5100", - "GV-EVD5700", - "GV-FD1200", - "GV-FD120D", - "GV-FD1500", - "GV-FD2200", - "GV-FD-220D", - "GV-FD2410", - "GV-FE2301", - "GV-FE3402", - "GV-FE520", - "GV-FER3402", - "GV-FER521", - "GV-FER5303", - "GV-FER5701", - "GV-GA220", - "GV-IPCAM", - "GV-LPC2011", - "GV-LPR1200", - "GV-MDF130", - "GV-MDR220", - "GV-MDR320", - "GV-MDR530", - "GV-MFD110", - "GV-MFD130", - "GV-MFD1501", - "GV-MFD320", - "GV-MFP1501", - "GV-SD220", - "GV-TBL4810", - "GV-TDR2700", - "GV-UBL1211", - "GV-UBL3401", - "GV-UBX1301", - "GV-UNP2500", - "GV-VCBW-1201", - "GV-VD120", - "GV-VD120D", - "GV-VD1540", - "GV-VD2530", - "GV-VD4711", - "GV-VD5340", - "GV-VD5700", - "h234", - "HCW-120", - "Hilera", - "Lager", - "LPR", - "mfd120", - "mfd2401", - "nl test s220", - "normal", - "Other", - "Part", - "Server", - "stair", - "TVD4710", - "UBL1211", - "UBX1320", - "Upstairs", - "VD1500", - "Video Server", - "VS2400", - "way" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CH001.sdp" - }, - { - "models": [ - "1.3 MP", - "adb1300", - "ADR1300", - "BL4713", - "ebd8711", - "EBX1100", - "EDR-2100-0F", - "gv CAMERA", - "GV_CB220", - "GV-ABL4703", - "GV-ADR2702", - "GV-BL-1500", - "GV-BL-1501", - "GV-BL320D", - "gv-bx1500", - "GV-EBL3101", - "gv-efd2101", - "GV-EFD2700", - "GV-EFD2700-2F", - "gv-fd2400", - "GV-FD2410", - "GV-SD220", - "GVTBL", - "GV-VD120D", - "GV-VD220", - "HCW-120", - "MSJ10", - "Other", - "PT220", - "SD2301", - "vd320", - "vd-mdr220", - "VIDEO SERVER" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "19803p", - "19804P", - "3402", - "3600", - "3601", - "bx2400", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "2008R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/mjpeg?cam=[USERNAME]&IDKey=cfaa5afa-fc84-4c29-bafd-6fa43ef1cd58&time=674724540681" - }, - { - "models": [ - "200s", - "GV-SD220", - "s200-s" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "250`", - "BX1111", - "GV-BX110D", - "GV-EBD4711", - "GV-EFD1100", - "GV-FD5300", - "GV-FE420", - "GV-MFD120", - "GV-MFD1501", - "GV-MFD220", - "GV-MFD3401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "3600" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "6.0", - "7.02", - "GV-DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cam[CHANNEL].jpg" - }, - { - "models": [ - "6.0", - "7.02", - "8.X", - "ebd4700", - "GV Camera", - "gv600", - "GV-DVR", - "GV-FD120D", - "GV-Hybrid LPR 10R", - "Other", - "SERVER" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "CH00[CHANNEL].sdp" - }, - { - "models": [ - "8.x", - "Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[USERNAME]/cam[CHANNEL].jpg" - }, - { - "models": [ - "8.X", - "GV Camera", - "gv600", - "Other", - "Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - }, - { - "models": [ - "8.X", - "GV Camera", - "GV-1480", - "gv600", - "GV-DVR", - "Other", - "Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage" - }, - { - "models": [ - "ABD1300", - "adb1300", - "ADR1300", - "GV CAMERA", - "gv-4700", - "GV-AVD2700", - "GV-EBD4711", - "GVTBL", - "HCW-120", - "PT220", - "TVD4710" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "ABD1300", - "gv cb220", - "GV-BL120D", - "HCW-120", - "Other", - "tbl" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "ABD1300", - "adb1300", - "GV-ADR2701", - "GV-EBD2702", - "GV-TDR2700", - "HCW-120" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "ABD1300", - "GV-BL3700" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "BL2072" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsph2641080p" - }, - { - "models": [ - "CBW220", - "EBL 2100", - "GV Camera", - "GV CAMERA", - "GV320", - "GV-ABL2701", - "GV-CB120", - "GV-EBL 1100", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "CSP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "EBD4711", - "GV-BX2400", - "GV-EBD4711", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "ebd8800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media2/video2" - }, - { - "models": [ - "EDR2100-0F", - "GV-BL3411", - "GV-MFD1501", - "GVTBL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1" - }, - { - "models": [ - "GV Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms.jpg" - }, - { - "models": [ - "gv cb220", - "GV-TR2700" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "GV-1120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=8&IDKey=7646000c-b634-4941-a4bc-197f6e92fe3a&time=1691500263890" - }, - { - "models": [ - "GV-1120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=9&IDKey=7646000c-b634-4941-a4bc-197f6e92fe3a&time=1691500428125" - }, - { - "models": [ - "GV-1120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=10&IDKey=7646000c-b634-4941-a4bc-197f6e92fe3a&time=1691500492344" - }, - { - "models": [ - "GV-1120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=11&IDKey=7646000c-b634-4941-a4bc-197f6e92fe3a&time=1691500531652" - }, - { - "models": [ - "GV-1120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=12&IDKey=7646000c-b634-4941-a4bc-197f6e92fe3a&time=1691500570470" - }, - { - "models": [ - "GV-1120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=13&IDKey=7646000c-b634-4941-a4bc-197f6e92fe3a&time=1691500638126" - }, - { - "models": [ - "gv-650" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg?cam=[USERNAME]&IDKey=cfaa5afa-fc84-4c29-bafd-6fa43ef1cd58&time=[PASSWORD]674724540681" - }, - { - "models": [ - "GV-ABL2701", - "GV-ABL2702", - "GV-PTZ5810-IR", - "PT220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "GV-ADR2702", - "GV-AVD4710", - "GV-EBD2704", - "HCW-120", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/CH000.sdp" - }, - { - "models": [ - "GV-CA120", - "GV-FE520", - "GV-VD5700" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "//CH001.sdp" - }, - { - "models": [ - "GV-CB120" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "GV-FD-220D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "gv-vs2800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CH010.sdp" - }, - { - "models": [ - "gv-vs2800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CH014.sdp" - }, - { - "models": [ - "gv-vs2800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CH012.sdp" - }, - { - "models": [ - "gv-vs2800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CH013.sdp" - }, - { - "models": [ - "HCW-120", - "YU6TTR6TRG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/Pinology101:has2bepuyyps/main" - }, - { - "models": [ - "HWK-2008-DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "HWK-2008-DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/gertec.json b/data/brands/gertec.json deleted file mode 100644 index e11c783..0000000 --- a/data/brands/gertec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gertec", - "brand_id": "gertec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Gbot A82" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/gf-pumps.json b/data/brands/gf-pumps.json deleted file mode 100644 index 226fa3b..0000000 --- a/data/brands/gf-pumps.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gf-pumps", - "brand_id": "gf-pumps", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xenon" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/gi-star-srl.json b/data/brands/gi-star-srl.json deleted file mode 100644 index 1da5d41..0000000 --- a/data/brands/gi-star-srl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gi-star Srl", - "brand_id": "gi-star-srl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP6031W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gid20m-pvir.json b/data/brands/gid20m-pvir.json deleted file mode 100644 index 3af652a..0000000 --- a/data/brands/gid20m-pvir.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gid20m-pvir", - "brand_id": "gid20m-pvir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "G4S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/media" - } - ] -} \ No newline at end of file diff --git a/data/brands/gifran.json b/data/brands/gifran.json deleted file mode 100644 index 34a4815..0000000 --- a/data/brands/gifran.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gifran", - "brand_id": "gifran", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GF10247.IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/giga.json b/data/brands/giga.json deleted file mode 100644 index 773520b..0000000 --- a/data/brands/giga.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Giga", - "brand_id": "giga", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "gb 150" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GB 150" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Giga01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "gigacam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/gigaeye.json b/data/brands/gigaeye.json deleted file mode 100644 index 729e006..0000000 --- a/data/brands/gigaeye.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Gigaeye", - "brand_id": "gigaeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GB 170" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GB150", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GB150" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "GB170", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "GB170" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "GB170" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/gigamedia.json b/data/brands/gigamedia.json deleted file mode 100644 index d7b55fd..0000000 --- a/data/brands/gigamedia.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Gigamedia", - "brand_id": "gigamedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ccahddvr16", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "ipclb2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/ginzzu.json b/data/brands/ginzzu.json deleted file mode 100644 index 3e15e1c..0000000 --- a/data/brands/ginzzu.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Ginzzu", - "brand_id": "ginzzu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HIB-4303A", - "HIB-5302S", - "HIB5303A", - "HIB-5303A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "HIB-5303A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "HWB-5302A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/gionee-cam.json b/data/brands/gionee-cam.json deleted file mode 100644 index 4a8de7a..0000000 --- a/data/brands/gionee-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gionee Cam", - "brand_id": "gionee-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Gionee" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/gionee.json b/data/brands/gionee.json deleted file mode 100644 index a8bfc19..0000000 --- a/data/brands/gionee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gionee", - "brand_id": "gionee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gipcam.json b/data/brands/gipcam.json deleted file mode 100644 index c67ae77..0000000 --- a/data/brands/gipcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gipcam", - "brand_id": "gipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/giraffe.json b/data/brands/giraffe.json deleted file mode 100644 index 4cac264..0000000 --- a/data/brands/giraffe.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Giraffe", - "brand_id": "giraffe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GF-IPDIR4323MP2.0", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/gise.json b/data/brands/gise.json deleted file mode 100644 index cc9de66..0000000 --- a/data/brands/gise.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Gise", - "brand_id": "gise", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "gs-2cm4", - "GS-IP5S-V2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "GS-IP5S-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/giucam.json b/data/brands/giucam.json deleted file mode 100644 index c845ae2..0000000 --- a/data/brands/giucam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Giucam", - "brand_id": "giucam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Unicast/channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/gkb.json b/data/brands/gkb.json deleted file mode 100644 index 21118fb..0000000 --- a/data/brands/gkb.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Gkb", - "brand_id": "gkb", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5210", - "IC-202W", - "P6620" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "D6122p", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264main" - }, - { - "models": [ - "D6122p" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "rtsph264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P6620" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "R Series DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/glados-cam.json b/data/brands/glados-cam.json deleted file mode 100644 index 062ed01..0000000 --- a/data/brands/glados-cam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Glados Cam", - "brand_id": "glados-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Glados IPCam", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/glenz.json b/data/brands/glenz.json deleted file mode 100644 index 8e478e2..0000000 --- a/data/brands/glenz.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Glenz", - "brand_id": "glenz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "39020", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/glink.json b/data/brands/glink.json deleted file mode 100644 index d91bdda..0000000 --- a/data/brands/glink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Glink", - "brand_id": "glink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fosom" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/global-tech.json b/data/brands/global-tech.json deleted file mode 100644 index 01833ab..0000000 --- a/data/brands/global-tech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Global Tech", - "brand_id": "global-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "901 20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - } - ] -} \ No newline at end of file diff --git a/data/brands/global.json b/data/brands/global.json deleted file mode 100644 index 128ad49..0000000 --- a/data/brands/global.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Global", - "brand_id": "global", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ak-3509", - "AK-3509HD" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "AK-3509", - "AN-H-360" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AN-H-360-1", - "Megapixel" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "GP 280-R-AE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=80&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/globeteck.json b/data/brands/globeteck.json deleted file mode 100644 index 756b8ae..0000000 --- a/data/brands/globeteck.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Globeteck", - "brand_id": "globeteck", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gltech.json b/data/brands/gltech.json deleted file mode 100644 index 5309c59..0000000 --- a/data/brands/gltech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gltech", - "brand_id": "gltech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GLP-332IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gmini.json b/data/brands/gmini.json deleted file mode 100644 index ecffa0a..0000000 --- a/data/brands/gmini.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gmini", - "brand_id": "gmini", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HDS9000G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gncc.json b/data/brands/gncc.json deleted file mode 100644 index 3436d3f..0000000 --- a/data/brands/gncc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Gncc", - "brand_id": "gncc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "gn1t", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/gnexus.json b/data/brands/gnexus.json deleted file mode 100644 index 504b0ce..0000000 --- a/data/brands/gnexus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gnexus", - "brand_id": "gnexus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Webcam Android" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gnomecam.json b/data/brands/gnomecam.json deleted file mode 100644 index 03c6e00..0000000 --- a/data/brands/gnomecam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Gnomecam", - "brand_id": "gnomecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Gnome1", - "M200HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/go1984.json b/data/brands/go1984.json deleted file mode 100644 index 9694fc2..0000000 --- a/data/brands/go1984.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Go1984", - "brand_id": "go1984", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[USERNAME]/javascript/Jpg?Camera=[CHANNEL]&motion=1" - }, - { - "models": [ - "DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "[USERNAME]/java/mjpeg?camera=[CHANNEL]&motion=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/go2rtc.json b/data/brands/go2rtc.json deleted file mode 100644 index e1763f7..0000000 --- a/data/brands/go2rtc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Go2rtc", - "brand_id": "go2rtc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Home Assistant Integration" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam04" - } - ] -} \ No newline at end of file diff --git a/data/brands/go4.json b/data/brands/go4.json deleted file mode 100644 index 1a95185..0000000 --- a/data/brands/go4.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Go4", - "brand_id": "go4", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EYE INE", - "Eye One" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Eye One" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/goahead.json b/data/brands/goahead.json deleted file mode 100644 index 7413c2e..0000000 --- a/data/brands/goahead.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "brand": "Goahead", - "brand_id": "goahead", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "112" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720p", - "GOAHEADWEBS", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "720p", - "EC-101SD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "EC-101SD", - "GOAHEADWEBS", - "Other", - "thedon" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "GoAheadWebs", - "H.264", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "GoAhead-Webs", - "H.264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "GOAHEADWEBS", - "H.264", - "NCB-540", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "H.264", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "HBell" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/gocam.json b/data/brands/gocam.json deleted file mode 100644 index 78b5cf1..0000000 --- a/data/brands/gocam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Gocam", - "brand_id": "gocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/goclever.json b/data/brands/goclever.json deleted file mode 100644 index 453ebbc..0000000 --- a/data/brands/goclever.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Goclever", - "brand_id": "goclever", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EYE" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "EYE", - "EYE2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "EYE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Eye2", - "Nanny" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "EYE2" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/gocomma.json b/data/brands/gocomma.json deleted file mode 100644 index 20b7db4..0000000 --- a/data/brands/gocomma.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Gocomma", - "brand_id": "gocomma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet", - "IP-CAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CA-R21A-R", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/godraj.json b/data/brands/godraj.json deleted file mode 100644 index 76719d5..0000000 --- a/data/brands/godraj.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Godraj", - "brand_id": "godraj", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gogogate.json b/data/brands/gogogate.json deleted file mode 100644 index 6f82746..0000000 --- a/data/brands/gogogate.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gogogate", - "brand_id": "gogogate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ISG-CAM-01W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "ISG-CAM-01W" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/going.json b/data/brands/going.json deleted file mode 100644 index 731a527..0000000 --- a/data/brands/going.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Going", - "brand_id": "going", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "boing01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "gt-nhs-dia48w", - "x5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "GT-NMS-D2W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av0_0" - }, - { - "models": [ - "Other", - "X39C20M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "X39C13M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "X39C20M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "X3-HF^B20M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "x5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264_1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/goingtech.json b/data/brands/goingtech.json deleted file mode 100644 index f287746..0000000 --- a/data/brands/goingtech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Goingtech", - "brand_id": "goingtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1109, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/golbong.json b/data/brands/golbong.json deleted file mode 100644 index 39397be..0000000 --- a/data/brands/golbong.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Golbong", - "brand_id": "golbong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4109", - "4901", - "GB-HD3171RL", - "NCIP2", - "NCIP9" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "4901", - "GBHD3111RC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp" - }, - { - "models": [ - "4921-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "NCIP2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/goldchamp.json b/data/brands/goldchamp.json deleted file mode 100644 index 6f7b254..0000000 --- a/data/brands/goldchamp.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Goldchamp", - "brand_id": "goldchamp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini PTZ ST-496-5M-IC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "S3-495-5M1C-W-US" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/golden-gate.json b/data/brands/golden-gate.json deleted file mode 100644 index 180df05..0000000 --- a/data/brands/golden-gate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Golden Gate", - "brand_id": "golden-gate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GG-IP-300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/goldnet.json b/data/brands/goldnet.json deleted file mode 100644 index 6678e4e..0000000 --- a/data/brands/goldnet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Goldnet", - "brand_id": "goldnet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RT-5176" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/goldstream.json b/data/brands/goldstream.json deleted file mode 100644 index aa8a6c9..0000000 --- a/data/brands/goldstream.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Goldstream", - "brand_id": "goldstream", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "snapshot/view[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/goliath.json b/data/brands/goliath.json deleted file mode 100644 index ab38ecc..0000000 --- a/data/brands/goliath.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Goliath", - "brand_id": "goliath", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/goodgo.json b/data/brands/goodgo.json deleted file mode 100644 index 6e93243..0000000 --- a/data/brands/goodgo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Goodgo", - "brand_id": "goodgo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GD-SC03" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/google-pixel.json b/data/brands/google-pixel.json deleted file mode 100644 index 9ac10c9..0000000 --- a/data/brands/google-pixel.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Google Pixel", - "brand_id": "google-pixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "Pixel" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/google.json b/data/brands/google.json deleted file mode 100644 index 4c75df7..0000000 --- a/data/brands/google.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Google", - "brand_id": "google", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "d820", - "Nexus", - "Nexus 4", - "Nexus 5", - "nexus 6", - "Nexus 7", - "nexus5", - "nexus7", - "Pixel", - "Pixel XL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Nest" - ], - "type": "MJPEG", - "protocol": "https", - "port": 443, - "url": "/get_image?uuid=8ce29a75e847488797e1a32122fb6fc8&public=0FFS3vFQ9I" - }, - { - "models": [ - "Pixel", - "Pixel 2XL" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 8080, - "url": "/" - }, - { - "models": [ - "Pixel" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/goospy.json b/data/brands/goospy.json deleted file mode 100644 index 27bbb51..0000000 --- a/data/brands/goospy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Goospy", - "brand_id": "goospy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Clock Cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/gopro.json b/data/brands/gopro.json deleted file mode 100644 index 46fff4c..0000000 --- a/data/brands/gopro.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Gopro", - "brand_id": "gopro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hero 3+" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Hero 9 Black", - "Hero7", - "Hero9" - ], - "type": "MJPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/gopro4.json b/data/brands/gopro4.json deleted file mode 100644 index 351c9c6..0000000 --- a/data/brands/gopro4.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gopro4", - "brand_id": "gopro4", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "silver" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/goscam.json b/data/brands/goscam.json deleted file mode 100644 index 2f94eb2..0000000 --- a/data/brands/goscam.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Goscam", - "brand_id": "goscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/2?videoCodecType=H.264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video?Acc=[USERNAME]?Pwd=[PASSWORD]?webcamPWD=RootCookies00000" - } - ] -} \ No newline at end of file diff --git a/data/brands/goswift.json b/data/brands/goswift.json deleted file mode 100644 index d1038a8..0000000 --- a/data/brands/goswift.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Goswift", - "brand_id": "goswift", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GS-2MPTURRET-1", - "GS-4KBULLET-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/1" - }, - { - "models": [ - "GS-4KBULLET-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gotab.json b/data/brands/gotab.json deleted file mode 100644 index 25a1af4..0000000 --- a/data/brands/gotab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gotab", - "brand_id": "gotab", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/gotake.json b/data/brands/gotake.json deleted file mode 100644 index daea4d8..0000000 --- a/data/brands/gotake.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gotake", - "brand_id": "gotake", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GTK-TH01B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GTK-TH01B" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/gotme.json b/data/brands/gotme.json deleted file mode 100644 index a13c6b3..0000000 --- a/data/brands/gotme.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gotme", - "brand_id": "gotme", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gpi360.json b/data/brands/gpi360.json deleted file mode 100644 index b1b375d..0000000 --- a/data/brands/gpi360.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gpi360", - "brand_id": "gpi360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/gps-standard.json b/data/brands/gps-standard.json deleted file mode 100644 index 366cbbd..0000000 --- a/data/brands/gps-standard.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gps-standard", - "brand_id": "gps-standard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VGON-5042HR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/gq1080p.json b/data/brands/gq1080p.json deleted file mode 100644 index f639632..0000000 --- a/data/brands/gq1080p.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gq1080p", - "brand_id": "gq1080p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BE-IPWB200ZW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/gqd.json b/data/brands/gqd.json deleted file mode 100644 index b0302fd..0000000 --- a/data/brands/gqd.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gqd", - "brand_id": "gqd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC029" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "IPC029" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/grafeio.json b/data/brands/grafeio.json deleted file mode 100644 index 6cb11e6..0000000 --- a/data/brands/grafeio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Grafeio", - "brand_id": "grafeio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "43patra43" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/grain.json b/data/brands/grain.json deleted file mode 100644 index a7d1e1d..0000000 --- a/data/brands/grain.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Grain", - "brand_id": "grain", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM-100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "IPCAM-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/grainmedia.json b/data/brands/grainmedia.json deleted file mode 100644 index 0886a9a..0000000 --- a/data/brands/grainmedia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Grainmedia", - "brand_id": "grainmedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/grand.json b/data/brands/grand.json deleted file mode 100644 index 041eb0b..0000000 --- a/data/brands/grand.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "brand": "Grand", - "brand_id": "grand", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3610" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "IP video server", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "IP video server", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/still.cgi" - }, - { - "models": [ - "IP VIDEO SERVER", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Webcam.jpg" - }, - { - "models": [ - "Other", - "Pan and Tilt" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other", - "wiifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "wiifi" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "still.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/grandstream.json b/data/brands/grandstream.json deleted file mode 100644 index 4635bbf..0000000 --- a/data/brands/grandstream.json +++ /dev/null @@ -1,521 +0,0 @@ -{ - "brand": "Grandstream", - "brand_id": "grandstream", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "- Central Facing West", - "20-1", - "3601", - "3601HD", - "3610", - "3610HD", - "3611", - "3611hd", - "3662FHD", - "9602", - "GDS3710", - "GKV3672HD", - "GRX3611IR_HD", - "GS3500", - "GSC3516", - "gsc-3610", - "GSC3610", - "GSC3615", - "GSV3611", - "GVX3610", - "GVX3611", - "GVX3611HD", - "GVX3611IR", - "GVX3672", - "GX", - "GXV 3610FHD", - "GXV3115wp", - "GXV3500", - "GXV3504", - "GXV3601", - "GXV3601LL", - "GXV3610", - "GXV3610_HD", - "GXV3611", - "GXV3611HD", - "GXV3611IR", - "GXV3611ir_hd", - "GXV3611IRC_HD", - "GXV3615", - "GXV3615WP", - "GXV3615WP_HD", - "GXV3651_FHD", - "GXV3662_FHD", - "GXV3672", - "gxv3672 fhd 36", - "GXV3672_FHD", - "GXV3672_FHD v2", - "GXV3672_FHD_36", - "GXV3672_HD/FHD v2", - "gxv3672-fhd", - "GXV3672HD", - "gxv3674", - "GXV3674_FHD_VF", - "gxv3674_hd/fhd_vf v2", - "GXV3674_HD_VF", - "gxv3674fhd", - "GXV3674FHD", - "GXV6310HD", - "hd3611", - "IP Video Server", - "IP1536B2", - "l Facing East", - "Medienraum", - "Northwest CGSC3610", - "Other", - "SouthEast Facing South", - "SVX3510_FHD", - "VIDEO SERVER", - "West Balcony Facing east", - "West Side Facing South Ramp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "20-1", - "gsc3610", - "GSC3610", - "GSC3615", - "GVX3504", - "GVX3611HD", - "GXV3504", - "GXV3504DVS", - "SVX3510_FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "20-2", - "3610HD", - "3710", - "GDS3710", - "GSC3610", - "GSC-3615", - "GVX3504", - "GVX3611HD", - "GXV3504", - "GXV3672_HD/FHD V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/2" - }, - { - "models": [ - "20-3", - "3610HD", - "Education Hallway Facing South", - "Entrance", - "GSC3610", - "GVX3611HD", - "GXv3504" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/3" - }, - { - "models": [ - "25", - "3601", - "3601HD", - "3611", - "3611HD", - "3611LL", - "GVX3672", - "GX3672HD", - "GXV 3611", - "GXV3601HD", - "gxv3601ll", - "GXV3611HD", - "GXV3611IRC_HD", - "GXV3615WP_HD", - "GXV3651", - "GXV3651FHD", - "GXV3672_FHD_fruitsmart", - "GXV3672_HD", - "gxv3674fhd", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "3501", - "3601HD", - "3611HD", - "gvc1", - "GVX3504", - "GXV3000", - "gxv3500", - "GXV3504", - "GXV3601", - "GXV3601HD", - "GXV3610", - "GXV3610 FHD", - "GXV3610_HD", - "GXV3611HD", - "GXV3611IRC_HD", - "gxv3615", - "GXV3615W", - "GXV3615WP_HD", - "GXV3651_FHD", - "GXV3661", - "GXV3662", - "GXV3662_FHD", - "GXV3672", - "GXV3672_FHD", - "GXV3672_HD", - "LLBM Inside", - "Other", - "VIDEO SERVER" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "3501", - "3601", - "3601HD", - "3610HD", - "3611HD", - "3662", - "GKV3672HD", - "GS3500", - "GSV3611", - "GSV3662HD", - "GV-BX2400", - "GVX3504", - "GVX3611HD", - "GVX3611IR", - "GX3672HD", - "GXV 3610FHD", - "GXV 3611", - "gxv3500", - "GXV-3500", - "GXV3504", - "GXV3601", - "GXV3601_N", - "GXV3601HD", - "GXV3601LL", - "GXV3610", - "GXV3610_HD", - "GXV3611HD", - "GXV3611IR", - "GXV3611IR_HD", - "gxv3615", - "GXV3615W", - "GXV3615WP_HD", - "GXV3651FHD", - "GXV3662", - "GXV3662_FHD", - "GXV3662HD", - "GXV3672", - "GXV3672_FHD_36", - "GXV3672_HD", - "GXV3672_HD/FHD", - "GXV3672FHD", - "GXV3674_HD_VF", - "GXV3674FHD", - "IP1536B2", - "Other", - "Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "3610HD", - "GSC", - "GX3651_fhd", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "3610HD", - "3611HD", - "GSV3611", - "GXV3611IR_HD", - "GXV3672", - "GXV3672FHD", - "lauvan", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/main" - }, - { - "models": [ - "3611", - "3611HD", - "GKV3672HD", - "GSC3610", - "GSV3611", - "GV3610v2", - "GVX3611HD", - "GXV 3611", - "gxv3500", - "GXV3601_N", - "GXV3601HD", - "gxv3610", - "GXV3611HD", - "GXV3615WP_HD", - "GXV3662_FHD", - "GXV3672_HD", - "IP1536B2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/4" - }, - { - "models": [ - "3611", - "3611HD", - "GVX3504", - "GXV 3610FHD", - "GXV3500", - "GXV3504", - "GXV3610_HD", - "GXV3611HD", - "GXV3611IRC_HD", - "GXV3615", - "GXV3615W", - "GXV3615WP_HD", - "GXV3662_FHD_36", - "GXV3672", - "GXV3672_FHD", - "GXV3672_HD", - "GXV3674_HD_VF", - "Other", - "Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "goform/stream?cmd=get&channel=[CHANNEL]" - }, - { - "models": [ - "GDS3710", - "GXV3672_HD_36", - "GXV3672FHD" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/" - }, - { - "models": [ - "GDS3710", - "GXV3504", - "GXV3611HD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "GRX3611IR_HD", - "GSV3611", - "GXV3611HD", - "GXV3611IRC_HD", - "GXV3615W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 11018, - "url": "ch0_0.h264" - }, - { - "models": [ - "GVX3500" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/snapshot/view0.jpg" - }, - { - "models": [ - "gxv3240", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "GXV3504", - "GXV3504DVS", - "GXV3611IR_HD", - "GXV3662_FHD", - "GXV3672_FHD", - "HD5MP", - "Lapa", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "GXV3504" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/5" - }, - { - "models": [ - "GXV3601HD", - "GXV3611HD", - "GXV3611IRC_HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "GXV3611ir_hd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2151, - "url": "/ipcam:h264.sdp" - }, - { - "models": [ - "GXV3611ir_hd" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 151, - "url": "/goform/stream?cmd=get&channel=0" - }, - { - "models": [ - "GXV3615W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/still.cgi" - }, - { - "models": [ - "GXV3672_FHD v2", - "GXV3672FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "media/media.amp" - }, - { - "models": [ - "GXV3672_FHD_36", - "GXV3672HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "GXV3672_FHD_36", - "GXV3672FHD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GXV3672_FHD_36" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 10082, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/grandtec.json b/data/brands/grandtec.json deleted file mode 100644 index 3b22cd2..0000000 --- a/data/brands/grandtec.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "brand": "Grandtec", - "brand_id": "grandtec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1-Port Video Server", - "GD-425 4-Port Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "GD-425 4-PORT VIDEO SERVER", - "Grand IP Camera ii", - "IP Camera II", - "IP Camera Plus", - "MEGA CAM", - "Other", - "Pan Tilt V5", - "Pan/Tilt IP", - "wifi camera", - "wifi camera pro", - "wifi camera pro2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "still.jpg" - }, - { - "models": [ - "GRAND IP CAMERA PRO", - "IP Camera II", - "ip cmera iii", - "MEGA CAM", - "Other", - "wifi camera pro", - "wifi camera pro2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "GRAND IP CAMERA PRO", - "grand ip iii", - "IP camera ii", - "IP Camera Plus", - "wifi camera", - "wifi camera pro", - "wifi camera pro1", - "wifi camera pro2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP Camera Plus", - "wifi camera pro" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Mega Cam", - "MEGA PIXEL II WIFI", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Mega Cam", - "Mega Pixel II Wifi", - "MegaPixel", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/still.cgi" - }, - { - "models": [ - "Mega Pixel II Wifi" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "WIFI CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "WIFI CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/grandtech.json b/data/brands/grandtech.json deleted file mode 100644 index be724d7..0000000 --- a/data/brands/grandtech.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Grandtech", - "brand_id": "grandtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "grand ip pro", - "III" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/grant.json b/data/brands/grant.json deleted file mode 100644 index b2c2b75..0000000 --- a/data/brands/grant.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Grant", - "brand_id": "grant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "still.jpg" - }, - { - "models": [ - "2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/granvista.json b/data/brands/granvista.json deleted file mode 100644 index eb2a15d..0000000 --- a/data/brands/granvista.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Granvista", - "brand_id": "granvista", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GVP-221", - "PTZ Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/great-wall.json b/data/brands/great-wall.json deleted file mode 100644 index 4637123..0000000 --- a/data/brands/great-wall.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Great Wall", - "brand_id": "great-wall", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GW2040" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GW2040a" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "GW2078IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "GW5237" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "GW8436IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/greatek.json b/data/brands/greatek.json deleted file mode 100644 index fe69b1e..0000000 --- a/data/brands/greatek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Greatek", - "brand_id": "greatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/green-feathers.json b/data/brands/green-feathers.json deleted file mode 100644 index 07de330..0000000 --- a/data/brands/green-feathers.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "Green Feathers", - "brand_id": "green-feathers", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Gen 3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "Gen3", - "NCIP2 1080P HD POE", - "NCIP3WF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "GFIP220BWF", - "NCIP2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "GFST1GB-B01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg" - }, - { - "models": [ - "GFTX1GB-B02", - "NCC701G" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "NCIP2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/onvif/live/1" - }, - { - "models": [ - "NCIP2", - "ncp2 wifi" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - }, - { - "models": [ - "NCIP2 1080p HD PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/green-home.json b/data/brands/green-home.json deleted file mode 100644 index 965e6d3..0000000 --- a/data/brands/green-home.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Green Home", - "brand_id": "green-home", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B-300V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/greentech.json b/data/brands/greentech.json deleted file mode 100644 index 23864aa..0000000 --- a/data/brands/greentech.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Greentech", - "brand_id": "greentech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GT55", - "GT-IP21I", - "GT-IP55HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "GT-IP21I" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/greentel.json b/data/brands/greentel.json deleted file mode 100644 index 8ef1793..0000000 --- a/data/brands/greentel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Greentel", - "brand_id": "greentel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mx90" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/greenview.json b/data/brands/greenview.json deleted file mode 100644 index 79a8143..0000000 --- a/data/brands/greenview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Greenview", - "brand_id": "greenview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F3G/IPG-8930PGS-AI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/greenvision.json b/data/brands/greenvision.json deleted file mode 100644 index 2869eac..0000000 --- a/data/brands/greenvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Greenvision", - "brand_id": "greenvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GV-166-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/grey-cam.json b/data/brands/grey-cam.json deleted file mode 100644 index 27112c4..0000000 --- a/data/brands/grey-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Grey Cam", - "brand_id": "grey-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/grid-micro-corp..json b/data/brands/grid-micro-corp..json deleted file mode 100644 index 742a50a..0000000 --- a/data/brands/grid-micro-corp..json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Grid Micro Corp.", - "brand_id": "grid-micro-corp.", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPKAM", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/grisboa.json b/data/brands/grisboa.json deleted file mode 100644 index da51e38..0000000 --- a/data/brands/grisboa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Grisboa", - "brand_id": "grisboa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/groudchat.json b/data/brands/groudchat.json deleted file mode 100644 index 30a0409..0000000 --- a/data/brands/groudchat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Groudchat", - "brand_id": "groudchat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/group.json b/data/brands/group.json deleted file mode 100644 index e17b3d6..0000000 --- a/data/brands/group.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Group", - "brand_id": "group", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rvi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/grundig.json b/data/brands/grundig.json deleted file mode 100644 index 9c5937c..0000000 --- a/data/brands/grundig.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "brand": "Grundig", - "brand_id": "grundig", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GCI:K1523D", - "GCI-F4616T", - "gci-f4616w", - "GCI-K0503B", - "GCI-K0589T", - "GCI-K2505B", - "GCI-K2812", - "GCI-K2812W", - "gec-d2201ar", - "IP - MJPEG", - "IP-Cam", - "IP-CAM", - "Other", - "QLS IP-CAM", - "QLsIP-CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "GCI-F4626T", - "GCI-K0589T", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "GCI-H0522V", - "GCI-K0503B", - "GD-CI-AT8637T", - "GD-CI-BC2626V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/jpeg" - }, - { - "models": [ - "GCI-K1523V", - "GCI-K1527V", - "GCI-K1627D", - "GD-CI-BP4637T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "IP - JPEG", - "IP - MJPEG", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "IP - MJPEG" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "T6836W", - "T6836WITP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/grwibeou.json b/data/brands/grwibeou.json deleted file mode 100644 index d663a1f..0000000 --- a/data/brands/grwibeou.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Grwibeou", - "brand_id": "grwibeou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Speed dome 000A125", - "Y4C-ZA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "YCC365PLUS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/gsi.json b/data/brands/gsi.json deleted file mode 100644 index 6414358..0000000 --- a/data/brands/gsi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gsi", - "brand_id": "gsi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GS-W607IRC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gt-view.json b/data/brands/gt-view.json deleted file mode 100644 index 0349f11..0000000 --- a/data/brands/gt-view.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Gt View", - "brand_id": "gt-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GTI-30WFIR", - "QD300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/gtc.json b/data/brands/gtc.json deleted file mode 100644 index 814bfae..0000000 --- a/data/brands/gtc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gtc", - "brand_id": "gtc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "202IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "SY-IP962BMW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/gtec.json b/data/brands/gtec.json deleted file mode 100644 index f35bd12..0000000 --- a/data/brands/gtec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gtec", - "brand_id": "gtec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GT904H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gts.json b/data/brands/gts.json deleted file mode 100644 index 404503b..0000000 --- a/data/brands/gts.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gts", - "brand_id": "gts", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8CH DIGITAL VIDEO RECODER" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/guangzhou.json b/data/brands/guangzhou.json deleted file mode 100644 index 8fc174e..0000000 --- a/data/brands/guangzhou.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Guangzhou", - "brand_id": "guangzhou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5323-w", - "5522", - "5mp", - "IPC", - "ja-ca42", - "N8216-2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.jpg" - }, - { - "models": [ - "5323-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "5323-W", - "c3-y-a6", - "C5-Q-A", - "Wifi Fisheye" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "5323-W", - "5522", - "5mp", - "IPC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "5522", - "6456", - "6546", - "C3-Y-A6", - "c5-q-a", - "IPC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "N8216-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/gnz_media/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/guard.json b/data/brands/guard.json deleted file mode 100644 index 49b2eac..0000000 --- a/data/brands/guard.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Guard", - "brand_id": "guard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101ip" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Digital Clock" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Digital Clock" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Digital Clock" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/guardcam.json b/data/brands/guardcam.json deleted file mode 100644 index 1e6b2c3..0000000 --- a/data/brands/guardcam.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Guardcam", - "brand_id": "guardcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5000L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "CL-4000", - "CL-4001", - "Profile S4000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/guardian.json b/data/brands/guardian.json deleted file mode 100644 index 48dc0a1..0000000 --- a/data/brands/guardian.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Guardian", - "brand_id": "guardian", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1013", - "2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "IMX", - "IMX323", - "IMX333" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/guardzilla.json b/data/brands/guardzilla.json deleted file mode 100644 index fdbd725..0000000 --- a/data/brands/guardzilla.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Guardzilla", - "brand_id": "guardzilla", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "gz100w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "gz100w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "gz100w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "gz100w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-media/media.amp" - }, - { - "models": [ - "GZ100W" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "GZ600W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "GZB100B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/guoanvision.json b/data/brands/guoanvision.json deleted file mode 100644 index 7349f66..0000000 --- a/data/brands/guoanvision.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Guoanvision", - "brand_id": "guoanvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A1 Security Camera", - "s400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "UNLISTED", - "WiFi Smart Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/guudgo.json b/data/brands/guudgo.json deleted file mode 100644 index 67dd178..0000000 --- a/data/brands/guudgo.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "brand": "Guudgo", - "brand_id": "guudgo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av0" - }, - { - "models": [ - "BANGOOD", - "C-P08-10", - "SC-03", - "sc-2", - "v380", - "VT380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av1" - }, - { - "models": [ - "BANGOOD", - "GD-SC03", - "SC-03" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "C-P08-10", - "GD-SC11 960P", - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "GD -SC11", - "GD01", - "GD-SC01", - "GD-sc03", - "SC03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "GD01", - "gd-sc01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "GD-SC01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "GD-sc03", - "Other", - "Tuya" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "GD-SC03" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "GD-SC11 960P", - "SC-03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream2" - }, - { - "models": [ - "H265" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch01_0:554" - }, - { - "models": [ - "HD 1080P E27" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HD 1080P E27" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "SC01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "SC-03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "SD-01", - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream1" - }, - { - "models": [ - "V380pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "V380pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gvi.json b/data/brands/gvi.json deleted file mode 100644 index 350504f..0000000 --- a/data/brands/gvi.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Gvi", - "brand_id": "gvi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1CIT01", - "ICIT01", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/gw-security.json b/data/brands/gw-security.json deleted file mode 100644 index 62c6a11..0000000 --- a/data/brands/gw-security.json +++ /dev/null @@ -1,402 +0,0 @@ -{ - "brand": "Gw Security", - "brand_id": "gw-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1337IP", - "2016IP", - "2040", - "5050IP", - "5071IP", - "5072ip", - "5092IP", - "5MP", - "GW1324IP", - "GW-1340IP", - "Gw-2037", - "GW-2037IP", - "GW-2050IP", - "GW-2078IP", - "GW-2271IP", - "GW5037IP", - "GW-5071IP", - "GW-5072IP", - "GW-5080IP", - "GW5088IP", - "GW-5091IP", - "GW-N-2037IP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "1337IP", - "ge2237ip", - "GE2237IP", - "GW 200ip", - "GW-2040", - "GW-2089IP", - "GW5037IP", - "GW-5061IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2016IP", - "2037", - "2065ip", - "2078-IP", - "2261ip", - "5050IP", - "5072IPC", - "5091IP", - "5MP", - "GW 5055", - "GW1361IP", - "GW-2040IP", - "GW-2050IP", - "GW-2061IP", - "GW-2071IP", - "GW-2250", - "GW5037IP", - "GW-5050IP", - "GW-5061IP", - "GW-5071IP", - "GW-5081IP", - "HD1920", - "IP-2000", - "IP-2037", - "VDG1060DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "2250IP", - "5050IP", - "5071IP", - "5MP", - "GW 200ip", - "GW1361IP", - "GW-2037IP", - "GW-2061IP", - "GW-5050ip", - "GW5077mic", - "gw6836wpw" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "2440I", - "GW-2061IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "5050IP", - "5MP", - "GW 200ip", - "GW-2040IP", - "GW-2061", - "GW2071IP", - "GW-2250IP", - "GW-5050IP", - "GW-5071IP", - "gw-5450eip", - "IP66", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5050IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "5081IP", - "GW-1333IP", - "GW-2050IP", - "GW5037IP", - "GW-5050IP", - "GW5077MIC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "5081IP", - "5180", - "5MP", - "GW5037IP", - "GW-5071IP", - "GW-5080IP", - "GW5188IP", - "GW5237IP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "5083IP", - "5088IP", - "555", - "GW5037IP", - "GW-5072IP", - "GW5237IP", - "gw8087mmic", - "ipc 5071", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "5500" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "8171", - "GW-5437MIC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "GW 200ip", - "GW-5071IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "GW-2037IP", - "GW-2237IP", - "GW-5061IP", - "GW-5071IP", - "GW-5072IP", - "GW5088IP", - "gwsec", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "GW-2040ip", - "GW-2061IP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "GW-2061IP", - "hw10", - "KDT-HW67RC80" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "GW-2078IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "GW2737MICWIFI", - "GW5737MIC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "GW2737MICWIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - }, - { - "models": [ - "GW4028IP", - "gw-4067ipc", - "GW5161IP", - "X100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5050, - "url": "/H264" - }, - { - "models": [ - "GW4571MIP", - "unk" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch00/0" - }, - { - "models": [ - "GW5037IP", - "GW-5061IP", - "GW-5071ip", - "GW-5081IP", - "GW-5088IP", - "GW-5091IP", - "kdw-hw29rc72", - "Other", - "VDG2061IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "GW-5071IP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "GW-5080IP", - "GW-5088IP", - "GW8538IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "GW-5080IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "GW5537IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authbasic=[AUTH]" - }, - { - "models": [ - "GW822CVB", - "GW852CVB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "GW-NVR2224E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "GW-NVR2224E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=0" - }, - { - "models": [ - "VDG1389IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - } - ] -} \ No newline at end of file diff --git a/data/brands/gwelltimes.json b/data/brands/gwelltimes.json deleted file mode 100644 index 5b9d630..0000000 --- a/data/brands/gwelltimes.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Gwelltimes", - "brand_id": "gwelltimes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4056085" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif2" - }, - { - "models": [ - "HIKAM", - "IPC", - "Other", - "X7200-MJ36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/gwipc.json b/data/brands/gwipc.json deleted file mode 100644 index affce9b..0000000 --- a/data/brands/gwipc.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Gwipc", - "brand_id": "gwipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "17202082", - "6495643", - "GWIPC-21306335", - "GWIPC-31372693" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "20839787" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "20839787" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gynoii.json b/data/brands/gynoii.json deleted file mode 100644 index f3977e7..0000000 --- a/data/brands/gynoii.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gynoii", - "brand_id": "gynoii", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GPW-1025" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/gyration.json b/data/brands/gyration.json deleted file mode 100644 index 74e95b3..0000000 --- a/data/brands/gyration.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gyration", - "brand_id": "gyration", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Cyberview 400b" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/gyuk.json b/data/brands/gyuk.json deleted file mode 100644 index 9c0acb0..0000000 --- a/data/brands/gyuk.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Gyuk", - "brand_id": "gyuk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TL-SC3171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "TL-SC3171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/gzhou.json b/data/brands/gzhou.json deleted file mode 100644 index 7aa7d99..0000000 --- a/data/brands/gzhou.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Gzhou", - "brand_id": "gzhou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "standard" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/h-cam.json b/data/brands/h-cam.json deleted file mode 100644 index 9e9f879..0000000 --- a/data/brands/h-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "H-cam", - "brand_id": "h-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MZoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/h-series.json b/data/brands/h-series.json deleted file mode 100644 index 90faff4..0000000 --- a/data/brands/h-series.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "H Series", - "brand_id": "h-series", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eagle eye", - "H3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Hi3507", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/h.264-network-dvr.json b/data/brands/h.264-network-dvr.json deleted file mode 100644 index 057f842..0000000 --- a/data/brands/h.264-network-dvr.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "brand": "H.264 Network Dvr", - "brand_id": "h.264-network-dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3 IP SPY CAM", - "V4.02.R11.60426094.12000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "1.3 IP SPY CAM", - "50H10L_S38", - "ADMIN", - "AHB 8304", - "H.264", - "H264", - "IP54", - "LS-F2{HX}", - "Other", - "V4.02.R11.60426094.12000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1004P", - "ANRAN AR-VGB101-IP2.0", - "Dahua", - "DVR", - "kv:d4c2", - "Other", - "SUNLUXY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "16CH", - "720p", - "ONVIF", - "SUNLUXY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "2mpcams", - "555", - "720p", - "720P", - "DVR", - "DVR:KR-6008SV", - "H264", - "IP Dome", - "Other", - "V4.02.R11.60426094.12000", - "vvme" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "720p", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "720P", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "ADMIN", - "QVS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ADMIN", - "H.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "DMS8108-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Dtech", - "H264", - "Other", - "Sunluxy", - "SUNLUXY" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR:KR-6008SV", - "KR-6008", - "KR-6008 SV", - "Other", - "vvme" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HI3516D_83H40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HI3516EV100_50H20L_S38", - "IP Dome", - "VDTECH" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "IP54_0", - "IP54_1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "iptech", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "KPN100HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "KR-6008" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL].jpg" - }, - { - "models": [ - "KR-6008" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "KR-6008", - "ltd2304se-sl", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/guest/Video?format=MJPEG" - }, - { - "models": [ - "KR-6008SV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "KR-6008SV" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "KR-6008SV" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "ONVIF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/guest/Video?format=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "QVS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "SUNLUXY" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/h.264-vga-wireless-cube-camera.json b/data/brands/h.264-vga-wireless-cube-camera.json deleted file mode 100644 index eab8d2d..0000000 --- a/data/brands/h.264-vga-wireless-cube-camera.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "brand": "H.264 Vga Wireless Cube Camera", - "brand_id": "h.264-vga-wireless-cube-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf" - }, - { - "models": [ - "HI3516EV100_50H20L_S38" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "IPNC-CHINA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "N1350 Wireless Cube Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "RH50X20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "SP-105" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "TS-IP601W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "xm530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/h.264.json b/data/brands/h.264.json deleted file mode 100644 index 08e2024..0000000 --- a/data/brands/h.264.json +++ /dev/null @@ -1,509 +0,0 @@ -{ - "brand": "H.264", - "brand_id": "h.264", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002HMRS", - "H Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1", - "101", - "1080", - "11", - "16mmlens", - "1Mp", - "1Mpix", - "24NB", - "24NW-IP", - "2mp", - "2Mp", - "2Mpix", - "2MPix", - "321", - "5510", - "admin", - "Anram", - "anran", - "Anran", - "ANRAN", - "AnRan 1", - "Anran 24W-IP", - "Anran AR-VGB101-IP2.0", - "Anran BulletCam01", - "Anran C-C754R", - "Anran HD", - "AnranDome", - "AnranOut", - "apti", - "AR-408GW", - "asa", - "ASP-59130T", - "BEST", - "c7342", - "ccd", - "China H264", - "DC7342", - "demo", - "Dome", - "DVR", - "esc", - "esc1", - "h264", - "H264", - "H264rte", - "Hidden", - "hq vid", - "HSE", - "HView AHD-D8C4", - "IPC", - "IPC_2M", - "IPC_NT98566_N8-WQ_S38", - "ipint 1.3", - "IPNC-CHINA", - "IRW-72IP", - "kinaFckKnows", - "KIP 200V25", - "kip200", - "KIR_2mp", - "KNC-BR3421", - "Longse_SM", - "Masood", - "moja", - "N130", - "N4PW-IP", - "N51820L", - "nran", - "NVSIP", - "NVT", - "onvif", - "ONVIF", - "Other", - "qube", - "Saber", - "Saber CCTv", - "S-AP2CA", - "SCM-194730", - "UNVIEW", - "v101", - "vd123", - "vd126", - "vd221", - "vd221ip", - "vdtech", - "vgb101", - "VGB662-IP", - "VGB721-IP", - "VGW781-IP", - "XM530_85X20_T.8M", - "XM530-R80x30-PQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1.3 IP Spy Cam", - "11614ga", - "16CH", - "aOther", - "AP1164ga", - "ap-1414GA", - "China H264", - "CHINA H264", - "china01", - "CP-ip70A", - "F715-HD2002", - "fa12", - "Little Cam", - "Other", - "pst-hh201b", - "shadows1", - "UNICAD", - "vd123", - "VD123-IP", - "vd-ide1413", - "Wanzse", - "XM530_R80X20-PQ_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "104", - "106", - "107", - "108", - "109", - "3MP Camera", - "center", - "H17", - "ipnc", - "ipnc-china", - "jmv", - "onvif", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "16ch", - "50H20L_18EV200_S38", - "8port", - "h26429", - "Other", - "tsm" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "1Mpix", - "GS", - "ON VIF" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "2", - "anram", - "anran", - "Anran VG8101", - "ASP-59130T", - "B404", - "CantonK 760", - "CHINA H264", - "dome", - "esc", - "H264", - "joe", - "KIP-200NF60", - "Other", - "Saber CCTV", - "s-ap2ga", - "VGB662-IP", - "VGB721-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "50H20L_18EV200_S38" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "ADMIN", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "ADMIN", - "h26429" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ADMIN", - "ANRAN", - "CHINA H264", - "H264", - "ONVIF", - "Other", - "Speed" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ADMIN", - "scm-194730" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Anran", - "DVR", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "ANRAN AR-VGB101-IP2.0", - "DVR", - "H264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "China 1", - "gtec", - "Hiinakas", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp" - }, - { - "models": [ - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "DVR", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "h26429", - "VGW781-IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "HI3516ev100_50h20l_s38", - "HI3516EV100_50H20L_S38", - "on vif", - "ON VIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HQ VID", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC", - "NVT", - "ON VIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "ipncs" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_1" - }, - { - "models": [ - "nvsip", - "ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "NVT", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "tmzone" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "XM530_85X50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "xVim" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/mobile2:818181/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/h.265.json b/data/brands/h.265.json deleted file mode 100644 index 6366e38..0000000 --- a/data/brands/h.265.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "H.265", - "brand_id": "h.265", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "324ap", - "5MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "324ap" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "AHB80X04R-MH", - "YLC510-PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/h.view.json b/data/brands/h.view.json deleted file mode 100644 index 1e0e756..0000000 --- a/data/brands/h.view.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "brand": "H.view", - "brand_id": "h.view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1301", - "800S6", - "H-400EV", - "HD DVR 4CH", - "HV-500D1", - "HV-500E6", - "HV-500G2", - "HV-E3", - "hv-E800A", - "HV-WF800A1", - "HV-WF800A5", - "HV-XM801-E", - "IPC-H0817", - "Other", - "POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "avr-ae108", - "HV-XM502", - "IPC_NT98566_N8F", - "TV-CB6010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "C7824WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "hd dvr 4ch" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "HD DVR 4CH", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HD DVR 4CH", - "Other", - "poe" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HV-XM501-SF", - "TV-IP1011" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other", - "tp-ip1012", - "tv-1p1312", - "TV-IP1011", - "TV-IP1311", - "tv-ip1312" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "TV-CB6010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/h264-vga-wireless-cube-camera.json b/data/brands/h264-vga-wireless-cube-camera.json deleted file mode 100644 index 5859055..0000000 --- a/data/brands/h264-vga-wireless-cube-camera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "H264 Vga Wireless Cube Camera", - "brand_id": "h264-vga-wireless-cube-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3 IP SPY CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "HI3518E_50H10L_S39" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "XM530_RH50X20_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/h2md4a.json b/data/brands/h2md4a.json deleted file mode 100644 index 1eea30e..0000000 --- a/data/brands/h2md4a.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "H2md4a", - "brand_id": "h2md4a", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "tttt-203215-ucmrr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/h3-137.json b/data/brands/h3-137.json deleted file mode 100644 index 542f4e3..0000000 --- a/data/brands/h3-137.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "H3 137", - "brand_id": "h3-137", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/h3518e.json b/data/brands/h3518e.json deleted file mode 100644 index 1270c16..0000000 --- a/data/brands/h3518e.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "H3518e", - "brand_id": "h3518e", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR0130" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/h6837wi.json b/data/brands/h6837wi.json deleted file mode 100644 index 9e8cc73..0000000 --- a/data/brands/h6837wi.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "H6837wi", - "brand_id": "h6837wi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "(2)", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "(2)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "(2)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hacon.json b/data/brands/hacon.json deleted file mode 100644 index 9c42634..0000000 --- a/data/brands/hacon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hacon", - "brand_id": "hacon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "34535" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hai.json b/data/brands/hai.json deleted file mode 100644 index c15368e..0000000 --- a/data/brands/hai.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Hai", - "brand_id": "hai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp?videocodec=h264&resolution=640x480" - }, - { - "models": [ - "720P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "iproboot" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/haivison.json b/data/brands/haivison.json deleted file mode 100644 index eb1575d..0000000 --- a/data/brands/haivison.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Haivison", - "brand_id": "haivison", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "5mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "1080P", - "720p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/haiz.json b/data/brands/haiz.json deleted file mode 100644 index dac75f9..0000000 --- a/data/brands/haiz.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Haiz", - "brand_id": "haiz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3mp", - "ahd4", - "Hz-bltpoe-m2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Dual 3k" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Dual 3k" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Hz-bltpoe-m2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_1" - }, - { - "models": [ - "Hz-bltpoe-m2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_0" - }, - { - "models": [ - "Hz-bltpoe-m2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hama.json b/data/brands/hama.json deleted file mode 100644 index 113dcc7..0000000 --- a/data/brands/hama.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "brand": "Hama", - "brand_id": "hama", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "00053104" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "53101", - "53157" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "53157", - "M360" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "53157", - "M360" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "M360" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "M360" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "M360", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "M360" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "M360" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "M360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/hamlet.json b/data/brands/hamlet.json deleted file mode 100644 index 0bae57f..0000000 --- a/data/brands/hamlet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hamlet", - "brand_id": "hamlet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hnipc30w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/hamrabi.json b/data/brands/hamrabi.json deleted file mode 100644 index 646ea73..0000000 --- a/data/brands/hamrabi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hamrabi", - "brand_id": "hamrabi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hamrol.json b/data/brands/hamrol.json deleted file mode 100644 index 9d2b058..0000000 --- a/data/brands/hamrol.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "brand": "Hamrol", - "brand_id": "hamrol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "180", - "5mp ptz", - "8MP Ultra HD", - "8MP ULTRA HD", - "H5015M-XMI", - "NVT", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "EO Hamrol PTZ_2NVT", - "NVT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hamrolte.json b/data/brands/hamrolte.json deleted file mode 100644 index 191d832..0000000 --- a/data/brands/hamrolte.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Hamrolte", - "brand_id": "hamrolte", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H-A8H", - "HKBQ15L-W50", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Hdf" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "hkbc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "HKBQ15L-I30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - }, - { - "models": [ - "HKBQ15L-I50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hanbang.json b/data/brands/hanbang.json deleted file mode 100644 index 3d181be..0000000 --- a/data/brands/hanbang.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Hanbang", - "brand_id": "hanbang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hhh" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/mpeg4" - }, - { - "models": [ - "HW-A01S" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8554, - "url": "mpeg4" - }, - { - "models": [ - "hw-ipc275" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/handy-ip-cam.json b/data/brands/handy-ip-cam.json deleted file mode 100644 index 2ce2029..0000000 --- a/data/brands/handy-ip-cam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Handy Ip Cam", - "brand_id": "handy-ip-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3454" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "videofeed" - }, - { - "models": [ - "Samsung Galaxy S3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hangzhou.json b/data/brands/hangzhou.json deleted file mode 100644 index 4f085d1..0000000 --- a/data/brands/hangzhou.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "brand": "Hangzhou", - "brand_id": "hangzhou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1337", - "A8L", - "HNC312-MB", - "KuoHeng", - "Other", - "PTZIP212X20-C", - "RX8020-PQL", - "SC-303-XD", - "WHC17452" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hanhwa.json b/data/brands/hanhwa.json deleted file mode 100644 index f0428d7..0000000 --- a/data/brands/hanhwa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hanhwa", - "brand_id": "hanhwa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VDR-10002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1/media.smp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hanlin.json b/data/brands/hanlin.json deleted file mode 100644 index 1d7c77e..0000000 --- a/data/brands/hanlin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hanlin", - "brand_id": "hanlin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM175" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hanwei.json b/data/brands/hanwei.json deleted file mode 100644 index dbacffb..0000000 --- a/data/brands/hanwei.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hanwei", - "brand_id": "hanwei", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RS7507" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "RS7507" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_[CHANNEL].H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hanwha.json b/data/brands/hanwha.json deleted file mode 100644 index be1ae4e..0000000 --- a/data/brands/hanwha.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "brand": "Hanwha", - "brand_id": "hanwha", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8003", - "ANV-L6082R", - "ANV-L7012R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile02/media.smp" - }, - { - "models": [ - "IP-2000HW" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IP-2000HW", - "Other", - "SNV-6013" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "PNM-9085RQZ1", - "xrn-810s" - ], - "type": "JPEG", - "protocol": "https", - "port": 443, - "url": "/stw-cgi/video.cgi?msubmenu=snapshot&action=view&channel=5&profile=1" - }, - { - "models": [ - "Qnd-7010r" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "QNO-6070-R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=jpg" - }, - { - "models": [ - "QNV-7082R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/stw-cgi/video.cgi?msubmenu=stream&action=view&Profile=1&CodecType=MJPEG&Resolution=1920x1080" - }, - { - "models": [ - "QNV-7082R" - ], - "type": "JPEG", - "protocol": "http", - "port": 10001, - "url": "/stw-cgi/video.cgi?msubmenu=snapshot&action=view" - }, - { - "models": [ - "QNV-7082R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10001, - "url": "/stw-cgi/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "QNV-8080R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/profile4/media.smp" - }, - { - "models": [ - "wisenet" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/harex.json b/data/brands/harex.json deleted file mode 100644 index 890f4ec..0000000 --- a/data/brands/harex.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Harex", - "brand_id": "harex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3MP", - "1MP HD 720", - "720P", - "720p 1mp", - "720p IP", - "HD IP 720", - "HRX103", - "HRX-I5024P", - "HRX-I524C", - "HRX-IA604-1", - "IPCamIndoor", - "NVT-HI3518EP", - "ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "720P IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hatake.json b/data/brands/hatake.json deleted file mode 100644 index 2d02201..0000000 --- a/data/brands/hatake.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hatake", - "brand_id": "hatake", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VIGI C330" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/haucam.json b/data/brands/haucam.json deleted file mode 100644 index dd0b40e..0000000 --- a/data/brands/haucam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Haucam", - "brand_id": "haucam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/hauppauge.json b/data/brands/hauppauge.json deleted file mode 100644 index 14543f1..0000000 --- a/data/brands/hauppauge.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hauppauge", - "brand_id": "hauppauge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P", - "mySmarthome Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/haustuer.json b/data/brands/haustuer.json deleted file mode 100644 index c8dc6d5..0000000 --- a/data/brands/haustuer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Haustuer", - "brand_id": "haustuer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Grandstream" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hauwei.json b/data/brands/hauwei.json deleted file mode 100644 index cec575c..0000000 --- a/data/brands/hauwei.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hauwei", - "brand_id": "hauwei", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "U880" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/hawk-vision.json b/data/brands/hawk-vision.json deleted file mode 100644 index 25b6f65..0000000 --- a/data/brands/hawk-vision.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Hawk Vision", - "brand_id": "hawk-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "APPRO" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Hawkvision" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "K-D302MPOE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "uv ipdm15" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hawk.json b/data/brands/hawk.json deleted file mode 100644 index b327358..0000000 --- a/data/brands/hawk.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Hawk", - "brand_id": "hawk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bresta" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hawkcam.json b/data/brands/hawkcam.json deleted file mode 100644 index 3bf2b7f..0000000 --- a/data/brands/hawkcam.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Hawkcam", - "brand_id": "hawkcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SP-FJ01W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "r09" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "SP-FJ01W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SP-FJ01W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hawki.json b/data/brands/hawki.json deleted file mode 100644 index 4c41f35..0000000 --- a/data/brands/hawki.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hawki", - "brand_id": "hawki", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hawking.json b/data/brands/hawking.json deleted file mode 100644 index e3f3198..0000000 --- a/data/brands/hawking.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Hawking", - "brand_id": "hawking", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "310", - "HNC310", - "Tech HNC300 Series", - "Tech HNC320 Series", - "TVP110" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "HNC3W", - "HNC5W", - "HNC720G", - "JNC3W", - "Other", - "Tech HNC300 Series", - "Tech HNC320 Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "HNC-700PT", - "HNC720G", - "hnc800ptz", - "HNC-820G", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "HNC720G", - "Other", - "Tech HNC720G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other", - "TECH HNC290", - "Tech HNC290G", - "TECH HNC300 SERIES", - "TECH HNC320 SERIES", - "TECH HNC720G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "loginfree.jpg" - }, - { - "models": [ - "Other", - "Tech HNC290" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Tech HNC290" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Tech HNC320 Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Tech NC200 Series", - "Tech NC220 Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hawq.json b/data/brands/hawq.json deleted file mode 100644 index 9739203..0000000 --- a/data/brands/hawq.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hawq", - "brand_id": "hawq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wingdome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/snl/live/1/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/hayear.json b/data/brands/hayear.json deleted file mode 100644 index 752f010..0000000 --- a/data/brands/hayear.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hayear", - "brand_id": "hayear", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Omnivision" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hbell.json b/data/brands/hbell.json deleted file mode 100644 index 81560f5..0000000 --- a/data/brands/hbell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hbell", - "brand_id": "hbell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-camera.json b/data/brands/hd-camera.json deleted file mode 100644 index 09eeccd..0000000 --- a/data/brands/hd-camera.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "brand": "Hd Camera", - "brand_id": "hd-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4s-b05w", - "SN-IPC-5033SW-AU", - "TH661" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "6024PB-HX201", - "Q53-5MP-BL-WIFI-5X", - "sd6w1080pshx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ca-690c-r", - "Other", - "SN-IPC-5033SW-AU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "HZD-600DM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "ipodsb2ire28", - "ipod-sb2ire28", - "ptzip204wx4ir" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "JK-HD43F223HE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "JK-HD43F223HE", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "JK-HD43F223HE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Other", - "SP006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "sb2ire28" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "sp006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-cloudcam.json b/data/brands/hd-cloudcam.json deleted file mode 100644 index 2e73e24..0000000 --- a/data/brands/hd-cloudcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hd Cloudcam", - "brand_id": "hd-cloudcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CloudCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "H264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-ip-camera-depan.json b/data/brands/hd-ip-camera-depan.json deleted file mode 100644 index cce713b..0000000 --- a/data/brands/hd-ip-camera-depan.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hd Ip Camera Depan", - "brand_id": "hd-ip-camera-depan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCC N13NW" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8557, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IPCC-B15N-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-ip-dome-2.json b/data/brands/hd-ip-dome-2.json deleted file mode 100644 index f59105a..0000000 --- a/data/brands/hd-ip-dome-2.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Hd Ip Dome-2", - "brand_id": "hd-ip-dome-2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVSIP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-ip-dome.json b/data/brands/hd-ip-dome.json deleted file mode 100644 index 5f6a240..0000000 --- a/data/brands/hd-ip-dome.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hd-ip Dome", - "brand_id": "hd-ip-dome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live/ch0" - }, - { - "models": [ - "HD54F-4MP-30X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-ipc.json b/data/brands/hd-ipc.json deleted file mode 100644 index 0afb488..0000000 --- a/data/brands/hd-ipc.json +++ /dev/null @@ -1,940 +0,0 @@ -{ - "brand": "Hd Ipc", - "brand_id": "hd-ipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "1024", - "105", - "1080p 2MP", - "110", - "1100", - "117", - "1200HB", - "1200-hg", - "1243", - "136", - "151A", - "1M1G", - "1m1w", - "1MB1G", - "1mb1w", - "1MB1W HD", - "1MBMW", - "1md1g", - "1md4", - "2100", - "2432", - "2MB2", - "2mb2g", - "2MB2W", - "2mb86p", - "2MD3W", - "2mp", - "345t3", - "648", - "720 3", - "720 4", - "A110", - "A288870944", - "ahwvse", - "ali cam", - "ANT", - "ATC-2", - "Bebek", - "bullet", - "C1066DN2-P", - "Care Cam", - "china no name", - "ChinaATV", - "ChinaUnk", - "Chinese", - "Cina dlouho trvalo", - "CV-IP5020C", - "DL-550", - "Dome", - "Edge 41", - "Edge 42", - "Edge 43", - "Edge 44", - "ELEC", - "elevator", - "ESCAM QF605", - "EZVIZ", - "Fixed", - "flur", - "fullhd", - "greie", - "H.264 720P", - "H113", - "H210", - "h6837wi", - "H6C-P-20", - "haiwvision", - "HAREX", - "HAREX 1MP 720p", - "Harex 2MP", - "Harex test", - "Hartex", - "Hawii", - "HD 988 W-A", - "HD IPC 1", - "HD720 2", - "HD988", - "HDCAM", - "hdready", - "hinten", - "homsafe-1md1g", - "Hosafe", - "hosafe 1080", - "Hosafe 1mb1w", - "HOSAFE 2MB2W", - "HoSafe_m1b1w_A1", - "HOSAFE-1MB1G", - "HOSAFE-2MB3W", - "HOSAFE-2MB8P", - "Hoscam", - "HRX", - "HRX-I5024", - "HRX-I5024P", - "HRX-I524C", - "HZD-600DM", - "i5024", - "i6032b-p", - "I6032W-P", - "icc", - "id 6032", - "idn", - "iinan", - "Imd1g", - "IP Bullet", - "ip10", - "IP720", - "IPC", - "IPC -SA1100HB", - "ipc1100ha", - "IPCAM ONVIF", - "IPC-H110-B", - "IPC-H6310", - "IPC-TP-2191", - "IPW4-04", - "JAPOS2", - "Joivision", - "jovin", - "jovision", - "jovision JVS-N61-NA", - "JVS DA230", - "JVS N61NA", - "kapu", - "KDM-A 102", - "m1b1w-A1", - "mini001", - "MiniDOME", - "model", - "MY 304", - "MY103", - "MY-307", - "MY310", - "MY36", - "N61", - "NC649M-P", - "NC848M-P", - "NCN01", - "nnn1", - "nvsip", - "NVSIP", - "onvif", - "Other", - "ovision", - "OWLVISION", - "pavsul", - "ppp", - "profile s", - "qf605", - "R-10", - "REO", - "Reolink", - "Revotech_1706", - "S817720226", - "SACAM", - "SA-IPC1100", - "SA-IPC1100HB", - "SA-ipc1100hc", - "SA-IPC1100-HC", - "sa-ipc1100hi", - "SA-IPC1200HG", - "SA-IPC1200HI", - "sculink", - "SECULINK", - "Seculink1100", - "Seculink1100HA", - "securecam", - "Securlink", - "Sinocam", - "stropna", - "v200", - "Walisec", - "Walle Cam", - "whitedome", - "WS-N2BL2-4", - "ws-n2bm1-vp", - "xenon", - "zmodo", - "Zoneway", - "zosi", - "ZW-NC 649M-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "1.0", - "HOSAFE 1080", - "IPCAM1080P", - "MEGAPIXEL IP CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "100", - "1020", - "1080", - "1080P", - "1111", - "122", - "1233", - "16043", - "1pcc", - "2014", - "204", - "2mp", - "3400-ov9712a", - "3500", - "3500-ov9712a", - "3550", - "3mp", - "3MP", - "454", - "5 mp", - "5 MP", - "54009", - "630", - "692a", - "720p30", - "864", - "alan", - "AP013", - "B 12", - "B10A", - "B11N-WA", - "B12NW", - "b15", - "B15N-W", - "B603W", - "B80L", - "BC-1207", - "BT13N-W", - "buiten", - "BULLET", - "buyee", - "C6F0SoZ3N0PdL2", - "ccip", - "Cesta Bubo", - "chinacam", - "CHINACAM", - "chinardi", - "cl-4001", - "cmc", - "cms", - "colcam", - "Cotier DM-G31-2S", - "CYBOIP", - "CYBOIP-W03", - "d09-w", - "D300", - "dannetest", - "Day IP", - "DBPOWER C300E", - "DBPower-1", - "DG900", - "Digitud", - "DIGITUS", - "DM 16040", - "DN-16040rev2", - "DN16040Rev2", - "dn-16046", - "dn2", - "DOME", - "EC-1207", - "Edimax", - "efdw", - "eSCAM", - "Escam Brick 900", - "ESCAM BRICK QD300", - "ESCAM IP66", - "ESCAM QF300", - "escamQD900", - "esense", - "EXCELVAN", - "Eye03L", - "EYEcam", - "eyecam-link", - "Funwe", - "Funyai", - "Funzionante", - "FY-UHE20SWF", - "GTN-EYE01W", - "H04", - "H05", - "h05s", - "h264", - "H264", - "HaasCam", - "HawkCam", - "HDCAM", - "HDIP", - "HDIPC", - "HOOTOO", - "Hootoo ip008", - "HOOTOO IP211HDP", - "HOSAFE 1080", - "HT IP211", - "ht692", - "HT-IP008HDP", - "ht-ip211hdp", - "HT-IP211HDP", - "HT-IP212HDP", - "HZD-600DM", - "HZnaet", - "I463", - "ICAM606", - "ICAM-903", - "ICC-B13N-W", - "IIPC", - "IIPC B13N", - "Inside Dome", - "IP01", - "IP100BW", - "IP123", - "ip2", - "ip391w-hd", - "IP391wHD", - "IP720P-32B", - "IPA", - "IP-B12NW", - "IP-CAM-02", - "IPCAM1080P", - "IPCamera2", - "IPCC", - "ipcc b13n w", - "IPCC B13N W", - "ipcc d09-w", - "ipcc h03", - "IPCC15", - "ipcc-b10", - "IPCCB10", - "IPCC-B10a", - "IPCC-B10A", - "IPCC-B12", - "IPCC-B12NW", - "IPCC-B12W", - "ipcc-b15n", - "IPCC-B15N-W", - "IPCC-B24", - "IPCC-D08", - "IPCC-D09-W", - "IPCC-H04", - "ipcloud", - "IPCLOUDCAMERA", - "IPCW", - "IPPC-D08", - "ips", - "IPS-E01312VW", - "IPSeye_01A", - "IPS-HS 1822L", - "ips-hs1812vw", - "IRKina", - "JV-ND406HD3", - "MEGAPIXEL IP CAM", - "meme", - "Mie", - "MISC", - "MP1", - "NC856MV", - "neew", - "NTDOOR", - "NVSIP", - "onb", - "onvif", - "ONVIF", - "Other", - "OWL", - "OWLVISION", - "P2P", - "p2p camera", - "P2PCAM", - "P66", - "passage", - "pc530", - "Phoenix", - "Pluto", - "POE", - "PPRT-000235-PFYMF", - "prato", - "PROFILE S", - "PTZ-China", - "Q6320", - "q9450r", - "qd300", - "QD500", - "qd6320", - "QD900", - "QD900WIFI", - "QF510", - "QUESTAVA", - "R-N400A5", - "RTT 3300", - "rtt3300", - "RTT-3400", - "RTT-3500", - "RTT-51", - "RTT-5100", - "RTT-5900", - "S6203Y-WRA", - "sad", - "Saeed-Cam", - "Sam", - "scam1", - "SD05W", - "SP-P1802SPTZ", - "SP-P1802SWPTZ", - "SP-P18038S-POE", - "sp-p701w", - "SP-P702W", - "SP-P702WPTZ", - "SP-P703W", - "Sricam", - "SRICAM", - "Starcam", - "static", - "steve cam", - "Stick Mount", - "Stugan", - "Sumvision", - "Suneyes", - "Sunvision", - "Sunvision-5", - "SV#3C", - "sv_B603W", - "SV19", - "SV-B603VV 03", - "svb603w", - "sv-b603W", - "sv-b803w", - "sv-do2poe-1080", - "th624", - "TH661", - "TH692", - "Tier", - "Turner 1", - "TV-651EH2/IP", - "UFO", - "Unk", - "UXD Dome", - "UXD2MP", - "vchod BuboBubo", - "view", - "w15", - "wandern", - "WD900", - "web", - "white", - "white dome", - "WR103W", - "zoom", - "ZW NC862MW-P", - "ZW-NC638MW-P", - "ZW-NC857MW-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080P", - "1080P 2MP", - "china", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile1" - }, - { - "models": [ - "1080P WiFi Telecamera", - "1M1G", - "c25", - "CF26-37SM400-PL", - "china", - "cid c0919115a8973", - "EYECAM", - "H264", - "HOSCAM", - "ONVIF", - "Other", - "sh029", - "SRICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "117", - "1200HB", - "1221", - "130", - "1mb1w", - "1md1g", - "2.0mp", - "2.18", - "222222", - "2MD3W", - "54tqk01", - "777", - "960ipc", - "ab-1002hb", - "ASCAM", - "Atlantis", - "ChinaWebCam", - "dsk603", - "dssd", - "Edge", - "Edge 43", - "Edge 44", - "ezviz", - "h.264 720p", - "H113", - "HAREX", - "hd 988", - "HD IPC 1", - "HD988 W-A", - "HDCAM", - "hdip", - "hdready", - "Hosafe", - "hosafe256", - "HZD-600DM", - "imd1g", - "IPC-TP2191", - "KDM-A111", - "metsuki", - "MUSZLOWA", - "MY-304", - "nc400", - "NVSIP", - "nvsip pic", - "Other", - "qf604", - "radu", - "Rohit", - "s31430895", - "SA-IPC1200HG", - "SA-IPC1200HI", - "SECULINK", - "WAD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - }, - { - "models": [ - "130", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "2431", - "HOOTOO", - "MEGAPIXEL IP CAM", - "ONVIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "30sf" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "453", - "China2", - "mojecam", - "NVS-DM36X", - "Other", - "TE72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "640cam", - "720P", - "8700", - "B12", - "B12NW", - "B603W", - "Biru", - "bubo vchod", - "C300E", - "C6F0SoZ3N0PdL2", - "Cotier", - "CVADY-I454", - "ddd", - "Deck", - "digitud", - "Digitus", - "Digitus OptiGuard", - "DN-16043", - "ESCAM", - "esense", - "EyeCam", - "EYECAM", - "FY-UHE20SWF", - "HAWKCAM", - "HDIPC", - "hi3516e", - "HooToo IP211HDP", - "HOOTOO IP211HDP", - "HOSAFE 1080", - "HR106-W", - "HT-IP211HDP", - "IP-1002DC", - "IP391W-HD", - "ip720", - "IPC1MP", - "IPCC", - "IPCC B13N W", - "IPCC N13NW", - "IPCC-B12NW", - "IPCC-B20", - "IPCC-B24", - "IPCC-D09-W", - "IPS-HS 1822L", - "KtoToWie", - "mega-pixel", - "NC862MW-P", - "Other", - "p2p", - "p2p camera", - "QD900", - "QD900-1", - "Rtt3300", - "RTT-5900", - "SVC3 1080P", - "TH662", - "TH692", - "UXD2MP", - "WJRRH", - "ze5", - "ZOSI", - "ZS5101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "ALDI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "CHINAATV", - "HAIWVISION", - "HOSAFE-1MB1G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "da-ip8517", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "DB-POWER", - "IPCAM1080P", - "ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "H SERIES", - "HOSAFE 1080" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "H264", - "IPCLOUDCAMERA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "HAREX 2MP" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "HD54F-4MP-30X", - "Other", - "SAEED-CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "hd-ip ai" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "HDIPC" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "HI3516E_IPNC", - "NVT-HI3516EV200-V20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/main" - }, - { - "models": [ - "IOTRA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "ipc3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "IPCAM1080P", - "IPCC-B15N-W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPCC N13NW", - "MEGAPIXEL IP CAM", - "ONVIF", - "zavio" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8557, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IPCC-B15N-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "MISC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "MISC", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "NVSIP", - "Other", - "PTZ05-18x", - "SRICAM", - "UFO" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "12" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "PTZ05-18x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "mpeg4" - }, - { - "models": [ - "PTZ05-18x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "SRICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-link.json b/data/brands/hd-link.json deleted file mode 100644 index 054bf7b..0000000 --- a/data/brands/hd-link.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "brand": "Hd Link", - "brand_id": "hd-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5222L", - "936L (H.264)", - "Play" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "5222LB1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live3.sdp" - }, - { - "models": [ - "930 L", - "930 L - A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "930 L", - "932-L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "930 L IP", - "930 La", - "930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "930L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "932-L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "D5030L", - "DCS 933L", - "DCS-032L", - "DSL-936L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "DCS 5300W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "DCS- 933L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "DCS-2530-L" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "_gCVimage.jpg" - }, - { - "models": [ - "dcs930" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DCS-936L" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play3.sdp" - }, - { - "models": [ - "DVS-301" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_hd.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-megapixel.json b/data/brands/hd-megapixel.json deleted file mode 100644 index 5976819..0000000 --- a/data/brands/hd-megapixel.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hd Megapixel", - "brand_id": "hd-megapixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H2MB4WA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "IP Cloud Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-minicam.json b/data/brands/hd-minicam.json deleted file mode 100644 index 01f0b65..0000000 --- a/data/brands/hd-minicam.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Hd Minicam", - "brand_id": "hd-minicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Minicammcc", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "MINICAMMCC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Minicamv", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd-wireless.json b/data/brands/hd-wireless.json deleted file mode 100644 index 1495010..0000000 --- a/data/brands/hd-wireless.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hd Wireless", - "brand_id": "hd-wireless", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hd.json b/data/brands/hd.json deleted file mode 100644 index 498eea2..0000000 --- a/data/brands/hd.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "brand": "Hd", - "brand_id": "hd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK-3509HD100" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "am-c732" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - }, - { - "models": [ - "skynet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "SW", - "x5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdcam.json b/data/brands/hdcam.json deleted file mode 100644 index 15f8deb..0000000 --- a/data/brands/hdcam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Hdcam", - "brand_id": "hdcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdcvi.json b/data/brands/hdcvi.json deleted file mode 100644 index f4ab62f..0000000 --- a/data/brands/hdcvi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hdcvi", - "brand_id": "hdcvi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HCVR5108H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hddcam.json b/data/brands/hddcam.json deleted file mode 100644 index d46ed9e..0000000 --- a/data/brands/hddcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hddcam", - "brand_id": "hddcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hgjhg56" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdipc.json b/data/brands/hdipc.json deleted file mode 100644 index f7fcf16..0000000 --- a/data/brands/hdipc.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Hdipc", - "brand_id": "hdipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MPPTZ", - "786", - "8300-imx122", - "9999", - "B01POE", - "Bullet", - "domecam", - "ext-mob", - "h.265", - "hall", - "JIVISION", - "lato 1", - "Other", - "outcam", - "QD4000", - "s6203y", - "Side", - "SouthDoor", - "SV-B01POE", - "sv-b01poe-1080", - "SV-B01POE-1080P", - "svbc", - "SVC3 1080p", - "TWC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "2MPPTZ", - "4sdot", - "720HD", - "ANT", - "h.264", - "Hall 640", - "IPC", - "IPC 720 HD", - "Other", - "outcam1", - "PR115", - "QD400", - "RTT-5300", - "SV-BIIVPOE", - "WiFi Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdipcam.json b/data/brands/hdipcam.json deleted file mode 100644 index f49ba4c..0000000 --- a/data/brands/hdipcam.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "brand": "Hdipcam", - "brand_id": "hdipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2345" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "2345", - "C6F0SeZ3N0P5L0", - "IPCC-B15N-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "2431", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "C6F0SeZ3N0P5L0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Eingang", - "IPCC", - "IPCC-B15N-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "HOSAFE 1080", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/12" - }, - { - "models": [ - "ip hd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "IP935FW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IP935FW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "IPCC15" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "ITcam", - "Metal", - "Mini2MP", - "Other", - "ST-222" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "JOVISION", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "OASIS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "ONVIFD" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WHITEDOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdl.json b/data/brands/hdl.json deleted file mode 100644 index 2ae4f3f..0000000 --- a/data/brands/hdl.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Hdl", - "brand_id": "hdl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HMEG-70/70W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264/ch[CHANNEL]" - }, - { - "models": [ - "HMEG-70/70W (rtsp)" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "HMEG-70P/70DVIR", - "HMEG-80PIR", - "HMS1 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "HMEG-70P/70DVIR", - "HMEG-80PIR", - "HMS1 Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/stream.cgi?nowprofileid=[CHANNEL]" - }, - { - "models": [ - "HMEG-70P/70DVIR", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdp-1100pt.json b/data/brands/hdp-1100pt.json deleted file mode 100644 index 29defa0..0000000 --- a/data/brands/hdp-1100pt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hdp-1100pt", - "brand_id": "hdp-1100pt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dp104" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdpro.json b/data/brands/hdpro.json deleted file mode 100644 index 62d9146..0000000 --- a/data/brands/hdpro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hdpro", - "brand_id": "hdpro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hds.json b/data/brands/hds.json deleted file mode 100644 index 58f3d47..0000000 --- a/data/brands/hds.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hds", - "brand_id": "hds", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "special/Cam[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hdview.json b/data/brands/hdview.json deleted file mode 100644 index 907a9aa..0000000 --- a/data/brands/hdview.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hdview", - "brand_id": "hdview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome", - "IPVD3MS-2.8-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/he-wifi.json b/data/brands/he-wifi.json deleted file mode 100644 index 91e8c79..0000000 --- a/data/brands/he-wifi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "He-wifi", - "brand_id": "he-wifi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100pcx" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heanworld.json b/data/brands/heanworld.json deleted file mode 100644 index 008f1f5..0000000 --- a/data/brands/heanworld.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Heanworld", - "brand_id": "heanworld", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1020W", - "HA-101W", - "HA-1030W", - "HA-108W", - "HA-191W", - "HA-h3050W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1030w", - "720p", - "ha-1030w", - "HA-106W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hed.json b/data/brands/hed.json deleted file mode 100644 index 60cd84c..0000000 --- a/data/brands/hed.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hed", - "brand_id": "hed", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "668A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heden.json b/data/brands/heden.json deleted file mode 100644 index 969abc8..0000000 --- a/data/brands/heden.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "brand": "Heden", - "brand_id": "heden", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.2.3", - "camcamh04ipw", - "CAMH04IPWE", - "CAMHED02IP", - "CAMHED04IPWN", - "Other", - "VisionCam", - "VISOCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "2.2.3", - "CAMH04IPWE", - "CAMHD01FX0", - "CAMHD06MD0", - "CAMHED02IP", - "CAMHED04IP", - "CAMHED04IPWN", - "CAMHED05IPWN", - "int", - "Other", - "v5.5", - "VISIONCAM", - "visocam", - "VISOCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C5F0S7Z0N0P0L0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videostream.asf" - }, - { - "models": [ - "CAMH04IPWE", - "CAMHED04IP", - "CAMHED04IPWN", - "CAMHED05IPWN", - "IP02", - "ip60w", - "Other", - "v5.5", - "VISIONCAM", - "visocam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CAMH04IPWE", - "Crna", - "Other", - "v5.5", - "VISIONCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "CAMH04IPWE", - "CAMHED04IPWN", - "CAMHED05IPWN", - "Other", - "VisionCam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "CAMH04IPWE", - "CAMHED02IPW", - "CAMHED04IP", - "CAMHED04IPWN", - "CAMHEDIPWP", - "Other", - "VisionCam", - "visionCam 5.6" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CAMH04IPWE", - "CAMHED02IP", - "CAMHED04IP", - "camhed04ipwn", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "CAMH04IPWE", - "dome", - "HEDP4IW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "CAMHD03FX0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CAMHD05MD0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "CAMHED04IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CAMHED04IP", - "CAMHED05IPWB", - "CAMHED05IPWN", - "crna", - "VisionCam", - "visocam", - "VISOCAM_crna" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "CAMHED04IP", - "CAMHED04IPWN" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "CAMHED04IPWN" - ], - "type": "VLC", - "protocol": "http", - "port": 81, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CAMHP71PWI" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "hedp4ipwb" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi" - }, - { - "models": [ - "HEDP4IW", - "Other", - "visionCam 5.6" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HEDP4IW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "visionCam 5.6" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1502, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "VisionCam 5.6" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/heetoo.json b/data/brands/heetoo.json deleted file mode 100644 index b9adb1c..0000000 --- a/data/brands/heetoo.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Heetoo", - "brand_id": "heetoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EXPLOTEC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "HT501-L", - "HT8260", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "HT8260", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heimlink.json b/data/brands/heimlink.json deleted file mode 100644 index f6d9cb1..0000000 --- a/data/brands/heimlink.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Heimlink", - "brand_id": "heimlink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CloudCam", - "hm202", - "HM203", - "hm311" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/heimvision.json b/data/brands/heimvision.json deleted file mode 100644 index 0be3518..0000000 --- a/data/brands/heimvision.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "brand": "Heimvision", - "brand_id": "heimvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "201", - "hm202A", - "Protect B2", - "Protect D1 HM612 PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "201", - "HM 241", - "hm202A", - "hm203", - "hm311", - "HMA2", - "hme311", - "protect D1", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "241", - "H-241", - "HM 241" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "241", - "cloudcam", - "hm202A", - "HM311" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av0" - }, - { - "models": [ - "311", - "hm311" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "311", - "HM311" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.554" - }, - { - "models": [ - "311", - "Protect ID1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "92.168.0.18", - "CloudCam", - "hm202A", - "HM211", - "hm311", - "Protect B2", - "Protect D1", - "Protect D1 HM612 PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/MainStream" - }, - { - "models": [ - "ca1", - "hm541" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "CloudCam", - "hm202A", - "hm203", - "hm311", - "Other", - "Protect D1", - "PROTECT D1", - "Protect D1 HM612 PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "CLOUDCAM", - "HM 241", - "Wireless" - ], - "type": "JPEG", - "protocol": "http", - "port": 49779, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CLOUDCAM", - "HM 241" - ], - "type": "JPEG", - "protocol": "http", - "port": 49779, - "url": "/cgi-bin/snapshot.cgi?chn=3&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CLOUDCAM", - "hm241" - ], - "type": "JPEG", - "protocol": "http", - "port": 49779, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CLOUDCAM", - "HE6800SB", - "HM203", - "HM311", - "Protect D1", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "H241", - "HM 241", - "HM541" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HM 241" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=" - }, - { - "models": [ - "HM 245" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "hm202A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "hm202A", - "HM311" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av1" - }, - { - "models": [ - "hm203" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "hm203" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "hm211", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/SubStream" - }, - { - "models": [ - "hm311" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "mh612" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/heisee.json b/data/brands/heisee.json deleted file mode 100644 index dd6c76d..0000000 --- a/data/brands/heisee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Heisee", - "brand_id": "heisee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360 DOM CHINA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heitel.json b/data/brands/heitel.json deleted file mode 100644 index 2c7e1b2..0000000 --- a/data/brands/heitel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Heitel", - "brand_id": "heitel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "webclisession/image_req0?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heivision.json b/data/brands/heivision.json deleted file mode 100644 index c244d93..0000000 --- a/data/brands/heivision.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Heivision", - "brand_id": "heivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "02EN", - "HM203" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "2.0mp IP Camera" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "HM 241" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "HM 241" - ], - "type": "JPEG", - "protocol": "http", - "port": 49779, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HM202", - "HM203", - "HM205", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "HM203" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "HM203" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "HM205" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam0/mjpeg" - }, - { - "models": [ - "HS214", - "HV214" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Megapixel IP Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av0" - }, - { - "models": [ - "protect d 1 ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heiwell.json b/data/brands/heiwell.json deleted file mode 100644 index 7645ac4..0000000 --- a/data/brands/heiwell.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Heiwell", - "brand_id": "heiwell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/helios.json b/data/brands/helios.json deleted file mode 100644 index 24ff1a5..0000000 --- a/data/brands/helios.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Helios", - "brand_id": "helios", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2n", - "IP Force", - "IP FORCE", - "IP Vario" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IP-54-1190-0554" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mjpeg_stream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/hemkamera.json b/data/brands/hemkamera.json deleted file mode 100644 index 8e9e910..0000000 --- a/data/brands/hemkamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hemkamera", - "brand_id": "hemkamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sw30474689" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/henelec.json b/data/brands/henelec.json deleted file mode 100644 index 4d2cac8..0000000 --- a/data/brands/henelec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Henelec", - "brand_id": "henelec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "42IPRVF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "42IPRVF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/hengda.json b/data/brands/hengda.json deleted file mode 100644 index b9e24f9..0000000 --- a/data/brands/hengda.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hengda", - "brand_id": "hengda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD-119" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "HIP-31L2J" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hengstar.json b/data/brands/hengstar.json deleted file mode 100644 index 3d73cc5..0000000 --- a/data/brands/hengstar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hengstar", - "brand_id": "hengstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hs-ipcm16140/40" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/hennda.json b/data/brands/hennda.json deleted file mode 100644 index 71d94d3..0000000 --- a/data/brands/hennda.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hennda", - "brand_id": "hennda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP108" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hensel.json b/data/brands/hensel.json deleted file mode 100644 index 0396b35..0000000 --- a/data/brands/hensel.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hensel", - "brand_id": "hensel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hnc-b1220s", - "hnc-b2320r-vfs" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/herkules.json b/data/brands/herkules.json deleted file mode 100644 index 323d0ba..0000000 --- a/data/brands/herkules.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Herkules", - "brand_id": "herkules", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/herospeed.json b/data/brands/herospeed.json deleted file mode 100644 index fab7ee0..0000000 --- a/data/brands/herospeed.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "brand": "Herospeed", - "brand_id": "herospeed", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "00x", - "100", - "1080P", - "115VP", - "116VWZ", - "211VP", - "322", - "3516", - "3516CV300", - "3516D_OV4689", - "3516D_OV468g", - "3815c", - "4325", - "4516", - "4mp", - "777", - "AirLive POE-5010HD", - "AVHN20H100", - "b24a", - "b49b", - "BabyBullet", - "BS-BN24S200", - "bullet", - "cam-002", - "CHD-B1", - "china", - "Chris Cam", - "cinaX1", - "cornet 420", - "csd", - "D20M210", - "dds", - "Dome", - "ENTREE", - "eyecam", - "FH8856", - "fish", - "GV-003", - "Hero", - "hola", - "Horus", - "hs1", - "hs3245", - "HS3518", - "IDMF24IR", - "IP-100A40", - "IP54", - "ipc", - "iphd", - "ips", - "Iptronic ip720d2", - "iptronic1", - "iptronic2", - "ixtrima", - "Junk", - "KIP-100R20H", - "kip-200cd20h", - "kjbh", - "LIG40S200", - "liv60s400w", - "Longse", - "Longse LIZM40T200", - "MCI281D6", - "MCI281E6", - "MCI28Y9", - "mine", - "MW HD-CAM", - "MY1", - "Neview", - "NEXUS 154F", - "Nexus 219F", - "Novell", - "ONVIF", - "Other", - "Premio", - "provideo", - "S1010", - "S2L33M", - "S9811", - "S9829", - "SigmaStar", - "Speed", - "testhero", - "TI8099", - "U90VW", - "UVIC-5STB21M", - "VC-10IPBLFF2", - "videre" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "101", - "122", - "3231", - "720", - "CORNET", - "FH8856", - "H100", - "HS3245", - "icam", - "IPC", - "KHKHL200W", - "kip-100sl20h", - "longse", - "mine", - "MW HD-Cam", - "Other", - "S9829", - "SPZ", - "TI8099", - "VANDAL", - "XVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "132", - "HID-2031S", - "Other", - "XVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7000, - "url": "/2" - }, - { - "models": [ - "3516" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "3516", - "4516", - "Dome", - "hs3245", - "Other", - "Panorama", - "S9811" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "gs-ip5s", - "IPC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "HS3518", - "LONGSE LIZM40T200", - "ONVIF", - "Other", - "PREMIO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IPC", - "KIP 578VR", - "LONGSE", - "Other", - "PREMIO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "IPC", - "NEXUS 219F-GR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "IPC", - "IPC2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "IPC2", - "LONGSE", - "NOVELL", - "nvr", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7000, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ONVIF" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hesa.json b/data/brands/hesa.json deleted file mode 100644 index f1387f1..0000000 --- a/data/brands/hesa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hesa", - "brand_id": "hesa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Galileo 4RTX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Galileo 4RTX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hesavision.json b/data/brands/hesavision.json deleted file mode 100644 index f93de22..0000000 --- a/data/brands/hesavision.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Hesavision", - "brand_id": "hesavision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cinese" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - }, - { - "models": [ - "Other", - "TCN-20BM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/hessu.json b/data/brands/hessu.json deleted file mode 100644 index fdfec37..0000000 --- a/data/brands/hessu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hessu", - "brand_id": "hessu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WHD318B" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hexa.json b/data/brands/hexa.json deleted file mode 100644 index 7275e10..0000000 --- a/data/brands/hexa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hexa", - "brand_id": "hexa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1701XM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/heystop.json b/data/brands/heystop.json deleted file mode 100644 index dc77748..0000000 --- a/data/brands/heystop.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Heystop", - "brand_id": "heystop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mini cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "miny cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hfws.json b/data/brands/hfws.json deleted file mode 100644 index d40fc57..0000000 --- a/data/brands/hfws.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Hfws", - "brand_id": "hfws", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HF-NMW620-A20A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HF-NSW631-B80C", - "HF-NSWAF719-B80D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hhi.json b/data/brands/hhi.json deleted file mode 100644 index 8a95e7a..0000000 --- a/data/brands/hhi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hhi", - "brand_id": "hhi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P34H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "ST-VBIP4002DL6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi-focus.json b/data/brands/hi-focus.json deleted file mode 100644 index 81d081e..0000000 --- a/data/brands/hi-focus.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Hi-focus", - "brand_id": "hi-focus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3Mp" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "HD401W1-H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "HD401W1-H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi-fun.json b/data/brands/hi-fun.json deleted file mode 100644 index 81d4b44..0000000 --- a/data/brands/hi-fun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hi-fun", - "brand_id": "hi-fun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cooah" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi-jin.json b/data/brands/hi-jin.json deleted file mode 100644 index d44a99e..0000000 --- a/data/brands/hi-jin.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Hi-jin", - "brand_id": "hi-jin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JN720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "JN720" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi-silicon.json b/data/brands/hi-silicon.json deleted file mode 100644 index efbfd3c..0000000 --- a/data/brands/hi-silicon.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "brand": "Hi Silicon", - "brand_id": "hi-silicon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3158", - "3518", - "B18EV200HX", - "HI3516C", - "NB-XVR-80N08T-LME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "50H20L", - "HI3516C", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HI 3507" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Hi3516c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "HI3516C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HI3516C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Hi3518E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPDOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "TC98" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "TC98" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi-view.json b/data/brands/hi-view.json deleted file mode 100644 index 368ff4b..0000000 --- a/data/brands/hi-view.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Hi View", - "brand_id": "hi-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS-2CD1141-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "General" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "hiview", - "HP-55A20PE", - "Other", - "robot 20-40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HIVIEW", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HW-33A20L" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-CAMERA-ID002A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi3507.json b/data/brands/hi3507.json deleted file mode 100644 index 958fe23..0000000 --- a/data/brands/hi3507.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Hi3507", - "brand_id": "hi3507", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "Other", - "RS7507H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "N-514", - "Other", - "RS7507H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/ch0_1.h264" - }, - { - "models": [ - "RS7507H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "RS7507H" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/net_jpeg.cgi?ch=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi3518.json b/data/brands/hi3518.json deleted file mode 100644 index 8479cd0..0000000 --- a/data/brands/hi3518.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Hi3518", - "brand_id": "hi3518", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Boavision" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "hd security camera" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "RS7518" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hi5.json b/data/brands/hi5.json deleted file mode 100644 index 17086fc..0000000 --- a/data/brands/hi5.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hi5", - "brand_id": "hi5", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD 720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hicam.json b/data/brands/hicam.json deleted file mode 100644 index 0555d78..0000000 --- a/data/brands/hicam.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Hicam", - "brand_id": "hicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2axqi ar d1", - "577hg", - "C9F0SeZ0N0P4L0", - "CCCC-041029-CPRNE", - "CT0276BKUK", - "EEEE-165313-DUJHE", - "luna", - "Other", - "s62" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "ap02", - "cooau", - "floodlight", - "Skolegata" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "AP02", - "ap2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "CCCC-041029-CPRNE", - "mmm-129115-ddaaf", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/hicc-2300t.json b/data/brands/hicc-2300t.json deleted file mode 100644 index 4c05c29..0000000 --- a/data/brands/hicc-2300t.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hicc-2300t", - "brand_id": "hicc-2300t", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVL Bullet", - "hd dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hicc-p-3100.json b/data/brands/hicc-p-3100.json deleted file mode 100644 index 8805ba9..0000000 --- a/data/brands/hicc-p-3100.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hicc-p-3100", - "brand_id": "hicc-p-3100", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hichip.json b/data/brands/hichip.json deleted file mode 100644 index ccd975d..0000000 --- a/data/brands/hichip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hichip", - "brand_id": "hichip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hidetech.json b/data/brands/hidetech.json deleted file mode 100644 index c6938ef..0000000 --- a/data/brands/hidetech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hidetech", - "brand_id": "hidetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GTN-EYE01W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hidrokemel.json b/data/brands/hidrokemel.json deleted file mode 100644 index a6fbb06..0000000 --- a/data/brands/hidrokemel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hidrokemel", - "brand_id": "hidrokemel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "greatek" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hifocus.json b/data/brands/hifocus.json deleted file mode 100644 index c465e47..0000000 --- a/data/brands/hifocus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hifocus", - "brand_id": "hifocus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiina.json b/data/brands/hiina.json deleted file mode 100644 index 50bb475..0000000 --- a/data/brands/hiina.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hiina", - "brand_id": "hiina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Must" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiinakas.json b/data/brands/hiinakas.json deleted file mode 100644 index 5d9159d..0000000 --- a/data/brands/hiinakas.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hiinakas", - "brand_id": "hiinakas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "must 2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hijack-hq-nvr.json b/data/brands/hijack-hq-nvr.json deleted file mode 100644 index 8e948aa..0000000 --- a/data/brands/hijack-hq-nvr.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Hijack Hq Nvr", - "brand_id": "hijack-hq-nvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7608ni-i2/8p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/102" - }, - { - "models": [ - "BaK8204-W", - "K8204-W", - "K9604-W", - "K9608-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "NBD8016RA-UL", - "nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hikam.json b/data/brands/hikam.json deleted file mode 100644 index c043329..0000000 --- a/data/brands/hikam.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Hikam", - "brand_id": "hikam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3929", - "8235", - "A152013", - "A7+", - "Buh", - "DS-2CD2942WDJ", - "Hi Kam A7 V2", - "MW8", - "Other", - "PG2357C3", - "Pro", - "Pro A9", - "Q7 / A7", - "Q8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "a7 v2", - "HiKam A9", - "IMW5Pro", - "mw5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "mw5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hikari.json b/data/brands/hikari.json deleted file mode 100644 index 29ab9ef..0000000 --- a/data/brands/hikari.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hikari", - "brand_id": "hikari", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WY0513H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "WY0513H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiki.json b/data/brands/hiki.json deleted file mode 100644 index 4c2a1bf..0000000 --- a/data/brands/hiki.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Hiki", - "brand_id": "hiki", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hike200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "hike200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/702" - }, - { - "models": [ - "hike200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "hike200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "hike200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/Streaming/channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/hikity.json b/data/brands/hikity.json deleted file mode 100644 index e1bc450..0000000 --- a/data/brands/hikity.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hikity", - "brand_id": "hikity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EC76-X15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiklook.json b/data/brands/hiklook.json deleted file mode 100644 index a5c60fe..0000000 --- a/data/brands/hiklook.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Hiklook", - "brand_id": "hiklook", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "2mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "2mp", - "IPC-T250H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/hikvision.json b/data/brands/hikvision.json deleted file mode 100644 index df21dc6..0000000 --- a/data/brands/hikvision.json +++ /dev/null @@ -1,4343 +0,0 @@ -{ - "brand": "Hikvision", - "brand_id": "hikvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]03" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]03" - }, - { - "models": [ - "DS-2CD2047G2-LU/SL", - "000", - "1080P", - "2042", - "2355", - "29.", - "2CD1121-I", - "2CD1323G0E-I", - "2CD2025FWD-I", - "2CD2042WD", - "2CD2042WD-I", - "2CD2122FWD-IS", - "2CD2132p-1", - "2CD2135F-IS", - "2CD2335-I", - "2CD2355FWD-I", - "2CD2385FWD", - "2CD2520F", - "2CD2T55", - "3 BHK 2", - "301", - "B140H-M-FFPMEG", - "BMD", - "Bricklane", - "DC2385FWD.L", - "DC-2CD2010-I", - "DC-2CD2042WD-I", - "DC-2CD2412F-IW", - "DR PR", - "DS*2DE4215IW-DE", - "ds.2cd2012f.i", - "DS-1214(B)", - "DS-1400", - "DS-2CD1021-I", - "ds-2cd1023g0e-i", - "DS-2CD1027G0-L", - "DS-2CD1041-I", - "DS-2CD1043", - "DS-2CD1043G0E", - "DS-2CD1043G0E-I", - "DS-2CD1047G0-L", - "DS-2CD1101-I", - "DS-2CD11023G0E", - "DS-2CD1121", - "DS-2CD1121-I", - "DS-2CD1123G0E-2", - "DS-2CD1123G0E-I", - "DS-2CD1123G2-LIU", - "DS-2CD1148-I/B", - "DS-2CD122P-I3", - "DS-2CD1301-I", - "DS-2CD132P-I", - "DS-2CD1623G0-I", - "ds-2cd1641FWD-IZ", - "DS-2CD1643G0", - "DS-2CD1H43G2-IZ", - "DS-2CD2010F-I", - "DS-2CD2021-IAX", - "DS-2CD2022-I", - "DS-2CD2022WD-I", - "DS-2CD2032-I", - "DS-2CD2041G1-IDW1", - "DS-2CD2042WD-I", - "DS-2CD2043G0-1", - "DS-2CD2043G0-I", - "DS-2CD2045FWD-I-B", - "DS-2CD2055FWD-I", - "DS-2CD2065G1-I", - "DS-2CD2083G2-I", - "DS-2CD2085FDW-I", - "DS-2CD2121G0-I", - "DS-2CD2122P-I3", - "DS-2CD2123G0-I", - "DS-2CD212WF-I", - "DS-2CD2132F-I", - "DS-2CD2135FWD-1", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-I20181110BBWRC63527268", - "DS-2CD2143G0-I", - "DS-2CD2143G2-IU", - "DS-2CD2145FWD-I", - "DS-2CD2145FWD-IS20190517AAWRD20341380", - "DS-2CD2146G2-I", - "DS-2CD2147G2-SU", - "DS-2CD2183G0-I", - "DS-2CD2183G0-IS", - "DS-2CD2185FWD-I", - "DS-2CD2186G2-ISU", - "DS-2CD2342WD-I", - "DS-2CD2343G0-I", - "DS-2CD2345FWD-I", - "DS-2CD2347G2P-LU", - "DS-2CD2383G2-I", - "DS-2CD2410FD-IW", - "DS-2CD2423G0-1", - "DS-2CD2423G0-I", - "DS-2CD242PF-I", - "DS-2CD2443G0e-I", - "DS-2CD2443G0-IW", - "DS-2CD244FWD-IW", - "DS-2CD2523G0-IS", - "DS-2CD2532F-IWS", - "DS-2CD2542FWD-I", - "DS-2CD2543G0-IS", - "DS-2CD2622F-IS", - "DS-2CD2642FWD-IZS", - "DS-2CD2655FWD-IZS", - "DS-2CD2747G2H-LIPTRZS202", - "DS-2CD2955FWD-I", - "DS-2CD2T22WD", - "DS-2CD2T22WD-I3", - "DS-2CD2T23G0-I5", - "DS-2CD2T43G0-I5", - "DS-2CD2T43G0-I8", - "DS-2CD2T55FWD-I5", - "DS-2CD2T65G1-I8", - "DS-2CD2T85FWD-I8", - "DS-2CD3145F-I", - "DS-2CD3B26G2T-IZHSY", - "DS-2CD3T21G0-IUF", - "DS-2CD3T27EWD3-L", - "DS-2CD4A26FWD-IZHS", - "DS-2CD4A65F-IZH", - "DS-2CD4D26FWD-IZS", - "DS-2CD5A26G0-IZHS", - "DS-2CD6332FWD-IS", - "DS-2CD6362F-I", - "DS-2CD6362F-IVS", - "DS-2CD63C2F-IVS", - "DS-2CD7a26gc/p-izs", - "DS-2DE2204IW-DE3/W", - "DS-2DE2A204IW-DE3", - "DS-2DE2A404IW-DE3", - "DS-2DE3304W-DE", - "DS-2DE3304W-DE20210701CCWRG29013843W", - "DS-2DE3A404IW", - "ds2de4225Iw", - "DS-2DE7186-A", - "DS-2DE7230IW-AE", - "DS-2DF1-512", - "DS-2DF7225IX-AEL", - "DS-2DF8223I-AEL", - "DS-2DF8836IX-AELW", - "ds-2fcd1123g0e-i", - "DS-2TD1217B-6/PA", - "DS-I400", - "DS-I400(C)", - "DS-KV6113-WPE1(B)", - "DT085-I", - "DVR", - "ECI-D64Z2", - "HIKVISION DS-2CD2522FWD-IS", - "INTERFON", - "IPC", - "IPC-221H", - "IPC-B159H", - "Other", - "PG2087C", - "UD04808B-C", - "uniknow" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264" - }, - { - "models": [ - "000", - "1323", - "2132", - "2232", - "2332", - "2332-1", - "2CD2032F", - "2CD2032F-I", - "2CD2032-I", - "2CD2110-I", - "2CD2135F-IS", - "2CD2142", - "2CD2512F-I", - "2CD3132F-IW", - "2s-cd2032i", - "ate 2", - "BL-3200", - "Brigade Xanadu", - "cd2032", - "cmip3122", - "CMR-HD200-20-K", - "DC-2CD2110F-1", - "Dome", - "DP-12", - "ds 2cd2385", - "DS 2CD2H55FWD-IZS", - "DS 2CD812NF-W", - "DS-2CD1041-I", - "DS-2CD1047G0-L", - "DS-2CD1101-I", - "DS-2CD1123G2-LIU", - "DS-2CD1131-I", - "DS-2CD1143G0-I", - "DS-2CD1147G0-L", - "DS-2CD122P-I3", - "DS-2CD1343G2-I", - "DS-2CD1612", - "DS-2CD1643", - "DS-2CD2010F-I", - "DS-2CD2010-I", - "DS-2CD2012F-I", - "DS-2CD2012-I", - "DS-2CD2020F-I", - "DS-2CD2031-I", - "DS-2CD2032", - "DS-2CD2032F-I", - "DS-2CD2032-I", - "DS-2CD2035fWD-1", - "DS-2CD2035-I", - "DS-2CD2042fWD-1", - "DS-2CD2042WD-1", - "DS-2CD2043g0-1", - "ds-2cd2047g2-l", - "DS-2CD2055-I", - "DS-2CD2110-I", - "DS-2CD2112-I", - "ds-2cd2123g0-i", - "DS-2CD212WF-I", - "DS-2CD212WF-II", - "DS-2CD2132", - "DS-2CD2132-1", - "DS-2CD2132-I", - "DS-2CD2132-I ONVIF", - "DS-2CD2135F-IS", - "DS-2CD2135FWD-1", - "DS-2CD2142", - "DS-2CD2142FWD", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-IS", - "DS-2CD2152F-IS", - "DS-2CD2155-IWS", - "DS-2CD2232-I5", - "DS-2CD2232-l5", - "DS-2CD2312-I", - "DS-2CD2332-I", - "DS-2CD2347G1-", - "DS-2CD2412F-I", - "DS-2CD2412F-IW", - "ds-2cd2420f-i", - "DS-2CD2422F-I", - "DS-2CD2432F-I", - "DS-2CD2432F-I(W)", - "ds2cd2432f-iw", - "DS-2CD2432F-IW", - "DS-2CD2442FWD-IW", - "DS-2CD2512F-IS", - "DS-2CD2532F-IS", - "DS-2CD2532F-IS(W)", - "DS-2CD2532F-IWS", - "DS-2CD2732F-I", - "DS-2CD2732F-IS", - "DS-2CD2742FWD-IZS", - "DS-2CD2942F-IS", - "DS-2CD2T21G0-I", - "DS-2CD2T42WD-18", - "DS-2CD2T42WD-I5", - "DS-2CD2T43G0-I5", - "DS-2CD2T86G2-4I", - "ds-2cd31135f-i", - "DS-2CD3132-1", - "DS-2CD3132F-IWS", - "DS-2CD3135F-IWS", - "DS-2CD3325-I", - "DS-2CD3332-I", - "DS-2CD3332-I 3MP", - "DS-2CD3346-1", - "DS-2CD3T45D-I5", - "DS-2CD4012FWD", - "DS-2CD4224F-IS", - "DS-2CD4324F-IZS", - "DS-2CD4A25FWD-IZ", - "DS-2CD6026FHWD-A", - "DS-2CD6332FWD-IS", - "DS-2CD6332FWD-IV", - "DS-2CD6362F-I", - "DS-2CD6362F-IV", - "DS-2CD7133", - "DS-2CD7133-E", - "DS-2CD7152mf", - "Ds-2cd7153", - "DS-2CD7153-E", - "DS-2CD7164-E", - "DS-2CD762MF-1FB", - "DS-2CD8153F-E", - "DS-2CD8264FWD-EIZ", - "DS-2CD853F", - "DS-2CD853F-E", - "DS-2CSD2032", - "DS-2CV1021G0-IDW1", - "DS-2DE2A404IW-DE3", - "DS-2DE3304w-DE", - "DS-2DE4215IW-DE", - "DS-2DE4425IW-DE", - "ds-2de7186-ae", - "DS-2DE7232IW-AE", - "DS2DF1512", - "DS2DF157A", - "ds-2df7284-a", - "DS-2DF8223I-AEL", - "DS-DC2132-I", - "El-dorado 2", - "Hik-DS2CD2T86G2H-4l", - "HILOOK", - "ids-2cd7a26g0/pizhs", - "IPC D120", - "IPC-T250H", - "IPTZ18X1H", - "Lake", - "NC312-MD", - "Other", - "PTZ-C4MP", - "T220H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "000", - "1080P", - "12345", - "2010", - "2025", - "2032", - "2120", - "2443G0-IW", - "2CD2012F", - "2CD2042WD", - "2CD2042WD-I", - "2CD2142", - "2CD2355FWD-I", - "2CD2442WD-I", - "2CD2525", - "2cd2765G1-I8", - "2DE7225", - "2DS-2CD2142FWD-I", - "2DS-2CD2142FWD-IS", - "cd2142", - "DC-2CD2010-I", - "DC-2CD2412F-IW", - "DC-I200", - "DC-I200(c)", - "ds", - "DS-2", - "DS-2CD1023G0", - "DS-2CD1023G0E-I", - "DS-2CD1023G2-LIU", - "DS-2CD1041L", - "DS-2CD1101-I", - "DS-2CD1121", - "ds-2cd1123g0e-i", - "DS-2CD1123G2-LIU", - "ds-2cd1143g0", - "DS-2CD1143G0-I", - "DS-2CD1353G0-I ONVIF", - "DS-2CD1623G0-IZ", - "DS-2CD1H41WD-IZ", - "DS-2CD2010F", - "DS-2CD2020F-I", - "DS-2CD2023G0-I", - "DS-2CD2025FWD-I", - "DS-2CD2031-I", - "DS-2CD2032F-I", - "DS-2CD2042WD-I", - "ds-2cd2043g2-i", - "DS-2CD2047G1-L", - "DS-2CD2055FWD-I", - "DS-2CD2065G1-I", - "DS-2CD2083G0-I", - "DS-2CD2085G1-l", - "DS-2CD2112-I", - "DS-2CD2123G0-IS", - "DS-2CD2123G0-IU", - "DS-2CD2132F-IWS", - "DS-2CD2135F-IS", - "DS-2CD2141G1-IDW1", - "DS-2CD2142FWD", - "DS-2CD2143G0-I", - "DS-2CD2143G0-I - 4MP", - "DS-2CD2143G2-I", - "DS-2CD2145FWD-I", - "ds-2cd2185fwd", - "DS-2CD2185FWD-I", - "DS-2CD2185FWD-IS", - "DS-2CD2212-15", - "DS-2CD2212-I5", - "DS-2CD2232-I5", - "DS-2CD2325WD-I", - "ds2cd2332/1", - "DS-2CD2346G1-I", - "DS-2CD2346G1-I/SL", - "DS-2CD2346G2", - "DS-2CD2355FWD", - "DS-2CD2363G0-I", - "DS-2CD2410FD-IW", - "DS-2CD2420F-IW", - "DS-2CD2512F-IS", - "DS-2CD2542FWD-IS", - "DS-2CD2543GO-IS", - "DS-2CD2620F-IS", - "DS-2CD2625FHWD-IZS", - "DS-2CD2625FWD-ISZ", - "DS-2CD2632F", - "DS-2CD2686G2-IZS", - "DS-2CD2721G0-IS", - "DS-2cd2783", - "DS-2CD2T25FHWD-I8", - "DS-2CD2T42WD-I5", - "DS-2CD2T45FWD-I8", - "DS-2CD2T47G2-LSU/SL", - "DS-2CD2T65G1-I8", - "DS-2CD2T85FWD", - "DS-2CD2T85G1-I5-I8", - "DS-2CD2T86G2-4I", - "DS-2CD2TG5G1-I8", - "DS-2CD3121G0", - "DS-2cd3132F-IS", - "DS-2CD3B26G2T-IZHSY", - "DS-2CD4012FWD", - "DS-2CD6026FHWD-A", - "DS-2CD6362F-IV", - "DS-2CD7153", - "DS-2CD7153-E", - "DS-2CV102", - "ds-2cv1021", - "DS-2CV2121G2-IDW", - "DS-2CV2Q01FD-IW", - "DS-2DC1001-I", - "DS-2DC2532F", - "DS-2DE2A204IW-DE3", - "DS-2DE3A400BW", - "DS-2DE4220-AE", - "DS-2DE4220IW", - "DS-2DE7184-AE", - "DS-7204HQHI-HK", - "DS-I200(c)", - "DS-I250", - "HIKISION", - "Hikvision DS-2CD2432F-1", - "HWP-N2404IH-DE3", - "IP1", - "IPC T249HA", - "Other", - "V-200HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "HighResolutionVideo" - }, - { - "models": [ - "000", - "1080P", - "1618", - "2030", - "2032", - "2032-1080P", - "2042", - "2385", - "2CD2012F", - "2cd2012-l", - "2CD2122FWD-IS", - "2CD2185", - "2CD8133F-E", - "AIT210", - "B140H", - "DC-2CD1023G0E-1", - "DCS", - "DH-IPC-HDW4433C-A", - "DS 2CD812NF-W", - "DS-2CD", - "ds-2cd1023g0e-1", - "ds-2cd1023g0e-i", - "DS-2CD1043", - "DS-2CD1103-I", - "DS-2CD1123G2-LIU", - "DS-2CD1143G0-I", - "DS-2CD1321-I", - "DS-2CD1323G0-IU", - "DS-2CD2012-I", - "DS-2CD2020F-I", - "DS-2CD2021G1-I", - "ds2cd2025fwd-1", - "DS-2CD2025FWD-I", - "DS-2CD2032F-I", - "DS-2CD2032F-IW", - "DS-2CD2032-I", - "ds-2cd2045fwd-i", - "DS-2CD2047G1-L", - "DS-2CD2110F-I", - "DS-2CD2112-1", - "DS-2CD2122FWD-I", - "DS-2CD2132-I", - "DS-2CD2142FWD-IWS", - "DS-2CD2143G0-I", - "DS-2CD2185FWD-I", - "DS-2CD2312-I", - "DS-2CD2325", - "DS-2CD2332-I", - "DS-2CD2342WD-I", - "DS-2CD2343G0-I", - "DS-2CD2346G1-I", - "DS-2CD2352-I", - "DS-2CD2355FWD-I", - "DS-2CD2385FWD-I", - "DS-2CD2386G2", - "DS-2CD2412F-I", - "DS-2CD2432F-I", - "DS-2CD2512F-IS", - "DS-2CD2683GO-IZS", - "DS-2CD2F22FWD", - "DS-2CD2T21G1-I", - "DS-2CD2T85FWD", - "DS-2CD2T85FWD-I8", - "DS-2CD3T25D-I3", - "DS-2CD7133", - "DS-2CD7153-E", - "DS-2DE2A404IW", - "DS-2DE3304W-DE", - "DS-2ZMN2007", - "DS-7204HQHI-HK", - "DS-SDC1123G2-LIU", - "HIK PTZ", - "IPC-D140", - "Ipc-e14y07", - "IR MINI BULLET", - "Jotain", - "NC304wda", - "Other", - "PG2387C", - "Tower Ca" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "000", - "2032", - "DS-2CD1001-I", - "DS-2CD1043G0-I - E16512577", - "DS-2CD2020F-I", - "DS-2CD2032", - "DS-2CD2032-I", - "DS-2CD2185FWD-I", - "DS-2CD2312-I", - "DS-2CD2332-I", - "DS-2CD2412F-I", - "DS-2CD3345-I", - "DS-2CD4012F-A", - "DS-2CD4012FWD-A", - "DS-2CD4A25FWD-IZ", - "imp-hc7286-k20x", - "IPC-B141H", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "01_01", - "2CD21", - "DC-2cd2387g2h-lisu/SL", - "DS-2CD1031-L", - "DS-2CD1043G0-I", - "DS-2CD1121", - "DS-2CD1121-I", - "DS-2CD1143G0-I", - "DS-2CD1143G2", - "DS-2CD1301-I", - "DS-2CD1347G2-LUF", - "DS-2CD1383G0-I", - "DS-2CD202WF-I", - "DS-2CD2042WD-I", - "DS-2CD2043g0-1", - "DS-2CD2043G0-I", - "DS-2CD2086G2-I", - "DS-2CD2123G0-I", - "DS-2CD2123G0-IS", - "DS-2CD2125G0-IMS", - "DS-2CD2126G2-I", - "DS-2CD212WF-I", - "DS-2CD2132F-I", - "ds-2cd2142fwd-i", - "DS-2CD2143G0-I2", - "DS-2CD2143G2-I", - "DS-2CD2322WD-I", - "DS-2CD2322WD-IW", - "ds-2cd2345fwd-1", - "DS-2CD2345G0P-I", - "DS-2CD2387G2H-LIU", - "DS-2CD2410F-IW", - "DS-2CD2423G0-IW", - "DS-2CD2522FWD-IS", - "DS-2CD2646G2-IZS", - "DS-2CD2820F", - "DS-2CD2D14WD", - "DS-2CD2H86G2-IZS", - "DS-2CD2T42WD-I8", - "DS-2CD2T45FWD-I8", - "DS-2CD2T46G2P-ISU/SL", - "DS-2CD3025G0-I", - "DS-2CD6362F-IVS", - "DS-2CD854FWD-E", - "DS-2CV2121G2-IDW", - "DS-2DE1A200IW-DE3", - "DS-2DE2A404IW-DE3", - "DS-2DE4220-AE", - "ds-2DE4425IW-DE", - "DS-2DF1-402", - "DS-7716NI-SP/16", - "DS-HD1", - "HikVision DS-2CD2745FWD-IZS", - "HWI-B120-D/W", - "HWI-D121H", - "Jan", - "OPHWD-16US", - "Other", - "rapuni fix 5", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "1080P", - "2CD3132", - "China", - "DS-2CD3132", - "Other", - "WIP087" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "1212", - "12344", - "2010", - "2014", - "2015", - "2032", - "2032-1080P", - "2035", - "2042", - "2102", - "2110", - "2120_2", - "2132", - "2210", - "2232", - "2232-I5", - "2332", - "2342", - "2343", - "2345", - "2385", - "2443G0-IW", - "248", - "2732", - "2CD1027", - "2CD1323G0E-I", - "2CD2032F", - "2CD2032F-I", - "2CD2032-I", - "2cd2032-l", - "2CD2042WD", - "2CD2110F-I", - "2cd-2132-is", - "2CD2142", - "2cd2332.1", - "2CD2512F-I", - "2CD2542FWD-IWS", - "2CD2T22WD", - "2CD2T32", - "2CD2T42", - "2CD3132F-IW", - "2CD4132FWD-I", - "2CD8153F-E", - "2CDORDSISITsomething", - "2DS-2CD2142FWD-I", - "2mp", - "2S-CD2032I", - "3mp", - "3MP", - "3mp-Bullet", - "441629934", - "4572", - "555", - "8 mp", - "8153", - "820CAM", - "als camera", - "ART 221", - "b140h", - "b640h-v", - "Box", - "cameraa", - "cd2032", - "cd2332-1", - "CDC", - "cenk", - "cM1", - "CNC4210", - "ColorVU", - "ComedorDS-2CD1131-I", - "dc 2332", - "DC-2CD2042WD-I", - "DC-I200", - "DF1080P", - "Dome", - "ds", - "ds 2cd2332.1", - "ds 7200", - "ds2", - "ds2cd", - "DS2CD", - "DS-2CD0242-I", - "ds-2cd1001-l", - "dS-2CD1013G0E-I", - "DS-2CD1021G2-IU", - "DS-2CD1021G2-LIU", - "DS-2CD1021-I", - "DS-2CD1023G0-IUF", - "DS-2CD1023G0-IUM", - "DS-2CD1023G2-LIU", - "DS-2CD1027G0-L", - "DS-2CD1031-I", - "DS-2CD1043G0E-I", - "DS-2CD1043G0-I", - "DS-2CD1103-I", - "DS-2CD1121", - "DS-2CD1123G2-LIU", - "DS-2CD1131-I", - "DS-2CD1143", - "DS-2CD1143G0E-I", - "DS-2CD1143G0-I", - "DS-2CD1301-I", - "DS-2CD1321-I", - "DS-2CD1323G0E-I", - "DS-2CD1343G0-I", - "DS-2CD1363G2", - "DS-2CD1383G2-LIUF", - "DS-2CD1410F-IW", - "DS-2CD1643G0", - "DS-2CD1743G0-IZ", - "DS-2CD20", - "DS-2CD2010F", - "DS-2CD2010F-I", - "DS-2CD2010-I", - "DS-2CD2012-I", - "DS-2CD2012-I hi res", - "DS-2CD2020F-I", - "DS-2CD2020F-IW", - "DS-2CD2020-I", - "DS-2CD2021G1-IDW1", - "DS-2CD2022WD-I", - "ds-2cd2025fwd-1", - "DS-2CD2025FWD-I", - "DS-2CD2032", - "DS-2CD2032F-IW", - "DS2-CD2032-I", - "DS-2CD2032-I", - "DS-2CD2032-I (1920x1080)", - "DS-2CD2032-I (FX)", - "DS-2CD2042WD-I", - "DS-2CD2043g0-1", - "DS-2CD2045FWD-I", - "DS-2CD2047G1-L", - "DS-2CD2047G2-LU", - "DS-2CD2047GU", - "DS-2CD2085G1-L", - "DS-2CD2110F-I", - "DS-2CD2110-I", - "DS-2CD2112-1", - "DS-2CD2112D-I", - "DS-2CD2112F-I", - "DS-2CD2112F-IS", - "DS-2CD2112-I", - "DS-2CD2120F-I", - "ds-2cd2122fdw-i", - "DS-2CD2122FWD-I", - "DS-2CD2123G0-I", - "DS-2CD2124FWD-I", - "DS-2CD2125FWD-IS", - "DS-2CD212WF-I", - "DS-2CD2132", - "DS-2CD2132-1", - "DS-2CD2132F", - "DS-2CD2132F-I", - "DS-2CD2132F-IS", - "DS-2CD2132F-IS 2 cam", - "DS-2CD2132F-IW", - "DS-2CD2132F-IWS", - "DS-2CD2132-I", - "DS-2CD2132-I ONVIF", - "ds-2cd2132-l", - "DS-2CD2135FWD", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-IS", - "DS-2CD2142FWD-l", - "DS-2CD2143G0-I", - "DS-2CD2143G0-I2", - "DS-2CD2143G2-I", - "DS-2CD2145FWD-IS", - "ds-2cd2152f-is", - "DS-2CD2155F-IS", - "DS-2CD2155FW-I", - "DS-2CD2183G2-IS", - "DS-2CD2185FWD-I", - "DS-2CD2185FWD-IS", - "DS-2CD2186G2-ISU", - "DS-2CD2212-I5", - "DS-2CD2232-I5", - "DS-2CD2312-I", - "DS-2CD2322WD-I", - "DS-2CD2332", - "DS-2CD2332.1", - "ds-2cd2332-1", - "DS-2CD2332-I", - "DS-2CD2332-I5", - "DS-2CD2332WD-I", - "DS-2CD2335-I", - "DS-2CD2342WD-I", - "DS-2CD2343G0-I", - "DS-2CD2345FWD-I", - "DS-2CD2346G1-I/SL", - "DS-2CD2346G2-IU", - "DS-2CD234WD-I", - "DS-2CD2355FWD", - "DS-2CD2355FWD-I", - "DS-2CD2365FWD", - "DS-2CD2365G1-I", - "DS-2CD2385FWD-I", - "DS-2CD2412F/I", - "DS-2CD2412F-I", - "DS-2CD2412F-IW", - "DS-2CD2420F-I(W)", - "DS-2CD2422FWD-IW", - "DS-2CD2423G0-I", - "DS-2CD2425FWD-IW", - "DS-2CD2432F", - "DS-2CD2432F-I", - "DS-2CD2432F-I(W)", - "DS-2CD2432F-IW", - "DS-2CD2442FWD-IW", - "DS-2CD2443G0-IW", - "DS-2CD2510F", - "DS-2CD2512F-IS", - "DS-2CD2532F-IS", - "DS-2CD2532F-IWS", - "DS-2CD2612F-I", - "DS-2CD2612F-IS", - "DS-2CD2621G0-IZ", - "DS-2CD2632F-I", - "DS-2CD2632F-IS", - "DS-2CD2643G0-IZS", - "DS-2CD2645FWD-IZS", - "DS-2CD2712F-I", - "DS-2CD2722FWD-IS", - "DS-2CD2723G0-IZS", - "DS-2CD2723G1-IZ", - "DS-2CD2732F-I", - "DS-2CD2732F-IS", - "DS-2CD2742FWD-IZS", - "DS-2CD2743G0-IZS", - "DS-2CD2755FWD", - "DS-2CD2820F", - "DS-2CD2D14WD", - "DS-2CD2D21G0-D/NF", - "DS-2CD2F22FWD-I", - "DS-2CD2F42IWD", - "DS-2CD2H55FWD-IZS", - "DS-2CD2Q10FD-IW", - "DS-2CD2T22WD", - "DS-2CD2T22WD-I5", - "DS-2CD2T32-I5", - "DS-2CD2T32-I8", - "DS-2CD2T35FWD-I5", - "DS-2CD2T42WD-I5", - "DS-2CD2T43G0-I5", - "DS-2CD2T46G-2I", - "DS-2CD3132", - "DS-2CD3132-1", - "DS-2CD3132D-I", - "DS-2CD3132F-IW", - "DS-2CD3132F-IWS", - "DS-2CD3132-I", - "DS-2CD3232-I5", - "DS-2CD3332-I", - "DS-2CD3332-l", - "DS-2CD3346WDV3-I", - "DS-2CD3386", - "DS-2CD3410FD-IW", - "DS-2CD3942F-I", - "DS-2CD3B26G2T-IZHSY", - "DS-2CD3Q10FD-IW", - "DS-2CD3T47EWD-L", - "DS-2CD4012FWD", - "DS-2CD4024F-A", - "DS-2CD4224F-IS", - "DS-2CD4224F-IZ", - "DS-2CD4312FWD-IZHS", - "DS-2CD4324F-IZS", - "DS-2CD4585F-IZH", - "Ds-2cd4a25fwd-lz", - "DS-2CD4A26FWD", - "DS-2CD6026FHWD-A", - "DS-2CD63C2F-IVS", - "DS-2CD6412FWD-20", - "DS-2CD6520D-IO", - "DS-2CD6D54FWD-IZHS", - "DS-2CD7153-E", - "DS-2CD7164-E", - "DS2CD752MF-IFBH", - "DS-2CD753F-E", - "DS-2CD754FWD-EIZ", - "ds-2cd764fwd-e", - "DS-2CD793PF-E", - "DS-2CD8153F-E", - "DS-2CD8253F-EI", - "DS-2CD8253F-EIS", - "DS-2CD8255F-EIZ", - "DS-2CD8264FWD-EIZ", - "DS-2CD8464F-EIW", - "DS-2CD853F-E", - "DS-2CD855F-E", - "DS-2CD864-E13", - "DS-2CDT35FWD-18", - "DS-2CV1021G0-IDW1", - "DS-2CV2141G2-IDW", - "DS-2cv2q01EFD-IW rotlek", - "DS-2DE2204IW-DE3/W", - "DS-2DE2A404IW-DE3", - "DS-2DE3204W-DE", - "DS-2DE3304w-DE", - "DS-2de3a404iw", - "DS-2DE4220-AE", - "DS-2DE4220W", - "DS-2DE4A225IW-DE", - "DS-2DE4A425IW-DE", - "DS-2DE5230W-AE", - "DS-2DE7120IW-A", - "DS-2DE7174-A", - "DS-2DE7184-AE", - "DS-2DE7186-A", - "DS-2DF1-401N", - "DS-2DF5220S-DE4/W", - "DS-2DF5284-A", - "DS-2DF7276-A", - "DS-2DF7286-A", - "DS-2DF8223I-AEL", - "DS-2DF8236I - AEL", - "ds-2fcd1123g0e-i", - "DS-2SF8C442MXS-DLW(24F0)(P3)", - "DS-2TD2617-3/V1", - "DS-2ZMN2007", - "DS-7204HQHI-F1/N", - "DS-7204HQHI-HK", - "DS-7204HQHI-K1", - "DS-7208HGHI-SH", - "DS-7208HQHI-F1", - "DS-7208HUHI-K2 / P", - "DS-7216HUHI-K2", - "DS-7616NI-E2-8P-A", - "DS-7A04HQHI-K1", - "DS-9806NI-RT", - "DS-B3200VN", - "DS-CD8254F-El", - "DSD-2102", - "DS-IPC-B12-I", - "DS-KB8113-IME1(B)", - "DS-KD8003", - "DS-KD8003-IME1", - "DS-KH6320-WTE1", - "DS-KV8113", - "DS-N201", - "DT2A404", - "DVR", - "ECI-B14F2", - "ECI-D12F2", - "EntrDS-2CD1131-I", - "Exir", - "EzViz Mini O", - "G2 8MP", - "hallinpiha", - "HD-DS1", - "HICK1", - "Hik", - "HIK", - "hikds 71", - "Hik-DS2CD2T86G2H-4l", - "Hikvision DS-27MN207", - "Hikvision DS-2CD2432F-I", - "HIKVISION DS-2CD2522FWD-IS", - "HIKVISION DS-7208HUHI-K1", - "HILOOK", - "HWI-T221H", - "ids-2cd7a26g0/p-izhs", - "iDS-7216HQHI-M1 / S", - "imp-hc7286-k20x", - "ip1", - "ip2", - "IPC T121", - "IPC2032I", - "IPC-D120", - "IPC-D140", - "IPC-D140H", - "IPC-T140", - "IPTZ18X1H", - "NC304-WDA", - "nc324", - "NSC-202-BT", - "Other", - "RS-8308ATH", - "SC-303-MD", - "South", - "Spa new", - "Spotted-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "1080P", - "2032-1080P", - "2110", - "212", - "247-0265", - "2cd", - "2CD1027", - "2CD2025FWD-I", - "2CD2032", - "2CD2032-I", - "2CD2142", - "2CD2155", - "2CD2325FWD-I", - "2CD2512F-I", - "2DS-2CD2142FWD-I", - "2ds4a", - "C6H", - "Cas", - "ckout", - "DARKFIGHTER", - "DC-2CD2412F-IW", - "DS-2CD1021-I", - "ds-2cd1023g0-i", - "DS-2CD1143G0-I", - "DS-2CD1331-I", - "DS-2CD2010F-I", - "DS-2CD2012-I", - "DS-2CD2021G1-IDW1", - "DS-2CD2023GO-I", - "DS-2CD2032-I", - "DS-2CD2047G1-L", - "DS-2CD2110F-I", - "DS-2CD2120F-I", - "DS-2CD2122FWD-IWS", - "DS-2CD2125FWHD-I", - "DS-2CD212WF-I", - "DS-2CD2132F-I", - "DS-2CD2132-I", - "ds-2cd2185fwd", - "DS-2CD2232-I5", - "DS-2CD2332-I", - "DS-2CD2352-I", - "DS-2CD2388G2-IU", - "DS-2CD2443G0-IW", - "DS-2CD2532F-IS", - "DS-2CD2543G0-IS", - "DS-2CD2543GO-IWs", - "DS-2CD2632F-I", - "DS-2CD2820F", - "DS-2CD2T22WD-I3", - "DS-2CD2T23G0-I5", - "DS-2CD2T55FWD-I5", - "DS-2CD3125F-I", - "DS-2CD3132-1", - "DS-2CD3132F-IWS", - "DS-2CD3145F", - "ds-2cd3310-1", - "ds-2cd3310-i", - "DS-2CD3332-I", - "DS-2CD3332-L", - "ds-2cd6424", - "DS-2CD7153-E", - "DS-2CD754F", - "DS-2CD852F", - "DS-2DE4220-AE", - "DS-2DF8236I - AEL", - "DS-2DY3220IW-DE4", - "DS-7208HVI-SV", - "Hik-DS-2CD1031-L", - "HIKISION", - "IPCAM-B4-50IR", - "IPC-D140H", - "NSC-202-BT", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "1111", - "16CH-TVI", - "2132", - "Bullet", - "D2-2CD1327G2-L", - "DS-2CD1021-I", - "DS-2CD1043G0-I", - "ds-2cd1123g0e-i", - "DS-2CD1321-I", - "DS-2CD1323G0E-I", - "DS-2CD1323G0-IU", - "DS-2CD1323G0-IUF", - "DS-2CD2042WD-I", - "DS-2CD2043G0-I", - "DS-2CD2065G1-I", - "DS-2CD2083G2-I", - "DS-2CD2087G2-LIU", - "DS-2CD2120F-I", - "DS-2CD2121G1-IDW1", - "DS-2CD2132F-I", - "DS-2CD2142FWD", - "DS-2CD2163G0-I", - "DS-2CD2186G2-ISU", - "DS-2CD2342WD-I 2", - "DS-2CD2386G2-ISU/SL", - "DS-2CD2423G2-I", - "ds-2cd2432f-iw", - "ds-2cd2525fwd", - "DS-2CD2543GO-IS", - "DS-2CD2626G2-IZS", - "DS-2CD2746FWD-IZS", - "DS-2CD2T23G0-I5", - "DS-2CD2T35FWD-I5", - "DS-2CD2T43G2-4I", - "DS-2CD2T46G2-2I", - "DS-2CD3132-I", - "DS-2CD3310-I", - "DS-2CD3345-I", - "DS-2CD4A26FWD-IZS", - "DS-2CD63C5G0E-IVS", - "DS-2CD6D54FWD-IZHS", - "DS2CD752MF-IFBH", - "DS-2CD8153F-E", - "DS-2CV2026G0-IDW", - "DS-7324HQHI-K4", - "DS-IPC-B12-I", - "DS-KV6113", - "EZVIZ CS-TY1", - "HNC304-XD", - "NVR", - "Other", - "TOP-201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "12344", - "2CD2046", - "DS-2CD1021FD-IW1", - "DS-2CD1043G0E-I", - "DS-2CD1347G0-L", - "DS-2CD2023G0", - "DS-2CD2045FWD-I", - "DS-2CD2146G1-IS", - "DS-2CD2147G2-SU", - "ds-2cd2152f-is", - "DS-2CD2385FWD-I", - "DS-2CD2386G2-ISU-SL", - "DS-2CD2420F-IWNS", - "DS-2CD2732F-I", - "DS-2CD3145F-IS", - "DS-2DE2A404-IW-DE3", - "HIK PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "130hook", - "2CD2020F", - "Douglas", - "DS-2CD", - "DS-2CD1021-I", - "DS-2CD1121", - "DS-2CD1123G0-I", - "DS-2CD2042WD-I", - "DS-2CD2085FDW-I", - "DS-2CD2110F-I", - "DS-2CD2122P-I3", - "ds-2cd2123g0-i", - "DS-2CD2126G2-I", - "DS-2CD2142FWD-I", - "DS-2CD2143G0-I", - "DS-2CD2185FWD-I", - "DS-2CD2322WD-IW", - "DS-2CD2345FWD-I", - "DS-2CD2346G2-I", - "DS-2CD2363G0-I", - "DS-2CD2385G1-I", - "DS-2CD2432F-I", - "DS-2CD2442FWD-IW", - "DS-2CD2542FWD-ISB", - "DS-2CD2783G2-IZS", - "DS-2CD2955FWD-I", - "DS-2cd2H85G1-IZS", - "ds-2cd3323G0E-i", - "DS-2CD3T27DWD-LS", - "DS-2CD5A26G0-IZHS", - "DS-2CD6D54FWD-IZHS", - "DS-2DC2532F", - "DS-2DE2A404IW-DE3", - "DS-2DE4425IW-DE", - "DS-2DF1-5284-A", - "HikVision DS-2CD1363G0-I", - "HS-VD08G0-I", - "IPC5-DF28SNC", - "uniknow" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "16CH-TVI", - "asd", - "CHINA", - "DS-2CD", - "DS-2CD2085G1-L", - "DS-2CD2087G2-LU", - "DS-2CD2142FWD-IS", - "DS-2CD2342WD-I", - "DS-2CD2345FWD-I", - "DS-2CD2355FWD-I", - "DS-7204HQHI-HK", - "DS-KB6003-WIP", - "HICK1", - "IR Mini Bullet", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264/ch01/main/av_stream" - }, - { - "models": [ - "2010", - "2CD2332.1", - "2DS-2CD2142FWD-I", - "B-120", - "DS-2CD1021-I", - "ds-2cd1023g0e-i", - "DS-2CD1023G0-I", - "DS-2CD1023G2-LIU", - "DS-2CD1143", - "DS-2CD1143G0-I", - "DS-2CD1321-I", - "DS-2CD2020-I", - "DS-2CD2042D4", - "DS-2CD2055FWD-I", - "DS-2CD2085FWD-I", - "DS-2CD2122FWD-I", - "DS-2CD212WF-I", - "DS-2CD2135F-IS", - "DS-2CD2142FWD-l", - "DS-2CD2143G0-I", - "DS-2CD2155FWD-I", - "DS-2CD2332-I", - "DS-2CD2343G0-I", - "DS-2CD2432F-IW", - "DS-2CD2721G0-IZS", - "DS-2CD2732F-I", - "DS-2CD2F22FWD", - "DS-2CD2T47DWD-L", - "DS-2CD2T65G1-I8", - "HIKISION", - "HK-2CD1041L", - "ipc1208", - "IPC1208", - "ipc-d25204bt", - "nc324", - "Other", - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "2010", - "2CD2042WD", - "DARKFIGHTER", - "DS-2CD1023G0E-I", - "DS-2CD2032-I (1920X1080)", - "DS-2CD2043G0-1", - "DS-2CD2065G1-I", - "DS-2CD212WF-I", - "DS-2CD2132F-I", - "DS-2CD2142FWD-I", - "DS-2CD2155FWD-I", - "DS-2CD2786G2-IZS", - "DS-2CD2H55FWD-IZS", - "ds-2cd2t45fwd-i5", - "DS-2CD2T65G1-I8", - "DS-2DE2A404IW-DE3/W", - "DS-2DE4220-AE", - "DS-2DF8223I-AEL", - "DS-CD2810F", - "DS-IPC-T12H-I", - "HIKISION", - "mocam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "2014", - "2732", - "ds-2ce16dot", - "DS-2DE3304W-DE", - "DS-2DF7286-A", - "DS-2DF8236I - AEL", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "2015", - "2025", - "2CD2012F", - "DS-2CD132P-1", - "DS-2CD1331-I", - "DS-2CD20", - "DS-2CD2032", - "DS2-CD2032-I", - "DS-2CD2032-I", - "DS-2CD2043G2-I", - "DS-2CD2047G2-LU", - "DS-2CD2055-I", - "DS-2CD2065fwd-i", - "DS-2CD2085FDW-I", - "DS-2CD2085G1-L", - "DS-2CD2110F-I", - "DS-2CD2120F-I", - "DS-2CD2123G0-I", - "DS-2CD2125FWD-IS", - "DS-2CD212WF-I", - "DS-2CD2132-I", - "DS-2CD2142FWD-IWS", - "ds-2cd2185fwd", - "DS-2CD2355FWD", - "DS-2CD2510F", - "DS-2CD2512F-IS", - "DS-2CD2655FWD-IZS", - "DS-2CD2955FWD-I", - "DS-2CD3310D-I", - "DS-2CD63C2F-IVS", - "DS-2CD7153-E", - "DS-2DE2103-DE3/W", - "DS-2DE3304W-DE", - "DS-2DE4425IW-DE", - "DS-2TD2637-10/PY", - "DS-2XXX", - "Entikong", - "H.265+", - "HIKVISION DS-2CD2F22FWD-I", - "Other", - "PX-IPIR203", - "Wbox" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "2021", - "2CD2143G0-I", - "2CD2185", - "2CD2442WD-I", - "2DS-2CD2142FWD-I", - "2MP", - "3MP", - "B120", - "CCTV", - "DS-2CD1023G0E-I", - "DS-2CD1023G0-I", - "DS-2CD1123G0E-I", - "DS-2CD1123G0-I/SD", - "DS-2CD1131-I", - "DS-2CD1353G0-I", - "DS-2CD1353G0-I ONVIF", - "DS-2CD1743G2-IZ", - "DS-2CD1H41WD-IZ", - "DS-2CD2020F", - "DS-2CD2021G1", - "DS-2CD2021G1-I", - "DS-2CD2021G1-IDW1", - "DS-2CD2032", - "DS-2cd2032-1", - "DS-2CD2032-1", - "DS2-CD2032-I", - "DS-2CD2035-I", - "DS-2CD2042WD-I", - "DS-2CD2045FWD-I", - "DS-2CD2046G2-I", - "DS-2CD2112-I", - "DS-2CD2146G2-I", - "DS-2CD2332-I", - "DS-2CD2385G1-I", - "DS-2CD2420F-I", - "ds-2cd2432f-iw", - "DS-2CD2432F-IW", - "DS-2CD2542FWD", - "DS-2CD2625FHWD-IZS", - "DS-2CD2683G0-IZS", - "DS-2CD2T85FWD-I8", - "DS-2CD3345-I", - "DS-2CD3T86G2-4IS", - "DS-2CD4B26FWD-IZS", - "DS-2CD753F-E", - "DS-2CD8253F-E", - "DS-2CV1021G0-IDW1", - "DS-2DE4425IW-DE", - "DS-IPC-B12-I", - "DS-KD8003-IME1", - "hik vision", - "HIKVISION DS-2CD201PF-I", - "Hikvision: DS-2DE2A404IW-DE3", - "hiwatch", - "HWI-B120H", - "HWI-T240H", - "Meadows Seating", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "2030", - "2032", - "2CD2012F", - "2CD2032-I", - "2CD2142", - "2CD2635F-IS", - "2DS-2CD2032-i", - "2DS-2CD2142FWD-I", - "DarkFighter", - "DC-CD2124", - "ds 2ce", - "DS-2CD1021-I", - "DS-2CD1027G0-L", - "DS-2CD1043G2-LIU", - "DS-2CD1121-I", - "ds-2cd1163g2-liu", - "DS-2CD122P-I3", - "DS-2CD1323G0-IU", - "DS-2CD1327G0-L", - "DS-2CD132P-I", - "DS-2CD1353G0-I", - "DS-2CD2026G2-I", - "DS-2cd2032-1", - "DS-2CD2032-I", - "ds-2cd2043g2-i", - "ds-2cd20443g01", - "DS-2CD2055FWD-I", - "DS-2CD2086G2-IU/SL", - "DS-2CD2120F-I", - "DS-2CD2120F-l", - "DS-2CD2122FWD-ISB", - "DS-2CD2123G0-IS", - "DS-2CD2123G2-I", - "DS-2CD212WF-I", - "DS-2CD2132F-I", - "DS-2CD2132F-IS", - "DS-2CD2135FWD-I", - "DS-2CD2142FWD-I", - "DS-2CD2143G0-I", - "DS-2CD2143G0-IS", - "DS-2CD2146-G2", - "DS-2CD2166G2-ISU", - "DS-2CD2185FWD-I", - "DS-2CD2185FWD-I(C36141118)", - "DS-2CD2212-I5", - "DS-2CD2323G0-I", - "DS-2CD2345FWD-I", - "DS2CD2366G2-lU", - "DS-2CD2367G2P-LSU", - "DS-2CD2367G2P-LSU/SL", - "DS-2CD2383G2-IU", - "DS-2CD2386G2-IU", - "DS-2CD2387G2H-LIU", - "DS-2CD2387G2P-LSU/SL", - "DS-2CD2432F-1", - "DS-2CD2443G2-I", - "DS-2CD2446G2-I", - "DS-2CD2523G2-IS", - "ds-2cd2612f-1", - "DS-2CD2686G2-IZS", - "DS-2CD2720F-I", - "DS-2CD2D25G1-D/NF", - "DS-2CD2T32-I5", - "DS-2CD2T46G2P-ISU/SL", - "DS-2CD2T83G0 8MP", - "DS-2CD3T20D-I3", - "DS-2CD4312FWD-IHS", - "DS-2CD4B26FWD-IZS", - "DS2CD5A46G1-IZS", - "DS-2CD6362F-IV", - "DS-2CD854FWD-E", - "DS-2DE2A404IW-DE3", - "DS-2DE4225IW-DE", - "DS-2DE4A225IW-DE", - "DS-2DE4A425IW-DE", - "DS-CD1023G0-I", - "DS-I214", - "DS-I452", - "DS-IPC-B12-I", - "ds-ipc-t12-i", - "DS-IPC-T14HV3-LA", - "DS-KH6320-WTE1", - "DT2A404", - "HWI-B140H", - "HWI-D640H-Z", - "IPCD121H-M dome camera", - "IPC-T221H", - "mini ptz camera", - "MS1", - "MS-2", - "NC304-WDA", - "NC-KDO32", - "Other", - "PTZIP212X20-C", - "SFL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "2032", - "2042", - "2135", - "2CD2142", - "2CD2155", - "2DS-2CD2142FWD-I", - "2ds4a", - "DH-IPC-HDW4433C-A", - "DOME", - "ds 2cd6425g0-10", - "DS-2CD1001-L", - "DS-2CD1101-I", - "DS-2CD1123G0E-I", - "DS-2CD1143G0-I", - "DS-2CD122P-I3", - "DS-2CD1321-I", - "DS-2CD132P-I", - "DS-2CD1353G0-I ONVIF", - "DS-2CD2012F-I", - "DS-2CD2022WD-I", - "DS-2CD2031-I", - "DS-2CD2042WD", - "DS-2CD2065G1-I", - "DS-2CD2085FDW-I", - "DS-2CD212WF-I", - "DS-2CD2132", - "DS-2CD2132F", - "DS-2CD2132-I", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-IS", - "ds-2cd2185fwd", - "DS-2CD2185FWD-I", - "ds-2cd2185fwd-is", - "DS-2CD2185FWD-IS", - "DS2CD2332-I", - "DS-2CD2365G1", - "DS-2CD2412F-I", - "DS-2CD2420F-IW", - "DS-2CD2432F-IW", - "DS-2CD2622FWD-I", - "DS-2CD2652F-IS", - "DS-2CD2732F-I", - "DS-2CD2955FWD-I", - "DS-2CD2955FWD-I(S)", - "DS-2CD2T43G0-I5", - "DS-2CD2T45FWD-I5", - "DS-2CD3132-1", - "DS-2CD3132F-IW", - "DS-2CD4012F-A", - "DS-2CD4012FWD-A", - "DS-2CD4165F-IZ", - "DS-2CD6362F-IV", - "DS-2CD6412FWD-C2", - "ds-2cd783f-e", - "DS-2CV2U21FD-IW", - "DS-2DE2A404-IW-DE3", - "DS-2DE3304W-DE", - "DS-2DE4182-AE3", - "DS-2DE5230W-AE", - "DS-2DF7284-A", - "DS-7204HQHI-HK", - "H.256+", - "lakas", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "2032", - "2035", - "2110", - "2112", - "2232", - "2332-1", - "2CD2032F-I", - "2CD2110F-I", - "2cd-2132-is", - "2cd2332.1", - "2CD2512F-I", - "2cd3132", - "2cd855f-e", - "7132", - "D1HK", - "DC-2CD2010-I", - "DC-2CD2412F-IW", - "dome", - "ds220", - "DS-2CD1021-I", - "DS-2CD1023G0-IUF", - "DS-2CD1031-I", - "DS-2CD1121-I", - "DS-2CD1141-I", - "DS-2CD1363G2", - "DS-2CD2010F-I", - "DS-2CD2010-I", - "DS-2CD2012-I", - "DS-2CD2020F-IW", - "DS-2CD2031-I", - "DS-2CD2032", - "DS-2CD2032F-I", - "DS-2CD2032F-IW", - "DS-2CD2032-I", - "DS-2CD2042WD-I", - "DS-2CD2047G1-L", - "DS-2CD2047G2-LU", - "DS-2CD2112-1", - "DS-2CD2112-I", - "DS-2CD2112-l", - "DS-2CD2132", - "DS-2CD2132-1", - "DS-2CD2132F-I", - "DS-2CD2132F-IS", - "DS-2CD2132-I", - "DS-2CD2135F-IS", - "DS-2CD2142FWD-I", - "ds-2cd2152f-is", - "DS-2CD2183G2-IS", - "DS-2CD2212-I5", - "DS-2CD2232-I5", - "DS-2CD2312-I", - "DS-2CD2332-I", - "ds-2cd2336-l", - "DS-2CD2342WD-I", - "DS-2CD2352-I", - "DS-2CD2412F-I", - "DS-2CD2412F-IW", - "DS-2CD2432F-I(W)", - "DS-2CD2432F-IW", - "DS-2CD2532F-IS", - "DS-2CD2532F-IWS", - "DS-2CD2542FWD-IS", - "DS-2CD2612F-I", - "DS-2CD2632F-I", - "DS-2CD2642FWD-I", - "DS-2CD2723G0-IZS", - "DS-2CD2732F-I", - "DS-2CD2732F-IS", - "DS-2CD2942F-IS", - "DS-2CD2T43G0", - "DS-2CD2T65G1-I8", - "DS-2CD3132-1", - "DS-2CD3132D-I", - "DS-2CD3132F-IW", - "DS-2CD3132-I", - "ds-2cd3135f-i", - "DS-2CD3212D-I", - "DS-2CD3310D-I", - "DS-2CD3332-I", - "DS-2CD4332FWD-IZHS", - "DS-2CD6362F-IV", - "DS-2CD6362F-IVS", - "DS-2CD63C2F-IVS", - "DS-2CD6412FWD-20", - "DS-2CD6D54FWD-IZHS", - "DS-2CD7153-E", - "DS-2CD7164-E", - "DS-2CD7283F-EIZ", - "DS-2CD8253F-EI", - "DS-2CD8255F-EIZ", - "DS-2CD8264FWD-EIZ", - "ds-2cd854f-e", - "DS-2DE2202I-DE3/W", - "DS-2DE7174-A", - "DS-2DE7184-A", - "DS-2DE7186-A", - "DS-2XXX", - "DS-7732NI-I4/16P", - "DSC-2CD2532", - "DS-ZCD2112-I", - "dukkan", - "Exir", - "hik", - "hik2", - "HIKVISION DS-2CD201PF-I", - "IR MINI BULLET", - "Other", - "S-2CD2F42FWD-IW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "2032", - "2CD2035-I", - "2CD2T55", - "DS-2CD2052-I", - "DS-2CD234WD-I", - "DS-2CD2T42WD-I5", - "ds-2ce3304w-de", - "DS-2D5174-A", - "hgjg", - "NC304-XD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "2032", - "DS-2CD4526FWD-IZ", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "2032-1080P", - "2112", - "2CD1323G0E-I", - "2cd2012-I", - "2CD2025FWD-I", - "2CD2042WD-I", - "2CD2135F-IS", - "2CD2135FWD-I", - "2CD2T55", - "2cd3132", - "2DS-2CD2142FWD-I", - "BTG_Custom", - "DC-2CD2010-I", - "DS-2CD", - "DS-2CD1021-I", - "DS-2CD1031-I", - "DS-2CD1121", - "DS-2CD1123G0E-I", - "DS-2CD1123G0-I", - "DS-2CD1123G0-I/SD", - "DS-2CD1141-I", - "DS-2CD1H41WD-IZ", - "DS2CD2012-i", - "DS-2CD2031-I", - "DS-2CD2032F-IW", - "DS-2CD2032-I", - "DS-2CD2085G1-L", - "DS-2CD2120F-I", - "DS-2CD2121G1-IDW1", - "DS-2CD2132-1", - "DS-2CD2132F-I", - "DS-2CD2132F-IW", - "DS-2CD2132-I", - "DS-2CD2141G1-IDW1", - "DS-2CD2142FWD-I", - "DS-2CD2212-15", - "DS-2CD2232-L5", - "DS-2CD2312-I", - "DS-2CD2332-I", - "DS-2CD2355FWD-I", - "DS-2CD2412F-IW", - "DS-2CD2432F", - "DS-2CD2432F-IW", - "DS-2CD2443G0-IW", - "DS-2CD2532F-IS", - "DS-2CD2543GO-IS", - "DS-2CD2543GO-IWS", - "DS-2CD2612F-I", - "DS-2CD2632F", - "DS-2CD2642FWD-I", - "DS-2CD2642FWD-IS", - "DS-2CD2732F-I", - "DS-2CD2732F-IS", - "DS-2CD2T25FWD-I5", - "DS-2CD2T43G0-I5", - "DS-2CD3310D-I", - "DS-2CD4024F-A", - "DS-2CD63C2F-IVS", - "DS-2CD8253F-EI", - "DS-2CD8254F-EI", - "DS-2CV2041G2-IDW", - "DS-2CV2Q21FD-IW", - "DS-2DE2202-DE3/W", - "DS-2DE4220-AE", - "HIK", - "HWP-N2404IH-DE3", - "ipc-d140h", - "IR CUBE", - "IR MINI BULLET", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "2032-1080P", - "2CD1323G0E-I", - "DS-2CD1023G0E-I", - "DS-2CD1023GDE-4", - "DS-2CD2042WD-I", - "DS-2CD2047G2-LU", - "DS-2CD2055FWD-I", - "DS-2CD2143G0-I", - "ds-2cd2165g0-1", - "DS-2CD2345G0P-I", - "DS-2CD2346G2-I", - "DS-2CD2347G1-L", - "DS-2CD2347G1-LU", - "DS-2CD2385G1-I", - "DS-2CD2443G0-IW", - "DS-2CD2H83G2-IZS", - "DS-2CD6984G0-IHS", - "DS-2DF8436IX-AEL", - "DS-HD2", - "Hikvision DS-2CD2432F-1", - "HIKVISION DS-2CD2522FWD-IS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "2110", - "2132", - "2347", - "2CD2T43G0-i8", - "2CD2T55", - "3111-e", - "BL-3200", - "DS 2CD812NF-W", - "DS-2CD1143G0-I", - "DS-2CD2032", - "DS-2CD2032-I", - "DS-2CD2043g0-1", - "DS-2CD2132F-IS", - "DS-2CD2132-I", - "DS-2CD2155FWD-I", - "DS-2CD2232-I5", - "DS-2CD2312-I", - "DS-2CD2332-I", - "DS-2CD2532F-IWS", - "DS-2CD2612F-I", - "DS-2CD2632F-I", - "DS-2CD2732F-IS", - "DS-2CD2T35FWD-I5", - "DS-2CD4224F-IS", - "DS-2CD7133", - "DS-2CD7153-E", - "DS-2CD753F-E", - "DS-2CD8254F-EI", - "DS2DF1512", - "DS-2TD2617-3/V1", - "DS-6101HFI-IP", - "DS-7P32NI", - "DS-DC2132-I", - "DS-IPC-T12H-I", - "IR Mini Bullet", - "Other", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "2110", - "2CD2032-I", - "2CD2635F-IS", - "8312", - "Cube", - "DS-2CD2045FWD-I-B", - "DS-2CD2085G1-L", - "DS-2CD2132F-I", - "DS-2CD2143G0-I - 4MP", - "DS-2CD2T47G2-L", - "DS-2CD3345-I", - "DS-2DE2C400MWG-E", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "2135", - "DS-2CD2145", - "DS-2CD7A26G0/P-IZHS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/[CHANNEL]" - }, - { - "models": [ - "2345", - "2cd1043", - "DC-2CD2110F-1", - "DS-2CD1001-I", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/ch1/sub/" - }, - { - "models": [ - "2CD1027", - "2CD2012F", - "ds-2cd2032", - "DS-2CD2032", - "DS-2cd2032-1", - "DS-2CD212WF-I", - "DS-2CD2432F-IW", - "DS-2DE4120", - "Other", - "Polyvios" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "2CD1163G2", - "DA-2cd2383G0-i", - "DS-2CD1063G2-LIU", - "DS-2CD2387G2", - "DS-2CD2442FWD-IW", - "DS-7", - "DS-7108HGHI-F1", - "DS-7208HQHI-F1", - "DS-7216HGHI-K1", - "DS-7604NI-K1", - "DS-7732NI-I4/16P", - "DS-9664NI-I8", - "DS-CE56C0T-IRPF", - "DVR-216G-F1", - "ERT-F216", - "iDS-716HUHI-M2/s", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/ISAPI/Streaming/channels/102/picture" - }, - { - "models": [ - "2CD1323G0E-I", - "2CD2542FWD-IWS", - "2CV2121G2-IDW", - "8mp", - "DS-2CD", - "DS-2CD1023G0E-I", - "DS-2CD1047G0-L", - "DS-2CD1121", - "DS-2CD1121-I", - "DS-2CD1123G0E-I", - "DS-2CD1123G0-I", - "DS-2CD1321-I", - "DS-2CD1327G0-L", - "DS-2CD1343G0-I", - "ds-2cd1343g0-iuf", - "DS-2CD1743G0-IZ", - "DS-2cd2023-I", - "DS-2CD2032-I", - "DS-2CD2042WD-I", - "DS-2cd2045FWD-I", - "DS-2CD2046G2-I", - "ds-2cd2055fwd-1", - "DS-2CD2065G1-I", - "DS-2CD2085FWD-I", - "DS-2CD2086G2-I", - "DS-2CD2087G2H-LIU", - "DS-2CD2112F-I", - "DS-2CD2112F-IWS", - "DS-2CD2121G0-IS", - "DS-2CD2122FWD", - "DS-2CD2123GO-IS", - "DS-2CD2132F-I", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-IS", - "DS-2CD2142FWD-ISB", - "DS-2CD2142FWD-IWS", - "DS-2CD2143G0-I", - "DS-2CD2143G0-I2", - "DS-2CD2143G2-IS", - "DS-2CD2146G2-I", - "DS-2CD2146G2-ISU", - "DS-2CD214RFWD-I", - "ds-2cd2165g0-1", - "DS-2CD2185FWD-I", - "ds-2cd2185fwd-is", - "DS-2CD2186G2-ISU", - "DS-2CD2332-I", - "DS-2CD2342WD-I", - "DS-2CD2346G2-I", - "DS-2CD2347G1-L", - "DS-2CD2347G1-LU", - "DS-2CD2383G2-I", - "DS-2CD2385G1-I", - "DS-2CD2386G2-I", - "DS-2CD2386G2-ISU/SL", - "DS-2CD2386G2-IU", - "DS-2CD2387G2-LSU/SL", - "DS-2CD2387G2-LU", - "DS-2CD2387G2P-LSU/SL", - "DS-2CD2423G0-1", - "DS-2CD2432F-I", - "DS-2CD2443G0-IW", - "DS-2CD2512F-IS", - "DS-2CD2542FWD-IS", - "DS-2CD2632F-IS", - "DS-2CD2655FWD-IZS", - "DS-2CD2685FWD-IZS", - "DS-2CD2735FWD-IZS", - "DS-2CD2742FWD", - "DS-2CD2765G0-IZS", - "DS-2CD2785FWD-IZS", - "DS-2CD2955FWD-I", - "DS-2CD2B20FWD-lPlT", - "DS-2CD2H85FWD-IZS", - "DS-2CD2T45G0P-I", - "DS-2CD2T47G2-L", - "DS-2CD2T66G2-ISU/SL", - "DS-2CD2T86G2-4I", - "DS-2CD2T87G2P-LSU/SL", - "DS-2CD3126FWDV3-I", - "DS-2CD3132-I", - "DS-2CD3332-I", - "DS-2CD3T86FWDA4-LS", - "DS-2CD5A46G0-IZHSY", - "DS-2CD6924G0-IHS", - "DS-2CE10DF3T", - "DS-2CV2Q21FD-IW", - "DS-2DE2103I-DE3", - "DS-2DE2A204IW-DE3", - "DS-2DE2A404IW-DE3", - "DS-2DE3204W-DE", - "DS-2DE3304W-DE", - "DS-2DE3A400BW", - "DS-2DE4220W", - "DS-2DE4425IW-DE", - "DS-2de5230W-AE", - "DS-2DE7A432IW-AEB", - "DS-2DEA4041W-DE3", - "DS-2SE4C425MWG-E", - "DS-I103", - "DS-I202(C)", - "DS-I400", - "DS-IPC-B12-I", - "DT2A404", - "ECI-B12F2", - "ECI-B12F4", - "ECI-B64Z2", - "fsdfs", - "HIKVISION DS-2CD2432F-IW", - "iDS-2CD8426G0/F-I", - "IPC-B620-Z", - "IPC-T220", - "IR Mini Bullet", - "jallacam", - "new", - "Other", - "ThermalMAX X1000", - "UD04808B-C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "2cd2020", - "DC-2CD2412F-IW", - "DC-CD2124", - "DS-2CD1023G0E-I", - "DS-2CD1041-I", - "DS-2CD1043G0-I", - "DS-2CD1043G2-IUF", - "DS-2CD1043G2-LIU", - "DS-2CD1043G2-LIUF", - "DS-2CD1047G0-L", - "DS-2CD1101-I", - "DS-2CD1121-I", - "DS-2CD122P-I3", - "DS-2CD132P", - "DS-2CD132P-I", - "DS-2CD202WF-I", - "DS-2CD2043G0-I", - "DS-2CD2065G1-I", - "DS-2CD2086G2-IU/SL", - "DS-2CD2087G2-LU", - "ds-2cd2123g0-i", - "DS-2CD2123G0-I", - "DS-2CD212WF-I", - "DS-2CD2143G0-I", - "DS-2CD2145FWD-I", - "DS-2CD2147G2-SU", - "DS-2CD2342WD-I", - "DS-2CD2355FWD-I", - "DS-2CD2442FWD", - "DS-2CD2442FWD-IW", - "DS-2CD2523G2-IS", - "DS-2CD2T43G0-I5", - "DS-2CD2T86G2H-4L", - "DS-2CD31332-1", - "DS-2DE2C400MW-DE", - "DS-2DE4220IW-DE", - "ds-2DE4425IW-DE", - "DS-2DE7232IW-AE", - "DS-2TD4228T-10/W", - "ds-hd1", - "DS-I120", - "DS-I453M", - "DS-KV6103-PE1", - "ECI-T24F2", - "PTZ-N2204I-DE320180630CCWRC32869610W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "2CD2020F", - "C1HC", - "DS-2CD1123G0-I", - "DS-2CD1643G0-IZ", - "DS-2CD1T43G0-I", - "DS-2CD2032-I", - "DS-2CD2042WD-I", - "ds-2cd2185fwd", - "DS-2CD2345FWD-I", - "DS-2CD2532F-IS", - "DS-2DE2204IW-DE3/W", - "DS-2DE2A404IW-DE3", - "DS-2DE3304W-DE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "2CD2025FWD-I", - "2CD2032-I", - "2CD2032-L", - "2CD2155", - "2ds4a", - "D2-2CD1043G2-I", - "DS-2CD2021G1-I", - "DS-2CD2022-I", - "DS-2CD2085FDW-I", - "DS-2CD2125FWD-I", - "DS-2CD2185FWD-I", - "DS-2CD2355FWD-I", - "DS-2CD2385FWD-I", - "DS-2CD2510F", - "DS-2CD2742FWD", - "DS-2CD2942F", - "DS-2CD2T55FWD-I5", - "DS-2CD3345-I", - "DS-2CD3T25D-I3", - "DS-2DE4A425IW-DE", - "DS-7616NI-E2-8P-A", - "DS-IPC-B12-I", - "DS-KH6320-WTE2", - "H.264", - "IPC-T249HA", - "Other", - "PARKING", - "smart265", - "SR-ID13F40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "2CD2032F-I" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "2CD2042WD", - "2CD2135F-IS", - "8CHDVR", - "DS-2CD1021", - "DS-2CD2032-I", - "DS-2CD2132-I", - "DS-2CD2632F", - "HWI-T221H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "2CD2121G0", - "DS-2CD1013G", - "DS-2CD1121", - "DS-2CD1121-I", - "DS-2CD2020F-I", - "DS-2CD2032-I", - "DS-2CD2085FWD-I", - "DS-2CD2T32-I8", - "DS-2CD4B26FWD-IZS", - "DS-2CD853F-E", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "image.mpg" - }, - { - "models": [ - "2CD2132F", - "HWI-B140H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live.sdp" - }, - { - "models": [ - "2CD-2142", - "2DS-2CD2142FWD-IS", - "8CHDcdVR", - "CCTV", - "DK 21", - "DS-2CD1001-I", - "DS-2CD2032-I", - "DS-2CD2432F-IW", - "DS-2CD2942F-IS", - "DS-7216HQHI-F2/N", - "DS-7608NI", - "Hik01", - "Other", - "SC-303GY-XD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "2CD2142FWD", - "ds-2cd2085fwd", - "DS-2CD2141G1-IDW1", - "DS-2CD2142FWD-IS", - "DS-2CD2143G2-I", - "DS2CD2625FWD IZS", - "DS-2DE2A404-IW-DE3", - "hikds 71", - "HWC-C200-DW", - "Leffes", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam2/mpeg4" - }, - { - "models": [ - "2CD2143G0-I", - "DS-2CD1023G2-LIU", - "DS-2CD1H53G0-IZ", - "DS-2CD2055FWD-I", - "DS-2CD2367G2P-LSU/SL", - "DS-2CV1021G0-IDW1", - "DS-2DE2C400MW-DE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "2cd2185", - "2DE2A404IW-DE3", - "2T65", - "ColorVu", - "Dachser", - "dc2385fwd.l", - "DOME", - "DS-2CD1043G0", - "ds-2cd1643go-iz", - "DS-2CD2025FDW-I", - "DS-2CD2032-I", - "DS-2CD2041G1", - "DS-2CD2042WD-I", - "DS-2CD2043G2-I", - "DS-2CD2085G1-L", - "DS-2CD2110", - "DS-2CD2125FWD-I", - "DS-2CD212WF-1", - "DS-2CD2132F-IWS", - "DS-2CD2142FWD-I", - "DS-2CD2165FWD-I", - "DS-2CD2185FWD", - "DS-2CD2185FWD-I", - "DS-2CD2185FWD-I(C36141118)", - "DS-2CD2185FWD-IS", - "DS-2CD2186G2-I", - "DS-2CD2325WD-I", - "DS-2CD2345FWD-I", - "DS-2CD2442FWD-IW", - "DS-2CD2463G2-I", - "DS-2CD254FWD IS", - "DS-2CD2642FWD-I", - "DS-2CD2722FWD-IZS", - "DS-2CD2725FWD-IZS", - "DS-2CD273F-1", - "DS-2CD2T22-I5", - "DS-2CD2T42WD-18", - "DS-2CD2T42WD-I5", - "DS-2CD4B26FWD-IZS", - "DS-2CV2041G2-IDW Nr.1", - "DS-2CV2041G2-IDW Nr.2", - "ds-2de4225iw-de", - "HIK", - "Hikvision DS-2CD2F42FWD-IWS", - "HWI-D140h", - "HWP-N5225IH-AE", - "IR CUBE", - "IR Mini Bullet", - "MS1", - "NC304-WDA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "2CD2185", - "DS-2CD4012FWD-A", - "ds-2cd764fwd-e", - "DS-2DE2A404IW-DE3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "2CD2332.1", - "DS-2CD212WF-I", - "DS-2CD2312-I", - "DS-2CD2387G2H-LIU", - "DS-2CD4012F-A", - "DS-2CD4012FWD-A", - "DS-2CD4025FWD-AP", - "DS-2DC1001-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "2CD2335-I", - "402h", - "DC-2CD2412F-IW", - "DS 2CD812NF-W", - "DS-2CD1410F", - "DS-2CD2010-I", - "DS-2CD2032-I", - "DS-2CD212WF-I", - "DS-2CD2132", - "DS-2CD2132-I", - "DS-2CD2142FWD-I", - "DS-2CD2432F-I", - "DS-2CD2625FHWD-IZS", - "DS-2CD2T45FWD-I5", - "DS-2CD3332-I", - "DS-2CD4012FWD-A", - "DS-2CD4332FWD-I", - "DS-2CD6812D", - "DS-2CD8253F-EI", - "DS2DF1512", - "DS-2TD2617-3/V1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "2DF8223I-AELW", - "DOME", - "DS-2CD1043", - "DS-2CD2132F-IWS", - "DS-2CD2T25FWD-I5", - "Other", - "T220H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1025, - "url": "live/h264" - }, - { - "models": [ - "2ds2112-i", - "4mp", - "ipc1208", - "IPC1208", - "Other", - "psr" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "2S-2CD2020-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.h264" - }, - { - "models": [ - "2S-2CD2020-I", - "DS-2CD2020-I", - "DS-2CD2027G1-L", - "DS-2CD2525FWD-IWS", - "DS-IPC-B12-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/HD1080P" - }, - { - "models": [ - "301", - "B121H-m", - "C1C", - "C8C", - "casa2", - "casabrigo", - "DS-2CD0242-I", - "DS-2CD1023G0-IUF", - "DS-2CD1043G0-I", - "DS-2CD1123G2-LIU", - "DS-2CD1143", - "DS-2CD1323G0-IU", - "DS-2cd2012", - "DS-2CD2023G0-I", - "DS-2CD2042WD-I", - "DS-2CD2043g0-1", - "DS-2CD2043G0-I", - "DS-2CD2055FWD-I", - "DS-2CD2141G1-IDW1", - "DS-2CD2143G0-I - 4MP", - "DS-2CD2143G0-IS", - "DS-2CD2143G2-I", - "DS-2CD214RFWD-I", - "DS-2CD2183G0-IS", - "DS-2CD2347G1-LU", - "DS-2CD2385C1-I", - "DS-2CD2385G1-I", - "DS-2CD2420F-IWNS", - "DS-2CD2443G0e-I", - "DS-2CD2643G0-IZS", - "DS-2CD2955FWD-I", - "DS-2CD3347WDV3-L", - "DS-2CD3T86FWDA4-LS", - "DS-2cd5a46g0-izhs", - "DS-2CD6332FWD-IV", - "DS-2CD7133-E", - "DS-2CV2021G2-IDW", - "DS-2DE2A204IW-DE3", - "DS-2DE2A404-IW-DE3", - "DS-I400", - "ECI-D64Z2", - "HSDB2A", - "ipcam-T4", - "NC304-TD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "444", - "ds-kb6003-wip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streaming/channels/101/" - }, - { - "models": [ - "7513", - "8mp", - "DC-2CD1023G0E-1", - "DC-2CD2183G2", - "DCS", - "DMT-KD8003Y-IME2", - "dome", - "DS 2 CD2387", - "DS -2CD1001 I", - "ds-1202", - "DS-2CD", - "dS-2CD1013G0E-I", - "DS-2CD1021-I", - "ds-2cd1023g0e-i", - "DS-2CD1043G0E-I", - "DS-2CD1043G0-I - E16512577", - "DS-2CD1101-I", - "DS-2CD1121-I", - "ds-2cd1123g0e-i", - "DS-2CD1143G2-I", - "DS-2CD1147G2H-LIU", - "DS-2CD120P-I3", - "DS-2CD1321D-1", - "DS-2CD1323G0E-I", - "DS-2CD1343G0-I", - "DS-2CD1343G2-IUF", - "DS-2CD1347G0-L", - "DS-2CD1653G0", - "ds-2cd2010f-i", - "ds-2cd2021g1-i", - "DS-2CD2025FWD-I", - "DS-2CD2026G2", - "DS-2CD2042WD-I", - "DS-2CD2043G0-I - J31928626", - "DS-2CD2047G1-L", - "DS-2CD2055FWD-I", - "DS-2CD2083G0-I", - "DS-2CD2085G1-I", - "DS-2CD2086G2-IU", - "DS-2CD2120F-l", - "DS-2CD2122FWD-IS (T)", - "DS-2CD2123G0E-I(B)", - "DS-2CD2126G2-I", - "DS-2CD2132F-I", - "DS-2CD2132-J", - "DS-2CD2141G1-IDW1", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-IS", - "DS-2CD2142FWD-ISB", - "DS-2CD2143FWD-I", - "DS-2CD2143G0-IS", - "DS-2CD2145F-IS", - "DS-2CD2146G2-ISU", - "DS-2CD214RFWD-I", - "DS-2CD2165G0-I", - "DS-2CD2183G0-IS", - "ds-2cd2185fwd", - "DS-2CD2185FWD-I", - "DS-2CD2185FWD-IS", - "DS-2CD2342WD-I", - "DS-2CD2343G0-I", - "DS-2CD2345G0P-I", - "DS-2CD2383G0-I", - "DS-2CD2386G2-ISU/SL", - "DS-2CD2387G2P-LSU/SL", - "DS-2CD2412F-IW", - "DS-2CD2420F-IW", - "DS-2CD2432F-I", - "ds2cd2432f-iw", - "DS-2CD2443G0-IW", - "DS-2CD2523G0-IS", - "DS-2CD2532F-IWS", - "DS-2CD2543G2-LIS2U", - "DS-2CD2642FWD-IS", - "DS-2CD2643G2-IZS", - "DS-2CD2645FWD-IZS", - "DS-2CD2720F-I", - "DS-2CD2742FWD-IS", - "DS-2CD2742FWD-IZS", - "DS-2CD2745G1H-IZHS", - "DS-2CD2T35FWD-I8", - "DS-2CD2T46G1-4I/SL", - "DS-2CD2T65FWD-I5", - "DS-2CD2T85FWD-I8", - "DS-2CD2T85G1-I5-I8", - "DS-2CD2T86G2-4I", - "DS-2CD2T86G2-ISU-SL", - "DS-2CD3651G0-IZ", - "DS-2CD3T86FWDA4-LS", - "DS-2CD3T86G2-4IS", - "DS-2DC6432IW-A", - "DS-2de", - "DS-2DE2A204IW-DE3", - "DS-2DE2A404IW-DE3", - "DS-2DE3304w-DE", - "DS-2DE3A400BW-DE", - "DS-2DE4225IW-DE", - "DS-2DE4A225IW-DE", - "DS-2DE7230IW-AE", - "DS-2DF1-402", - "DS-I122", - "DS-I202(C)", - "DS-I202(D)", - "DS-I250", - "DS-I452", - "DS-I452M(B)", - "DS-IPC-B12-I", - "DS-IPC-T12H-I", - "DS-IPC-T12H-IA", - "DS-KV6113-WPE1", - "DS-KV6113-WPE1(B)", - "DT-4B425IW-EF", - "ECI-B12F2", - "ECI-B12F4", - "Fisheye", - "hikvision DS-2CD2041G1", - "HIKVISION DS-2CD2522FWD-IS", - "Hikvision IP Camera", - "HNC344-XD/LU", - "HS-VUT04G2-IA", - "HWI-B120H", - "HWP-N2404IH-DE3", - "IPC-T020(B)", - "IPC-T221", - "jallacam", - "Other", - "PCI-B15F6S", - "UD04808B-C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "adm", - "DS-2CD2123G0-I", - "DS-2CD2386G2", - "DS-2CD2386G2-ISU/S", - "DS-7108HGHI-F1", - "DS-7204HWI-SH/A", - "DS-773NI-K4" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "B140H-M", - "DS-2CD1027G2-L", - "DS-2CD2645FWD-IZS", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "1/cif" - }, - { - "models": [ - "Bullet", - "BULLET", - "DS-2cd2032-1", - "dvr", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "CHINA", - "DS-2CD1141-I", - "DS-2CD1221-I3", - "DS-2CD1H41WD-IZ", - "DS-2CD2012-I", - "DS-2CD2343G2-IU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "D11" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "DC-2CD2042WD-I", - "DS-2CD1023G0-IUF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1554, - "url": "/Streaming/Channel/101" - }, - { - "models": [ - "dome", - "DS-2CD2023G0-I", - "DS-2CD2122FWD-IS (T)", - "DS-2CD2346G2-IU", - "DS-2CD2642FWD-I", - "DS-KV8113", - "NVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "ds 2cd2332.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - }, - { - "models": [ - "DS 2CD812NF-W", - "DS-2CD2112-I", - "DS-2CD2132", - "DS-2CD2132-1", - "IP-103", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "DS 2CD812NF-W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "DS.-2CD1410F.1W", - "DS-2CD1410F-IW", - "DS-2CD2132" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DS1023", - "DS-2CD1021-I", - "DS-2CD1743G2", - "DS-2CD2010F-I", - "DS-2CD2032F-I", - "DS-2CD2132F-IWS", - "DS-2CD2155FWD-I", - "DS-2CD2T55FWD-I5", - "DS-2CD2T85FWD", - "DS-2CD2T86G2-4I", - "HIK PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "DS-1676NI-E2/16P", - "DS-2CD2142FWD-IS", - "IPC-B620-Z" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "DS-2CD", - "DS-2CD1083G2-LIUF", - "DS-2CD1321G2-IU", - "DS-2CD2047G2-LU", - "DS-2CD2066G2-IU", - "DS-2CD2183G0-IS", - "DS-2CD2335-I", - "DS-2CD2723G0-IZS", - "DS-2CD2785FWD-IZS", - "DS-2CD2T87G2P-LSU/SL", - "DS-2DE2A404IW-DE3", - "DS-I456Z", - "DS-IPC-E42H-IWPT", - "DS-IPC-K24H-L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265_stream" - }, - { - "models": [ - "DS-2CD", - "DS-2CD1023G0-IUF", - "DS-2CD2625FHWD-IZS", - "DS-I250W", - "Other", - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - }, - { - "models": [ - "DS-2CD1021G0-1", - "DS-2CD2143G2-IS", - "DS-2CD2343G0-I", - "DS-2CD2512F-IS" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/mjpeg" - }, - { - "models": [ - "ds-2cd1023g0e-i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MPEG-4/ch1/main/av_stream" - }, - { - "models": [ - "DS-2CD1023G0E-I", - "DS-2CD2012F-I", - "DS-2CD2012-I", - "DS-2CD2032-I", - "DS-2CD2532F-IWS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "DS-2CD1023G0-IUF", - "DS-2CD2H85FWD-IZS", - "DS-2CD2T22WD-I3", - "DS-2CD3332-I 3MP", - "DS-K1T502", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1/main/av_stream" - }, - { - "models": [ - "DS-2CD1023G2-I", - "DS-2CD212WF-I", - "DS-2CD2442FWD-IW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "ds-2cd1023g2-liu", - "DS-7108HGHI-F1", - "DS-IPC-E42H-IWPT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/main/av_stream" - }, - { - "models": [ - "DS-2CD1023G2-LUI", - "DS-2CD1047G2H-LIU", - "DS-2CD2046G2-I", - "DS-2CD2112-i", - "DS-2CD2112-I", - "DS-2CD2120F-I", - "DS-2CD2412F-I", - "DS-2CD2T22WD-I5", - "DS-2DE2202-DE3/W", - "PTZIP212X20-C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ISAPI/Streaming/channels/102/picture" - }, - { - "models": [ - "DS-2CD1043G0-I", - "DS-2CD1043G0-I - E16512577", - "DS-2CD2086G2-I", - "Gate", - "HWI-B640H-V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/channels/101/picture?videoResolutionWidth=2560&videoResolutionHeight=1440" - }, - { - "models": [ - "DS-2CD1043G0-I - E16512577", - "DS-2CD1121-I", - "DS-2CD1323G0-IUF", - "DS-2cd2045FWD-I", - "DS-2CD2135FWD-I", - "DS-2CD2442FWD-IW", - "DS-2CD2532F-IS", - "DS-2CD2755FWD", - "DS-2CD2T86G2-4I", - "ds-2cd3666g2t-izs", - "DS-2DE2A404IW-DE3/W", - "DS-2DF8442IXS-AELW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "DS-2CD1121-I", - "zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streaming/channels/102?transportmode=unicast&profile=Profile_2" - }, - { - "models": [ - "DS-2CD1123G0-I", - "DS-2CD2065G1-I", - "DS-2CD2132", - "DS-2CD2142FWS", - "DS-2CD2810F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - }, - { - "models": [ - "DS-2CD1143G0-I", - "DS-2CD2432F-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_sub" - }, - { - "models": [ - "DS-2CD1143G0-I", - "DS-CCD2043G0-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2" - }, - { - "models": [ - "DS-2CD1245-LA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/doc/index.html" - }, - { - "models": [ - "DS-2CD1301-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1/" - }, - { - "models": [ - "DS-2CD1323G0-I", - "DS-2CD2086G2-I", - "DS-2CD2132F-IS", - "DS-2CD2142FWD-I", - "DS-2CD2343G2-IU", - "DS-2CD2363G0-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 32772, - "url": "/Streaming/Channels/101/" - }, - { - "models": [ - "DS-2CD1643G0-IZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/Streaming/channels/1/picture" - }, - { - "models": [ - "DS-2CD20" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "ds-2cd2010f-i" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/doc/page/main.asp" - }, - { - "models": [ - "DS-2CD2010F-I", - "DS-2CD2010-I", - "DS2DE4225IW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/live/2" - }, - { - "models": [ - "DS-2CD2010-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/sub" - }, - { - "models": [ - "DS-2CD2010-I", - "DS-2CD2032", - "DS-2CD2032-I", - "DS-2CD2085FWD-I", - "DS-2CD2132F-I", - "DS-2CD2132-I", - "DS-2CD2412F-IW", - "DS-2CD2442FWD-IW", - "DS-2CD2612F-I", - "HIK", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "DS-2CD2086G2-I", - "000", - "00001", - "1080P", - "16CH-TVI", - "2021", - "2032", - "2032-1080P", - "2120", - "2123", - "2135", - "223", - "225", - "226", - "228", - "229", - "22CD1853F-E", - "2345", - "2CD1023", - "2CD1323G0E-I", - "2CD2025fwd-i", - "2CD2032-I", - "2CD2035-I", - "2CD2042WD", - "2CD2043G0", - "2CD2121G0", - "2CD2121G0-I/2AX", - "2cd2122fwd-is", - "2CD2125FWD-I", - "2CD-2132-IS", - "2CD2135FWD-I", - "2CD2142", - "2CD-2142", - "2CD2145", - "2CD2155", - "2CD2335-I", - "2CD2342WD", - "2CD2355FWD-I", - "2CD2365G1", - "2CD2385FWD-I", - "2CD2385G1-I", - "2cd244...", - "2CD2455FWD-IW", - "2CD2520F", - "2cd-2622", - "2CD2635F-IS", - "2CD2T65G1-I8", - "2CD2T85FWD-I8", - "2CD4A65F", - "2DC2402IW-DE3", - "2DE4A", - "2DE7120IW", - "2DF8223I-AELW", - "2G 8MP", - "2MP", - "2MP Camera", - "3335-I", - "4 mm", - "4185F", - "444", - "449472414", - "B159H", - "blah", - "C34074916", - "c3w", - "C6N", - "C800", - "Cam3", - "CCTV", - "cd2123", - "CDT55", - "Count", - "CS-C6c", - "D120", - "D2S4B", - "dacha", - "DARKFIGHTER", - "DB-120a-iw", - "DC-2CD2042WD-I", - "DC-2CD2412F-IW", - "DC-2CD4A5G0-IZS", - "DCIM111", - "DH-IPC-HDBW1420EP", - "DH-IPC-HDW4433C-A", - "Dome", - "DS 2CD2332.1", - "ds 7200", - "ds.2cd2012f.i", - "DS.2CD2385FWD.L", - "Ds-2232", - "DS-2CD", - "dS-2CD1013G0E-I", - "DS-2CD1021", - "DS-2CD1021-I", - "DS-2cd1021-l", - "DS-2CD1023G0E", - "DS-2CD1023G0E-I", - "DS-2CD1023G0-I", - "DS-2CD1023G0-IUF", - "DS-2CD1023G0-IUM", - "DS-2cd1023g2-liu", - "DS-2CD1027G0-L", - "DS-2CD1031-I", - "DS-2CD1041L", - "DS-2CD1043G0E-I", - "DS-2CD1043G0-I", - "DS-2CD1043G0-I - E16512577", - "DS-2CD1043G0-IUF", - "DS-2CD1043G2", - "DS-2CD1043G2-I", - "DS-2CD1043G2-IUF", - "DS-2CD1043G2-LIU", - "DS-2CD1047G0-L", - "DS-2CD1053G0-I", - "DS-2CD1057G0-L", - "DS-2CD11023G0E", - "DS-2CD1103-I", - "DS-2CD1121", - "DS-2CD1121-I", - "DS-2CD1123G0E-2", - "DS-2CD1123G0E-I", - "DS-2CD1123G0F-I", - "DS-2CD1123G2-LIU", - "DS-2CD1143G0-I", - "DS-2CD1143G2-I", - "DS-2CD1143G2-LIU", - "DS-2CD1153G0-I", - "DS-2CD1202-I3", - "DS2CD1203D", - "DS-2CD1321G0-I", - "DS-2CD1321G2-IU", - "DS-2CD1321-I", - "DS-2CD1323G0E-I", - "DS-2CD1323G0-IU", - "DS-2CD1323G2-LIU", - "ds-2cd1323g2-LIUF", - "DS-2CD1327G2-L", - "DS-2CD1341-I", - "DS-2CD1343G0-I", - "ds-2cd1343g0-iuf", - "DS-2CD1347G0-L", - "DS-2CD1347G2-LUF", - "DS-2CD1623G0-I", - "DS-2CD1623G0-IZS/UK", - "DS-2CD1643", - "DS-2CD1643G0-IZ", - "DS-2CD1743G2", - "DS-2CD1H43G0-IZ", - "DS-2CD2010F-I", - "DS2CD2012-I", - "DS-2CD201PF-I", - "DS-2CD2020F-I", - "DS-2CD2021G1", - "DS-2CD2021G1-I", - "DS-2CD2021G1-IDW1", - "DS-2CD2022-I", - "DS-2CD2022WD-I", - "DS-2CD2023G0-I", - "DS-2CD2025FWD-I", - "DS-2CD2026", - "ds-2cd2032", - "DS-2CD2032F-I", - "DS-2CD2032F-IW", - "DS-2CD2032-I", - "DS-2CD2032-I (1920X1080)", - "DS-2CD2032-I 3MP IR Waterproof POE IP cctv Camera 6mm", - "DS-2CD2035FWD-I", - "DS-2CD2035-I", - "DS-2CD2041G0-LIU", - "DS-2CD2041G1-IDW1", - "DS-2CD2042D4", - "DS-2CD2042WD-I", - "DS-2CD2043G0-1", - "DS-2CD2043G0-I", - "DS-2CD2043G2-I", - "DS-2CD2043G2-IU", - "DS-2cd2045FWD-I", - "DS-2CD2046G2-IU", - "DS-2CD2047G1-L", - "DS-2CD2047G2H-LI", - "DS-2CD2047G2-LU", - "DS-2CD2051G1-IDW1", - "DS-2CD2052-I", - "ds-2cd2055fwd", - "ds-2cd2055fwd-1", - "DS-2CD2055FWD-I", - "DS-2CD2055-I", - "DS-2CD2063G0-I", - "DS-2CD2065G1-I", - "DS-2CD2065G1-l", - "DS-2CD2083G0-I", - "DS-2CD2083G2-IU", - "DS-2CD2085FWD-I", - "DS-2CD2085G1-I", - "DS-2CD2086G2", - "DS-2CD2086G2-I", - "DS-2CD2086G2-I(U)", - "DS-2CD2086G2-IU", - "DS-2CD2087G2-LIU", - "DS-2CD2087G2-LU", - "DS-2CD2110F-I", - "DS-2CD2112F-1", - "DS-2CD2112F-I", - "DS-2CD2120F-I", - "DS-2CD2121G0-I", - "DS-2CD2122FWD", - "DS-2CD2122FWD-I", - "DS-2CD2122FWD-IS (T)", - "DS-2CD2122FWD-IW", - "DS-2CD2123G0", - "DS-2CD2123G0-IS", - "DS-2CD2123G0-IU", - "DS-2CD2123G2-I", - "DS-2CD2123G2-IS", - "DS-2CD2125FWD-I", - "DS-2CD2126G2-I", - "DS-2CD2132F", - "DS-2CD2132-I", - "DS-2CD2135F-I", - "DS-2CD2135F-IS", - "DS-2CD2141G1-IDW1", - "DS-2CD2142FWD", - "DS-2CD2142FWD-I", - "DS-2CD2142FWD-IS", - "DS-2CD2142FWD-IWS", - "DS-2CD2143G0-I", - "DS-2CD2143G0-I - 4MP", - "DS-2CD2143G0-I2", - "DS-2CD2143G0-ISCKV", - "DS-2CD2145", - "DS-2CD2145F-IS", - "DS-2CD2145FWD-I", - "ds-2cd2145fwd-is", - "DS-2CD2146G2-I", - "DS-2CD2146G2-ISU", - "DS-2CD2152F-I", - "DS-2CD2155FWD", - "DS-2CD2155FWD-1", - "DS-2CD2155FWD-I", - "DS-2CD2155FWD-I 5MP", - "DS-2CD2155FWD-IS", - "DS-2CD2163G0-I", - "DS-2CD2165G0-I", - "DS-2CD2183G0-IS", - "DS-2CD2183G2-IU", - "ds-2cd2185fwd", - "DS-2CD2185FWD-I", - "DS-2CD2185FWD-IS", - "DS-2CD2212-15", - "DS-2CD22385FWD-I", - "DS-2CD2312-I", - "DS-2CD2325FWD-I", - "DS-2CD2332-I", - "DS-2CD2342WD-I", - "DS-2CD2343G0-I", - "DS-2CD2343G2-IU", - "DS-2CD2345FWD-I", - "DS-2CD2346G1-I", - "DS-2CD2346G2-I", - "DS-2CD2346WD-I", - "DS-2CD2347G1", - "DS-2CD2347G1-L", - "DS-2CD2347G1-LU", - "DS-2CD2347G2-L", - "DS-2CD2347G2-LU", - "DS-2CD234WD-I", - "DS-2CD2355FWd", - "DS-2CD2355FWD-I", - "DS-2CD2355-I", - "DS-2CD2363G0-I", - "DS-2CD2365G1", - "DS-2CD2365G1-I", - "DS-2CD2366G2-I", - "DS-2CD2367G2P-LSU", - "DS-2CD2367G2P-LSU/SL", - "DS-2CD2383G0-I", - "DS-2CD2383G0-IU", - "DS-2CD2385FWD-I", - "DS-2CD2385G1-I", - "DS-2CD2385G1-L", - "DS-2CD2386G2-ISU/SL", - "DS-2CD2386G2-IU", - "DS-2CD2387G2", - "DS-2CD2387G2-LSU/SL", - "DS-2CD2387G2-LU", - "DS-2CD2410FD-IW", - "DS-2CD2410F-I(W)", - "ds2cd2412f-1", - "ds2cd2412f-i", - "DS-2CD2412F-I", - "DS-2CD2412F-IW", - "DS-2CD2420F-I", - "DS-2CD2420F-IW", - "DS-2CD2421G0-I", - "DS-2CD2422FWD-IW", - "DS-2CD2423G0-IW", - "DS-2CD2426G2-I", - "DS-2CD2432F-I", - "DS-2CD2432F-I(W)", - "DS-2CD2432F-IW", - "DS-2CD2442FWD", - "DS-2CD2442FWD-IW", - "DS-2CD2443G0-I", - "DS-2CD2443G0-IW", - "DS-2CD2452F-IW", - "DS-2CD2463G2-I", - "DS-2CD2483G0-IW", - "DS-2CD2512F-IS", - "DS-2CD2520F", - "ds-2cd2522", - "DS-2CD2523G0-IS", - "ds-2cd2525fwd-is", - "DS-2CD2532F", - "DS-2CD2532F-I", - "DS-2CD2532F-IS", - "DS-2CD2542FWD-IS", - "DS-2CD2543G0", - "ds-2cd2543g0-is", - "DS-2CD2543G2-IS", - "DS-2CD2543G2-ISB-2.8MM", - "DS-2CD2543GO-IWs", - "DS-2CD2546G2-IS", - "DS-2CD255FWD", - "ds-2cd255fwd-1", - "DS-2CD2563G0-IS", - "DS-2CD2620F-I", - "DS-2CD2620F-IS", - "DS-2CD2622FWD-I", - "DS-2CD2625FHWD-IZS", - "DS-2CD2625FWD-ISZ", - "ds-2CD2626", - "DS-2CD2632F-I", - "DS-2CD2632F-IS", - "DS-2CD2642FWD-I", - "DS-2CD2643G0-IZS", - "ds-2cd2643g1-izs", - "DS-2CD2643G2-IZS", - "DS-2CD2646G2-IZS", - "DS-2CD2655FWD-IZS", - "DS-2CD2663G0-IZS", - "DS-2CD2666G2T-IZS", - "DS-2CD2683G0-IZS", - "DS-2CD2685FWD-IZS", - "DS-2CD2686G2-IZS", - "DS-2CD2720F-I", - "DS-2CD2722FWD-IS", - "DS-2CD2722FWD-IZS", - "DS-2CD2723G1-IZ", - "DS-2CD2726G2-IZS", - "DS-2CD2732F-I", - "DS-2CD2732F-IS", - "DS-2CD2742FWD-IS", - "DS-2CD2743G1-IZS", - "DS-2CD2745FWD-IZS", - "DS-2CD2766G2T-IZS", - "DS-2cd2783G2-IZS", - "DS-2CD2785FWD-IZS", - "DS-2CD2786G2-IZS", - "DS-2CD2787G2HT-LIZS", - "DS-2CD2942F-IWS", - "DS-2CD2D45G1/M-D/NF", - "DS-2CD2E20F", - "DS-2CD2F22FWD", - "DS-2CD2F22FWD-I", - "DS-2CD2F22FWD-IS", - "DS-2CD2F52F-IS", - "DS-2CD2H55FWD-IZS", - "DS-2cd2H85G1-IZS", - "DS-2CD2T21G0-I", - "DS-2CD2T21G1-I", - "DS-2CD2T22WD", - "DS-2CD2T22WD-I3", - "DS-2CD2T22WD-I5", - "DS-2CD2T25FWD-I5", - "DS-2CD2T25FWD-I8", - "DS-2CD2T26G2", - "DS-2CD2T42WD-I3", - "DS-2CD2T42WD-I5", - "DS-2CD2T43G0-I5", - "DS-2CD2T45FWD-I8", - "DS-2CD2T45G0P-I", - "DS-2CD2T46G-2I", - "DS-2CD2T47G2", - "DS-2CD2T47G2-L", - "ds-2cd2t47g2p-lsu", - "DS-2CD2T63G0-I8", - "ds-2cd2t63g2-2i", - "DS-2CD2T65G1-I8", - "DS-2CD2T83G0 8MP", - "DS-2CD2T85FWD-I5", - "DS-2CD2T85FWD-I8", - "DS-2CD2T86G2", - "DS-2CD2T87G2P-LSU/SL", - "DS-2CD3021G0-I", - "DS-2CD3047G0E-LUF", - "DS-2CD3047G2-LS", - "DS-2CD3056G2-IS", - "DS-2CD3121G0-IUHK", - "DS-2CD3132", - "DS-2CD3132F-IW", - "DS-2CD3135F-I", - "DS-2CD3145F", - "DS-2CD3145FD-IWS", - "DS-2CD3145F-I", - "DS-2CD3310-I", - "DS-2CD3320D-I", - "DS-2CD3335D-I", - "DS-2CD3335-I", - "DS-2CD3336WD-I", - "DS-2CD3345F-I", - "DS-2cd3345-I", - "DS-2CD3345-I", - "DS-2CD3386", - "DS-2CD3410FD-IW", - "DS-2CD3686G2-IZS", - "DS-2CD3935FWD-IWS", - "DS-2CD3B26G2T-IZHSY", - "DS-2CD3B46G2T-IZHS", - "DS-2CD3T27EWD3-L", - "DS-2CD3T36WD-I3", - "DS-2CD3T46DWD-I5", - "DS-2CD3T46WDV3-I3", - "DS-2CD3T47EWD-L", - "DS-2CD3T56WD-13", - "DS-2CD3T86FWDA4-LS", - "DS-2CD4026FWD", - "Ds-2cd4a25fwd-iz", - "DS-2CD4A25FWD-IZ", - "DS-2CD4A25FWD-OZ", - "DS-2CD4A26FWD-IZ", - "DS-2CD4A26FWD-IZS/P", - "DS-2CD4B26FWD-IZ", - "DS-2CD5546G0-IZHS", - "DS-2CD6332FWD-IV", - "DS-2CD6362F-I", - "DS-2CD6362F-IV", - "DS-2CD6362F-IVS", - "DS-2CD6365G0E-S/RC", - "DS-2CD6365G0-IS", - "DS-2CD63C2F-IS", - "DS-2CD6412FWD-C2", - "DS-2cd654G1-IZS", - "DS-2CD6986F", - "DS-2CD6D54FWD-IZHS", - "DS-2CD6D82g0-IHS", - "DS-2CD7133-E", - "DS-2CD7A26G0/P-IZHS", - "DS-2CD853F", - "DS2CD862MF", - "DS-2CDA26G0-IZHSY", - "ds-2cgd", - "DS-2CV1021G0-IDW1", - "DS-2CV2041G2-IDW", - "ds-2cv2046g0-idw", - "DS-2CV2141G2-IDW", - "DS-2CV2Q01FD-IW", - "DS-2CV2Q21FD-IW", - "DS-2DC1001-I", - "DS-2DC2532F", - "DS-2DE1A200IW-DE3", - "DS-2DE2202I-DE3/W", - "DS-2DE2A404IW", - "DS-2DE2A404IW-DE3", - "DS-2DE2A404IW-DE3(S6)", - "DS-2DE2A404IW-DE3/W", - "DS-2DE2A404IW-DE320200822CCWRE72456274W", - "DS-2DE2C400MW-DE", - "DS-2DE3304DW-DE", - "DS-2DE3304W-DE", - "DS-2DE3304W-DE20210701CCWRG29013843W", - "DS-2DE3A400BW", - "DS-2DE3A4041W-DE/W", - "DS-2DE3A404IW-DE", - "DS-2DE3A404IW-DE/W", - "DS-2DE4215W-DE3", - "DS-2DE4220-AE", - "DS-2DE4220W-AE", - "DS-2DE4225IW-DE", - "DS-2DE4225W", - "ds-2DE4425IW-DE", - "DS-2DE4425W-DE", - "DS-2DE4582-AE", - "DS-2DE4A225IW-DE", - "DS-2DE4A425IW-DE", - "DS-2DE4A425IWG-E", - "DS-2DE5120I-AE", - "DS-2DE5174-A", - "DS-2DE5220I-AE", - "DS-2DE5225IW-AE", - "DS-2DE5425IW-AE", - "DS-2DE5432IW-AE", - "DS-2DE7120IW-A", - "DS-2DE7174-A", - "DS-2DE7184-AE", - "DS-2DE7330IW", - "DS-2DE7330IW-AE", - "DS-2DF5225X-AEL", - "DS-2DF8223I-AEL", - "DS-2DF8225IX-AEL", - "DS-2DF8236I - AEL", - "DS-2DY5223IW-DM", - "DS-2SC1Q140IZ-TE", - "DS-2SD7A26G0/P-IZHS", - "DS-2SE3C404MWG-E/14", - "DS-2SE4C425MWG-E", - "DS-2SE7C144IW-AE", - "DS-2SF8C442MXS-DLW(24F0)(P3)", - "DS-2TD1217B-6/PA", - "DS-2TD2617B-6/PA", - "DS-2TD4237-25/V2", - "DS-2XE6222F-IS", - "DS-2XM6122FWD-IM", - "DS-2XS2T41G0-ID/4G/C04S05", - "DS-2XXX", - "DS-6704", - "DS-7108HGHI-F1", - "DS-7116HGHI-K1", - "ds-7204hfhi-st", - "DS-7204HQHI-F1/N", - "DS-7204HQHI-K1", - "DS-7208HFHI-ST", - "DS-7208HGHI-SH", - "DS-7216HQHI-F2/N", - "DS-7216HWI-SH", - "DS-72xx", - "DS-7600 NI-SE P DVR", - "DS-7600 Series", - "DS-7604NI", - "DS-7608NI", - "DS-7616NI-E2/16P", - "DS-7616NI-E2-8P-A", - "DS-7732NI-I4/16P", - "DS-7732NI-I4/16P1620161216CCRR694453862WCVU", - "DS-9608NI-RT", - "DS-9632NI", - "DS-9806NI-RT", - "DSC-2CD2035", - "DS-CD1027G0-L", - "DS-CD1383G0-I", - "ds-cd4a25fwd-iz", - "DS-HD1", - "DS-I101", - "DS-I102", - "DS-I110", - "DS-i200", - "DS-I200(c)", - "DS-I200(D)", - "DS-I205", - "DS-I220", - "DS-I2212", - "DS-I250W(B)", - "DS-I400", - "DS-I453M", - "DS-IPC-B12-I", - "DS-IPC-T12H-IA", - "DS-IPC-T12HV3-IA", - "DS-IPC-T12-I", - "DS-K1T671MF", - "ds-kb6003-wip", - "DS-KB6403", - "DS-KB8102", - "DS-KB8112", - "DS-KB8112-IM", - "DS-KD8003-IME1", - "DS-KV6113-WPE1", - "DS-KV6113-WPE1(B)", - "DS-KV8113", - "DS-KV8202", - "DS-l102", - "DS-N201", - "DS-N241W", - "DT143-I20181019", - "DT2A404", - "DT385-I", - "dvr4", - "ECI-D12F2", - "ECI-T24F2", - "ECI-T44F2", - "EV1008HDX", - "Exir", - "G2 8MP", - "Gate", - "H.265", - "H.265+", - "HDTVI-8K-12FPS", - "HES328-VBZ", - "Hik", - "HIK", - "HIK-2CD1041L", - "HIKVISION DS-2CD1148-I/B", - "hikvision ds-2cd1623", - "HIKVISION DS-2CD201PF-I", - "Hikvision DS-2CD2432F-I", - "HIKVISION DS-2CD2522FWD-IS", - "HikVision DS-2CD2745FWD-IZS", - "HIKVISION DS-2CD2F22FWD-I", - "HIKVISION DS-7208HUHI-K1", - "HIKVISION DS7608", - "Hikvision HW140", - "Hikvision IP Camera", - "hilook", - "HK-2CD1041L", - "HK3335", - "HNC328-TD", - "Hnp122-IR/26X", - "hw221", - "HWC P120 D/W", - "HWI-B140H", - "HWI-B640H-V", - "HWI-D129H", - "HWI-D140h", - "HWI-D620H-Z", - "HWI-T020H", - "HWI-T220H", - "HWI-T221H", - "IF52N53-IR", - "IPAL", - "ipc d120", - "IPC3740-FM", - "IPC-8220", - "IPC-92", - "IPcam t4-p", - "IP-CAMERA", - "IPC-B121H", - "IPC-B220", - "IPC-D120", - "IPC-D121H", - "IPC-D140", - "IPC-D150H-M", - "IPC-T056-A3", - "IPC-T056c-A3", - "IPC-T221H", - "ipc-t229h", - "ipc-t240h", - "IPC-T250H", - "IR MINI BULLET", - "jarrod", - "K1T501SF", - "Leffes", - "LPR", - "mini ptz camera", - "mistnost", - "muz", - "MUZ1", - "MUZ2", - "NC304-XD", - "nc324", - "nevahgno", - "NVR", - "NVR-4CH", - "OFC", - "Other", - "PCI-T15F2SL", - "Puha", - "SH-IVB01UFE-IW", - "SkyCam", - "TF44", - "TV-IP310PI", - "VCU", - "waihi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "1080P", - "2032", - "215", - "218", - "219", - "222", - "223", - "2385", - "2CD1323G0E-I", - "2cd2110f", - "2CD3340-FI", - "3335", - "3335-I", - "CD2020", - "cd2123", - "CHINA", - "CMIP1024", - "DC-2CD2042WD-I", - "ds kb8113", - "DS-2CD", - "DS-2CD1021-I", - "ds-2cd1023g0e-1", - "DS-2CD1023G0-IUF", - "DS-2CD1023G0-IUM", - "DS-2CD1027G0-L", - "DS-2CD1101-I", - "DS-2CD1131-I", - "DS-2CD1341-I", - "DS-2CD1343G0-I", - "ds-2cd2010f-i", - "DS-2CD2012-I", - "DS-2CD2020F-I", - "DS-2CD2021G1-I", - "DS-2CD2022WD-I", - "DS-2CD2032-I", - "DS-2CD2035FWD-I", - "DS-2CD2042WD-I", - "DS-2CD2085G1-L", - "DS-2CD2086G2-IU", - "DS-2CD2112-I", - "DS-2CD2120F-I", - "DS-2CD2132-I", - "DS-2CD2142FWD-I", - "DS-2CD2143G0-I", - "DS-2CD2145F-IS", - "DS-2CD2146-G2", - "DS-2CD2183G0-IS", - "DS-2CD2343G0-I", - "DS-2CD2343G2-IU", - "DS-2CD2347G2-LU", - "DS-2CD2355FWD-I", - "DS-2CD2355-I", - "DS-2CD2385FWD-I", - "DS-2CD2386G2-ISU/SL", - "DS-2CD2387G2-LSU/SL", - "DS-2CD2420F-IW", - "DS-2CD2421G0-IW", - "DS-2CD2432F-I", - "DS-2CD2532F-IS", - "DS-2CD2622FWD-I", - "DS-2CD2642FWD-I", - "DS-2CD2642FWD-IS", - "DS-2CD2645FWD-IZS", - "DS-2CD2646G2-IZS", - "DS-2CD2666G2T-IZS", - "DS-2CD2712F-I", - "DS-2CD2742FWD-IS", - "DS-2CD2766G2T-IZS", - "DS-2CD3T45D-I5", - "DS-2CD3T45-I5", - "DS-2CD6332FWD-IS", - "DS-2CD6412FWD-C2", - "DS-2CD7A26G0/P-IZHS", - "DS-2D", - "DS-2D54E5432IW-AE", - "DS-2DC1001-I", - "DS-2DE2202-DE3/W", - "DS-2DE2A404IW-DE3", - "DS-2DE3304W", - "DS-2DE4225IW-DE", - "DS-2DE5432IW-AE", - "DS-2DE7432IW-AE", - "DS-2TD1217-3/V1", - "DS-2TD2617B-6/PA", - "DS-7", - "DS-7216HI-SL", - "DS-7216HWI-SH", - "DS-7332HGHI-SH", - "DS-7604NI", - "DS-7608NI", - "DS-7608NI-E2", - "DS-7616", - "DS-7732NI-I4/16P", - "DS-9608NI-RT", - "DS-CD", - "DS-i200", - "DS-KD8003", - "DS-KV6113-WPE1", - "DS-KV6113-WPE1(B)", - "EV1008HDX", - "FFMPEG substream", - "GVIP2620V", - "Hik", - "HIK", - "HIKVISION DS-2CD2432F-IW", - "HIKVISION DS-7208HUHI-K1", - "HIKVISION DS7216", - "HIKVISION DS7608", - "hrome", - "IPC-B220", - "jarrod", - "NVR", - "Other", - "prohodnaya" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "1080P", - "2DE7225", - "Bullet-4K", - "DC-2CD2010-I", - "DS.-2CD1410F.1W", - "DS-1676NI-E2/16P", - "ds2cd1043g2liu", - "DS2-CD2032-I", - "DS-2CD2122FWD-IS (T)", - "DS-2CD2123G2-I", - "DS-2CD2332", - "DS-2CD2342WD-I", - "DS-2CD6332FWD-IS", - "DS-2CD6365G0-IS", - "DS-2CD6412FWD-C2", - "DS-2TD2637-10/PY", - "DS-7104HWI-SH", - "DS-7108HQHI-K1", - "DS-7204HQHI", - "DS-7204HQHI-HK", - "DS-7204HQHI-K1", - "DS-7208HGHI-SH", - "DS-7208HVI-SV", - "DS-7216HGHI-E2", - "DS-7216HWI", - "DS-7232HQHI-K2", - "DS-72XX", - "DS-7608NI", - "DS-7608NI-E2", - "DS-7732NI-I4/16P", - "NVR", - "NVR-CH4", - "Other", - "TV-IP320PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "1080P", - "DS-1676NI-E2/16P", - "DS-2CD6332FWD-IS", - "DS-2CD6812D", - "DS-2DC1001-I", - "DS-2TD2617-3/V1", - "DS-7204HQHI-K1", - "DS-7208HGHI", - "DS-7208HGHI-SH", - "EV3016", - "HIKVISION DS7216", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/501" - }, - { - "models": [ - "1080P", - "228", - "2DS-2CD2142FWD-I", - "DS.-2CD1410F.1W", - "DS-1676NI-E2/16P", - "DS-2CD6332FWD-IV", - "DS-2CD6362F-IV", - "DS-2CD6365G0-IS", - "DS-7108HGHI-F1", - "DS-7204HQHI-HK", - "DS-7204HQHI-K1", - "DS-7208HGHI", - "DS-7208HQHI-F1", - "DS-7216HUHI-K2", - "DS-72XX", - "DS-7332HGHI-SH", - "DS-I220", - "HIKVISION DS-7208HFHI-ST", - "HIKVISION DS-7208HUHI-K1", - "NVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/301" - }, - { - "models": [ - "1080P", - "2035", - "2CD", - "2CD2032-L", - "2CD2442WD-I", - "Bullet", - "DM-SCB415IP-V10E", - "DS-2CD", - "DS-2CD1021-I", - "ds-2cd1023g0e-1", - "DS-2CD1023G0-IUF", - "DS-2CD1123G0E-I", - "DS-2CD1623G0-IZS/UK", - "ds-2cd2021g1-i", - "DS-2CD2035FWD-1", - "ds2cd2043g2i", - "DS-2CD2085G1-L", - "DS-2CD2110F-I", - "DS-2CD2142FWD-I", - "DS-2CD2146G2-ISU", - "DS-2CD2183G0-I", - "DS-2CD23", - "DS-2CD2332-I", - "DS-2CD2335FWD-I", - "DS-2CD2347G1-L", - "DS-2CD2355FWD-I", - "DS-2CD2385G1-I", - "DS-2CD2387G2-LSU/SL", - "DS-2CD2442FWD-IW", - "DS-2CD2443G0-IW", - "DS-2CD2625FWD-ISZ", - "DS-2CD2643G0-IZS", - "DS-2CD2T47G1-L", - "DS-2CD3025G0-I", - "DS-2CD3145G0-IS", - "DS-2CD3145GO-IS", - "DS-2CD3345-I", - "DS-2CD3786G2T-IZS", - "DS-2CD6365G0-IS", - "DS-2DF5225X-AEL", - "DS-6701HFI", - "DS-6716", - "DS-7108HGHI-E1", - "DS7116", - "DS-7204HQHI-HK", - "DS-7204HTHI-K1", - "DS-7208HGHI-SH", - "DS-7208HVI-SV", - "DS-7216HGHI-E2", - "DS-7216HGHI-SH", - "DS-7216HWI-SH", - "DS-7604NI", - "DS-7608NI-E2", - "DS-7616", - "DS-7716NI-SP/16", - "DS-8108HQHI-SH", - "DS-9664NI-I8", - "DS-Dc1121", - "DS-KB8112", - "DS-KV6113-WPE1(C)", - "DS-KV8113-WME1(C)", - "EV1016HDX", - "GPS-DVR01", - "HES324-MB", - "HIK PTZ", - "HIKISION", - "HIKVISION DS-7208HUHI-K1", - "HIKVISION HD 2.0", - "Other", - "SC-303GY-XD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "1080P", - "DS-2CD2342WD-I", - "DS-2CD6332FWD-IS", - "DS-2CD6365G0-IS", - "DS-2CD6812D", - "DS-7208HGHI-SH", - "DS-7216HUHI-K2", - "DS-7604NI", - "DS-7A04HQHI-K1", - "HIKVISION DS-7208HUHI-K1", - "NVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/401" - }, - { - "models": [ - "1080P", - "7608", - "CAMERAA", - "DS-1676NI-E2/16P", - "DS-2CD2347G2-LU", - "DS-2CD2620F-IS", - "DS-2CD2646G2HT-IZS", - "DS-4208HGHI-E1", - "DS-7108HGHI-F1", - "DS-7204HGHI-E1", - "DS-7204HQHI-HK", - "DS-7204HQHI-K1", - "DS-7208HGHI", - "DS-7208HGHI-SH", - "DS-7216HGHI-E2", - "DS-7332HGHI-SH", - "DS-7616", - "ds-7716ni-sp", - "DS-7716NI-SP/16", - "DVR", - "HIKVISION DS-7208HFHI-ST", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/401" - }, - { - "models": [ - "130hook", - "2CD-2142", - "DC-2CD2110F-1", - "ds2cd2043g2i", - "DS-2CD2132-I", - "DS2CD2332-I", - "DS-2CD2385G1-I", - "DS-2CD2387G2-LSU/SL", - "DS-2CD2412F-IW", - "DS-2CD2620F-I", - "DS-2CD2625FWD-ISZ", - "DS-2CD2T65FWD-I5", - "DS-2CD63C2F-IVS", - "ds-7104hghi-f1", - "DS-7204HQHI-HK", - "DS-7208HGHI", - "DS-7208HGHI-SH", - "DS-7208HQHI-K1", - "DS-7732NI-I4/16P", - "DVR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/102" - }, - { - "models": [ - "2135", - "DS-2CD", - "DS-2CD2421G0-IW", - "DS-2CD2726G2-IZS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/103" - } - ] -} \ No newline at end of file diff --git a/data/brands/hikwon.json b/data/brands/hikwon.json deleted file mode 100644 index b28f7f5..0000000 --- a/data/brands/hikwon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hikwon", - "brand_id": "hikwon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2000", - "IS-3NA66" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hills.json b/data/brands/hills.json deleted file mode 100644 index e7cc4d8..0000000 --- a/data/brands/hills.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Hills", - "brand_id": "hills", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVC-BM1", - "NVC-DF1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "VSD1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/hilook.json b/data/brands/hilook.json deleted file mode 100644 index 9570092..0000000 --- a/data/brands/hilook.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "brand": "Hilook", - "brand_id": "hilook", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AIT210", - "b140h", - "barda", - "D120C", - "D140C", - "D640H-Z", - "H.250+", - "H.265+", - "IPC", - "IPC-B120H", - "IPC-B121H", - "IPC-B121H-M", - "IPC-B129H", - "IPC-B149HA", - "IPC-B150H-M", - "IPC-B180H-UF", - "IPC-B650-Z", - "ipc-d120", - "IPC-D129HA", - "IPC-D140H", - "IPC-D261H-MU", - "IPC-D620H-Z", - "IPC-P100-D/W", - "IPC-T120", - "IPC-T221H-C", - "IPC-t229H", - "IPC-T240H", - "IPC-T250H", - "IPC-T261H-MU", - "IPC-T269H-MU/SL", - "IPC-T620-Z", - "IPC-T621H-Z", - "IPC-T641H", - "IPC-T651H-Z", - "Other", - "PTZ-N2404I-DE3", - "PTZ-N2C400M-DE", - "PTZ-N4225I-DE20191130CCWRD95011336W", - "T240H", - "Tipc-d120" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "DVR", - "IPC-B120H", - "IPC-B121H", - "IPC-B480H", - "IPC-T261H-MU", - "IPC-T620-Z", - "Left Side", - "No.1", - "No.3", - "No.4", - "No.5", - "NVR-216", - "PTZ-N2404I-DE3", - "Right Side", - "T4_30DL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "id140h", - "IPC-B640H-Z", - "IPC-D140H-M", - "IPC-T259H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "IPCAM-T4-30DL", - "IPC-B180", - "ipc-B180H", - "IPC-B180H-UF", - "IPC-D121H-M", - "IPC-T221H", - "IPC-T651-Z(C)", - "PTZ-N42151" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IPC-B121H", - "IPC-B140HA-LDF/W", - "IPC-B140HA-LUF/SL", - "N2C400I-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "IPC-B149HA", - "IPC-C220-D/W", - "IPC-D140H-M", - "IPC-P100 D/W", - "IPC-T259H", - "Other", - "PTZ-N2204I-DE3", - "PTZ-N2404I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "IPC-B180H-UF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/302" - }, - { - "models": [ - "IPC-T261H-MU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/301" - }, - { - "models": [ - "PTZ-N2404I-DE3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiltron.json b/data/brands/hiltron.json deleted file mode 100644 index addaab6..0000000 --- a/data/brands/hiltron.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hiltron", - "brand_id": "hiltron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "thc2033" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hip.json b/data/brands/hip.json deleted file mode 100644 index 60eb7bc..0000000 --- a/data/brands/hip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hip", - "brand_id": "hip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cmt9013f" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - } - ] -} \ No newline at end of file diff --git a/data/brands/hip2p.json b/data/brands/hip2p.json deleted file mode 100644 index d2c0b02..0000000 --- a/data/brands/hip2p.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "brand": "Hip2p", - "brand_id": "hip2p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SpZ3N0PmL2", - "hicam", - "Other", - "RG-IP03", - "WIFICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "CT0258", - "Other", - "RG-IP03", - "RG-IP03+", - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NETWORK CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "noname" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live/ch0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "p2p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P2P", - "WIFICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hipcam.json b/data/brands/hipcam.json deleted file mode 100644 index 1c8dd42..0000000 --- a/data/brands/hipcam.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "brand": "Hipcam", - "brand_id": "hipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "c6f0snz0n0pml2", - "C7815WIP", - "C9F0SeZ0N0P0L0", - "C9F0SEZ0N0P0L0", - "ckbridg", - "Hami", - "IP-CAMERA", - "Ital;y", - "Mexico Closet", - "Other", - "RGB", - "SCM-SW2666FD-3.6HD", - "shodan", - "sof4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/11" - }, - { - "models": [ - "1080P", - "C6F0SeZ0N0P3L0", - "C9F0SEZ0N0P0L0", - "Other", - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "2345", - "425", - "C6F0SEZ0N0P3L0", - "C7815WIP", - "C9F0SEZ0N0P0L0", - "FDT-FD7902", - "NCM620W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C7815WIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "C7815WIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/udp/av0_0" - }, - { - "models": [ - "C7815WIP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/h264_stream" - }, - { - "models": [ - "C9F0SEZ0N0P0L0", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "NCM620W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hipro.json b/data/brands/hipro.json deleted file mode 100644 index 06fc899..0000000 --- a/data/brands/hipro.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Hipro", - "brand_id": "hipro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "007", - "A006", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hisee.json b/data/brands/hisee.json deleted file mode 100644 index e88d74e..0000000 --- a/data/brands/hisee.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "brand": "Hisee", - "brand_id": "hisee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "215", - "ca11-sc-i-poe-223", - "ipc-t20000", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "712", - "HD115-DZ", - "whd714", - "WS318" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "BC1", - "BC1-5MP", - "by2000", - "HD812-P", - "hd914-P", - "HD918-P", - "IPC-T20000", - "WHD818" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "domeFFMPEG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "HD812-P", - "HI115-PTZ", - "hsy-a1008nm", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/1/mpeg4/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/ch2_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiseeu.json b/data/brands/hiseeu.json deleted file mode 100644 index 5c44e40..0000000 --- a/data/brands/hiseeu.json +++ /dev/null @@ -1,471 +0,0 @@ -{ - "brand": "Hiseeu", - "brand_id": "hiseeu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "008", - "5323-w", - "BH312", - "c30", - "HB312", - "HB612", - "HB612-P", - "HS611", - "HSY-P2", - "NVR", - "Other", - "TZ-HB312", - "TZ-HB612", - "tz-hc913", - "whd303", - "WHD405", - "WTW-IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "121w1w2", - "fh2e", - "HC725-P", - "WHD612" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "28DGPOE4MP", - "50X10_32M", - "50x40-SW", - "akit-4ahbb12", - "B004-V2.0", - "BP215-P", - "FH1D", - "FH2C", - "FH2E", - "H.265", - "hb 215", - "hb 215-p", - "HB212", - "HB215-P", - "hb612", - "HB615-P", - "HB624", - "HB712-PZ", - "HC615-p", - "HC615-P", - "hc61x", - "HC725-P", - "HD115-PZ", - "HD812-P", - "HM110", - "HS614-P", - "hsy-a1008nm", - "hsy-hb215-p", - "hsy-hb612-p", - "HYS-HB612-P", - "Other", - "WHD103Z", - "WHD303", - "WHD312B", - "WHD313", - "WHD313B", - "WHD318", - "WHD612", - "WHD712", - "WHD812B", - "WHD818B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "2c90" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/ch2_0.264" - }, - { - "models": [ - "4hb611", - "hsy-fhy-1080p", - "K8208-W", - "Nvr", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "5323-W", - "B07JQZQRVG", - "FJ2C", - "hb612", - "hsy-fhy-1080p", - "HSY-P2", - "Other", - "TZ-HB312", - "WHD303" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "5323-W", - "HB312", - "hb612-p", - "NVR", - "Other", - "TZ-HB312", - "TZ-HB612", - "whd303", - "WHD405" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5323-W", - "C3-S-A6", - "hb612", - "HC612", - "Other", - "OUTSIDE", - "PPunk", - "TZ-HB312", - "WHD303", - "WHD813B", - "WHDA14" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "advr-10v-4", - "FH1C" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "B0BW9CSZDV", - "HB312", - "HB915B-PA", - "Other", - "WHD303" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=1" - }, - { - "models": [ - "C5-Q-AP", - "TZ-HB312" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "FH1D", - "HB215", - "hb613-p", - "HB-613P", - "HB615-P", - "HB815", - "hc61x", - "HD185-PZ", - "HD812-P", - "HD918-P", - "HD985-P", - "IP-1", - "IPC_NT98566_80N80PS-R_S38", - "kaka223", - "WHD812", - "WHD812B", - "WHD918B", - "XM-103" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "FH2C", - "R80X30-PQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp" - }, - { - "models": [ - "fh2e", - "HD685-P", - "WHDC14" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "fv4", - "HC612", - "HD815-P", - "HD918-P", - "HI3516", - "Other", - "ptz", - "WHD312B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HB215-P", - "NBD80S16S-KL", - "Other", - "WHD303", - "WHD312B", - "WHD812", - "WHD812B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "HB215-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=1" - }, - { - "models": [ - "HB312-p", - "hd812-p", - "whd312", - "WHD712", - "WHD812B", - "WHD813B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "HB612-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HB615-P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=1" - }, - { - "models": [ - "HB615-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "HB848-P", - "k8208-3W", - "WHD315" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "HB848-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - }, - { - "models": [ - "hsy-fhy-1080p", - "R80X20-PQ", - "WHD813B", - "WS318" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "IP-1" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "K8208-3W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "PPunk" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.264" - }, - { - "models": [ - "PPunk" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1&onvif=0.sdp?real_st" - }, - { - "models": [ - "PPUnk" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?size=-1x-1&download=yes" - }, - { - "models": [ - "R80X30-PQ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "VCAM2" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "WHD303" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WHD312B", - "WHD612" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "WHD812B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/hisense.json b/data/brands/hisense.json deleted file mode 100644 index 0a39a25..0000000 --- a/data/brands/hisense.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Hisense", - "brand_id": "hisense", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD3516" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/webcapture.jpg?command=snap&channel=1?COUNTER" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/hisilicon.json b/data/brands/hisilicon.json deleted file mode 100644 index bc9d33b..0000000 --- a/data/brands/hisilicon.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "brand": "Hisilicon", - "brand_id": "hisilicon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2011-05", - "DV300", - "Hi3507", - "Other", - "RTSP(TCP) DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "3518", - "HI3516C", - "Hi3518E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "3518", - "HI3518E", - "Other", - "RTSP(TCP) DVR", - "works" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "3518", - "HI3516C", - "HI3518E" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "3518", - "HI3515", - "Other", - "RTSP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Hi3507", - "HI3518E", - "HYV3804", - "Other", - "RTSP(TCP) DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Hi3507", - "HI3516C", - "HYV3804", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Hi3516c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Hi3516c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "XZ-30I-AK/P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "XZ-30I-AK/P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/hisomu.json b/data/brands/hisomu.json deleted file mode 100644 index 7618a99..0000000 --- a/data/brands/hisomu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hisomu", - "brand_id": "hisomu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/histream.json b/data/brands/histream.json deleted file mode 100644 index 4b417bd..0000000 --- a/data/brands/histream.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Histream", - "brand_id": "histream", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HH9801", - "HH9801B-MPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "HH9801B-MPC", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "RTSP IP Camera" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av0_[CHANNEL]" - }, - { - "models": [ - "RTSP IP CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hisung.json b/data/brands/hisung.json deleted file mode 100644 index e85d325..0000000 --- a/data/brands/hisung.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Hisung", - "brand_id": "hisung", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3016B", - "HISUNG 3016B DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "3016B", - "Hisung 3016B DVR", - "hisung 301B", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/hitek.json b/data/brands/hitek.json deleted file mode 100644 index 2aa2201..0000000 --- a/data/brands/hitek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hitek", - "brand_id": "hitek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "572" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/hitron.json b/data/brands/hitron.json deleted file mode 100644 index 8a8242a..0000000 --- a/data/brands/hitron.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Hitron", - "brand_id": "hitron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eneo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream1" - }, - { - "models": [ - "HNCV-811PZ0S4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "HNCV-811PZ0S4", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "nut-8213r", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hivdc-2300v.json b/data/brands/hivdc-2300v.json deleted file mode 100644 index f0dccc9..0000000 --- a/data/brands/hivdc-2300v.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Hivdc-2300v", - "brand_id": "hivdc-2300v", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hivdc-2300", - "HIVDC-2300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiview.json b/data/brands/hiview.json deleted file mode 100644 index 414ef65..0000000 --- a/data/brands/hiview.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Hiview", - "brand_id": "hiview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "55b10", - "general", - "HP-55A20PE", - "hp-55b10", - "HP-55B30PE", - "Other", - "robot 20-40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "GENERAL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GENERAL" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GENERAL" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VR Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hivision.json b/data/brands/hivision.json deleted file mode 100644 index dcc2981..0000000 --- a/data/brands/hivision.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "brand": "Hivision", - "brand_id": "hivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5mp", - "CS-CV246-B0-1C1WFR", - "CS-CV246-B0-3B2WFR", - "CS-H6c-R101", - "DS-2CD2023G0E-I(B)", - "MCL12", - "miniPTZ", - "Other", - "THW-220H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "B120", - "DS-2CD2043G2 - IU20240527AAWRFE7553853", - "ds2cd2043g2-i", - "DS-2CD2720F-IZS", - "EZVIZ C6C", - "EZVIZ C6CN", - "IP-515 2.0MP", - "ir Network Camera", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DS-2CD2143G0-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/11" - }, - { - "models": [ - "DS-2CD2720F-IZS", - "IPC-T250H-MU", - "IPC-T259H", - "Narrow", - "TVW-3101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "DS-2CD2T22WD-I320160307BBWR578427073", - "DS-P2420" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "HV-3820", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "HV-3820" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPC-T250H-M", - "l1200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1702" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1802" - }, - { - "models": [ - "V100R003" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/hiwatch.json b/data/brands/hiwatch.json deleted file mode 100644 index daabfde..0000000 --- a/data/brands/hiwatch.json +++ /dev/null @@ -1,432 +0,0 @@ -{ - "brand": "Hiwatch", - "brand_id": "hiwatch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]" - }, - { - "models": [ - "040", - "114w", - "B020", - "B620", - "DS-I110", - "DS-I113", - "DS-I114W", - "DS-I126", - "DS-I200(D)", - "DS-I203", - "ds-i214w", - "DS-I250", - "DS-I400", - "DS-I400(D)", - "DS-I402", - "DS-I403(C)", - "DS-I403(D)", - "DS-I850M", - "DS-L113", - "DS-N211", - "ds-n241w", - "DS-P2420", - "HWC P120-D/W", - "HWI-T221H", - "i100", - "IPC-B020", - "ipc-b120", - "IPC-B140", - "IPC-B542-G2/4l", - "IPC-B642-G2/ZS", - "IPC-D120-I", - "IPC-D640-Z", - "IPC-DG82-G2", - "IPC-T020(B)", - "IPC-T040(B)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "DC-I200", - "DS-I102", - "DS-I120", - "DS-I252L", - "DS-I253M", - "DS-I450L(C)", - "DS-I452M(B)", - "HS1400", - "IPC-B020(C)", - "IPC-B040(B)", - "IPC-C042-G0/W", - "IPC-D542-g0/SU", - "IPS-D542-g0/SU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "DS-1405M(C)", - "DS-I252L", - "DS-I400(D)", - "DS-I450", - "IPC-D220-IZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DS-D100", - "DS-I114W", - "DS-I122", - "DS-I200(D)", - "DS-I205M", - "DS-I205M(B)", - "DS-I220", - "DS-I250", - "DS-I256Z", - "DS-I400", - "DS-I420", - "DS-I45", - "ds-i452c", - "DS-I452S", - "DS-I458Z", - "DS-I653M", - "DS-N201", - "ds-n241w", - "HWC P120-D/W", - "HWI-D120H-M", - "IPC-b040", - "IPC-D542-G0/SU", - "IPC-T020(B)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "DS-I114W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2" - }, - { - "models": [ - "ds-i200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mjpeg" - }, - { - "models": [ - "ds-i200", - "DS-I200(c)", - "DS-I200(D)", - "DS-I202", - "DS-I250", - "DS-I252W(B)", - "DS-I259M", - "DS-I400", - "ds-i402", - "DS-I450", - "DS-I450L(C)", - "ds-i452c", - "DS-I456", - "DS-I458Z", - "HDC-B020", - "i225", - "i259", - "IPC-B020", - "IPC-B120-I", - "IPC-B642-G2/ZS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "Ds-i203" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/" - }, - { - "models": [ - "DS-I220", - "i225", - "I-258", - "PT-Y2400I-DE", - "watch" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "ds-i458" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/mjpeg" - }, - { - "models": [ - "DS-l400", - "I223", - "IPC-B022-G2/U", - "IPC-B022-G2\\U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IPC-D140" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "IPC-D140" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "IPC-T020(B)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "ALL", - "B220", - "C6T", - "D110", - "DS-H216Q", - "DS-I102", - "DS-I113", - "DS-I114", - "DS-I114W", - "DS-i126", - "ds-i200", - "DS-I200(D)", - "ds-i203", - "DS-I213", - "ds-i214", - "DS-I214(B)", - "ds-i214w(b)", - "ds-i223", - "DS-I400(C)", - "ds-l122", - "ds-n241w", - "i100", - "i110", - "I114", - "i114w", - "I120", - "IPC-B120-I", - "IPC-B140", - "IPC-B622-G2/ZS", - "IPC-D082-G2/S", - "IPC-D120", - "IPC-T640-Z", - "l110", - "Other", - "VDP-D2201", - "VDP-D2211W(B)", - "watch" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "ALL", - "DS-I102", - "ds-i200", - "Ds-i203", - "DS-I214(B)", - "DS-I214W(B)", - "DS-I253", - "ds-i458", - "HiWatch DS-N208(C)", - "i450s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/101" - }, - { - "models": [ - "ds-i200", - "VDP-D2201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "DS-I214(B)", - "DS-I405" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ISAPI/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/hjshi.json b/data/brands/hjshi.json deleted file mode 100644 index 9b5b0b8..0000000 --- a/data/brands/hjshi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hjshi", - "brand_id": "hjshi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h651" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hjt.json b/data/brands/hjt.json deleted file mode 100644 index 4be66df..0000000 --- a/data/brands/hjt.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Hjt", - "brand_id": "hjt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6100", - "6200", - "720", - "720p", - "AS-IP1250", - "C6F0SeZ0N0P0L0", - "HJT-IPC6100--B1W", - "IPC6200-B1W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "6200", - "AS-IP1250", - "aw0103010e05a", - "HJT-IPC6100--B1W", - "HJT-IPC6200-B1", - "Hongjuingtian", - "IP Camera2", - "IPC6200B1", - "IPC6200-B2W", - "IPC620-B2W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "AS-IP1250" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C6F0SgZ3NOPaL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "IP C6500-B5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IPC6200B1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hkes.json b/data/brands/hkes.json deleted file mode 100644 index b1542f1..0000000 --- a/data/brands/hkes.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hkes", - "brand_id": "hkes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hnc.json b/data/brands/hnc.json deleted file mode 100644 index b7add08..0000000 --- a/data/brands/hnc.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Hnc", - "brand_id": "hnc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "312-mb", - "HNC301-MD", - "HNC303-MB", - "HNC303-MD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "HNC300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HNC303-MB" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hodely.json b/data/brands/hodely.json deleted file mode 100644 index 8e715fc..0000000 --- a/data/brands/hodely.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hodely", - "brand_id": "hodely", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hofsta.json b/data/brands/hofsta.json deleted file mode 100644 index e0f545b..0000000 --- a/data/brands/hofsta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hofsta", - "brand_id": "hofsta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hokam.json b/data/brands/hokam.json deleted file mode 100644 index 56bf849..0000000 --- a/data/brands/hokam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hokam", - "brand_id": "hokam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "a9 mini" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/holdoor.json b/data/brands/holdoor.json deleted file mode 100644 index 70c9df4..0000000 --- a/data/brands/holdoor.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "brand": "Holdoor", - "brand_id": "holdoor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p IP Camera", - "wcam-174040-nghrh", - "WCAM-220781-GGJUL", - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1080P IP CAMERA", - "2.1", - "650", - "NETCAM", - "Other", - "WIFI 720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/11" - }, - { - "models": [ - "720p", - "720p WiFi", - "Netcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "DWB-02242E" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10554, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NETCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NETCAM", - "WCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WCAM", - "wificam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10554, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WIFI 720" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WiFi 720p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/holovision.json b/data/brands/holovision.json deleted file mode 100644 index c92a6ba..0000000 --- a/data/brands/holovision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Holovision", - "brand_id": "holovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9112" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/holowits.json b/data/brands/holowits.json deleted file mode 100644 index f3f36fd..0000000 --- a/data/brands/holowits.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Holowits", - "brand_id": "holowits", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2030", - "hwd 2030" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/home-it.json b/data/brands/home-it.json deleted file mode 100644 index fcc8a15..0000000 --- a/data/brands/home-it.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Home-it", - "brand_id": "home-it", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "61015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "61015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/home-life.json b/data/brands/home-life.json deleted file mode 100644 index 72255b8..0000000 --- a/data/brands/home-life.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Home Life", - "brand_id": "home-life", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BY-780S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/homecare.json b/data/brands/homecare.json deleted file mode 100644 index ac6f849..0000000 --- a/data/brands/homecare.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Homecare", - "brand_id": "homecare", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/homedia.json b/data/brands/homedia.json deleted file mode 100644 index 8d24051..0000000 --- a/data/brands/homedia.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Homedia", - "brand_id": "homedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DID-VIEW-218037-STSLJ", - "X Series IP Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/homeguard.json b/data/brands/homeguard.json deleted file mode 100644 index 51b3ca8..0000000 --- a/data/brands/homeguard.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "brand": "Homeguard", - "brand_id": "homeguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p", - "720P", - "CARE", - "HD CAM", - "HD720P", - "HGWIP711", - "HGWOB751", - "HGWOB851", - "HGWOB852", - "HOMEGUARD HGWIP711", - "HOMEGUARD HGWIP811", - "homeguard hgwip818", - "IP HD", - "ip720", - "Other", - "WIFI CAM", - "WIRELESS CAMERA", - "Wireless IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "720P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "720P", - "HOMECAMERA", - "Other", - "wifi cam", - "Wireless Camera", - "WIRELESS IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "HD720P", - "Other", - "WIRELESS IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "HomeCamera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IP HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "IP HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/homeseer.json b/data/brands/homeseer.json deleted file mode 100644 index 43b24c2..0000000 --- a/data/brands/homeseer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Homeseer", - "brand_id": "homeseer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HS-CAM-O" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "HS-CAM-O" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/homeviz.json b/data/brands/homeviz.json deleted file mode 100644 index bb00e62..0000000 --- a/data/brands/homeviz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Homeviz", - "brand_id": "homeviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ob10" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8899, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/homewizard.json b/data/brands/homewizard.json deleted file mode 100644 index 75fc0ed..0000000 --- a/data/brands/homewizard.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Homewizard", - "brand_id": "homewizard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C271IP" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "C924IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "FR4020A2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hondgda.json b/data/brands/hondgda.json deleted file mode 100644 index 4482e06..0000000 --- a/data/brands/hondgda.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hondgda", - "brand_id": "hondgda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/honestech.json b/data/brands/honestech.json deleted file mode 100644 index ecd8f84..0000000 --- a/data/brands/honestech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Honestech", - "brand_id": "honestech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ne01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/honeywell.json b/data/brands/honeywell.json deleted file mode 100644 index 7172cf6..0000000 --- a/data/brands/honeywell.json +++ /dev/null @@ -1,452 +0,0 @@ -{ - "brand": "Honeywell", - "brand_id": "honeywell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1024", - "H4W2GR2", - "HED3PR3", - "HICC-0100P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1024", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "DELL", - "RYDELL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "H 264", - "HBD2PR1", - "hcc-685pt", - "hicc-p3100", - "HIDC-P-010", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "H 264", - "H4D2F", - "HON09B759", - "HON0A8472", - "ipcam pt", - "ipcam-10", - "IPCAM-IP", - "ipcam-od", - "IPCAM-PT", - "IPCAM-PT2", - "ipcam-w12", - "IPCAM-WI", - "IPCAM-WI2", - "ipcam-wl", - "ipcam-wo", - "IP-WO", - "Other", - "Other2", - "w12", - "wap" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "H 264", - "IPCAM-10", - "IPCAM-ip", - "IPCAM-PT", - "IPCAM-PT2", - "IPCAM-WI", - "IPCAM-WI2", - "ip-w0", - "IP-WO", - "Other", - "Other2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "H 264", - "IPCAM-PT", - "IPCAM-PT2", - "ipcam-w12", - "IPCAM-WI2", - "ipcam-wl", - "IPCAM-WL", - "IPCAM-WO", - "Other", - "w12", - "WI2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "H 264", - "H2S2P6", - "H3D3S2", - "H4D1FRX", - "H4D2F", - "H4S1P1", - "HCD5HIH", - "HCD5WIHX", - "HCW1F", - "HCW1FX", - "HD31F", - "HD3MDIH", - "hd45ip", - "HD4HDIH", - "hd4mdih", - "hd54ip", - "HD55IPX", - "HDZ20HDEX", - "HDZ20HDX", - "HDZ30", - "honeywell h4d1fr", - "IPCAM-WL", - "IP-WO", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "H2D2PR1", - "hcc-685pt" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "H2D2PR1", - "HBL2R1", - "WIC1" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "H2S1P6", - "HDZ22HDEX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "H2W2GR1", - "HPW2P1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46QWRtaW4xMjMu" - }, - { - "models": [ - "H3D1F", - "H3D2F", - "H3S1p", - "H3S1P", - "H4D1F", - "H4s1P", - "H4W1F", - "HBD2FR", - "HCD1F", - "Paco" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media" - }, - { - "models": [ - "h3w4gr1v", - "H4D3PRV2", - "H4W4PER2", - "H4W4PER3", - "HBD3PR2", - "hbw4per2", - "HD7016", - "HDZ252", - "HDZ302DE", - "HDZ52DPR1", - "HM4L8GR1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "HBW2GR3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46Qm91bG91ODEh" - }, - { - "models": [ - "HC30WF5R1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live2.sdp" - }, - { - "models": [ - "HC30WF5R1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "HCD1F", - "hd 4mdip", - "HD31F", - "HD3MDIP", - "HD4MDIP", - "hdm3dip", - "Other", - "Rydell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "hd 4mdip", - "HD4MDIP", - "hdm3dip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "HD3MDIP", - "HD45IP", - "HD4MDIP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/[CHANNEL]" - }, - { - "models": [ - "HD44IP", - "HD4HDIH", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "hd45ip", - "IP cam WI2b", - "ipcam-od", - "Ipcam-pt", - "IPCAM-PT", - "ipcam-w12", - "IPCAM-WI", - "IPCAM-WI2", - "Other", - "w12", - "WI2" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "HD4HDIH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "HD4HDIH", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "HDR-C1648L", - "Honeywell HREP", - "HREP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "hdz302de", - "hie2piv" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - }, - { - "models": [ - "HIDC-2600TVI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "HNB-210V2I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/1/1/Profile1" - }, - { - "models": [ - "ipc", - "ipcam-w12", - "IPCAM-WI", - "IPCAM-WI2", - "ipcam-wl", - "IP-WO", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "IPCAM PT", - "IPCAM-IP", - "IPCAM-PT", - "IPCAM-PT2", - "ipcam-wo", - "IPCAM-WO", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "IP-WO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/media.sav" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hongda.json b/data/brands/hongda.json deleted file mode 100644 index 2c4e58f..0000000 --- a/data/brands/hongda.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Hongda", - "brand_id": "hongda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P", - "HD 720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hongjingtian.json b/data/brands/hongjingtian.json deleted file mode 100644 index 5135ede..0000000 --- a/data/brands/hongjingtian.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "brand": "Hongjingtian", - "brand_id": "hongjingtian", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1vp-p75", - "720P", - "bullet", - "Bullet", - "HJT IP CAMERA", - "HJT-IPC6100-B1", - "HJT-IPC6100-B1W", - "HJT-IPC6200-B1W", - "HJT-IPC6200-B2", - "HJT-IPC6200-D1", - "Other", - "Wired" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1vp-p75" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "720", - "720P", - "Bullet", - "HJT IP CAMERA", - "hjt-ipc6100-b1w", - "HJT-IPC6100-B1W", - "hjt-ipc6100-d1", - "HJT-IPC6200-B1W", - "HJT-IPC6200-D1", - "HJT-IPC6200-D2", - "Other", - "V6.1.1.2.1-20150320" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Bullet", - "HJT IP CAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "HJT-IPC100-D1W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/honic.json b/data/brands/honic.json deleted file mode 100644 index d1b98bf..0000000 --- a/data/brands/honic.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Honic", - "brand_id": "honic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome Poe", - "HN-4KA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "HN-4KA", - "HN-IRDNS200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "HN-4KA", - "HN-DC5", - "HN-IRDN200F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "hn-4kz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "HN-IRDNS200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hootoo.json b/data/brands/hootoo.json deleted file mode 100644 index e01b6a3..0000000 --- a/data/brands/hootoo.json +++ /dev/null @@ -1,424 +0,0 @@ -{ - "brand": "Hootoo", - "brand_id": "hootoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "120c", - "206", - "211", - "212", - "HT-1210F", - "HT-IP006", - "HT-IP006N PTZ", - "HT-IP206", - "HT-IP206 PTZ", - "HT-IP210F", - "IP-212", - "OLD PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "211", - "BT-Home", - "HT-211", - "HT-IP008HDP", - "HT-IP210HDP", - "HT-IP211HDP", - "HT-IP211HTP", - "ip211", - "IP211HDP", - "IP960HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "212", - "HT-IP006N PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "92", - "F-Series", - "HT IP212", - "HT-IP006", - "HT-IP006N PTZ", - "HT-IP206", - "HT-IP206 PTZ", - "HT-IP210F", - "HT-IP210P", - "HT-IP212/HT-IP212F", - "ip206", - "IP206", - "ip210f", - "IP212", - "Other", - "Speed Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "apm-h803-mpc", - "HOOTOO HD720p", - "HT-IP009HDP", - "HT-IP210HDP", - "IP009HDP", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "F-Series", - "HT-1210F", - "HT-206IP", - "HT-IP006N PTZ", - "HT-IP206", - "HT-IP206 PTZ", - "HT-IP208F", - "HT-IP210F", - "HT-IP210P", - "HT-IP211HDP", - "HT-IP212", - "jhf", - "OLD PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "F-Series", - "HT-IP006", - "HT-IP206", - "HT-IP206 PTZ", - "HT-IP210P", - "HT-IP212", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "F-SERIES", - "HT-IP006", - "HT-IP006N PTZ", - "HT-IP206 PTZ", - "HT-IP212", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "h-210p", - "H212P", - "HT-IP206", - "HT-IP210F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "hd211" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "HT-IP006", - "HT-IP006N PTZ", - "HT-IP206", - "HT-IP206 PTZ", - "HT-IP210F", - "IP206", - "Old PTZ", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HT-IP009HDP", - "IP009HDP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HT-IP206", - "HT-IP210F", - "HT-IP210P", - "HT-IP212", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "HT-IP206", - "HT-IP206 PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HT-IP206", - "HT-IP206 PTZ", - "HT-IP207F", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "HT-IP206", - "HT-IP208F", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "HT-IP206", - "HT-IP206 PTZ", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "HT-IP206", - "HT-IP212", - "IP210F" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "HT-IP206", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "HT-IP206", - "HT-IP210F", - "HT-IP212" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HT-IP206", - "HT-IP210P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "HT-IP206 PTZ", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HT-IP206 PTZ", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "HT-IP206 PTZ", - "HT-IP210F", - "HT-IP210P", - "Other", - "TV-IP551W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "HT-IP206 PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "HT-IP210F", - "HT-IP212", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HT-IP210F", - "HT-IP210P", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "HT-IP210F" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "HT-IP211HDP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "HT-IP211HDP", - "IP960" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/hopeway.json b/data/brands/hopeway.json deleted file mode 100644 index 998cf30..0000000 --- a/data/brands/hopeway.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hopeway", - "brand_id": "hopeway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HIDVAM", - "Other" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/hopewell-cctv.com.json b/data/brands/hopewell-cctv.com.json deleted file mode 100644 index fde7f07..0000000 --- a/data/brands/hopewell-cctv.com.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hopewell-cctv.com", - "brand_id": "hopewell-cctv.com", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HZ-GQIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/horstek.json b/data/brands/horstek.json deleted file mode 100644 index 41fe16e..0000000 --- a/data/brands/horstek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Horstek", - "brand_id": "horstek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VC 19W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hosafe.json b/data/brands/hosafe.json deleted file mode 100644 index 33fb09d..0000000 --- a/data/brands/hosafe.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "brand": "Hosafe", - "brand_id": "hosafe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "2MB6P AtP", - "629", - "H2MB4W", - "H2MB6A", - "H2MB6PA", - "h2md", - "H2MD4A", - "H2MD6PA", - "H2MW3A", - "HOSAFE 1920mark", - "HOSAFE-628", - "H-series", - "HX-2PT1", - "IPC", - "OSC", - "Other", - "PTZ", - "SV1MB1W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "1MB1W-HD", - "1MW1", - "1mw12", - "2MB2", - "2MD3G", - "2MW1", - "dome", - "HOSAFE 1920", - "HOSAFE-13MD4", - "HX-2PT1", - "Other", - "P720P", - "ZVR2MB1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "13mb1g", - "1MB1G", - "1mb1w", - "1MB1W-HD", - "629", - "HOSAFE-13MD4", - "hosafe-13md4p", - "HOSAFE-1MB1G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "13mb6", - "1MB1", - "1MB1G", - "1mb1w", - "1MB6", - "1MEG1G", - "2mb", - "2MD3W", - "HOSAFE-1MB1W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - }, - { - "models": [ - "13MB6", - "1MB1", - "black dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "13MD1G", - "13MD1W", - "180ViewDome", - "1M1G", - "1M1W", - "1MB 1G", - "1MB1Q", - "1mb1w", - "1MB1W", - "1MB3W", - "1MB6", - "1MB6P", - "1MD1B", - "1md1w", - "1MD1W", - "1MD4P", - "1MEG1G", - "1mp", - "1mpg", - "2MB1", - "2MB2", - "2mb3", - "2mb3g", - "2MB6", - "2MB6P", - "2MB8P", - "2MD1", - "2MD4P", - "2MP2W", - "720p", - "dome", - "Hosafe 1080", - "Hosafe 1920", - "HOSAFE 2MB2W", - "HOSAFE 2MB6P", - "HOSAFE-1MB1W", - "IMB1W", - "IMD1W", - "IPC", - "K3MB1GP", - "MD13G1", - "MD1B", - "mp2", - "Other", - "R2 V3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "1M1W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1MB1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "1mb1w" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "1mb1w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "1MB1W", - "1mb4e", - "1MB6", - "1MB6P", - "1MD1B", - "1MD1W", - "1MD4P", - "2MB6P", - "2MB8P", - "2MD2W", - "2MD4P", - "2MW1", - "628", - "9320", - "DOME", - "EMENTARY", - "H2MB3W", - "h2mb4wa", - "H2MB4WA", - "H2MB6", - "h2mb61", - "H2MB6A", - "H2MB6PA", - "H2MD4", - "h2md4a", - "H2MD6PA", - "H5MB4WPA", - "hk-2pt1", - "Hosafe 1080", - "Hosafe-1MB6P", - "hosafe-1mw1", - "HX-2PT1", - "HX-2PT1-5", - "J20-P7", - "Jim", - "Other", - "Personal", - "PTZ", - "ptz int", - "Voor", - "x2c5000v-w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "1MW20G", - "HOSAFE 1MB1W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "2MB", - "hk-2pt1", - "HX-2PT1", - "OSC", - "PoE", - "whitt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "720P", - "p720d", - "Wireless 720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "Achter", - "X2MSD1", - "X2MSL1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "H2MB4WCA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "HX-2pt1", - "Megapixel", - "Other", - "ptz int" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "HX-2pt1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "HX-2PT1", - "Other", - "R2 V3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "HX-2PT1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "K3MB1GP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hosftra.json b/data/brands/hosftra.json deleted file mode 100644 index bc90ec6..0000000 --- a/data/brands/hosftra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hosftra", - "brand_id": "hosftra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hoswell.json b/data/brands/hoswell.json deleted file mode 100644 index 11286f2..0000000 --- a/data/brands/hoswell.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Hoswell", - "brand_id": "hoswell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "WJ01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 6554, - "url": "/stream_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hotfun.json b/data/brands/hotfun.json deleted file mode 100644 index b624d3d..0000000 --- a/data/brands/hotfun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hotfun", - "brand_id": "hotfun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "doorbell" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/hozelec.json b/data/brands/hozelec.json deleted file mode 100644 index e358bb4..0000000 --- a/data/brands/hozelec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hozelec", - "brand_id": "hozelec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fine acm-R3002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hp.json b/data/brands/hp.json deleted file mode 100644 index f110ea0..0000000 --- a/data/brands/hp.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Hp", - "brand_id": "hp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/hqcam.json b/data/brands/hqcam.json deleted file mode 100644 index 5dec503..0000000 --- a/data/brands/hqcam.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Hqcam", - "brand_id": "hqcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "50X20-WGH", - "5MP", - "C6F0SgZ3N0PlL2", - "H.265 POE 5MP Outdoor Night Vision", - "Other", - "PIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "NK-S9104W5POE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/hqvision.json b/data/brands/hqvision.json deleted file mode 100644 index 70ea85a..0000000 --- a/data/brands/hqvision.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Hqvision", - "brand_id": "hqvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EYE-4HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "HQ-MP3028BD-IR", - "HQ-MP3040T-IR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/hr04.json b/data/brands/hr04.json deleted file mode 100644 index eb92eae..0000000 --- a/data/brands/hr04.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hr04", - "brand_id": "hr04", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jstream.cgi?chid=[CHANNEL]&cnt=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hrv.json b/data/brands/hrv.json deleted file mode 100644 index 9abac3c..0000000 --- a/data/brands/hrv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hrv", - "brand_id": "hrv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4 PORT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hs-ip-camera.json b/data/brands/hs-ip-camera.json deleted file mode 100644 index 0ebfb29..0000000 --- a/data/brands/hs-ip-camera.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Hs Ip Camera", - "brand_id": "hs-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Agter" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "LD-P2P-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "YCW608FCZ49EA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "YCW608FCZ49EA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hs-ipsc.json b/data/brands/hs-ipsc.json deleted file mode 100644 index 627ff29..0000000 --- a/data/brands/hs-ipsc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hs Ipsc", - "brand_id": "hs-ipsc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 5544, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/hscomila.json b/data/brands/hscomila.json deleted file mode 100644 index e637731..0000000 --- a/data/brands/hscomila.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hscomila", - "brand_id": "hscomila", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HS-04" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hsmartlink.json b/data/brands/hsmartlink.json deleted file mode 100644 index 2188cd4..0000000 --- a/data/brands/hsmartlink.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Hsmartlink", - "brand_id": "hsmartlink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HSL-289799-JUWZB", - "i9831b-#6698" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "HSL-289799-JUWZB" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HSL-289799-JUWZB", - "I9831B-#6698", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HSL-289799-JUWZB" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "i9831b-#6698" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hsv.json b/data/brands/hsv.json deleted file mode 100644 index 6e5c332..0000000 --- a/data/brands/hsv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hsv", - "brand_id": "hsv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/hta.json b/data/brands/hta.json deleted file mode 100644 index 7b09560..0000000 --- a/data/brands/hta.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Hta", - "brand_id": "hta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/web/admin.html" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=80" - } - ] -} \ No newline at end of file diff --git a/data/brands/htc.json b/data/brands/htc.json deleted file mode 100644 index f30b9ea..0000000 --- a/data/brands/htc.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "brand": "Htc", - "brand_id": "htc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "610", - "Android 4g BG", - "Cha Cha", - "Desire", - "Desire 1", - "Desire 510", - "Desire 650 IPWebcam", - "Desire HD", - "desire s", - "Desire X", - "Desire Z", - "desirex", - "droid", - "Droid DNA", - "DroidIncredible", - "EVO", - "EVO 3D", - "Evo 4G", - "Evo3D", - "G2", - "HD2", - "Hero", - "HTC ONE", - "incredible", - "Incredible", - "Incredible1", - "Incredible2", - "inspire 4G", - "one", - "ONE", - "One mini", - "one x", - "One X", - "OneM8", - "ONEX", - "Other", - "PersonalPhone", - "Samsung Galaxy S", - "Thunderbolt", - "Verizon Incredible", - "Wildfire", - "wildfire s", - "Xperia X10i" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Anroird", - "Desire 1", - "desire eye", - "desire s", - "EVO", - "G2", - "Incredible S", - "IP Camera APP", - "Kaiser", - "Nexus One", - "opcv1", - "Other", - "S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "ANROIRD", - "cell", - "Desire 1", - "desiree", - "Evi", - "EVO 3D", - "HD2", - "Hero", - "Incredible2", - "One", - "One m8", - "One v Ipcam", - "Other", - "Sensation XE", - "Wildfire S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Desire X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "EVO", - "one", - "One M7", - "One m8", - "Other", - "Wildfire", - "Wildfire S 2012" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "HTC Sensation", - "one" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "one", - "SENSATION XE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/htcone.json b/data/brands/htcone.json deleted file mode 100644 index 3777db0..0000000 --- a/data/brands/htcone.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Htcone", - "brand_id": "htcone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini", - "one" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "One M7" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "One Ss", - "opcv1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/huacam.json b/data/brands/huacam.json deleted file mode 100644 index 29f4403..0000000 --- a/data/brands/huacam.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "brand": "Huacam", - "brand_id": "huacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5150", - "701", - "712", - "720", - "721", - "bullet", - "Color CCD", - "Cyclops", - "diagen", - "Dome", - "FezDW", - "foo", - "h264", - "Hcv 724", - "hcv207", - "HCV701", - "HCV701264x", - "HCV712", - "HCV720", - "HCV724", - "HCV724-AL", - "HCV824", - "HCV824g", - "hcv901", - "High Res", - "hill", - "hooha", - "HPV701", - "Huacam2", - "mti1", - "noidea", - "onvif-vlc", - "Other", - "UpstairsDeck" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "5150", - "703", - "712", - "714", - "724", - "Cyclops", - "HCV701", - "HCV712", - "HCV724", - "High Res", - "hv724", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "7010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "712", - "720", - "Color CCD", - "HCV701", - "HCV712", - "hcv724", - "HCV724", - "HCV725", - "HCV822", - "HCV824", - "Huacam2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/4" - }, - { - "models": [ - "712", - "H4RS-S", - "HCV701", - "HCV701-vlc", - "HCV712", - "HCV724", - "Other", - "vlc-me" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Cyclops", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HCV701" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "HCV712", - "High Res" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "goform/stream?cmd=get&channel=[CHANNEL]" - }, - { - "models": [ - "HCV712", - "HCV712w" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "HCV712" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "HCV712", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "HCV712", - "High Res" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "HCV720" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "sdp" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/huashi.json b/data/brands/huashi.json deleted file mode 100644 index fd699d4..0000000 --- a/data/brands/huashi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Huashi", - "brand_id": "huashi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "p2p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/huawei.json b/data/brands/huawei.json deleted file mode 100644 index a6cd465..0000000 --- a/data/brands/huawei.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "brand": "Huawei", - "brand_id": "huawei", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "560", - "8825", - "ascend", - "ascend q", - "bll-l22", - "G300", - "G740", - "Huawai", - "Impulse4g", - "Other", - "P20", - "P20 Lite", - "P20 Pro", - "p9lite", - "Phone", - "Phone1", - "U9200", - "y220", - "Y320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "ascend q", - "fff", - "Other", - "P10 lite", - "y511", - "y541" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "CUN L-33", - "TE30" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video?submenu=mjpg" - }, - { - "models": [ - "CUN L-33", - "P20 Lite" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video?640x480" - }, - { - "models": [ - "CUN L-33", - "Honor 7", - "Lis4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4747, - "url": "/video?profile=0" - }, - { - "models": [ - "DS-2CD2383G0-IU", - "IPC6225-VRZ", - "IPC-6232-IR", - "IPC6321-VF", - "IPC6331-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "honor", - "mate2", - "TE30" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "IPC6325-WD-VR", - "issv", - "M2150-10-EI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LiveMedia/ch1/Media2" - }, - { - "models": [ - "IPC6625-Z30-S", - "M3250", - "TE60" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LiveMedia/ch1/Media1/trackID=1" - }, - { - "models": [ - "mediapad", - "Other", - "Y320", - "Y511" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "p elite" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4747, - "url": "/video.mjpg" - }, - { - "models": [ - "PHONE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "tablet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live" - }, - { - "models": [ - "TE30" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/hubble.json b/data/brands/hubble.json deleted file mode 100644 index 53e9354..0000000 --- a/data/brands/hubble.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Hubble", - "brand_id": "hubble", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "==95", - "1662", - "FOCUS66-B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "1668" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - }, - { - "models": [ - "1854", - "focus 73", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Focus 71" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 6667, - "url": "/blinkhd" - }, - { - "models": [ - "Focus 72", - "Focus72-W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "focus 73" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "Focus72-W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image.cgi?type=motion" - } - ] -} \ No newline at end of file diff --git a/data/brands/huisun.json b/data/brands/huisun.json deleted file mode 100644 index 7177d6d..0000000 --- a/data/brands/huisun.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Huisun", - "brand_id": "huisun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dm-rdc305fhpt-ks20hc2", - "DM-SCB405IDP-V 10-E", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/humcam.json b/data/brands/humcam.json deleted file mode 100644 index b936068..0000000 --- a/data/brands/humcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Humcam", - "brand_id": "humcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rc8021v" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/hungtek.json b/data/brands/hungtek.json deleted file mode 100644 index bf0e254..0000000 --- a/data/brands/hungtek.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Hungtek", - "brand_id": "hungtek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WiFi Cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WIFI CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WIFI CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hunt.json b/data/brands/hunt.json deleted file mode 100644 index c558116..0000000 --- a/data/brands/hunt.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "brand": "Hunt", - "brand_id": "hunt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1ncd", - "HDR-16RP", - "HLC-79AD", - "HLC-81i", - "HLC-84em", - "HLT-87Z", - "HLV-1CI", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - }, - { - "models": [ - "DVR-08CH", - "HLC-81i" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi?Video=[CHANNEL]" - }, - { - "models": [ - "HBD-16EE", - "HDR PRO DVR", - "HDR-16EE", - "HDR-16RP", - "HLC-81I", - "HLT-S30", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HDR-16RP", - "HLC-79AD", - "HLC-81i", - "HLV-1CI", - "HNCA02", - "HWS-04HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "HDR-16RP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg.cgi?refresh=0&channel=[CHANNEL]&id=[USERNAME]&pass=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]&oldbrowser=1" - }, - { - "models": [ - "HLC-15", - "HLC-74ED", - "HLC-79AD", - "HLC-79CD", - "HLC-81I", - "HLT-87Z", - "HLT87Z/A", - "HLV-1CI", - "HLV-1CM", - "HWS-04HD", - "Other", - "VLC-83V/W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi?CH=[CHANNEL]" - }, - { - "models": [ - "HLC-74ED", - "HLC-81i", - "HLT-87Z", - "HLV-1CI", - "Lonix", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "HLC-79AD", - "HLC-81i", - "HLV-1CI", - "HWS-04HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi" - }, - { - "models": [ - "HLC-79AD", - "HLC-79CD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v2" - }, - { - "models": [ - "HLC-79AD", - "HLC-81i", - "HWS-04HD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video1+audio1" - }, - { - "models": [ - "HLV-1FM", - "ip79mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "HNC303", - "HNC303-VD", - "HNC304TDC", - "HNC304-XD", - "HTP-T3MPT", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "HNC303" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "HNC303" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "hnc304td" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "HY-HI26P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/GetStream.cgi?Video=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hunter.json b/data/brands/hunter.json deleted file mode 100644 index a362e94..0000000 --- a/data/brands/hunter.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hunter", - "brand_id": "hunter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HN-BP20lRe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/husier.json b/data/brands/husier.json deleted file mode 100644 index 11d8d8e..0000000 --- a/data/brands/husier.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Husier", - "brand_id": "husier", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2455" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/hutermann.json b/data/brands/hutermann.json deleted file mode 100644 index e9180fb..0000000 --- a/data/brands/hutermann.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hutermann", - "brand_id": "hutermann", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HiP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/huviron.json b/data/brands/huviron.json deleted file mode 100644 index de4a678..0000000 --- a/data/brands/huviron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Huviron", - "brand_id": "huviron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mip-823o2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/2?videoCodecType=H.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/hv3c.json b/data/brands/hv3c.json deleted file mode 100644 index 302eb54..0000000 --- a/data/brands/hv3c.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hv3c", - "brand_id": "hv3c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hvcam.json b/data/brands/hvcam.json deleted file mode 100644 index 704e8bb..0000000 --- a/data/brands/hvcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hvcam", - "brand_id": "hvcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HV72PIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/hview.json b/data/brands/hview.json deleted file mode 100644 index 25ac632..0000000 --- a/data/brands/hview.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "brand": "Hview", - "brand_id": "hview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1312", - "HV-800G2A5", - "HV-PTZ502", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "264", - "tv-ip1012" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "850PTZ", - "MC500L_5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "HV-500E6", - "HV-500G2A", - "HV-800E6A5", - "HV-800G2A5", - "HV-E800", - "HV-PTZ500", - "HV-WF500G2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "HV-500ES", - "HV-800" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "HV-800E6A5", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - }, - { - "models": [ - "MC500L_5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hvr.json b/data/brands/hvr.json deleted file mode 100644 index 57a31fb..0000000 --- a/data/brands/hvr.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Hvr", - "brand_id": "hvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dev.XM", - "giga", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/hx-635k.json b/data/brands/hx-635k.json deleted file mode 100644 index 4722f29..0000000 --- a/data/brands/hx-635k.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hx-635k", - "brand_id": "hx-635k", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M-JAPEG" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hxview.json b/data/brands/hxview.json deleted file mode 100644 index e0dff3b..0000000 --- a/data/brands/hxview.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Hxview", - "brand_id": "hxview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bu-e580" - ], - "type": "JPEG", - "protocol": "http", - "port": 8082, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "BU-E580", - "BU-H800", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hy-outdoor-ip-camera.json b/data/brands/hy-outdoor-ip-camera.json deleted file mode 100644 index 9673174..0000000 --- a/data/brands/hy-outdoor-ip-camera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hy Outdoor Ip Camera", - "brand_id": "hy-outdoor-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Smart1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/hybsys.json b/data/brands/hybsys.json deleted file mode 100644 index 2347053..0000000 --- a/data/brands/hybsys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hybsys", - "brand_id": "hybsys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/hyobalc.json b/data/brands/hyobalc.json deleted file mode 100644 index 186f188..0000000 --- a/data/brands/hyobalc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Hyobalc", - "brand_id": "hyobalc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/hyundai.json b/data/brands/hyundai.json deleted file mode 100644 index d83b639..0000000 --- a/data/brands/hyundai.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Hyundai", - "brand_id": "hyundai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "414", - "HYU-145", - "HYU-408", - "HYU-751", - "HYU-914", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "HNO-6020R", - "HYU-414" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - }, - { - "models": [ - "HYU-145", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "HYU-408" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/hzconnect.json b/data/brands/hzconnect.json deleted file mode 100644 index 1e72287..0000000 --- a/data/brands/hzconnect.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Hzconnect", - "brand_id": "hzconnect", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9600 doorbell", - "Smart Door Bell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "9600 doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/mobile" - } - ] -} \ No newline at end of file diff --git a/data/brands/i-can-see.json b/data/brands/i-can-see.json deleted file mode 100644 index aee47e2..0000000 --- a/data/brands/i-can-see.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "I Can See", - "brand_id": "i-can-see", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "BULLET", - "ICS-IP1300", - "ICSM-IP3000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ICS-IP2000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/i-view.json b/data/brands/i-view.json deleted file mode 100644 index ef4bce2..0000000 --- a/data/brands/i-view.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "I-view", - "brand_id": "i-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cm-ip100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/i30vd.json b/data/brands/i30vd.json deleted file mode 100644 index a9f0163..0000000 --- a/data/brands/i30vd.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "I30vd", - "brand_id": "i30vd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MicroView" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/i591b6f.json b/data/brands/i591b6f.json deleted file mode 100644 index 88579c5..0000000 --- a/data/brands/i591b6f.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "I591b6f", - "brand_id": "i591b6f", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HIV6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/record.sdp" - }, - { - "models": [ - "HIV67" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/mjpeg.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ibcam.json b/data/brands/ibcam.json deleted file mode 100644 index fa31233..0000000 --- a/data/brands/ibcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ibcam", - "brand_id": "ibcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/ic-realtime.json b/data/brands/ic-realtime.json deleted file mode 100644 index 847d07d..0000000 --- a/data/brands/ic-realtime.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Ic Realtime", - "brand_id": "ic-realtime", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dw102" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "ic-i2a-df3w-ov", - "ICIP D3010IR-D", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "icip-b3732z" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "ICIPD5000AVIR1505W1B000012" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live.sdp" - }, - { - "models": [ - "ICIPD5000AVIR1505W1B000012" - ], - "type": "MJPEG", - "protocol": "http", - "port": 1026, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ic-realtimes.json b/data/brands/ic-realtimes.json deleted file mode 100644 index 9e834a1..0000000 --- a/data/brands/ic-realtimes.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ic Realtimes", - "brand_id": "ic-realtimes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ICIP D2000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ICIP D2000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/icam.json b/data/brands/icam.json deleted file mode 100644 index 89c1301..0000000 --- a/data/brands/icam.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "brand": "Icam", - "brand_id": "icam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0C810" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "1000", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "1000" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "1908w", - "I908W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "59587", - "7647", - "I908W", - "IP-1", - "nip-02", - "NIP-02", - "Other", - "Other2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Bseries", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Bseries", - "I908W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "dome", - "I908W", - "IP-1", - "Other", - "Other2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "H264", - "I908W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "I908W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "I908W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "I908W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "I908W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "I-Cam 100", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "icam56311", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ICAM-703" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "IPS-911", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "IPS-911" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other", - "USC-CAMS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "pda.cgi?[USERNAME]&page=image&cam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/webcam.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/halfsize.jpg?camera=[CHANNEL]&clock=on&motion=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/icamview.json b/data/brands/icamview.json deleted file mode 100644 index a58d117..0000000 --- a/data/brands/icamview.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Icamview", - "brand_id": "icamview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Icami", - "L SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "l series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "L SERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "showimg_pda.cgi?cam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "pda.cgi?[USERNAME]&page=image&cam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "pda.cgi?page=image&cam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "svn589zw66" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/icantek.json b/data/brands/icantek.json deleted file mode 100644 index 4785896..0000000 --- a/data/brands/icantek.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Icantek", - "brand_id": "icantek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iCanView Camera", - "myDVR I Series", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg.jpg" - }, - { - "models": [ - "iCanView Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg1.jpg" - }, - { - "models": [ - "iCanView Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg2.jpg" - }, - { - "models": [ - "iCanView Camera" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video[CHANNEL]" - }, - { - "models": [ - "myDVR I Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "myDVR I Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/icloudcam.json b/data/brands/icloudcam.json deleted file mode 100644 index 50c5f8b..0000000 --- a/data/brands/icloudcam.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Icloudcam", - "brand_id": "icloudcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LS-ND321A-W", - "Other", - "VMS8000" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream.cgi?stream=MainStream&Audio=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/iclp.json b/data/brands/iclp.json deleted file mode 100644 index 6f9657b..0000000 --- a/data/brands/iclp.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Iclp", - "brand_id": "iclp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/icom.json b/data/brands/icom.json deleted file mode 100644 index daa30b4..0000000 --- a/data/brands/icom.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Icom", - "brand_id": "icom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "89", - "899" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/icon.json b/data/brands/icon.json deleted file mode 100644 index 125570d..0000000 --- a/data/brands/icon.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Icon", - "brand_id": "icon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IPD-42-MPTZ-EXT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "IPD-42-MPTZ-EXT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/icrealtime.json b/data/brands/icrealtime.json deleted file mode 100644 index ec08b3e..0000000 --- a/data/brands/icrealtime.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Icrealtime", - "brand_id": "icrealtime", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC-I2A-DF3W-OV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "IC-i2a-Px12W-A0", - "ICIP D2000", - "ICIPD3000AVIR", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IC-I2A-PX12W-A0", - "ICIP B3000AF", - "ICIP D2000", - "ICIP-B4012VIR-S", - "Other", - "quantum-1s-xc3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ICIP D2000", - "ICIP-3000DV-IR", - "MAX DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "ICIP D2000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "icip2001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ics.json b/data/brands/ics.json deleted file mode 100644 index 5ede59d..0000000 --- a/data/brands/ics.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ics", - "brand_id": "ics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ICS330L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "ip1300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/identivision.json b/data/brands/identivision.json deleted file mode 100644 index cb7fa96..0000000 --- a/data/brands/identivision.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Identivision", - "brand_id": "identivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3131", - "IIP-L3301VFW ALLIGATOR", - "SCI-DMP130F", - "SP1013" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/idis-global.json b/data/brands/idis-global.json deleted file mode 100644 index dc6fc7b..0000000 --- a/data/brands/idis-global.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Idis Global", - "brand_id": "idis-global", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DC-D1323FR", - "MNC222SH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/media" - } - ] -} \ No newline at end of file diff --git a/data/brands/idis.json b/data/brands/idis.json deleted file mode 100644 index 629d89b..0000000 --- a/data/brands/idis.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Idis", - "brand_id": "idis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DC-D1223FR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/media" - } - ] -} \ No newline at end of file diff --git a/data/brands/idt.json b/data/brands/idt.json deleted file mode 100644 index 2cd0a53..0000000 --- a/data/brands/idt.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Idt", - "brand_id": "idt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "IPC100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av1?user=[USERNAME]&passwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/idview.json b/data/brands/idview.json deleted file mode 100644 index 1bafe45..0000000 --- a/data/brands/idview.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Idview", - "brand_id": "idview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/ie-link-0.json b/data/brands/ie-link-0.json deleted file mode 100644 index 9edea8a..0000000 --- a/data/brands/ie-link-0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ie-link-0", - "brand_id": "ie-link-0", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KHAN", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/iegeek.json b/data/brands/iegeek.json deleted file mode 100644 index 1eb187c..0000000 --- a/data/brands/iegeek.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "brand": "Iegeek", - "brand_id": "iegeek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0184", - "1080P", - "1080p Bullet", - "1080P BULLET", - "1MP", - "2 bullet", - "2 Meg", - "2 mega pixels", - "2.0", - "2.0 Mega", - "2.0MEGA PIXELS IP CAM", - "2.0Mega Pixels IP Camera", - "2.0Megapixels IP Camera", - "2MP", - "2MPixel Model", - "720", - "720P", - "809", - "825", - "B01JLZKSD8", - "Bell J5", - "Black 720P", - "BULLET", - "Bullit", - "bullry", - "C1080", - "C6F0SEZ3N0P5L2", - "C6F0SeZ3N0P612", - "C6F0SEZ3N0P6L2", - "C6F0SFZ3N0P5L2", - "C6F0SGZ0N0P0L0", - "C6F0SgZ0N0P1L0", - "C6F0SGZ3N0P6L2", - "C6F0SgZ3N0P9L2", - "C6F0SgZ3N0PaL2", - "C6F0SgZ3N0PbL2", - "C6F0SgZ3N0PfL2", - "C6F0SgZ3N0PgL2", - "C6F0SgZ3N0Pil2", - "C6F0SgZ3N0PjL2", - "C9F0\\SgZ3N0P8L0", - "C9F0SGZ3N0P6L0", - "C9F0SgZ3N0P8L0", - "Cam1", - "CAM2.5", - "CT0184", - "CT0186", - "CT0223WHUK", - "ct-0247", - "CT0247", - "CT0247EU", - "CT0247UK", - "CT0247US", - "ct0250uk", - "CT0262", - "CT0262BKUK", - "CT0267BKUK", - "CT0267BKUS", - "CT0277BK", - "CT0281BKEU", - "CT0281BKUK", - "CT0281WHEU", - "CT0281WHUK", - "CT0323BK", - "CT0323BKEU", - "ct0323bkus", - "CT0323WHUS", - "ct0414bkuk", - "CT0414WHEU", - "CT0426BKUK", - "CT0426WHEU", - "CT0426WHUK", - "CT247UK", - "CTO281WHUK", - "eae", - "External", - "ffice", - "Giardino", - "hd megapixel", - "HD MEGAPIXEL IP CAMERA", - "HiPcam", - "HIPCAM", - "hqyd11117g", - "ie20", - "IE20", - "IE50", - "ie60", - "IE82", - "ieGeek 10", - "ieGeek CT0414BKUK", - "iegeekipcamera", - "ig20", - "IG20", - "IG62", - "IG80", - "IG82", - "IG90", - "IP66", - "IPCAM P2P", - "IPDHCP", - "IPGeek", - "megapixel", - "Other", - "Outdoor IP", - "PPPP-116400-FCBB", - "riv", - "TC0247UK", - "TC247UK", - "UKN", - "unl", - "wifihd 1080pcamera", - "wireless IP camera", - "ZZZZ-678699-FDCBA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080p", - "2.0Mega pixels ip cam", - "20210224D0280", - "826", - "BULLET", - "C6F0SgZ0N0P0L0", - "CT0223WHUK", - "CT0250UK", - "CT0262WHUS", - "CT0267BKUK", - "ig20", - "ig62", - "IPC_1823339", - "IPC_469257", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "1080p", - "1080P BULLET", - "184", - "184B", - "2 mega pixels", - "2.0Mega pixels ip cam", - "2.0MEGA PIXELS IP CAM", - "247", - "4331911062", - "720p", - "826", - "B01JLZKSD8", - "bullet", - "BULLET", - "bullit", - "C6F0SeZ0N0P0L0", - "c6f0sez0n0p3l0", - "C6F0SEZ3N0P5L2", - "C6F0SEZ3N0P6L2", - "C6F0SfZ3N0P5L2", - "C6F0SgZ3N0P6L2", - "C6F0SgZ3N0PgL2", - "CT0184", - "CT0186", - "CT0223WHUK", - "CT0247", - "CT0247uk", - "CT0247UK", - "CT0247US", - "ct024uk", - "CT026", - "ct0262", - "CT0262BKEU", - "CT0262BKUK", - "CT0262WHEU", - "CT0262WHUK", - "CT0262WHUS", - "CT0267BKUK", - "CT0277BK", - "CT027BK", - "CT0281BKUK", - "ct0281whuk", - "CT0281WHUK", - "ct0323bkuk", - "CT0414BKUK", - "ct0608qsukig", - "cto247us", - "CTO262WHUS", - "EEEE066313NVXBT", - "HD Megapixel", - "HD MEGAPIXEL IP CAMERA", - "House", - "ieGeek 10", - "ig82 Front", - "ink", - "ipcam bullet", - "IPCAM P2P", - "Model1", - "Other", - "T0262BKUK", - "UKN", - "White-720P", - "wireless IP camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080p", - "1080P", - "c6f0sgz3n0pgl2", - "IG80", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "1080P", - "B01JLZKSD8", - "B01K4DRKSM", - "BULLET", - "CAM1", - "CT0267BKUK", - "IE20", - "Other", - "TTTT-396838-BNDCL" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1080P BULLET", - "2.0Mega pixels ip cam", - "2.0MEGA PIXELS IP CAMERA", - "720p", - "C6F0SGZ3N0P6L2", - "c6f0sgz3n0pgl2", - "IE20", - "IE50", - "ig20", - "ig60", - "IG62", - "IG90", - "IPCAM P2P", - "Other", - "P31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "109", - "113", - "720", - "720p", - "BLACK 720P", - "C6F0SeZ3N0P5L2", - "CAM1", - "garden", - "Hoi", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "2 Meg", - "2 mega pixels", - "IE20", - "IE50", - "ie60", - "ieGeek CT0414BKUK", - "ig20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "2.0Mega pixels ip cam", - "2MPixel Model", - "ie20", - "IE50", - "ig20", - "Other", - "x.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "2.0MegaPixels IP Camera", - "Bell J5", - "ZS-GX5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "720", - "720P", - "bullit", - "ct0281bkuk", - "IG20", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "826" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpeg" - }, - { - "models": [ - "826", - "ie82", - "IG62", - "TTTT-067378-BDMYZ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "B01JLZKSD8", - "ct0281bkuk", - "Other", - "ukn", - "White-720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "BULLET", - "CT0247UK", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "CCTV", - "ct0267", - "CT067BKUK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "IE60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/1jfiegbr5yoeq_p0_FABRULIMVYCL" - }, - { - "models": [ - "ig20" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg" - }, - { - "models": [ - "ig20" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "UKN" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "wireless IP camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/iernut-2.json b/data/brands/iernut-2.json deleted file mode 100644 index ce9cbad..0000000 --- a/data/brands/iernut-2.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iernut 2", - "brand_id": "iernut-2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F18918W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/iets.json b/data/brands/iets.json deleted file mode 100644 index 54aaba1..0000000 --- a/data/brands/iets.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iets", - "brand_id": "iets", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/iflux.json b/data/brands/iflux.json deleted file mode 100644 index 25b9d55..0000000 --- a/data/brands/iflux.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iflux", - "brand_id": "iflux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC12R3-F4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/igson.json b/data/brands/igson.json deleted file mode 100644 index e9d152f..0000000 --- a/data/brands/igson.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Igson", - "brand_id": "igson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "V-IPK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/iguard.json b/data/brands/iguard.json deleted file mode 100644 index 1f66a28..0000000 --- a/data/brands/iguard.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Iguard", - "brand_id": "iguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "270E", - "380E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "showimg_pda.cgi?cam=[CHANNEL]" - }, - { - "models": [ - "380e", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ijack-liu.json b/data/brands/ijack-liu.json deleted file mode 100644 index e996f77..0000000 --- a/data/brands/ijack-liu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ijack Liu", - "brand_id": "ijack-liu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JK-A8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ikegami.json b/data/brands/ikegami.json deleted file mode 100644 index eee1a96..0000000 --- a/data/brands/ikegami.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Ikegami", - "brand_id": "ikegami", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200", - "ip200", - "IPD-pt200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPD-BX11", - "IPD-BX300", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream1" - }, - { - "models": [ - "IPD-PT200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "IPD-PT200", - "SPD-PT200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPD-PT200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ikonic.json b/data/brands/ikonic.json deleted file mode 100644 index 3ecc238..0000000 --- a/data/brands/ikonic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ikonic", - "brand_id": "ikonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IKE-D9004 w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ildvr.json b/data/brands/ildvr.json deleted file mode 100644 index bfbca39..0000000 --- a/data/brands/ildvr.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Ildvr", - "brand_id": "ildvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INC-2030W", - "INC-M20B06V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "INCMD", - "INC-MP28VZ", - "INS-MP2020-H5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/illumivue.json b/data/brands/illumivue.json deleted file mode 100644 index 1cfb186..0000000 --- a/data/brands/illumivue.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Illumivue", - "brand_id": "illumivue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ILV-IP8T-NC.2-BK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/illustra.json b/data/brands/illustra.json deleted file mode 100644 index 64eaff5..0000000 --- a/data/brands/illustra.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Illustra", - "brand_id": "illustra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2mp", - "Essentials 2MP Dome 2.7-12mm" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "600", - "ADCi610-D113", - "Flex 600", - "i210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/primarystream" - }, - { - "models": [ - "600", - "AD610", - "ies02mfbnwiy", - "Illustra Edge 2MP Compact Mini-Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ufirststream" - }, - { - "models": [ - "adci800f-D111", - "flex", - "ies02mfbnwiy", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "FLEX", - "Illustra Pro 12MP Fisheye", - "Pro 3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoStreamId=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/imagiatek.json b/data/brands/imagiatek.json deleted file mode 100644 index 62e2f16..0000000 --- a/data/brands/imagiatek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Imagiatek", - "brand_id": "imagiatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - } - ] -} \ No newline at end of file diff --git a/data/brands/imaginon.json b/data/brands/imaginon.json deleted file mode 100644 index 62a9b94..0000000 --- a/data/brands/imaginon.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "brand": "Imaginon", - "brand_id": "imaginon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10AC", - "IPC 10AC", - "IPC-1", - "IPC-1a", - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "10AC", - "IPC-1", - "IPC-1A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPC 10AC", - "IPC-1A", - "IPC-20", - "IPC-250HDC", - "IPC-25HDC", - "SUPRA IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IPC-1", - "IPC-1a", - "IPC-20", - "IPC-25HDC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPC-100 HD", - "IPC-25HDC", - "Other", - "SUPRA IPC-20C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "IPC-100 HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-100AC", - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "ipc-20c" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-25 HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=64&rate=0" - }, - { - "models": [ - "IPC-250HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=32&rate=13" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=1280x720&rate=13" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=1280x720" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=64&rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=32&rate=8&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=64&rate=8&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=32&rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/imago.json b/data/brands/imago.json deleted file mode 100644 index 0f09b62..0000000 --- a/data/brands/imago.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Imago", - "brand_id": "imago", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ITN-22P3 NB 4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ime3122-admnq39.json b/data/brands/ime3122-admnq39.json deleted file mode 100644 index f5c1874..0000000 --- a/data/brands/ime3122-admnq39.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ime3122-admnq39", - "brand_id": "ime3122-admnq39", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Pelco" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/img.json b/data/brands/img.json deleted file mode 100644 index accac9b..0000000 --- a/data/brands/img.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Img", - "brand_id": "img", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/imieye.json b/data/brands/imieye.json deleted file mode 100644 index 5f77f72..0000000 --- a/data/brands/imieye.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Imieye", - "brand_id": "imieye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "RealHD 720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "REALHD 720P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/imogen.json b/data/brands/imogen.json deleted file mode 100644 index a10e93d..0000000 --- a/data/brands/imogen.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Imogen", - "brand_id": "imogen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Kerby Wireless Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "operator/get_jpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - } - ] -} \ No newline at end of file diff --git a/data/brands/imou.json b/data/brands/imou.json deleted file mode 100644 index f457e7b..0000000 --- a/data/brands/imou.json +++ /dev/null @@ -1,418 +0,0 @@ -{ - "brand": "Imou", - "brand_id": "imou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2c-d", - "Bullet 2", - "Cue2", - "ipc-a26hp-v2", - "IPC-F22P" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "4MP Bullet", - "ADC2W", - "bullet", - "Bullet lite", - "Bullet Lite", - "Cue", - "Cue2", - "G22P", - "G26E", - "G26EP", - "Imou IPC-G22", - "ipc g22", - "IPC-A12", - "ipc-c26ep-imou", - "IPC-D42", - "IPC-G22", - "ipc-g42", - "IPC-S3D-5M0WJ", - "Lite", - "looc", - "Looc", - "Other", - "ranger", - "Ranger", - "RANGER 2C", - "ranger pro", - "Ranger Pro", - "Ranger pro z" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "4MP BULLET", - "bullet 2c", - "dome lite 4mp 828a", - "IPC-F42", - "IPC-F42F-D", - "IPC-F42FN", - "RANGER", - "RANGER 2C 4MP-D", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=[USERNAME]" - }, - { - "models": [ - "4MP BULLET", - "BULIT4M", - "Bullet", - "BULLET LITE", - "bullrt lite", - "DOME LITE 4MP 828A", - "G26EP", - "IPC-C26EP-IMOU", - "IPC-D22", - "ipc-g42", - "ranger pro", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Bazen 1080p", - "Bullet 2c 4mp", - "Bullet 3C", - "BULLET LITE", - "clue 2", - "Cruiser 4MP (IPC-S42-FP)", - "Cruiser SE+ (IPC-S21FE)", - "Cue2", - "DB61i", - "Imou IPC-G22", - "IPC-A42-L", - "IPC-C22F-C", - "IPC-C26E", - "IPC-C26E-V2", - "IPC-F22FE", - "IPC-F42", - "IPC-G22", - "IPC-G26EP", - "IPC-T22A", - "IPC-TA32CP-L", - "looc", - "Moje", - "Ranger 2", - "Ranger 2C", - "Ranger Dual 6MP", - "Ranger SE 4MP", - "Vchod 1080p", - "Vchod Studio", - "Vchod Studio 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "Bazen 640x480", - "DB61i", - "IPC-A42-L", - "IPC-T22A", - "Ranger 2", - "Ranger 2C", - "Vchod 640x480", - "Vchod Studio 640x480", - "Zahrada 640x480" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "bullet", - "BULLET LITE", - "ipc-g26ep", - "IPC-T26EP", - "Looc", - "LOOC2", - "TURRET" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Bullet", - "Bullet Lite", - "Floodlight", - "G22P", - "IMOU IPC-G22", - "IPC-A26HI", - "IPC-C26EP", - "IPC-D22", - "ipc-g22", - "IPC-G22", - "ipc-g26ep", - "ipc-g42", - "IPC-T26EP", - "LITE", - "Looc", - "ranger", - "Ranger pro", - "rangeriq", - "TURRET" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "bullet 2c", - "Bullet 2C", - "Cue2", - "IPC-S42F", - "IPC-S7XEN-10M0WED", - "k.a.", - "Looc2", - "Ranger 2", - "ranger2", - "Rex", - "TP2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "bullet 2c" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Bullet 4MP lite", - "Dome 4mp", - "DOME 4MP", - "dome lite 4mp", - "DOME LITE 4MP", - "DOME LITE 4MP 828A", - "IPC-D42", - "ipc-g42", - "Knight", - "LOOC2", - "Ranger IQ", - "ranger pro", - "Ranger Pro V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Bullet lite", - "IPC-K3C", - "Ranger 2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Bullet Lite", - "Looc", - "ranger", - "ranger pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "cell c3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=staphi2" - }, - { - "models": [ - "Cell Pro", - "IPC-A12", - "IPC-A22", - "Ranger Pro Z", - "Vchod" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46bmljazEyMTk=" - }, - { - "models": [ - "Cruiser 2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "Cruiser 2C", - "T42EA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "Cue2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "F22AP", - "IPC-A43P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&resolution=2560x1440" - }, - { - "models": [ - "IPC-A43P", - "IPC-F22P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IPC-C26E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "IPC-C26EP" - ], - "type": "JPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46bWLuaWRvMjAyMy4=]" - }, - { - "models": [ - "IPC-G22" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/h264_stream" - }, - { - "models": [ - "IPC-K42P", - "looc", - "Looc-v2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPC-S6D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/onvifsnapshot/media_service/snapshot?channel=1&subtype=0" - }, - { - "models": [ - "Ranger 2", - "T42EA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00" - }, - { - "models": [ - "Ranger 2", - "T-26E", - "Turret" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "RANGER IQ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Sp%40rks73" - }, - { - "models": [ - "Ranger IQ-B6E4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46QmVlckNhbTM2NSU0MDExMQ==" - } - ] -} \ No newline at end of file diff --git a/data/brands/impax.json b/data/brands/impax.json deleted file mode 100644 index 06a6412..0000000 --- a/data/brands/impax.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Impax", - "brand_id": "impax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "im-n16" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/imporx.json b/data/brands/imporx.json deleted file mode 100644 index dbea065..0000000 --- a/data/brands/imporx.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "brand": "Imporx", - "brand_id": "imporx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8MP 4K 600X ZOOM", - "IMP-HC7P08", - "IMP-HD5MP73-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "GartenCam", - "IMP-HK6127C-20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "GARTENCAM", - "IMP-HC7286-K20X", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "HC7286-K20X", - "IMP-HC7286-K20x", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/RtspTranslator.25" - }, - { - "models": [ - "IMP-2MP755", - "IMP-HD5MP73-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "IMP-3MP98A-AMZ-H", - "IMP-3MP98A-H", - "imp3mp98-amz-l", - "IMP-HC7286-K20X", - "imp-scb405ip-v10", - "PTZ", - "YC-110AR", - "YC-HD785R-20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "IMP-RH6116-IR-Z", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/impulse.json b/data/brands/impulse.json deleted file mode 100644 index a6a0e91..0000000 --- a/data/brands/impulse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Impulse", - "brand_id": "impulse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IMP302DORZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ims200.json b/data/brands/ims200.json deleted file mode 100644 index b34b5fa..0000000 --- a/data/brands/ims200.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ims200", - "brand_id": "ims200", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D6008DH-II" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/imx290.json b/data/brands/imx290.json deleted file mode 100644 index 30a5375..0000000 --- a/data/brands/imx290.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Imx290", - "brand_id": "imx290", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/inaxsys.json b/data/brands/inaxsys.json deleted file mode 100644 index 4912841..0000000 --- a/data/brands/inaxsys.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Inaxsys", - "brand_id": "inaxsys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IN-BO2MIR22A", - "IN-DO4M36A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - } - ] -} \ No newline at end of file diff --git a/data/brands/inc.json b/data/brands/inc.json deleted file mode 100644 index 1b0079f..0000000 --- a/data/brands/inc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Inc", - "brand_id": "inc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INC-MP30VC-0280" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "MP20V" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/index.json b/data/brands/index.json deleted file mode 100644 index 9794a67..0000000 --- a/data/brands/index.json +++ /dev/null @@ -1,21764 +0,0 @@ -[ - { - "value": "255-ip-cam", - "label": "255 Ip Cam", - "models_count": 58, - "entries_count": 24 - }, - { - "value": "2n-helios", - "label": "2n Helios", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "307-hi-silicon", - "label": "307 Hi Silicon", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "360-eye", - "label": "360 Eye", - "models_count": 90, - "entries_count": 21 - }, - { - "value": "3com", - "label": "3com", - "models_count": 23, - "entries_count": 15 - }, - { - "value": "3eyes3", - "label": "3eyes3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "3g-ipcam", - "label": "3g Ipcam", - "models_count": 114, - "entries_count": 44 - }, - { - "value": "3r", - "label": "3r", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "3svision", - "label": "3svision", - "models_count": 35, - "entries_count": 26 - }, - { - "value": "3xlogic", - "label": "3xlogic", - "models_count": 37, - "entries_count": 25 - }, - { - "value": "4er", - "label": "4er", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "4mp-ip-camera", - "label": "4mp Ip Camera", - "models_count": 13, - "entries_count": 8 - }, - { - "value": "4sdot", - "label": "4sdot", - "models_count": 16, - "entries_count": 6 - }, - { - "value": "4ucam", - "label": "4ucam", - "models_count": 25, - "entries_count": 22 - }, - { - "value": "4xem", - "label": "4xem", - "models_count": 35, - "entries_count": 17 - }, - { - "value": "4xptz", - "label": "4xptz", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "555", - "label": "555", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "5mpbullet", - "label": "5mpbullet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "7-star", - "label": "7-star", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "7links", - "label": "7links", - "models_count": 255, - "entries_count": 58 - }, - { - "value": "8level", - "label": "8level", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "9up", - "label": "9up", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "a-bmi", - "label": "A-bmi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "a-link", - "label": "A-link", - "models_count": 16, - "entries_count": 7 - }, - { - "value": "a-mtk", - "label": "A-mtk", - "models_count": 23, - "entries_count": 14 - }, - { - "value": "a-tion", - "label": "A-tion", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "a1webcam", - "label": "A1webcam", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "a4tech", - "label": "A4tech", - "models_count": 21, - "entries_count": 14 - }, - { - "value": "aanke", - "label": "Aanke", - "models_count": 8, - "entries_count": 1 - }, - { - "value": "abelcam", - "label": "Abelcam", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "abient-weather", - "label": "Abient Weather", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "abo", - "label": "Abo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "abr", - "label": "Abr", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "abr-security", - "label": "Abr Security", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "abron", - "label": "Abron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "abs", - "label": "Abs", - "models_count": 20, - "entries_count": 10 - }, - { - "value": "absolutron", - "label": "Absolutron", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "abus", - "label": "Abus", - "models_count": 256, - "entries_count": 47 - }, - { - "value": "ac38xx", - "label": "Ac38xx", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "acam", - "label": "Acam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "accfly", - "label": "Accfly", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "accsxperts", - "label": "Accsxperts", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ace", - "label": "Ace", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "acer", - "label": "Acer", - "models_count": 19, - "entries_count": 12 - }, - { - "value": "aceri-bcn", - "label": "Aceri-bcn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "acesee", - "label": "Acesee", - "models_count": 18, - "entries_count": 8 - }, - { - "value": "achtertuin", - "label": "Achtertuin", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "acm", - "label": "Acm", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "acm-v3002", - "label": "Acm-v3002", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "acor", - "label": "Acor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "acromedia", - "label": "Acromedia", - "models_count": 38, - "entries_count": 17 - }, - { - "value": "acti", - "label": "Acti", - "models_count": 503, - "entries_count": 27 - }, - { - "value": "action", - "label": "Action", - "models_count": 8, - "entries_count": 7 - }, - { - "value": "actioncam", - "label": "Actioncam", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "actiontec", - "label": "Actiontec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "activa", - "label": "Activa", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "active", - "label": "Active", - "models_count": 17, - "entries_count": 17 - }, - { - "value": "active-vision", - "label": "Active Vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "activecam", - "label": "Activecam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "acumen", - "label": "Acumen", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "acunico", - "label": "Acunico", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "acvil", - "label": "Acvil", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "adamas", - "label": "Adamas", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "adapter", - "label": "Adapter", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "adata", - "label": "Adata", - "models_count": 19, - "entries_count": 5 - }, - { - "value": "adc", - "label": "Adc", - "models_count": 34, - "entries_count": 11 - }, - { - "value": "adeco", - "label": "Adeco", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "adhua", - "label": "Adhua", - "models_count": 20, - "entries_count": 11 - }, - { - "value": "adhua-dh-ipc-hdw4233c-a", - "label": "Adhua Dh-ipc-hdw4233c-a", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "adiance", - "label": "Adiance", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "adj", - "label": "Adj", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "adt", - "label": "Adt", - "models_count": 185, - "entries_count": 30 - }, - { - "value": "adv", - "label": "Adv", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "advance", - "label": "Advance", - "models_count": 28, - "entries_count": 23 - }, - { - "value": "advanced-home", - "label": "Advanced Home", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "advidia", - "label": "Advidia", - "models_count": 71, - "entries_count": 31 - }, - { - "value": "advisen", - "label": "Advisen", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "advitronics", - "label": "Advitronics", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aecbl1", - "label": "Aecbl1", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aegis", - "label": "Aegis", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aeon", - "label": "Aeon", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "aeoss", - "label": "Aeoss", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "aercont", - "label": "Aercont", - "models_count": 12, - "entries_count": 4 - }, - { - "value": "aeromax", - "label": "Aeromax", - "models_count": 10, - "entries_count": 2 - }, - { - "value": "aes", - "label": "Aes", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aetos", - "label": "Aetos", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "aevision", - "label": "Aevision", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "afidus", - "label": "Afidus", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "afreey", - "label": "Afreey", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "agasio", - "label": "Agasio", - "models_count": 133, - "entries_count": 27 - }, - { - "value": "agk", - "label": "Agk", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "agptek", - "label": "Agptek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "agrofilm", - "label": "Agrofilm", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "agsso", - "label": "Agsso", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aguadilla", - "label": "Aguadilla", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aguilera", - "label": "Aguilera", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aha", - "label": "Aha", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ahd", - "label": "Ahd", - "models_count": 14, - "entries_count": 7 - }, - { - "value": "ahio-digital", - "label": "Ahio Digital", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ahula", - "label": "Ahula", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ai-ball", - "label": "Ai Ball", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ai-wifi", - "label": "Ai Wifi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aiboostpro", - "label": "Aiboostpro", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aicam", - "label": "Aicam", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "aida", - "label": "Aida", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "aiex", - "label": "Aiex", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "aigas", - "label": "Aigas", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ainol", - "label": "Ainol", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aipcam", - "label": "Aipcam", - "models_count": 36, - "entries_count": 16 - }, - { - "value": "air-live", - "label": "Air Live", - "models_count": 25, - "entries_count": 15 - }, - { - "value": "aircam", - "label": "Aircam", - "models_count": 30, - "entries_count": 13 - }, - { - "value": "aircamubnt", - "label": "Aircamubnt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "airlink", - "label": "Airlink", - "models_count": 155, - "entries_count": 34 - }, - { - "value": "airlive", - "label": "Airlive", - "models_count": 197, - "entries_count": 51 - }, - { - "value": "airmobi", - "label": "Airmobi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "airship", - "label": "Airship", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "airsight", - "label": "Airsight", - "models_count": 166, - "entries_count": 32 - }, - { - "value": "airsoft", - "label": "Airsoft", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "airspace", - "label": "Airspace", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "airstream", - "label": "Airstream", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "airties", - "label": "Airties", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "airtop", - "label": "Airtop", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "airview", - "label": "Airview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "airwave", - "label": "Airwave", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "ait", - "label": "Ait", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aitek", - "label": "Aitek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aivant", - "label": "Aivant", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ajhua", - "label": "Ajhua", - "models_count": 31, - "entries_count": 10 - }, - { - "value": "ajt", - "label": "Ajt", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "ajtv", - "label": "Ajtv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "akai", - "label": "Akai", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "akaso", - "label": "Akaso", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "akeia", - "label": "Akeia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "akon", - "label": "Akon", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aksilium", - "label": "Aksilium", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aku", - "label": "Aku", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "akuvox", - "label": "Akuvox", - "models_count": 12, - "entries_count": 4 - }, - { - "value": "alarm.com", - "label": "Alarm.com", - "models_count": 68, - "entries_count": 10 - }, - { - "value": "alaterassi", - "label": "Alaterassi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alcatel", - "label": "Alcatel", - "models_count": 21, - "entries_count": 7 - }, - { - "value": "alcon", - "label": "Alcon", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "alecto", - "label": "Alecto", - "models_count": 80, - "entries_count": 17 - }, - { - "value": "alertme", - "label": "Alertme", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "alexim", - "label": "Alexim", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "alfa", - "label": "Alfa", - "models_count": 13, - "entries_count": 11 - }, - { - "value": "alfawise", - "label": "Alfawise", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "alhua", - "label": "Alhua", - "models_count": 131, - "entries_count": 19 - }, - { - "value": "ali", - "label": "Ali", - "models_count": 13, - "entries_count": 7 - }, - { - "value": "ali-express", - "label": "Ali Express", - "models_count": 16, - "entries_count": 10 - }, - { - "value": "alianza", - "label": "Alianza", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alias", - "label": "Alias", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "alibi", - "label": "Alibi", - "models_count": 45, - "entries_count": 12 - }, - { - "value": "aliendvr", - "label": "Aliendvr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aliexpress", - "label": "Aliexpress", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "alinking", - "label": "Alinking", - "models_count": 60, - "entries_count": 28 - }, - { - "value": "alivision", - "label": "Alivision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "all-in-one", - "label": "All-in-one", - "models_count": 37, - "entries_count": 25 - }, - { - "value": "allecto", - "label": "Allecto", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "alliede", - "label": "Alliede", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "allnet", - "label": "Allnet", - "models_count": 111, - "entries_count": 33 - }, - { - "value": "allsky", - "label": "Allsky", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "alltec", - "label": "Alltec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "almacen", - "label": "Almacen", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "alonma", - "label": "Alonma", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alp", - "label": "Alp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alpha", - "label": "Alpha", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alpha-power", - "label": "Alpha Power", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "alphacam", - "label": "Alphacam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alphago", - "label": "Alphago", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alphatec", - "label": "Alphatec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "alphatech", - "label": "Alphatech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "alpina", - "label": "Alpina", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "alpine", - "label": "Alpine", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "alptop", - "label": "Alptop", - "models_count": 56, - "entries_count": 5 - }, - { - "value": "altan", - "label": "Altan", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "altasec", - "label": "Altasec", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "altcam", - "label": "Altcam", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "altec-lansing", - "label": "Altec Lansing", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "am", - "label": "Am", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "amamax", - "label": "Amamax", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "amano", - "label": "Amano", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "amarine", - "label": "Amarine", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amatek", - "label": "Amatek", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "amax", - "label": "Amax", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "amazable", - "label": "Amazable", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "amazon", - "label": "Amazon", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "amba", - "label": "Amba", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ambarella", - "label": "Ambarella", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "amber", - "label": "Amber", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ambientcam", - "label": "Ambientcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ambyux-dual-cam", - "label": "Ambyux Dual Cam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "amc", - "label": "Amc", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "amcast", - "label": "Amcast", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amcom", - "label": "Amcom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amcrest", - "label": "Amcrest", - "models_count": 1105, - "entries_count": 90 - }, - { - "value": "amegia", - "label": "Amegia", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "amera", - "label": "Amera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "american-dynamics", - "label": "American Dynamics", - "models_count": 49, - "entries_count": 21 - }, - { - "value": "ameta", - "label": "Ameta", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "amiccom", - "label": "Amiccom", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "amiko", - "label": "Amiko", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "amirok", - "label": "Amirok", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amity", - "label": "Amity", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "amopm", - "label": "Amopm", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "amorvue", - "label": "Amorvue", - "models_count": 12, - "entries_count": 5 - }, - { - "value": "amovision", - "label": "Amovision", - "models_count": 77, - "entries_count": 15 - }, - { - "value": "ampand", - "label": "Ampand", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amsecu", - "label": "Amsecu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amview", - "label": "Amview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "amview-hd", - "label": "Amview Hd", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "amway", - "label": "Amway", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ana-pola", - "label": "Ana Pola", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anba", - "label": "Anba", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "anbash", - "label": "Anbash", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "anbe", - "label": "Anbe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anbe2", - "label": "Anbe2", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "anben", - "label": "Anben", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anbentech", - "label": "Anbentech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anbiux", - "label": "Anbiux", - "models_count": 12, - "entries_count": 1 - }, - { - "value": "anbong", - "label": "Anbong", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anbvision", - "label": "Anbvision", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "ancarla", - "label": "Ancarla", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "andin", - "label": "Andin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "andowl", - "label": "Andowl", - "models_count": 14, - "entries_count": 7 - }, - { - "value": "android", - "label": "Android", - "models_count": 82, - "entries_count": 40 - }, - { - "value": "android-ip-cam", - "label": "Android Ip Cam", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "android-ip-webcam", - "label": "Android Ip Webcam", - "models_count": 16, - "entries_count": 10 - }, - { - "value": "anenda", - "label": "Anenda", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anga", - "label": "Anga", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "angel-electronics", - "label": "Angel Electronics", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "anhkiet", - "label": "Anhkiet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anjia", - "label": "Anjia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anjiel", - "label": "Anjiel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anjvision", - "label": "Anjvision", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "anker", - "label": "Anker", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anko-tech", - "label": "Anko Tech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anlapus", - "label": "Anlapus", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "annahme", - "label": "Annahme", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "annez", - "label": "Annez", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "anni-digital", - "label": "Anni Digital", - "models_count": 9, - "entries_count": 3 - }, - { - "value": "annke", - "label": "Annke", - "models_count": 360, - "entries_count": 57 - }, - { - "value": "anno-zero-ltd", - "label": "Anno Zero Ltd", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anpviz", - "label": "Anpviz", - "models_count": 109, - "entries_count": 19 - }, - { - "value": "anran", - "label": "Anran", - "models_count": 277, - "entries_count": 34 - }, - { - "value": "anscam", - "label": "Anscam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ansice", - "label": "Ansice", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "ansjer", - "label": "Ansjer", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "anson", - "label": "Anson", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "anspo", - "label": "Anspo", - "models_count": 10, - "entries_count": 4 - }, - { - "value": "antifurto365", - "label": "Antifurto365", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "antik-smartcam", - "label": "Antik Smartcam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "antkr", - "label": "Antkr", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "antrica", - "label": "Antrica", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "anv", - "label": "Anv", - "models_count": 24, - "entries_count": 7 - }, - { - "value": "anvan", - "label": "Anvan", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "anxinshi", - "label": "Anxinshi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anyka", - "label": "Anyka", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "anykeeper", - "label": "Anykeeper", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "anysun", - "label": "Anysun", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "aobo", - "label": "Aobo", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "aochan", - "label": "Aochan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aomg", - "label": "Aomg", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aoshi", - "label": "Aoshi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aote", - "label": "Aote", - "models_count": 27, - "entries_count": 8 - }, - { - "value": "aotetek", - "label": "Aotetek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aottom", - "label": "Aottom", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "ap-tech", - "label": "Ap-tech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "apc", - "label": "Apc", - "models_count": 10, - "entries_count": 4 - }, - { - "value": "apeman", - "label": "Apeman", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "aper", - "label": "Aper", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "apexis", - "label": "Apexis", - "models_count": 298, - "entries_count": 55 - }, - { - "value": "apix", - "label": "Apix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "apklink", - "label": "Apklink", - "models_count": 61, - "entries_count": 9 - }, - { - "value": "apleye", - "label": "Apleye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "apm", - "label": "Apm", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "apn-vision-ltd.", - "label": "Apn Vision Ltd.", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "apogee", - "label": "Apogee", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aposonic", - "label": "Aposonic", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "app-cam-35", - "label": "App Cam 35", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "apple", - "label": "Apple", - "models_count": 69, - "entries_count": 18 - }, - { - "value": "applesonic", - "label": "Applesonic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "applink", - "label": "Applink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "appo", - "label": "Appo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "appro", - "label": "Appro", - "models_count": 21, - "entries_count": 11 - }, - { - "value": "approx", - "label": "Approx", - "models_count": 20, - "entries_count": 12 - }, - { - "value": "aprica", - "label": "Aprica", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aprox", - "label": "Aprox", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "apti", - "label": "Apti", - "models_count": 23, - "entries_count": 6 - }, - { - "value": "aptina", - "label": "Aptina", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "aqara", - "label": "Aqara", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "aqua", - "label": "Aqua", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aquila", - "label": "Aquila", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "ar3210", - "label": "Ar3210", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aran", - "label": "Aran", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "archos", - "label": "Archos", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "arcvision", - "label": "Arcvision", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "area", - "label": "Area", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "area51", - "label": "Area51", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "arebi", - "label": "Arebi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "arecont", - "label": "Arecont", - "models_count": 375, - "entries_count": 48 - }, - { - "value": "arenti", - "label": "Arenti", - "models_count": 9, - "entries_count": 2 - }, - { - "value": "argom-tech", - "label": "Argom Tech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "argos", - "label": "Argos", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "argus", - "label": "Argus", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "argusleader", - "label": "Argusleader", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "arit", - "label": "Arit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "arlotto", - "label": "Arlotto", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "arm", - "label": "Arm", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "arma-tech", - "label": "Arma-tech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "armorview", - "label": "Armorview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "armorvue", - "label": "Armorvue", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "arnan", - "label": "Arnan", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "arp", - "label": "Arp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "arrow-security-system", - "label": "Arrow Security System", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "arsoft", - "label": "Arsoft", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "arvani-cctv", - "label": "Arvani Cctv", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "asagio", - "label": "Asagio", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "asante", - "label": "Asante", - "models_count": 37, - "entries_count": 8 - }, - { - "value": "asc", - "label": "Asc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "asdibuy", - "label": "Asdibuy", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "asecam", - "label": "Asecam", - "models_count": 12, - "entries_count": 5 - }, - { - "value": "asgari", - "label": "Asgari", - "models_count": 50, - "entries_count": 16 - }, - { - "value": "ashmount-ptz", - "label": "Ashmount Ptz", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "asia", - "label": "Asia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "asip", - "label": "Asip", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "asm", - "label": "Asm", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "asoni", - "label": "Asoni", - "models_count": 25, - "entries_count": 8 - }, - { - "value": "aspac", - "label": "Aspac", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "asrock", - "label": "Asrock", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "astak", - "label": "Astak", - "models_count": 20, - "entries_count": 7 - }, - { - "value": "asterix", - "label": "Asterix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "asti", - "label": "Asti", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "astr", - "label": "Astr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "astra-streaming", - "label": "Astra Streaming", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "astrind", - "label": "Astrind", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "astroghost", - "label": "Astroghost", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "astrum", - "label": "Astrum", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "astun", - "label": "Astun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "asus", - "label": "Asus", - "models_count": 25, - "entries_count": 12 - }, - { - "value": "asutech", - "label": "Asutech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "asw-006", - "label": "Asw-006", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aszhonga", - "label": "Aszhonga", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "at-vision", - "label": "At Vision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "atheros", - "label": "Atheros", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "athome", - "label": "Athome", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "atis", - "label": "Atis", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "atlantis", - "label": "Atlantis", - "models_count": 13, - "entries_count": 8 - }, - { - "value": "atlona", - "label": "Atlona", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "atomtech", - "label": "Atomtech", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "atrix", - "label": "Atrix", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "att", - "label": "Att", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "attech", - "label": "Attech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "attichd", - "label": "Attichd", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "attn", - "label": "Attn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "atv", - "label": "Atv", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "atz", - "label": "Atz", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "au3", - "label": "Au3", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "audiance", - "label": "Audiance", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "audio-enhancement", - "label": "Audio Enhancement", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "august", - "label": "August", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "auric", - "label": "Auric", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "aussen", - "label": "Aussen", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "autoip", - "label": "Autoip", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "auwer", - "label": "Auwer", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "av102ip-40", - "label": "Av102ip-40", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "av12176dn-15", - "label": "Av12176dn-15", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "av265", - "label": "Av265", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "av40185dn-cd", - "label": "Av40185dn-cd", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avacom", - "label": "Avacom", - "models_count": 42, - "entries_count": 14 - }, - { - "value": "avaja", - "label": "Avaja", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avalonix", - "label": "Avalonix", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "avantgarde", - "label": "Avantgarde", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "avaya", - "label": "Avaya", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "avcam", - "label": "Avcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avd552mip", - "label": "Avd552mip", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ave", - "label": "Ave", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "avenir", - "label": "Avenir", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aventi", - "label": "Aventi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "aventura", - "label": "Aventura", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "aver", - "label": "Aver", - "models_count": 33, - "entries_count": 10 - }, - { - "value": "averdigi", - "label": "Averdigi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avermedia", - "label": "Avermedia", - "models_count": 15, - "entries_count": 10 - }, - { - "value": "avertx", - "label": "Avertx", - "models_count": 18, - "entries_count": 8 - }, - { - "value": "avicam", - "label": "Avicam", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "avidia", - "label": "Avidia", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "avidsen", - "label": "Avidsen", - "models_count": 33, - "entries_count": 3 - }, - { - "value": "avigilon", - "label": "Avigilon", - "models_count": 15, - "entries_count": 10 - }, - { - "value": "avilink", - "label": "Avilink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avios-webserver", - "label": "Avios Webserver", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aviosis", - "label": "Aviosis", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aviosys", - "label": "Aviosys", - "models_count": 58, - "entries_count": 18 - }, - { - "value": "avipas", - "label": "Avipas", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "aviptek", - "label": "Aviptek", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "avistek", - "label": "Avistek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avl", - "label": "Avl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avl-hd-dome", - "label": "Avl Hd Dome", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avn", - "label": "Avn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avonic", - "label": "Avonic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avosys", - "label": "Avosys", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "avr-raiden", - "label": "Avr Raiden", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "avs", - "label": "Avs", - "models_count": 18, - "entries_count": 13 - }, - { - "value": "avstart", - "label": "Avstart", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avt", - "label": "Avt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "avtech", - "label": "Avtech", - "models_count": 488, - "entries_count": 39 - }, - { - "value": "avtron", - "label": "Avtron", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "avue", - "label": "Avue", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "avycon", - "label": "Avycon", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "avz", - "label": "Avz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "awfa-cam", - "label": "Awfa-cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "awow", - "label": "Awow", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "axenta", - "label": "Axenta", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "axeon", - "label": "Axeon", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "axgio", - "label": "Axgio", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "axis", - "label": "Axis", - "models_count": 3311, - "entries_count": 101 - }, - { - "value": "axium", - "label": "Axium", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "axp", - "label": "Axp", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "ayrstone", - "label": "Ayrstone", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "azemax", - "label": "Azemax", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "azone", - "label": "Azone", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "azpen", - "label": "Azpen", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "aztech", - "label": "Aztech", - "models_count": 61, - "entries_count": 26 - }, - { - "value": "b-qtech", - "label": "B-qtech", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "b-series", - "label": "B-series", - "models_count": 12, - "entries_count": 11 - }, - { - "value": "ba-vision", - "label": "Ba Vision", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "babelens", - "label": "Babelens", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "babicka", - "label": "Babicka", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "babycam", - "label": "Babycam", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "baksa", - "label": "Baksa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "balitech", - "label": "Balitech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "balkon", - "label": "Balkon", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "balkong", - "label": "Balkong", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "balzan", - "label": "Balzan", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "banzoo", - "label": "Banzoo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "barco", - "label": "Barco", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "bardi", - "label": "Bardi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "barlus", - "label": "Barlus", - "models_count": 14, - "entries_count": 4 - }, - { - "value": "bascom", - "label": "Bascom", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "basler", - "label": "Basler", - "models_count": 26, - "entries_count": 10 - }, - { - "value": "bavision", - "label": "Bavision", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "bayit", - "label": "Bayit", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "baytech", - "label": "Baytech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bb10", - "label": "Bb10", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bcs", - "label": "Bcs", - "models_count": 59, - "entries_count": 16 - }, - { - "value": "bdpower", - "label": "Bdpower", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "beaulieu", - "label": "Beaulieu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "beb3", - "label": "Beb3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "becam", - "label": "Becam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bedee", - "label": "Bedee", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "beenocam", - "label": "Beenocam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "belco", - "label": "Belco", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "belder", - "label": "Belder", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "belkin", - "label": "Belkin", - "models_count": 19, - "entries_count": 6 - }, - { - "value": "belkin-netcam", - "label": "Belkin Netcam", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "bell", - "label": "Bell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "belle", - "label": "Belle", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "beltech", - "label": "Beltech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bentoo", - "label": "Bentoo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "benyuan", - "label": "Benyuan", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "berger", - "label": "Berger", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bersan", - "label": "Bersan", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "besder", - "label": "Besder", - "models_count": 275, - "entries_count": 28 - }, - { - "value": "bessky", - "label": "Bessky", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "best-buy", - "label": "Best Buy", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "best-digital", - "label": "Best Digital", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "besta", - "label": "Besta", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "bestek", - "label": "Bestek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bettini", - "label": "Bettini", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "beview", - "label": "Beview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "beward", - "label": "Beward", - "models_count": 84, - "entries_count": 22 - }, - { - "value": "bholt", - "label": "Bholt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bigasua", - "label": "Bigasua", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "bigfoot", - "label": "Bigfoot", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bikal-ip-cctv", - "label": "Bikal Ip Cctv", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "biltema", - "label": "Biltema", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "binnencamera", - "label": "Binnencamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bins", - "label": "Bins", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bionics", - "label": "Bionics", - "models_count": 25, - "entries_count": 10 - }, - { - "value": "biovision", - "label": "Biovision", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "bioxo", - "label": "Bioxo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bip-2", - "label": "Bip-2", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "bipcam", - "label": "Bipcam", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "biqu", - "label": "Biqu", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "birdsy", - "label": "Birdsy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "bitron", - "label": "Bitron", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "biwond", - "label": "Biwond", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "bl-ip-cam", - "label": "Bl Ip-cam", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "black", - "label": "Black", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "black-eagle", - "label": "Black Eagle", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "black-label", - "label": "Black Label", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "blackat", - "label": "Blackat", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blackberry", - "label": "Blackberry", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "blackcamera", - "label": "Blackcamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blackfirst", - "label": "Blackfirst", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blackview", - "label": "Blackview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blaupunkt", - "label": "Blaupunkt", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "blink", - "label": "Blink", - "models_count": 7, - "entries_count": 1 - }, - { - "value": "blitzwolf", - "label": "Blitzwolf", - "models_count": 13, - "entries_count": 2 - }, - { - "value": "bls", - "label": "Bls", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blu", - "label": "Blu", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "blue-fish-cam", - "label": "Blue Fish Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blue-iris", - "label": "Blue Iris", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "bluecherry", - "label": "Bluecherry", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "blueeyes", - "label": "Blueeyes", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "bluejay", - "label": "Bluejay", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "bluepix", - "label": "Bluepix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bluestork", - "label": "Bluestork", - "models_count": 25, - "entries_count": 11 - }, - { - "value": "blurams", - "label": "Blurams", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "bmobile", - "label": "Bmobile", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "bnc-vision", - "label": "Bnc Vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bnt", - "label": "Bnt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "boavision", - "label": "Boavision", - "models_count": 104, - "entries_count": 21 - }, - { - "value": "boh", - "label": "Boh", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "bolide", - "label": "Bolide", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "bolin", - "label": "Bolin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bondfree", - "label": "Bondfree", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bonvision", - "label": "Bonvision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "borsystems", - "label": "Borsystems", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bortox", - "label": "Bortox", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bosch", - "label": "Bosch", - "models_count": 415, - "entries_count": 43 - }, - { - "value": "bosma", - "label": "Bosma", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "boss", - "label": "Boss", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bosslan", - "label": "Bosslan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "botcam", - "label": "Botcam", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "botslab", - "label": "Botslab", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "boust", - "label": "Boust", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "boven", - "label": "Boven", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bowya", - "label": "Bowya", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "box", - "label": "Box", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bp-power", - "label": "Bp Power", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "brahms", - "label": "Brahms", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "brama", - "label": "Brama", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "braun", - "label": "Braun", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "bravo", - "label": "Bravo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "bravolink", - "label": "Bravolink", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "breno", - "label": "Breno", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "brickcom", - "label": "Brickcom", - "models_count": 99, - "entries_count": 14 - }, - { - "value": "brickhouse-security", - "label": "Brickhouse Security", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bridge", - "label": "Bridge", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bridget", - "label": "Bridget", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "bridgevms", - "label": "Bridgevms", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "brillcam", - "label": "Brillcam", - "models_count": 12, - "entries_count": 4 - }, - { - "value": "briwax", - "label": "Briwax", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "broadcom", - "label": "Broadcom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "brovision", - "label": "Brovision", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "brovotech", - "label": "Brovotech", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "bsp-security", - "label": "Bsp Security", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "bsti", - "label": "Bsti", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "bticam", - "label": "Bticam", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "bticino", - "label": "Bticino", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "btmax", - "label": "Btmax", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bu-720", - "label": "Bu-720", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "buffalo", - "label": "Buffalo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "buffelshoek", - "label": "Buffelshoek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "buitencamera", - "label": "Buitencamera", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "bullet", - "label": "Bullet", - "models_count": 17, - "entries_count": 5 - }, - { - "value": "bulletzoom", - "label": "Bulletzoom", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "bullwark", - "label": "Bullwark", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "bush-plus", - "label": "Bush Plus", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "buyee", - "label": "Buyee", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "bv-globe", - "label": "Bv Globe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bv-security", - "label": "Bv-security", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "bvcam", - "label": "Bvcam", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "bvusa", - "label": "Bvusa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bwa", - "label": "Bwa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "bxkam", - "label": "Bxkam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "bytec", - "label": "Bytec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "bytek", - "label": "Bytek", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "c2100", - "label": "C2100", - "models_count": 14, - "entries_count": 4 - }, - { - "value": "ca-ip400mp", - "label": "Ca-ip400mp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cacagoo", - "label": "Cacagoo", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "caddx", - "label": "Caddx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cadyce", - "label": "Cadyce", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "caikong", - "label": "Caikong", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "caisse", - "label": "Caisse", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "caja", - "label": "Caja", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "calion", - "label": "Calion", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "camasmart", - "label": "Camasmart", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cambozola", - "label": "Cambozola", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camdeor", - "label": "Camdeor", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "camera-solar-led-street-light", - "label": "Camera Solar Led Street Light", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camerawelt", - "label": "Camerawelt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camery", - "label": "Camery", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cameye", - "label": "Cameye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camhd", - "label": "Camhd", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "camhi", - "label": "Camhi", - "models_count": 45, - "entries_count": 8 - }, - { - "value": "camius", - "label": "Camius", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camkeeper", - "label": "Camkeeper", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camline-pro", - "label": "Camline Pro", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "cammy", - "label": "Cammy", - "models_count": 12, - "entries_count": 3 - }, - { - "value": "camon", - "label": "Camon", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "campo", - "label": "Campo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camqo", - "label": "Camqo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camsafe", - "label": "Camsafe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camscam", - "label": "Camscam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camsee", - "label": "Camsee", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "camspot", - "label": "Camspot", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "camstar", - "label": "Camstar", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "camtronics", - "label": "Camtronics", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "camview", - "label": "Camview", - "models_count": 13, - "entries_count": 4 - }, - { - "value": "camvision", - "label": "Camvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camwest", - "label": "Camwest", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "camwon", - "label": "Camwon", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "canavis", - "label": "Canavis", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "canon", - "label": "Canon", - "models_count": 105, - "entries_count": 18 - }, - { - "value": "cantek", - "label": "Cantek", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "cantok", - "label": "Cantok", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cantonk", - "label": "Cantonk", - "models_count": 39, - "entries_count": 8 - }, - { - "value": "carcam", - "label": "Carcam", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "cas-200", - "label": "Cas-200", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "cas-700", - "label": "Cas-700", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "casa", - "label": "Casa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "casio", - "label": "Casio", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "casperi", - "label": "Casperi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "catawba", - "label": "Catawba", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cb-101ae", - "label": "Cb-101ae", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cb-102ae", - "label": "Cb-102ae", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cbc-america", - "label": "Cbc America", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "cc-plus", - "label": "Cc Plus", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ccam", - "label": "Ccam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "ccd-ip-camera", - "label": "Ccd Ip Camera", - "models_count": 12, - "entries_count": 8 - }, - { - "value": "ccd-video-camera", - "label": "Ccd Video Camera", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ccdcam", - "label": "Ccdcam", - "models_count": 11, - "entries_count": 9 - }, - { - "value": "cci", - "label": "Cci", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cco", - "label": "Cco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cctv", - "label": "Cctv", - "models_count": 81, - "entries_count": 42 - }, - { - "value": "cctv-sentry", - "label": "Cctv Sentry", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "cctvhotdeals", - "label": "Cctvhotdeals", - "models_count": 18, - "entries_count": 18 - }, - { - "value": "cctvman", - "label": "Cctvman", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "cctvr3", - "label": "Cctvr3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cctvsecuritypros", - "label": "Cctvsecuritypros", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cctvstar", - "label": "Cctvstar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ccy", - "label": "Ccy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cd-cam", - "label": "Cd-cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cda", - "label": "Cda", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cdr", - "label": "Cdr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cdr-king", - "label": "Cdr King", - "models_count": 94, - "entries_count": 37 - }, - { - "value": "cdxx", - "label": "Cdxx", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cdxxcamera", - "label": "Cdxxcamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cechas", - "label": "Cechas", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "celestrom", - "label": "Celestrom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "celius", - "label": "Celius", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "cell-cam", - "label": "Cell Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cellinx", - "label": "Cellinx", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "cellinx-sth775", - "label": "Cellinx-sth775", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cellvision", - "label": "Cellvision", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "celu", - "label": "Celu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cengiz", - "label": "Cengiz", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "cennan", - "label": "Cennan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cenova", - "label": "Cenova", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "censee", - "label": "Censee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "centechia", - "label": "Centechia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "centrium", - "label": "Centrium", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "centrix", - "label": "Centrix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "centronics", - "label": "Centronics", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cepsa", - "label": "Cepsa", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "cesnet", - "label": "Cesnet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chacon", - "label": "Chacon", - "models_count": 21, - "entries_count": 12 - }, - { - "value": "chakir", - "label": "Chakir", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chambre", - "label": "Chambre", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "channel-vision", - "label": "Channel Vision", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "channel01", - "label": "Channel01", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "chapel", - "label": "Chapel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chavega", - "label": "Chavega", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "cheap", - "label": "Cheap", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cheapcam", - "label": "Cheapcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cherry-mobile", - "label": "Cherry Mobile", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chicony", - "label": "Chicony", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "childrenview.com", - "label": "Childrenview.com", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "china", - "label": "China", - "models_count": 228, - "entries_count": 79 - }, - { - "value": "china-dragon", - "label": "China Dragon", - "models_count": 15, - "entries_count": 4 - }, - { - "value": "chinavasion", - "label": "Chinavasion", - "models_count": 73, - "entries_count": 31 - }, - { - "value": "chinawest", - "label": "Chinawest", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chine", - "label": "Chine", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chinese", - "label": "Chinese", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "chinese-lamp-camera", - "label": "Chinese Lamp Camera", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "chineseptz", - "label": "Chineseptz", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "chineseum", - "label": "Chineseum", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chingling", - "label": "Chingling", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "chino", - "label": "Chino", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chint", - "label": "Chint", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "choice", - "label": "Choice", - "models_count": 17, - "entries_count": 12 - }, - { - "value": "chongro", - "label": "Chongro", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chortau", - "label": "Chortau", - "models_count": 20, - "entries_count": 5 - }, - { - "value": "chowha", - "label": "Chowha", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "chrysalis", - "label": "Chrysalis", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chua", - "label": "Chua", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "chubb", - "label": "Chubb", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ciana-exports", - "label": "Ciana Exports", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cib-security", - "label": "Cib Security", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cina", - "label": "Cina", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cinnado", - "label": "Cinnado", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "cip", - "label": "Cip", - "models_count": 12, - "entries_count": 10 - }, - { - "value": "cipem", - "label": "Cipem", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ciqurix", - "label": "Ciqurix", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cisco", - "label": "Cisco", - "models_count": 184, - "entries_count": 39 - }, - { - "value": "cita", - "label": "Cita", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "citc", - "label": "Citc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "citronix", - "label": "Citronix", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "citrox", - "label": "Citrox", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "citystar", - "label": "Citystar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "citysync", - "label": "Citysync", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "civs-ipc-6400", - "label": "Civs-ipc-6400", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "clairvoyant-mwr", - "label": "Clairvoyant Mwr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "clas", - "label": "Clas", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "clearone", - "label": "Clearone", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "clearpix", - "label": "Clearpix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "clearview", - "label": "Clearview", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "clever-loop", - "label": "Clever Loop", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "clock", - "label": "Clock", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "cloud", - "label": "Cloud", - "models_count": 17, - "entries_count": 12 - }, - { - "value": "cloud-ip-camera", - "label": "Cloud Ip Camera", - "models_count": 25, - "entries_count": 16 - }, - { - "value": "cloud2000", - "label": "Cloud2000", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cloudcam", - "label": "Cloudcam", - "models_count": 23, - "entries_count": 17 - }, - { - "value": "cloudlive", - "label": "Cloudlive", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cmos", - "label": "Cmos", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cms", - "label": "Cms", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "cms-zonet", - "label": "Cms Zonet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cnb", - "label": "Cnb", - "models_count": 17, - "entries_count": 5 - }, - { - "value": "cnet", - "label": "Cnet", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "cnm", - "label": "Cnm", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "cobra", - "label": "Cobra", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "cocoon", - "label": "Cocoon", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "codnida", - "label": "Codnida", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "cohu", - "label": "Cohu", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "cohuhd", - "label": "Cohuhd", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "comcast", - "label": "Comcast", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "comelit", - "label": "Comelit", - "models_count": 17, - "entries_count": 7 - }, - { - "value": "commend", - "label": "Commend", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "communications-line", - "label": "Communications Line", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "compro", - "label": "Compro", - "models_count": 126, - "entries_count": 19 - }, - { - "value": "compufix4u", - "label": "Compufix4u", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "coms", - "label": "Coms", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "comtac", - "label": "Comtac", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "comtrend", - "label": "Comtrend", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "concept-pro", - "label": "Concept Pro", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "conceptronic", - "label": "Conceptronic", - "models_count": 82, - "entries_count": 26 - }, - { - "value": "concord", - "label": "Concord", - "models_count": 15, - "entries_count": 2 - }, - { - "value": "condere", - "label": "Condere", - "models_count": 14, - "entries_count": 7 - }, - { - "value": "conico", - "label": "Conico", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "connectec", - "label": "Connectec", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "connectionnc", - "label": "Connectionnc", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "connectsmarthome", - "label": "Connectsmarthome", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "connex", - "label": "Connex", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "contack", - "label": "Contack", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "control3d", - "label": "Control3d", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "control4", - "label": "Control4", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "convision", - "label": "Convision", - "models_count": 12, - "entries_count": 8 - }, - { - "value": "convo-kontor", - "label": "Convo Kontor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cooau", - "label": "Cooau", - "models_count": 31, - "entries_count": 5 - }, - { - "value": "coocheer", - "label": "Coocheer", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "coolcam", - "label": "Coolcam", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "coolead", - "label": "Coolead", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "coolpad", - "label": "Coolpad", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "cooradilla", - "label": "Cooradilla", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cootli", - "label": "Cootli", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "cop", - "label": "Cop", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "copa-10", - "label": "Copa 10", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "copbr", - "label": "Copbr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "core", - "label": "Core", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "corega", - "label": "Corega", - "models_count": 15, - "entries_count": 6 - }, - { - "value": "corex", - "label": "Corex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "corprit", - "label": "Corprit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "corsee", - "label": "Corsee", - "models_count": 18, - "entries_count": 9 - }, - { - "value": "cosansys", - "label": "Cosansys", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "costar", - "label": "Costar", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "costim", - "label": "Costim", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cotier", - "label": "Cotier", - "models_count": 85, - "entries_count": 19 - }, - { - "value": "cour", - "label": "Cour", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "covisec", - "label": "Covisec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cowkey", - "label": "Cowkey", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "cp-plus", - "label": "Cp Plus", - "models_count": 151, - "entries_count": 31 - }, - { - "value": "cpcam", - "label": "Cpcam", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "cpd", - "label": "Cpd", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cptcam", - "label": "Cptcam", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "cpvan", - "label": "Cpvan", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "cr2100", - "label": "Cr2100", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "creality", - "label": "Creality", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "creative", - "label": "Creative", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "crenova", - "label": "Crenova", - "models_count": 14, - "entries_count": 5 - }, - { - "value": "crest", - "label": "Crest", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "crestron", - "label": "Crestron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cricket", - "label": "Cricket", - "models_count": 9, - "entries_count": 2 - }, - { - "value": "crl", - "label": "Crl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "crysta-vision", - "label": "Crysta Vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "crystal-vision", - "label": "Crystal Vision", - "models_count": 10, - "entries_count": 4 - }, - { - "value": "cs-280f53", - "label": "Cs-280f53", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cs2link", - "label": "Cs2link", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "csst", - "label": "Csst", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ct2", - "label": "Ct2", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ctipc", - "label": "Ctipc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ctronics", - "label": "Ctronics", - "models_count": 261, - "entries_count": 15 - }, - { - "value": "ctvision", - "label": "Ctvision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ctvison", - "label": "Ctvison", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ctvman", - "label": "Ctvman", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cube", - "label": "Cube", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cubitech", - "label": "Cubitech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cusxy", - "label": "Cusxy", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cv-b13b10-odi", - "label": "Cv-b13b10-odi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cv3c", - "label": "Cv3c", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cvlm", - "label": "Cvlm", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "cyber", - "label": "Cyber", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "cybernetik", - "label": "Cybernetik", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cybernova", - "label": "Cybernova", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "cyberview", - "label": "Cyberview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cybo", - "label": "Cybo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cycam", - "label": "Cycam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cyclops", - "label": "Cyclops", - "models_count": 10, - "entries_count": 10 - }, - { - "value": "cygnus", - "label": "Cygnus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cygonix", - "label": "Cygonix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cymbol", - "label": "Cymbol", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "cynics", - "label": "Cynics", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "cyrus", - "label": "Cyrus", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "czarna", - "label": "Czarna", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "d-link", - "label": "D-link", - "models_count": 3103, - "entries_count": 101 - }, - { - "value": "d-tech", - "label": "D-tech", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "d2ip", - "label": "D2ip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "d3d", - "label": "D3d", - "models_count": 15, - "entries_count": 5 - }, - { - "value": "d5118-acfsvt7", - "label": "D5118-acfsvt7", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "d5118-acnkf13", - "label": "D5118-acnkf13", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dae", - "label": "Dae", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "dafang", - "label": "Dafang", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dagro", - "label": "Dagro", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "dahua", - "label": "Dahua", - "models_count": 2034, - "entries_count": 101 - }, - { - "value": "dakang", - "label": "Dakang", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "dali-tech", - "label": "Dali-tech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dallmeier", - "label": "Dallmeier", - "models_count": 9, - "entries_count": 3 - }, - { - "value": "damigou", - "label": "Damigou", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "danale", - "label": "Danale", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "danele", - "label": "Danele", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "danmini", - "label": "Danmini", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dannovo", - "label": "Dannovo", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "danother", - "label": "Danother", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "dante", - "label": "Dante", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "darts", - "label": "Darts", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dasco", - "label": "Dasco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "dashua", - "label": "Dashua", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "datapartner", - "label": "Datapartner", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "datavideo", - "label": "Datavideo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "davicom", - "label": "Davicom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "davislumadvr", - "label": "Davislumadvr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dawan", - "label": "Dawan", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "dax", - "label": "Dax", - "models_count": 18, - "entries_count": 10 - }, - { - "value": "daytech", - "label": "Daytech", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "dayukeji", - "label": "Dayukeji", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "db-power", - "label": "Db Power", - "models_count": 359, - "entries_count": 61 - }, - { - "value": "dbb", - "label": "Dbb", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "dbcam", - "label": "Dbcam", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "dbell", - "label": "Dbell", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "dbp", - "label": "Dbp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dcl", - "label": "Dcl", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "dcpcctv", - "label": "Dcpcctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dcs", - "label": "Dcs", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "decam", - "label": "Decam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "declink", - "label": "Declink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dedicated-micro", - "label": "Dedicated Micro", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dedicated-micros", - "label": "Dedicated Micros", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "deecam", - "label": "Deecam", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "deep-sentinel", - "label": "Deep Sentinel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "defaway", - "label": "Defaway", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "defender", - "label": "Defender", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "defeway", - "label": "Defeway", - "models_count": 26, - "entries_count": 12 - }, - { - "value": "dekco", - "label": "Dekco", - "models_count": 13, - "entries_count": 4 - }, - { - "value": "dekel", - "label": "Dekel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "delaval", - "label": "Delaval", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "delcatec", - "label": "Delcatec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dell", - "label": "Dell", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "delphi", - "label": "Delphi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "deltaco", - "label": "Deltaco", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "denavo", - "label": "Denavo", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "dentech", - "label": "Dentech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "denver", - "label": "Denver", - "models_count": 88, - "entries_count": 18 - }, - { - "value": "dericam", - "label": "Dericam", - "models_count": 211, - "entries_count": 33 - }, - { - "value": "desertwolfblackwidow606", - "label": "Desertwolfblackwidow606", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "detec", - "label": "Detec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dev_ipnc", - "label": "Dev_ipnc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "devant", - "label": "Devant", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "deviceclientq", - "label": "Deviceclientq", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dextel", - "label": "Dextel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "df960p", - "label": "Df960p", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dgsol", - "label": "Dgsol", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "dharmesh", - "label": "Dharmesh", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dhi-cam", - "label": "Dhi Cam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "dhwe", - "label": "Dhwe", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "diadromos", - "label": "Diadromos", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "diamond", - "label": "Diamond", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dianwan", - "label": "Dianwan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dico-800", - "label": "Dico-800", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "digicam", - "label": "Digicam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "digicom", - "label": "Digicom", - "models_count": 16, - "entries_count": 9 - }, - { - "value": "digihero", - "label": "Digihero", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digijet", - "label": "Digijet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digilan", - "label": "Digilan", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "digimerge", - "label": "Digimerge", - "models_count": 22, - "entries_count": 10 - }, - { - "value": "digisol", - "label": "Digisol", - "models_count": 17, - "entries_count": 7 - }, - { - "value": "digital-intellect", - "label": "Digital Intellect", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "digital-security", - "label": "Digital Security", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digital-video-recorder", - "label": "Digital Video Recorder", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "digital-watchdog", - "label": "Digital Watchdog", - "models_count": 45, - "entries_count": 18 - }, - { - "value": "digitalvision", - "label": "Digitalvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digitalwatchdog", - "label": "Digitalwatchdog", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digitcam", - "label": "Digitcam", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "digitech", - "label": "Digitech", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "digitus", - "label": "Digitus", - "models_count": 111, - "entries_count": 29 - }, - { - "value": "digivue", - "label": "Digivue", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digix", - "label": "Digix", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "digma", - "label": "Digma", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "digma-smart-home", - "label": "Digma Smart Home", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dignity", - "label": "Dignity", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "digoo", - "label": "Digoo", - "models_count": 86, - "entries_count": 19 - }, - { - "value": "dimension", - "label": "Dimension", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dimos", - "label": "Dimos", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dinesh", - "label": "Dinesh", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dinon", - "label": "Dinon", - "models_count": 14, - "entries_count": 8 - }, - { - "value": "dinox", - "label": "Dinox", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "diopoint", - "label": "Diopoint", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "discover", - "label": "Discover", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "discovery", - "label": "Discovery", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dish-cam", - "label": "Dish-cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "diske", - "label": "Diske", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "diverse", - "label": "Diverse", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "diviotec", - "label": "Diviotec", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "divis", - "label": "Divis", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "divisat", - "label": "Divisat", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dixie", - "label": "Dixie", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dizink", - "label": "Dizink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dkseg", - "label": "Dkseg", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "dl-cam", - "label": "Dl Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dlt-plenty", - "label": "Dlt Plenty", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dm365-ipnc", - "label": "Dm365 Ipnc", - "models_count": 154, - "entries_count": 7 - }, - { - "value": "dmp", - "label": "Dmp", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "dmzok", - "label": "Dmzok", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "dnt", - "label": "Dnt", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "dnvr", - "label": "Dnvr", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "docker-wyze-bridge", - "label": "Docker Wyze Bridge", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "docooler", - "label": "Docooler", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dod-tech", - "label": "Dod Tech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dodocool", - "label": "Dodocool", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "doma", - "label": "Doma", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "domar", - "label": "Domar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dome", - "label": "Dome", - "models_count": 14, - "entries_count": 11 - }, - { - "value": "domecam", - "label": "Domecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "domintell", - "label": "Domintell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "domogonza", - "label": "Domogonza", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "dongjia", - "label": "Dongjia", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "doogee", - "label": "Doogee", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "door", - "label": "Door", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "door-bell", - "label": "Door Bell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "doorbird", - "label": "Doorbird", - "models_count": 13, - "entries_count": 5 - }, - { - "value": "doorcam", - "label": "Doorcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "doorphone", - "label": "Doorphone", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "dosilkc", - "label": "Dosilkc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "doss", - "label": "Doss", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "dotix", - "label": "Dotix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "doubleeagl", - "label": "Doubleeagl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dowse", - "label": "Dowse", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dowson", - "label": "Dowson", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dragon-touch", - "label": "Dragon Touch", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "dragoncam", - "label": "Dragoncam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "dreamstar", - "label": "Dreamstar", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "drh-domotics", - "label": "Drh Domotics", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "droid", - "label": "Droid", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "ds-i200", - "label": "Ds-i200", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dsc", - "label": "Dsc", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "dsnny", - "label": "Dsnny", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "dsp", - "label": "Dsp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dss", - "label": "Dss", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ducki", - "label": "Ducki", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "duhau", - "label": "Duhau", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "duhua", - "label": "Duhua", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "dunlop", - "label": "Dunlop", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "durawell", - "label": "Durawell", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "dvir", - "label": "Dvir", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dvr", - "label": "Dvr", - "models_count": 94, - "entries_count": 35 - }, - { - "value": "dvri", - "label": "Dvri", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "dvrn4", - "label": "Dvrn4", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "dvrusa", - "label": "Dvrusa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dvs", - "label": "Dvs", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "dvs-ip-cam", - "label": "Dvs-ip-cam", - "models_count": 12, - "entries_count": 6 - }, - { - "value": "dvtel", - "label": "Dvtel", - "models_count": 18, - "entries_count": 8 - }, - { - "value": "dx", - "label": "Dx", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "dygitus", - "label": "Dygitus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "dynacolor", - "label": "Dynacolor", - "models_count": 25, - "entries_count": 9 - }, - { - "value": "dynamo", - "label": "Dynamo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "dynamode", - "label": "Dynamode", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "e-landing", - "label": "E-landing", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "e-lock", - "label": "E-lock", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "e-tech", - "label": "E-tech", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "e-think", - "label": "E-think", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "e-view", - "label": "E-view", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eagle-eye", - "label": "Eagle Eye", - "models_count": 13, - "entries_count": 7 - }, - { - "value": "eagle-view", - "label": "Eagle View", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "eagle-vision", - "label": "Eagle Vision", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "eagleeye", - "label": "Eagleeye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eaglestar", - "label": "Eaglestar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eagleview", - "label": "Eagleview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eam", - "label": "Eam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eamo", - "label": "Eamo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eardatech", - "label": "Eardatech", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "east", - "label": "East", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "eastcam", - "label": "Eastcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "easternccc", - "label": "Easternccc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "easterncctv", - "label": "Easterncctv", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "eastvision", - "label": "Eastvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "easy", - "label": "Easy", - "models_count": 12, - "entries_count": 11 - }, - { - "value": "easy-ip", - "label": "Easy Ip", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "easy4ip", - "label": "Easy4ip", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "easycam", - "label": "Easycam", - "models_count": 24, - "entries_count": 11 - }, - { - "value": "easycap", - "label": "Easycap", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "easyn", - "label": "Easyn", - "models_count": 693, - "entries_count": 73 - }, - { - "value": "easyse", - "label": "Easyse", - "models_count": 40, - "entries_count": 18 - }, - { - "value": "easytao", - "label": "Easytao", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "easyz", - "label": "Easyz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eazydv", - "label": "Eazydv", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ebode", - "label": "Ebode", - "models_count": 29, - "entries_count": 12 - }, - { - "value": "ebw", - "label": "Ebw", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ec101", - "label": "Ec101", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ecam", - "label": "Ecam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "echo-star", - "label": "Echo Star", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "eclipse", - "label": "Eclipse", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "eco", - "label": "Eco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ecoline", - "label": "Ecoline", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "economato", - "label": "Economato", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "edge", - "label": "Edge", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "edgecore", - "label": "Edgecore", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "edimax", - "label": "Edimax", - "models_count": 465, - "entries_count": 42 - }, - { - "value": "edison", - "label": "Edison", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ednet", - "label": "Ednet", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "edss", - "label": "Edss", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eero", - "label": "Eero", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eescam", - "label": "Eescam", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "eesee", - "label": "Eesee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eet", - "label": "Eet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ego", - "label": "Ego", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "egpis", - "label": "Egpis", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "eguard", - "label": "Eguard", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ehea", - "label": "Ehea", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eickhoff", - "label": "Eickhoff", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eigeek", - "label": "Eigeek", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "eigen", - "label": "Eigen", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eight", - "label": "Eight", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eighteen", - "label": "Eighteen", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eingangscamera", - "label": "Eingangscamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "einnov", - "label": "Einnov", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "eip", - "label": "Eip", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eitea", - "label": "Eitea", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ekaza", - "label": "Ekaza", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eken", - "label": "Eken", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "elcom", - "label": "Elcom", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ele-technology", - "label": "Ele Technology", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "elec", - "label": "Elec", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "elecom", - "label": "Elecom", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "electriq", - "label": "Electriq", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "electrodh", - "label": "Electrodh", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "elegate", - "label": "Elegate", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "elegiant", - "label": "Elegiant", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "elegoo", - "label": "Elegoo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "elex", - "label": "Elex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "elinksmart-ip-camera", - "label": "Elinksmart Ip Camera", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "elinz", - "label": "Elinz", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "elisa", - "label": "Elisa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "elite", - "label": "Elite", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "elmo", - "label": "Elmo", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "elp", - "label": "Elp", - "models_count": 99, - "entries_count": 9 - }, - { - "value": "elp201", - "label": "Elp201", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "elro", - "label": "Elro", - "models_count": 284, - "entries_count": 48 - }, - { - "value": "elsys", - "label": "Elsys", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "elver", - "label": "Elver", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ematic", - "label": "Ematic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "emax", - "label": "Emax", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "embedded-net-dvr", - "label": "Embedded Net Dvr", - "models_count": 54, - "entries_count": 22 - }, - { - "value": "emerson", - "label": "Emerson", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "eminent", - "label": "Eminent", - "models_count": 136, - "entries_count": 31 - }, - { - "value": "empire", - "label": "Empire", - "models_count": 15, - "entries_count": 4 - }, - { - "value": "empiretech", - "label": "Empiretech", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "emstone", - "label": "Emstone", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "encoder10", - "label": "Encoder10", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "encore", - "label": "Encore", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "encore-electronics", - "label": "Encore Electronics", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "encwi-g1", - "label": "Encwi-g1", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "endoscope", - "label": "Endoscope", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "endroid", - "label": "Endroid", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "endurance", - "label": "Endurance", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eneo", - "label": "Eneo", - "models_count": 36, - "entries_count": 21 - }, - { - "value": "engeninus", - "label": "Engeninus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "engenius", - "label": "Engenius", - "models_count": 18, - "entries_count": 5 - }, - { - "value": "enio-bell", - "label": "Enio Bell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ens-security", - "label": "Ens Security", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "enscam", - "label": "Enscam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ensidio", - "label": "Ensidio", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "enster", - "label": "Enster", - "models_count": 15, - "entries_count": 6 - }, - { - "value": "enter", - "label": "Enter", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "entrematic", - "label": "Entrematic", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "enviewer", - "label": "Enviewer", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "envio", - "label": "Envio", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "envision", - "label": "Envision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "enxun", - "label": "Enxun", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "eonboom", - "label": "Eonboom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eopen", - "label": "Eopen", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "eos-vision", - "label": "Eos Vision", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "epcam2", - "label": "Epcam2", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "epexis", - "label": "Epexis", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "epges", - "label": "Epges", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ephone", - "label": "Ephone", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "epicamera", - "label": "Epicamera", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "epine", - "label": "Epine", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "epson", - "label": "Epson", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ernitec", - "label": "Ernitec", - "models_count": 23, - "entries_count": 10 - }, - { - "value": "esc", - "label": "Esc", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "escam", - "label": "Escam", - "models_count": 325, - "entries_count": 45 - }, - { - "value": "esecure", - "label": "Esecure", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "esee", - "label": "Esee", - "models_count": 22, - "entries_count": 9 - }, - { - "value": "esense", - "label": "Esense", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "esky", - "label": "Esky", - "models_count": 38, - "entries_count": 22 - }, - { - "value": "esmart", - "label": "Esmart", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "esp", - "label": "Esp", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "esp32", - "label": "Esp32", - "models_count": 53, - "entries_count": 18 - }, - { - "value": "espressif", - "label": "Espressif", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "esprit-enhanced", - "label": "Esprit Enhanced", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "essay", - "label": "Essay", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "essfly", - "label": "Essfly", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "est", - "label": "Est", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "estcctv", - "label": "Estcctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "esternal", - "label": "Esternal", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "esunstar", - "label": "Esunstar", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "esypop", - "label": "Esypop", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "etc", - "label": "Etc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "etcam", - "label": "Etcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "etevision", - "label": "Etevision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "etn", - "label": "Etn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "etrovision", - "label": "Etrovision", - "models_count": 21, - "entries_count": 7 - }, - { - "value": "etupiha", - "label": "Etupiha", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eu3c", - "label": "Eu3c", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eufy", - "label": "Eufy", - "models_count": 95, - "entries_count": 14 - }, - { - "value": "eule", - "label": "Eule", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "eura-tech", - "label": "Eura-tech", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "eurolook", - "label": "Eurolook", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "europ-camera", - "label": "Europ-camera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eurotek", - "label": "Eurotek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eurovideo", - "label": "Eurovideo", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "eusso", - "label": "Eusso", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "ev3c", - "label": "Ev3c", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "everest", - "label": "Everest", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "everfocus", - "label": "Everfocus", - "models_count": 56, - "entries_count": 13 - }, - { - "value": "eversecu", - "label": "Eversecu", - "models_count": 23, - "entries_count": 11 - }, - { - "value": "eversun", - "label": "Eversun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "evgeni", - "label": "Evgeni", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "evidence", - "label": "Evidence", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "evo3d", - "label": "Evo3d", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "evocam", - "label": "Evocam", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "evolli", - "label": "Evolli", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "evolution", - "label": "Evolution", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "evolveo", - "label": "Evolveo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "evolylcam", - "label": "Evolylcam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "evonet", - "label": "Evonet", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "evonet-c-vd320ir", - "label": "Evonet-c-vd320ir", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "evviz", - "label": "Evviz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ewan-ko", - "label": "Ewan Ko", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ewelink", - "label": "Ewelink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ews1025", - "label": "Ews1025", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "exache", - "label": "Exache", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "exacqvision", - "label": "Exacqvision", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "exceed", - "label": "Exceed", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "excelvan", - "label": "Excelvan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "exelon", - "label": "Exelon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "exom", - "label": "Exom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "exotic-life", - "label": "Exotic Life", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "expert", - "label": "Expert", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "export-import-global", - "label": "Export Import Global", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "expose", - "label": "Expose", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "extel", - "label": "Extel", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "extend-lan", - "label": "Extend Lan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "extreme", - "label": "Extreme", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "extron", - "label": "Extron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eye-360", - "label": "Eye 360", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "eye-sight", - "label": "Eye Sight", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "eye-vision", - "label": "Eye Vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eye01w", - "label": "Eye01w", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "eyecam", - "label": "Eyecam", - "models_count": 30, - "entries_count": 18 - }, - { - "value": "eyecloud", - "label": "Eyecloud", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eyeguard", - "label": "Eyeguard", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eyeipcam", - "label": "Eyeipcam", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "eyemax", - "label": "Eyemax", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "eyenimal", - "label": "Eyenimal", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eyenix", - "label": "Eyenix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eyeon", - "label": "Eyeon", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eyeonet", - "label": "Eyeonet", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "eyeplus", - "label": "Eyeplus", - "models_count": 38, - "entries_count": 16 - }, - { - "value": "eyerely", - "label": "Eyerely", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eyes-sys", - "label": "Eyes-sys", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "eyesec", - "label": "Eyesec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "eyesight", - "label": "Eyesight", - "models_count": 55, - "entries_count": 22 - }, - { - "value": "eyesonic", - "label": "Eyesonic", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "eyespy", - "label": "Eyespy", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "eyespy247", - "label": "Eyespy247", - "models_count": 28, - "entries_count": 8 - }, - { - "value": "eyesurv", - "label": "Eyesurv", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "eyetech", - "label": "Eyetech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eyetelligent", - "label": "Eyetelligent", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "eyevision", - "label": "Eyevision", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "eyewatch", - "label": "Eyewatch", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "eyseo", - "label": "Eyseo", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "eyu", - "label": "Eyu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ez-ip", - "label": "Ez-ip", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ez-watching", - "label": "Ez-watching", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ezbiz", - "label": "Ezbiz", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "ezcam", - "label": "Ezcam", - "models_count": 47, - "entries_count": 27 - }, - { - "value": "eziviewcctv", - "label": "Eziviewcctv", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "eziviz", - "label": "Eziviz", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "ezlink", - "label": "Ezlink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ezviz", - "label": "Ezviz", - "models_count": 556, - "entries_count": 62 - }, - { - "value": "f-series", - "label": "F-series", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "f7210", - "label": "F7210", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "facetime", - "label": "Facetime", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "faitt0o", - "label": "Faitt0o", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "faittoo", - "label": "Faittoo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "falcon", - "label": "Falcon", - "models_count": 14, - "entries_count": 11 - }, - { - "value": "falcon-eye", - "label": "Falcon Eye", - "models_count": 14, - "entries_count": 8 - }, - { - "value": "faleemi", - "label": "Faleemi", - "models_count": 24, - "entries_count": 2 - }, - { - "value": "falke", - "label": "Falke", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "fam", - "label": "Fam", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "fanse", - "label": "Fanse", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fanshine", - "label": "Fanshine", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "fanvil", - "label": "Fanvil", - "models_count": 15, - "entries_count": 7 - }, - { - "value": "fanyii", - "label": "Fanyii", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fayele", - "label": "Fayele", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "fb-100ap", - "label": "Fb-100ap", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fc5415e", - "label": "Fc5415e", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "fcc", - "label": "Fcc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fdt", - "label": "Fdt", - "models_count": 82, - "entries_count": 9 - }, - { - "value": "feasso", - "label": "Feasso", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "febfox-wifi-camera", - "label": "Febfox Wifi Camera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "feit-electric", - "label": "Feit Electric", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "feite", - "label": "Feite", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fen-joo", - "label": "Fen-joo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "fenton", - "label": "Fenton", - "models_count": 12, - "entries_count": 4 - }, - { - "value": "ferguson", - "label": "Ferguson", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "fern360", - "label": "Fern360", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fhd-2mp", - "label": "Fhd-2mp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fifi-spectrum", - "label": "Fifi Spectrum", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "fine", - "label": "Fine", - "models_count": 30, - "entries_count": 13 - }, - { - "value": "finesight", - "label": "Finesight", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "finex", - "label": "Finex", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "fiptec", - "label": "Fiptec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "firas", - "label": "Firas", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "firetruck", - "label": "Firetruck", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "first-alert", - "label": "First Alert", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "first-concept", - "label": "First Concept", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "firstcam", - "label": "Firstcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "firstrend", - "label": "Firstrend", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "fisotech", - "label": "Fisotech", - "models_count": 19, - "entries_count": 11 - }, - { - "value": "fitivision", - "label": "Fitivision", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "fkyro", - "label": "Fkyro", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fla", - "label": "Fla", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "flashforge", - "label": "Flashforge", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "flexidome", - "label": "Flexidome", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "flexwatch", - "label": "Flexwatch", - "models_count": 22, - "entries_count": 5 - }, - { - "value": "flir", - "label": "Flir", - "models_count": 143, - "entries_count": 44 - }, - { - "value": "floureon", - "label": "Floureon", - "models_count": 242, - "entries_count": 47 - }, - { - "value": "fluesonic", - "label": "Fluesonic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "flying", - "label": "Flying", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "fnkvision", - "label": "Fnkvision", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "focuscam", - "label": "Focuscam", - "models_count": 17, - "entries_count": 10 - }, - { - "value": "focuseye", - "label": "Focuseye", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "folsom", - "label": "Folsom", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "fomei", - "label": "Fomei", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "foodtec", - "label": "Foodtec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "fortec", - "label": "Fortec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "forti", - "label": "Forti", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "forticam", - "label": "Forticam", - "models_count": 8, - "entries_count": 7 - }, - { - "value": "fortinet", - "label": "Fortinet", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "fortis", - "label": "Fortis", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fortrek", - "label": "Fortrek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "foscam", - "label": "Foscam", - "models_count": 1900, - "entries_count": 101 - }, - { - "value": "fossi", - "label": "Fossi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fostar", - "label": "Fostar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fosvision", - "label": "Fosvision", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "foxcam", - "label": "Foxcam", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "fracarro", - "label": "Fracarro", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "fredi", - "label": "Fredi", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "freesbell", - "label": "Freesbell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "freetec", - "label": "Freetec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "frente", - "label": "Frente", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "fs.com", - "label": "Fs.com", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "fsan", - "label": "Fsan", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "ftype", - "label": "Ftype", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "fujicam", - "label": "Fujicam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fujiko", - "label": "Fujiko", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "fujima", - "label": "Fujima", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fujinon", - "label": "Fujinon", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "fujitel", - "label": "Fujitel", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "fujitron", - "label": "Fujitron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fujtech", - "label": "Fujtech", - "models_count": 13, - "entries_count": 2 - }, - { - "value": "fujut", - "label": "Fujut", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fukuda", - "label": "Fukuda", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "fulicom", - "label": "Fulicom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fullsec", - "label": "Fullsec", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "fullward", - "label": "Fullward", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fuluva", - "label": "Fuluva", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "fundos", - "label": "Fundos", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "funlux", - "label": "Funlux", - "models_count": 20, - "entries_count": 7 - }, - { - "value": "funxwe", - "label": "Funxwe", - "models_count": 19, - "entries_count": 4 - }, - { - "value": "furbo", - "label": "Furbo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "fures", - "label": "Fures", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fusion", - "label": "Fusion", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "fustes-sola", - "label": "Fustes Sola", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "fuswlan", - "label": "Fuswlan", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "futura-elettronica", - "label": "Futura Elettronica", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "fvc-cameras", - "label": "Fvc Cameras", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "fyuui", - "label": "Fyuui", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "g180", - "label": "G180", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "g4direct", - "label": "G4direct", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "gadinan", - "label": "Gadinan", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "gadnic", - "label": "Gadnic", - "models_count": 25, - "entries_count": 5 - }, - { - "value": "gadspot", - "label": "Gadspot", - "models_count": 55, - "entries_count": 22 - }, - { - "value": "gaines-dvr", - "label": "Gaines Dvr", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "galaxy", - "label": "Galaxy", - "models_count": 13, - "entries_count": 6 - }, - { - "value": "galaxy-note-3", - "label": "Galaxy Note 3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "galaxy-note3", - "label": "Galaxy Note3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "galaxy-phone", - "label": "Galaxy Phone", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "galaxy-s3", - "label": "Galaxy S3", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "galaxy-s4", - "label": "Galaxy S4", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "galpon", - "label": "Galpon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ganvis", - "label": "Ganvis", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "ganz", - "label": "Ganz", - "models_count": 17, - "entries_count": 12 - }, - { - "value": "gardinan", - "label": "Gardinan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gate", - "label": "Gate", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "gateway", - "label": "Gateway", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gateway-security", - "label": "Gateway Security", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "gato", - "label": "Gato", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gawell", - "label": "Gawell", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "gazingsure", - "label": "Gazingsure", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gbf", - "label": "Gbf", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gbo", - "label": "Gbo", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "gcam", - "label": "Gcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gds", - "label": "Gds", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ge", - "label": "Ge", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "gecko-security", - "label": "Gecko Security", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "gedthry", - "label": "Gedthry", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "geecam", - "label": "Geecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "geecamvnt", - "label": "Geecamvnt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "geeni", - "label": "Geeni", - "models_count": 13, - "entries_count": 6 - }, - { - "value": "geeya", - "label": "Geeya", - "models_count": 26, - "entries_count": 11 - }, - { - "value": "gembird", - "label": "Gembird", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "gemtek", - "label": "Gemtek", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "gen", - "label": "Gen", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "genbolt", - "label": "Genbolt", - "models_count": 104, - "entries_count": 13 - }, - { - "value": "general", - "label": "General", - "models_count": 130, - "entries_count": 34 - }, - { - "value": "generic", - "label": "Generic", - "models_count": 62, - "entries_count": 27 - }, - { - "value": "genie", - "label": "Genie", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "genius", - "label": "Genius", - "models_count": 25, - "entries_count": 13 - }, - { - "value": "geniv", - "label": "Geniv", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "geniv-flux", - "label": "Geniv Flux", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "genrui", - "label": "Genrui", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "genuine", - "label": "Genuine", - "models_count": 7, - "entries_count": 1 - }, - { - "value": "geo", - "label": "Geo", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "geovision", - "label": "Geovision", - "models_count": 422, - "entries_count": 50 - }, - { - "value": "gertec", - "label": "Gertec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gf-pumps", - "label": "Gf-pumps", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gi-star-srl", - "label": "Gi-star Srl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gid20m-pvir", - "label": "Gid20m-pvir", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gifran", - "label": "Gifran", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "giga", - "label": "Giga", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "gigaeye", - "label": "Gigaeye", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "gigamedia", - "label": "Gigamedia", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ginzzu", - "label": "Ginzzu", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "gionee", - "label": "Gionee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gionee-cam", - "label": "Gionee Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gipcam", - "label": "Gipcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "giraffe", - "label": "Giraffe", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "gise", - "label": "Gise", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "giucam", - "label": "Giucam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gkb", - "label": "Gkb", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "glados-cam", - "label": "Glados Cam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "glenz", - "label": "Glenz", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "glink", - "label": "Glink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "global", - "label": "Global", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "global-tech", - "label": "Global Tech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "globeteck", - "label": "Globeteck", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "gltech", - "label": "Gltech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gmini", - "label": "Gmini", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gncc", - "label": "Gncc", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "gnexus", - "label": "Gnexus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gnomecam", - "label": "Gnomecam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "go1984", - "label": "Go1984", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "go2rtc", - "label": "Go2rtc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "go4", - "label": "Go4", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "goahead", - "label": "Goahead", - "models_count": 26, - "entries_count": 11 - }, - { - "value": "gocam", - "label": "Gocam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "goclever", - "label": "Goclever", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "gocomma", - "label": "Gocomma", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "godraj", - "label": "Godraj", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gogogate", - "label": "Gogogate", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "going", - "label": "Going", - "models_count": 10, - "entries_count": 8 - }, - { - "value": "goingtech", - "label": "Goingtech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "golbong", - "label": "Golbong", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "goldchamp", - "label": "Goldchamp", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "golden-gate", - "label": "Golden Gate", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "goldnet", - "label": "Goldnet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "goldstream", - "label": "Goldstream", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "goliath", - "label": "Goliath", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "goodgo", - "label": "Goodgo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "google", - "label": "Google", - "models_count": 14, - "entries_count": 4 - }, - { - "value": "google-pixel", - "label": "Google Pixel", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "goospy", - "label": "Goospy", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gopro", - "label": "Gopro", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "gopro4", - "label": "Gopro4", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "goscam", - "label": "Goscam", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "goswift", - "label": "Goswift", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "gotab", - "label": "Gotab", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gotake", - "label": "Gotake", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "gotme", - "label": "Gotme", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gpi360", - "label": "Gpi360", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gps-standard", - "label": "Gps-standard", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gq1080p", - "label": "Gq1080p", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gqd", - "label": "Gqd", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "grafeio", - "label": "Grafeio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "grain", - "label": "Grain", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "grainmedia", - "label": "Grainmedia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "grand", - "label": "Grand", - "models_count": 18, - "entries_count": 13 - }, - { - "value": "grandstream", - "label": "Grandstream", - "models_count": 281, - "entries_count": 29 - }, - { - "value": "grandtec", - "label": "Grandtec", - "models_count": 40, - "entries_count": 10 - }, - { - "value": "grandtech", - "label": "Grandtech", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "grant", - "label": "Grant", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "granvista", - "label": "Granvista", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "great-wall", - "label": "Great Wall", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "greatek", - "label": "Greatek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "green-feathers", - "label": "Green Feathers", - "models_count": 13, - "entries_count": 8 - }, - { - "value": "green-home", - "label": "Green Home", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "greentech", - "label": "Greentech", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "greentel", - "label": "Greentel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "greenview", - "label": "Greenview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "greenvision", - "label": "Greenvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "grey-cam", - "label": "Grey Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "grid-micro-corp.", - "label": "Grid Micro Corp.", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "grisboa", - "label": "Grisboa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "groudchat", - "label": "Groudchat", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "group", - "label": "Group", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "grundig", - "label": "Grundig", - "models_count": 34, - "entries_count": 9 - }, - { - "value": "grwibeou", - "label": "Grwibeou", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "gsi", - "label": "Gsi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gt-view", - "label": "Gt View", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "gtc", - "label": "Gtc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "gtec", - "label": "Gtec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gts", - "label": "Gts", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "guangzhou", - "label": "Guangzhou", - "models_count": 27, - "entries_count": 8 - }, - { - "value": "guard", - "label": "Guard", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "guardcam", - "label": "Guardcam", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "guardian", - "label": "Guardian", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "guardzilla", - "label": "Guardzilla", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "guoanvision", - "label": "Guoanvision", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "guudgo", - "label": "Guudgo", - "models_count": 36, - "entries_count": 18 - }, - { - "value": "gvi", - "label": "Gvi", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "gw-security", - "label": "Gw Security", - "models_count": 154, - "entries_count": 30 - }, - { - "value": "gwelltimes", - "label": "Gwelltimes", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "gwipc", - "label": "Gwipc", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "gynoii", - "label": "Gynoii", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gyration", - "label": "Gyration", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "gyuk", - "label": "Gyuk", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "gzhou", - "label": "Gzhou", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "h-series", - "label": "H Series", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "h-cam", - "label": "H-cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "h.264", - "label": "H.264", - "models_count": 213, - "entries_count": 36 - }, - { - "value": "h.264-network-dvr", - "label": "H.264 Network Dvr", - "models_count": 78, - "entries_count": 31 - }, - { - "value": "h.264-vga-wireless-cube-camera", - "label": "H.264 Vga Wireless Cube Camera", - "models_count": 9, - "entries_count": 9 - }, - { - "value": "h.265", - "label": "H.265", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "h.view", - "label": "H.view", - "models_count": 38, - "entries_count": 12 - }, - { - "value": "h264-vga-wireless-cube-camera", - "label": "H264 Vga Wireless Cube Camera", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "h2md4a", - "label": "H2md4a", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "h3-137", - "label": "H3 137", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "h3518e", - "label": "H3518e", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "h6837wi", - "label": "H6837wi", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "hacon", - "label": "Hacon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hai", - "label": "Hai", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "haivison", - "label": "Haivison", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "haiz", - "label": "Haiz", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "hama", - "label": "Hama", - "models_count": 17, - "entries_count": 13 - }, - { - "value": "hamlet", - "label": "Hamlet", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "hamrabi", - "label": "Hamrabi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hamrol", - "label": "Hamrol", - "models_count": 9, - "entries_count": 2 - }, - { - "value": "hamrolte", - "label": "Hamrolte", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "hanbang", - "label": "Hanbang", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "handy-ip-cam", - "label": "Handy Ip Cam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "hangzhou", - "label": "Hangzhou", - "models_count": 9, - "entries_count": 1 - }, - { - "value": "hanhwa", - "label": "Hanhwa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hanlin", - "label": "Hanlin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hanwei", - "label": "Hanwei", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hanwha", - "label": "Hanwha", - "models_count": 16, - "entries_count": 11 - }, - { - "value": "harex", - "label": "Harex", - "models_count": 17, - "entries_count": 4 - }, - { - "value": "hatake", - "label": "Hatake", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "haucam", - "label": "Haucam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hauppauge", - "label": "Hauppauge", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "haustuer", - "label": "Haustuer", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hauwei", - "label": "Hauwei", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hawk", - "label": "Hawk", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "hawk-vision", - "label": "Hawk Vision", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "hawkcam", - "label": "Hawkcam", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "hawki", - "label": "Hawki", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hawking", - "label": "Hawking", - "models_count": 33, - "entries_count": 10 - }, - { - "value": "hawq", - "label": "Hawq", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hayear", - "label": "Hayear", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hbell", - "label": "Hbell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hd", - "label": "Hd", - "models_count": 15, - "entries_count": 14 - }, - { - "value": "hd-camera", - "label": "Hd Camera", - "models_count": 22, - "entries_count": 12 - }, - { - "value": "hd-cloudcam", - "label": "Hd Cloudcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hd-ip-camera-depan", - "label": "Hd Ip Camera Depan", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hd-ip-dome-2", - "label": "Hd Ip Dome-2", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "hd-ipc", - "label": "Hd Ipc", - "models_count": 636, - "entries_count": 37 - }, - { - "value": "hd-link", - "label": "Hd Link", - "models_count": 24, - "entries_count": 15 - }, - { - "value": "hd-megapixel", - "label": "Hd Megapixel", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hd-minicam", - "label": "Hd Minicam", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "hd-wireless", - "label": "Hd Wireless", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hd-ip-dome", - "label": "Hd-ip Dome", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hdcam", - "label": "Hdcam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "hdcvi", - "label": "Hdcvi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hddcam", - "label": "Hddcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hdipc", - "label": "Hdipc", - "models_count": 39, - "entries_count": 2 - }, - { - "value": "hdipcam", - "label": "Hdipcam", - "models_count": 31, - "entries_count": 18 - }, - { - "value": "hdl", - "label": "Hdl", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "hdp-1100pt", - "label": "Hdp-1100pt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hdpro", - "label": "Hdpro", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hds", - "label": "Hds", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hdview", - "label": "Hdview", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "he-wifi", - "label": "He-wifi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "heanworld", - "label": "Heanworld", - "models_count": 11, - "entries_count": 2 - }, - { - "value": "hed", - "label": "Hed", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "heden", - "label": "Heden", - "models_count": 81, - "entries_count": 22 - }, - { - "value": "heetoo", - "label": "Heetoo", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "heimlink", - "label": "Heimlink", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "heimvision", - "label": "Heimvision", - "models_count": 75, - "entries_count": 27 - }, - { - "value": "heisee", - "label": "Heisee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "heitel", - "label": "Heitel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "heivision", - "label": "Heivision", - "models_count": 17, - "entries_count": 12 - }, - { - "value": "heiwell", - "label": "Heiwell", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "helios", - "label": "Helios", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "hemkamera", - "label": "Hemkamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "henelec", - "label": "Henelec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hengda", - "label": "Hengda", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hengstar", - "label": "Hengstar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hennda", - "label": "Hennda", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hensel", - "label": "Hensel", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "herkules", - "label": "Herkules", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "herospeed", - "label": "Herospeed", - "models_count": 145, - "entries_count": 12 - }, - { - "value": "hesa", - "label": "Hesa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hesavision", - "label": "Hesavision", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "hessu", - "label": "Hessu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hexa", - "label": "Hexa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "heystop", - "label": "Heystop", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hfws", - "label": "Hfws", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "hhi", - "label": "Hhi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hi-silicon", - "label": "Hi Silicon", - "models_count": 16, - "entries_count": 10 - }, - { - "value": "hi-view", - "label": "Hi View", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "hi-focus", - "label": "Hi-focus", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "hi-fun", - "label": "Hi-fun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hi-jin", - "label": "Hi-jin", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "hi3507", - "label": "Hi3507", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "hi3518", - "label": "Hi3518", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "hi5", - "label": "Hi5", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hicam", - "label": "Hicam", - "models_count": 19, - "entries_count": 5 - }, - { - "value": "hicc-2300t", - "label": "Hicc-2300t", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "hicc-p-3100", - "label": "Hicc-p-3100", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hichip", - "label": "Hichip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hidetech", - "label": "Hidetech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hidrokemel", - "label": "Hidrokemel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hifocus", - "label": "Hifocus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hiina", - "label": "Hiina", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hiinakas", - "label": "Hiinakas", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hijack-hq-nvr", - "label": "Hijack Hq Nvr", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "hikam", - "label": "Hikam", - "models_count": 19, - "entries_count": 3 - }, - { - "value": "hikari", - "label": "Hikari", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hiki", - "label": "Hiki", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "hikity", - "label": "Hikity", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hiklook", - "label": "Hiklook", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "hikvision", - "label": "Hikvision", - "models_count": 3482, - "entries_count": 101 - }, - { - "value": "hikwon", - "label": "Hikwon", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "hills", - "label": "Hills", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "hilook", - "label": "Hilook", - "models_count": 84, - "entries_count": 10 - }, - { - "value": "hiltron", - "label": "Hiltron", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hip", - "label": "Hip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hip2p", - "label": "Hip2p", - "models_count": 20, - "entries_count": 10 - }, - { - "value": "hipcam", - "label": "Hipcam", - "models_count": 38, - "entries_count": 10 - }, - { - "value": "hipro", - "label": "Hipro", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "hisee", - "label": "Hisee", - "models_count": 23, - "entries_count": 7 - }, - { - "value": "hiseeu", - "label": "Hiseeu", - "models_count": 175, - "entries_count": 36 - }, - { - "value": "hisense", - "label": "Hisense", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "hisilicon", - "label": "Hisilicon", - "models_count": 36, - "entries_count": 14 - }, - { - "value": "hisomu", - "label": "Hisomu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "histream", - "label": "Histream", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "hisung", - "label": "Hisung", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "hitek", - "label": "Hitek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hitron", - "label": "Hitron", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "hivdc-2300v", - "label": "Hivdc-2300v", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "hiview", - "label": "Hiview", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "hivision", - "label": "Hivision", - "models_count": 36, - "entries_count": 13 - }, - { - "value": "hiwatch", - "label": "Hiwatch", - "models_count": 163, - "entries_count": 18 - }, - { - "value": "hjshi", - "label": "Hjshi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hjt", - "label": "Hjt", - "models_count": 27, - "entries_count": 8 - }, - { - "value": "hkes", - "label": "Hkes", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hnc", - "label": "Hnc", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "hodely", - "label": "Hodely", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hofsta", - "label": "Hofsta", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hokam", - "label": "Hokam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "holdoor", - "label": "Holdoor", - "models_count": 21, - "entries_count": 9 - }, - { - "value": "holovision", - "label": "Holovision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "holowits", - "label": "Holowits", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "home-life", - "label": "Home Life", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "home-it", - "label": "Home-it", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "homecare", - "label": "Homecare", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "homedia", - "label": "Homedia", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "homeguard", - "label": "Homeguard", - "models_count": 31, - "entries_count": 7 - }, - { - "value": "homeseer", - "label": "Homeseer", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "homeviz", - "label": "Homeviz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "homewizard", - "label": "Homewizard", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "hondgda", - "label": "Hondgda", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "honestech", - "label": "Honestech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "honeywell", - "label": "Honeywell", - "models_count": 172, - "entries_count": 34 - }, - { - "value": "hongda", - "label": "Hongda", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "hongjingtian", - "label": "Hongjingtian", - "models_count": 29, - "entries_count": 5 - }, - { - "value": "honic", - "label": "Honic", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "hootoo", - "label": "Hootoo", - "models_count": 144, - "entries_count": 34 - }, - { - "value": "hopeway", - "label": "Hopeway", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "hopewell-cctv.com", - "label": "Hopewell-cctv.com", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "horstek", - "label": "Horstek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hosafe", - "label": "Hosafe", - "models_count": 169, - "entries_count": 21 - }, - { - "value": "hosftra", - "label": "Hosftra", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hoswell", - "label": "Hoswell", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "hotfun", - "label": "Hotfun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hozelec", - "label": "Hozelec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hp", - "label": "Hp", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "hqcam", - "label": "Hqcam", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "hqvision", - "label": "Hqvision", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "hr04", - "label": "Hr04", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hrv", - "label": "Hrv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hs-ip-camera", - "label": "Hs Ip Camera", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "hs-ipsc", - "label": "Hs Ipsc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hscomila", - "label": "Hscomila", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hsmartlink", - "label": "Hsmartlink", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "hsv", - "label": "Hsv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hta", - "label": "Hta", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "htc", - "label": "Htc", - "models_count": 84, - "entries_count": 7 - }, - { - "value": "htcone", - "label": "Htcone", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "huacam", - "label": "Huacam", - "models_count": 82, - "entries_count": 15 - }, - { - "value": "huashi", - "label": "Huashi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "huawei", - "label": "Huawei", - "models_count": 56, - "entries_count": 16 - }, - { - "value": "hubble", - "label": "Hubble", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "huisun", - "label": "Huisun", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "humcam", - "label": "Humcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hungtek", - "label": "Hungtek", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "hunt", - "label": "Hunt", - "models_count": 67, - "entries_count": 16 - }, - { - "value": "hunter", - "label": "Hunter", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "husier", - "label": "Husier", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hutermann", - "label": "Hutermann", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "huviron", - "label": "Huviron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hv3c", - "label": "Hv3c", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hvcam", - "label": "Hvcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hview", - "label": "Hview", - "models_count": 20, - "entries_count": 7 - }, - { - "value": "hvr", - "label": "Hvr", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "hx-635k", - "label": "Hx-635k", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hxview", - "label": "Hxview", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "hy-outdoor-ip-camera", - "label": "Hy Outdoor Ip Camera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hybsys", - "label": "Hybsys", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hyobalc", - "label": "Hyobalc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "hyundai", - "label": "Hyundai", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "hzconnect", - "label": "Hzconnect", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "i-can-see", - "label": "I Can See", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "i-view", - "label": "I-view", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "i30vd", - "label": "I30vd", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "i591b6f", - "label": "I591b6f", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ibcam", - "label": "Ibcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ic-realtime", - "label": "Ic Realtime", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "ic-realtimes", - "label": "Ic Realtimes", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "icam", - "label": "Icam", - "models_count": 58, - "entries_count": 34 - }, - { - "value": "icamview", - "label": "Icamview", - "models_count": 11, - "entries_count": 10 - }, - { - "value": "icantek", - "label": "Icantek", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "icloudcam", - "label": "Icloudcam", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "iclp", - "label": "Iclp", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "icom", - "label": "Icom", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "icon", - "label": "Icon", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "icrealtime", - "label": "Icrealtime", - "models_count": 16, - "entries_count": 6 - }, - { - "value": "ics", - "label": "Ics", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "identivision", - "label": "Identivision", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "idis", - "label": "Idis", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "idis-global", - "label": "Idis Global", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "idt", - "label": "Idt", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "idview", - "label": "Idview", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "ie-link-0", - "label": "Ie-link-0", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "iegeek", - "label": "Iegeek", - "models_count": 277, - "entries_count": 24 - }, - { - "value": "iernut-2", - "label": "Iernut 2", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iets", - "label": "Iets", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iflux", - "label": "Iflux", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "igson", - "label": "Igson", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "iguard", - "label": "Iguard", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "ijack-liu", - "label": "Ijack Liu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ikegami", - "label": "Ikegami", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "ikonic", - "label": "Ikonic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ildvr", - "label": "Ildvr", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "illumivue", - "label": "Illumivue", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "illustra", - "label": "Illustra", - "models_count": 18, - "entries_count": 6 - }, - { - "value": "imagiatek", - "label": "Imagiatek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "imaginon", - "label": "Imaginon", - "models_count": 38, - "entries_count": 20 - }, - { - "value": "imago", - "label": "Imago", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ime3122-admnq39", - "label": "Ime3122-admnq39", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "img", - "label": "Img", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "imieye", - "label": "Imieye", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "imogen", - "label": "Imogen", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "imou", - "label": "Imou", - "models_count": 178, - "entries_count": 29 - }, - { - "value": "impax", - "label": "Impax", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "imporx", - "label": "Imporx", - "models_count": 23, - "entries_count": 7 - }, - { - "value": "impulse", - "label": "Impulse", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ims200", - "label": "Ims200", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "imx290", - "label": "Imx290", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inaxsys", - "label": "Inaxsys", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "inc", - "label": "Inc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "indexa", - "label": "Indexa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "indigo", - "label": "Indigo", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "indkoersel", - "label": "Indkoersel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inesun", - "label": "Inesun", - "models_count": 42, - "entries_count": 8 - }, - { - "value": "infinity", - "label": "Infinity", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "infinova", - "label": "Infinova", - "models_count": 14, - "entries_count": 5 - }, - { - "value": "infocus", - "label": "Infocus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ing", - "label": "Ing", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ingeek", - "label": "Ingeek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ingenic-v01", - "label": "Ingenic-v01", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ingresso", - "label": "Ingresso", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "ingressosede", - "label": "Ingressosede", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inisoft-cam", - "label": "Inisoft-cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inkovideo", - "label": "Inkovideo", - "models_count": 29, - "entries_count": 15 - }, - { - "value": "innekt", - "label": "Innekt", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "inngang", - "label": "Inngang", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "innmat", - "label": "Innmat", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inno-vision", - "label": "Inno Vision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "innotrends", - "label": "Innotrends", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "innovatek", - "label": "Innovatek", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "innovative-security-designs", - "label": "Innovative Security Designs", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "innovo", - "label": "Innovo", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "inosun", - "label": "Inosun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inpotek", - "label": "Inpotek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "inqmega", - "label": "Inqmega", - "models_count": 25, - "entries_count": 3 - }, - { - "value": "inscape", - "label": "Inscape", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "inside", - "label": "Inside", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "insma", - "label": "Insma", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "instar", - "label": "Instar", - "models_count": 168, - "entries_count": 39 - }, - { - "value": "instek-digital", - "label": "Instek Digital", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "insun", - "label": "Insun", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "insys", - "label": "Insys", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "intamac", - "label": "Intamac", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "intelbras", - "label": "Intelbras", - "models_count": 145, - "entries_count": 37 - }, - { - "value": "intelkam", - "label": "Intelkam", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "intelli", - "label": "Intelli", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "intelligent-network", - "label": "Intelligent Network", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "intellinet", - "label": "Intellinet", - "models_count": 131, - "entries_count": 24 - }, - { - "value": "intellio", - "label": "Intellio", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "intellsec", - "label": "Intellsec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "interlogix", - "label": "Interlogix", - "models_count": 27, - "entries_count": 7 - }, - { - "value": "interna", - "label": "Interna", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "internal", - "label": "Internal", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "internet-eye", - "label": "Internet Eye", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "interno", - "label": "Interno", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "intervision", - "label": "Intervision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "intex", - "label": "Intex", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "invid", - "label": "Invid", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "invidtech", - "label": "Invidtech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "inwerang", - "label": "Inwerang", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "io-data", - "label": "Io Data", - "models_count": 20, - "entries_count": 7 - }, - { - "value": "ip-buiten", - "label": "Ip Buiten", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip-camera-(android)", - "label": "Ip Camera (android)", - "models_count": 14, - "entries_count": 8 - }, - { - "value": "ip-chitchat", - "label": "Ip Chitchat", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip-phone-camera", - "label": "Ip Phone Camera", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ip-power", - "label": "Ip Power", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "ip-pro-tech", - "label": "Ip Pro Tech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ip-video", - "label": "Ip Video", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ip-webcam", - "label": "Ip Webcam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ip-webcam-(android)", - "label": "Ip Webcam (android)", - "models_count": 23, - "entries_count": 10 - }, - { - "value": "ip-webcam-android", - "label": "Ip Webcam Android", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "ip-webcam-app", - "label": "Ip Webcam App", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "ip-webcam-pro", - "label": "Ip Webcam Pro", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "ip-300ptw", - "label": "Ip-300ptw", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip-402b", - "label": "Ip-402b", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ip-camera", - "label": "Ip-camera", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "ip-m-p836v", - "label": "Ip-m-p836v", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip-speeddome", - "label": "Ip-speeddome", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "ip-t5201-f", - "label": "Ip-t5201-f", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip112", - "label": "Ip112", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ip302", - "label": "Ip302", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip3393pv2", - "label": "Ip3393pv2", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "ip400", - "label": "Ip400", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip4112poe", - "label": "Ip4112poe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip66", - "label": "Ip66", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ip6795p", - "label": "Ip6795p", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ip_cam_inspector", - "label": "Ip_cam_inspector", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipbell", - "label": "Ipbell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipc", - "label": "Ipc", - "models_count": 465, - "entries_count": 81 - }, - { - "value": "ipc-bo", - "label": "Ipc-bo", - "models_count": 41, - "entries_count": 10 - }, - { - "value": "ipc-f10p", - "label": "Ipc-f10p", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipc-model", - "label": "Ipc-model", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "ipc-other", - "label": "Ipc-other", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ipc360", - "label": "Ipc360", - "models_count": 10, - "entries_count": 4 - }, - { - "value": "ipc365", - "label": "Ipc365", - "models_count": 18, - "entries_count": 7 - }, - { - "value": "ipcam", - "label": "Ipcam", - "models_count": 105, - "entries_count": 26 - }, - { - "value": "ipcam-2015", - "label": "Ipcam 2015", - "models_count": 20, - "entries_count": 8 - }, - { - "value": "ipcameros", - "label": "Ipcameros", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "ipcami", - "label": "Ipcami", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ipcc", - "label": "Ipcc", - "models_count": 85, - "entries_count": 20 - }, - { - "value": "ipce", - "label": "Ipce", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipcmontor", - "label": "Ipcmontor", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "ipd", - "label": "Ipd", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ipdom-hz0102", - "label": "Ipdom-hz0102", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipega", - "label": "Ipega", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "ipeye", - "label": "Ipeye", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "ipfd200", - "label": "Ipfd200", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipfd201", - "label": "Ipfd201", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipg", - "label": "Ipg", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ipgah9oc2am7", - "label": "Ipgah9oc2am7", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iphdcam", - "label": "Iphdcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipixo", - "label": "Ipixo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipm-1z-20x-dn", - "label": "Ipm-1z-20x-dn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipnawin7", - "label": "Ipnawin7", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipnc", - "label": "Ipnc", - "models_count": 54, - "entries_count": 13 - }, - { - "value": "ipnetcam", - "label": "Ipnetcam", - "models_count": 24, - "entries_count": 13 - }, - { - "value": "ipnz", - "label": "Ipnz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipq1652x", - "label": "Ipq1652x", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipq1658x", - "label": "Ipq1658x", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipr31esx", - "label": "Ipr31esx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipr712m", - "label": "Ipr712m", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipr7424%2f8e", - "label": "Ipr7424/8e", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ipro", - "label": "Ipro", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "iprobot3", - "label": "Iprobot3", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "ips", - "label": "Ips", - "models_count": 54, - "entries_count": 8 - }, - { - "value": "ips-21w", - "label": "Ips-21w", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ipscam", - "label": "Ipscam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ipteles", - "label": "Ipteles", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iptime", - "label": "Iptime", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iptronic", - "label": "Iptronic", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "iptz-h20xx", - "label": "Iptz-h20xx", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ipux", - "label": "Ipux", - "models_count": 39, - "entries_count": 6 - }, - { - "value": "ipvd300", - "label": "Ipvd300", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ipvideo", - "label": "Ipvideo", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ipwebcam-app", - "label": "Ipwebcam App", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ipx", - "label": "Ipx", - "models_count": 20, - "entries_count": 19 - }, - { - "value": "iq-eye", - "label": "Iq Eye", - "models_count": 130, - "entries_count": 27 - }, - { - "value": "iqinvision", - "label": "Iqinvision", - "models_count": 12, - "entries_count": 6 - }, - { - "value": "iqr", - "label": "Iqr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ir-color-ip-camera", - "label": "Ir Color Ip Camera", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "irea", - "label": "Irea", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iris", - "label": "Iris", - "models_count": 43, - "entries_count": 9 - }, - { - "value": "irlab", - "label": "Irlab", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "isabeau", - "label": "Isabeau", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "isbsupport", - "label": "Isbsupport", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "isd-jaguar", - "label": "Isd Jaguar", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "iseeu", - "label": "Iseeu", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "isit", - "label": "Isit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "isotect", - "label": "Isotect", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "isp", - "label": "Isp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ispy", - "label": "Ispy", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "itajto", - "label": "Itajto", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "italsistem", - "label": "Italsistem", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "its", - "label": "Its", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "itx", - "label": "Itx", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "itx-security", - "label": "Itx-security", - "models_count": 12, - "entries_count": 4 - }, - { - "value": "iv9000", - "label": "Iv9000", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ivc", - "label": "Ivc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ivcc", - "label": "Ivcc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ivideon", - "label": "Ivideon", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ivio", - "label": "Ivio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iwh-31ir", - "label": "Iwh-31ir", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "iwigus", - "label": "Iwigus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iz-touch", - "label": "Iz Touch", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "izotech", - "label": "Izotech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "iztouch", - "label": "Iztouch", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "izviz", - "label": "Izviz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "j5create", - "label": "J5create", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ja7204s", - "label": "Ja7204s", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ja7208s", - "label": "Ja7208s", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "ja7216nc", - "label": "Ja7216nc", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "jalan", - "label": "Jalan", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "janex", - "label": "Janex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "janusz", - "label": "Janusz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "japan", - "label": "Japan", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "japon-dynamic", - "label": "Japon Dynamic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jasboom", - "label": "Jasboom", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "jatech", - "label": "Jatech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "javea", - "label": "Javea", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jaycar", - "label": "Jaycar", - "models_count": 97, - "entries_count": 31 - }, - { - "value": "jaytech", - "label": "Jaytech", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "jbp", - "label": "Jbp", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "jcr", - "label": "Jcr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jdl", - "label": "Jdl", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "jecurity", - "label": "Jecurity", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "jedicam", - "label": "Jedicam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jeinuo", - "label": "Jeinuo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jen-fu", - "label": "Jen-fu", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "jenimex", - "label": "Jenimex", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "jennov", - "label": "Jennov", - "models_count": 98, - "entries_count": 23 - }, - { - "value": "jensen", - "label": "Jensen", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "jetview", - "label": "Jetview", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "jetvision", - "label": "Jetvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jhempcam", - "label": "Jhempcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "jialite", - "label": "Jialite", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jidetech", - "label": "Jidetech", - "models_count": 146, - "entries_count": 24 - }, - { - "value": "jienuo", - "label": "Jienuo", - "models_count": 58, - "entries_count": 8 - }, - { - "value": "jinan", - "label": "Jinan", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "jitech", - "label": "Jitech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jiuan", - "label": "Jiuan", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "jlb", - "label": "Jlb", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jmk", - "label": "Jmk", - "models_count": 16, - "entries_count": 5 - }, - { - "value": "joko", - "label": "Joko", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "jooan", - "label": "Jooan", - "models_count": 152, - "entries_count": 24 - }, - { - "value": "jortan", - "label": "Jortan", - "models_count": 36, - "entries_count": 12 - }, - { - "value": "jovision", - "label": "Jovision", - "models_count": 55, - "entries_count": 21 - }, - { - "value": "joy", - "label": "Joy", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "joymin", - "label": "Joymin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jp5", - "label": "Jp5", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "jpjv", - "label": "Jpjv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jrc-tokki", - "label": "Jrc Tokki", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "jrecam", - "label": "Jrecam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "jsur", - "label": "Jsur", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jsw", - "label": "Jsw", - "models_count": 10, - "entries_count": 10 - }, - { - "value": "jtech", - "label": "Jtech", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "juan", - "label": "Juan", - "models_count": 34, - "entries_count": 13 - }, - { - "value": "jubson", - "label": "Jubson", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "judge", - "label": "Judge", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "juning", - "label": "Juning", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jupiter", - "label": "Jupiter", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "just-compare", - "label": "Just Compare", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jvc", - "label": "Jvc", - "models_count": 89, - "entries_count": 31 - }, - { - "value": "jvr", - "label": "Jvr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jvs", - "label": "Jvs", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "jvt", - "label": "Jvt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jwcam", - "label": "Jwcam", - "models_count": 16, - "entries_count": 11 - }, - { - "value": "jwt", - "label": "Jwt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jxl", - "label": "Jxl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "jyacam", - "label": "Jyacam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "jyuha", - "label": "Jyuha", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "k-vision", - "label": "K-vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "k11", - "label": "K11", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kaansky", - "label": "Kaansky", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kado", - "label": "Kado", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kadymay", - "label": "Kadymay", - "models_count": 31, - "entries_count": 16 - }, - { - "value": "kafeoinos-tv", - "label": "Kafeoinos Tv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kaikong", - "label": "Kaikong", - "models_count": 144, - "entries_count": 40 - }, - { - "value": "kaluga", - "label": "Kaluga", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kamera2000", - "label": "Kamera2000", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "kamo", - "label": "Kamo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kamote", - "label": "Kamote", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kamtron", - "label": "Kamtron", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "kanan", - "label": "Kanan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kanda", - "label": "Kanda", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kang-xun", - "label": "Kang Xun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kantoor", - "label": "Kantoor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kapi", - "label": "Kapi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kapkam", - "label": "Kapkam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "karbontech", - "label": "Karbontech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kare", - "label": "Kare", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "karel", - "label": "Karel", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "karkam", - "label": "Karkam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kasa", - "label": "Kasa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kasaba", - "label": "Kasaba", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kassaba", - "label": "Kassaba", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "katamso", - "label": "Katamso", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "katway", - "label": "Katway", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "kavass", - "label": "Kavass", - "models_count": 22, - "entries_count": 12 - }, - { - "value": "kayodo", - "label": "Kayodo", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "kbc", - "label": "Kbc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kboom", - "label": "Kboom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kbvision", - "label": "Kbvision", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "kd", - "label": "Kd", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kdm", - "label": "Kdm", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kdt", - "label": "Kdt", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kedakom", - "label": "Kedakom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "keebox", - "label": "Keebox", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "keekoon", - "label": "Keekoon", - "models_count": 37, - "entries_count": 8 - }, - { - "value": "keeper", - "label": "Keeper", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "keeyo", - "label": "Keeyo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "keian", - "label": "Keian", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kenik", - "label": "Kenik", - "models_count": 13, - "entries_count": 3 - }, - { - "value": "kenpro", - "label": "Kenpro", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "kenton", - "label": "Kenton", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "kenvs", - "label": "Kenvs", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "kerui", - "label": "Kerui", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "keshini", - "label": "Keshini", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "keuken", - "label": "Keuken", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "keview", - "label": "Keview", - "models_count": 26, - "entries_count": 6 - }, - { - "value": "keye", - "label": "Keye", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "keypad", - "label": "Keypad", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "keyseen", - "label": "Keyseen", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "keytech-dvr", - "label": "Keytech Dvr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kfly", - "label": "Kfly", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kguard", - "label": "Kguard", - "models_count": 20, - "entries_count": 11 - }, - { - "value": "kiacong", - "label": "Kiacong", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "kiina", - "label": "Kiina", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kiirie", - "label": "Kiirie", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "kimpok", - "label": "Kimpok", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kina-kamera", - "label": "Kina Kamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kindermeubel", - "label": "Kindermeubel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kindle", - "label": "Kindle", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "king-special", - "label": "King Special", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kingcam", - "label": "Kingcam", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "kingcctv", - "label": "Kingcctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kingkong", - "label": "Kingkong", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "kingmak", - "label": "Kingmak", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kingnow", - "label": "Kingnow", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kingstar", - "label": "Kingstar", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "kinson", - "label": "Kinson", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "kiocong", - "label": "Kiocong", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "kip", - "label": "Kip", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "kishgo", - "label": "Kishgo", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "kitcam", - "label": "Kitcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kittyhok", - "label": "Kittyhok", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "kkmoon", - "label": "Kkmoon", - "models_count": 269, - "entries_count": 31 - }, - { - "value": "klikaanklikuit", - "label": "Klikaanklikuit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "klok", - "label": "Klok", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kmart", - "label": "Kmart", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kmoon", - "label": "Kmoon", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "kmw", - "label": "Kmw", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "knc", - "label": "Knc", - "models_count": 13, - "entries_count": 7 - }, - { - "value": "knewmart", - "label": "Knewmart", - "models_count": 36, - "entries_count": 6 - }, - { - "value": "knowyournanny.com", - "label": "Knowyournanny.com", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kobert", - "label": "Kobert", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kobi", - "label": "Kobi", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "kocom", - "label": "Kocom", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "kodak", - "label": "Kodak", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "kodu", - "label": "Kodu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "koepel", - "label": "Koepel", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "kogacam", - "label": "Kogacam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kogan", - "label": "Kogan", - "models_count": 69, - "entries_count": 28 - }, - { - "value": "kohlen", - "label": "Kohlen", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "koicong", - "label": "Koicong", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "komatsu", - "label": "Komatsu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kompernass", - "label": "Kompernass", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "komplexfix", - "label": "Komplexfix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "konan", - "label": "Konan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "konarrk", - "label": "Konarrk", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "konig", - "label": "Konig", - "models_count": 22, - "entries_count": 9 - }, - { - "value": "konik", - "label": "Konik", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "konix", - "label": "Konix", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "konlen", - "label": "Konlen", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "konnek-stein", - "label": "Konnek Stein", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "koogeek", - "label": "Koogeek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "koolertron", - "label": "Koolertron", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "koomooni", - "label": "Koomooni", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "korang", - "label": "Korang", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "koti", - "label": "Koti", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kowa", - "label": "Kowa", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "kpi", - "label": "Kpi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "kpp", - "label": "Kpp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kraun", - "label": "Kraun", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "krissview", - "label": "Krissview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "krypton", - "label": "Krypton", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ksvp", - "label": "Ksvp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "kt-and-c", - "label": "Kt And C", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "kucam", - "label": "Kucam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "kyocera", - "label": "Kyocera", - "models_count": 7, - "entries_count": 1 - }, - { - "value": "l-series", - "label": "L Series", - "models_count": 20, - "entries_count": 12 - }, - { - "value": "lager", - "label": "Lager", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "lambda", - "label": "Lambda", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "lampa", - "label": "Lampa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "laser", - "label": "Laser", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "lau-3", - "label": "Lau 3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "launch", - "label": "Launch", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "laview", - "label": "Laview", - "models_count": 125, - "entries_count": 28 - }, - { - "value": "lc-security", - "label": "Lc Security", - "models_count": 14, - "entries_count": 12 - }, - { - "value": "lc-systems", - "label": "Lc Systems", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "leadcam", - "label": "Leadcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "leadership", - "label": "Leadership", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "leadtek", - "label": "Leadtek", - "models_count": 31, - "entries_count": 12 - }, - { - "value": "lecoe", - "label": "Lecoe", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ledvance", - "label": "Ledvance", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "leftek", - "label": "Leftek", - "models_count": 22, - "entries_count": 8 - }, - { - "value": "legeek", - "label": "Legeek", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "legra", - "label": "Legra", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "legrand", - "label": "Legrand", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "legrange", - "label": "Legrange", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lenel", - "label": "Lenel", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "lenovo", - "label": "Lenovo", - "models_count": 31, - "entries_count": 10 - }, - { - "value": "lensoul", - "label": "Lensoul", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "leocam", - "label": "Leocam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "leopard-imaging", - "label": "Leopard Imaging", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "leopard-imaging-inc", - "label": "Leopard Imaging Inc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lerch", - "label": "Lerch", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "leshp", - "label": "Leshp", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "levelone", - "label": "Levelone", - "models_count": 311, - "entries_count": 57 - }, - { - "value": "levscam", - "label": "Levscam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lexy", - "label": "Lexy", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lg", - "label": "Lg", - "models_count": 47, - "entries_count": 18 - }, - { - "value": "lg-phone", - "label": "Lg Phone", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "libor", - "label": "Libor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lidl", - "label": "Lidl", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "lifecontrol", - "label": "Lifecontrol", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lifeshield", - "label": "Lifeshield", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "lifetech", - "label": "Lifetech", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "lifeview", - "label": "Lifeview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "light-in-the-box", - "label": "Light-in-the-box", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lightcam", - "label": "Lightcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lightdow", - "label": "Lightdow", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lightinthebox", - "label": "Lightinthebox", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lihai", - "label": "Lihai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "likean", - "label": "Likean", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "lilly", - "label": "Lilly", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "limix", - "label": "Limix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lindata", - "label": "Lindata", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lindy", - "label": "Lindy", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "linemak", - "label": "Linemak", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "linia", - "label": "Linia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "link", - "label": "Link", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "linkcom", - "label": "Linkcom", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "linkit", - "label": "Linkit", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "linkit-security", - "label": "Linkit Security", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "linkpro", - "label": "Linkpro", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "linksys", - "label": "Linksys", - "models_count": 158, - "entries_count": 32 - }, - { - "value": "linovision", - "label": "Linovision", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "linq", - "label": "Linq", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "linudix", - "label": "Linudix", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "linux", - "label": "Linux", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "lionvis", - "label": "Lionvis", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "lipetsk", - "label": "Lipetsk", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "liquid", - "label": "Liquid", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "litetec", - "label": "Litetec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "litmor", - "label": "Litmor", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "littleadd", - "label": "Littleadd", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "live-reporter", - "label": "Live-reporter", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "livecam", - "label": "Livecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "living", - "label": "Living", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "lizvie", - "label": "Lizvie", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "lloyds", - "label": "Lloyds", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "lmou", - "label": "Lmou", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lof-v", - "label": "Lof-v", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "loftek", - "label": "Loftek", - "models_count": 123, - "entries_count": 33 - }, - { - "value": "logan", - "label": "Logan", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "logenex", - "label": "Logenex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "logidebian", - "label": "Logidebian", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "logilink", - "label": "Logilink", - "models_count": 53, - "entries_count": 22 - }, - { - "value": "logisaf", - "label": "Logisaf", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "logitech", - "label": "Logitech", - "models_count": 141, - "entries_count": 41 - }, - { - "value": "lokanta", - "label": "Lokanta", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lonestar", - "label": "Lonestar", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "long-plus", - "label": "Long Plus", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "longdream", - "label": "Longdream", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "longsafe", - "label": "Longsafe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "longse", - "label": "Longse", - "models_count": 67, - "entries_count": 14 - }, - { - "value": "longshine", - "label": "Longshine", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "longteam", - "label": "Longteam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "lonrock", - "label": "Lonrock", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lonse", - "label": "Lonse", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "look", - "label": "Look", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "loosafe", - "label": "Loosafe", - "models_count": 88, - "entries_count": 17 - }, - { - "value": "lorensen-01", - "label": "Lorensen-01", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lorex", - "label": "Lorex", - "models_count": 489, - "entries_count": 77 - }, - { - "value": "loryta", - "label": "Loryta", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "lotus", - "label": "Lotus", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "louance", - "label": "Louance", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "louwice", - "label": "Louwice", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "loveday-smart-home", - "label": "Loveday Smart Home", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "lowcam", - "label": "Lowcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lowes", - "label": "Lowes", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "lowes-iris", - "label": "Lowes Iris", - "models_count": 36, - "entries_count": 7 - }, - { - "value": "lox", - "label": "Lox", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "loxone", - "label": "Loxone", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "lpr-hdcam", - "label": "Lpr-hdcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lsc", - "label": "Lsc", - "models_count": 10, - "entries_count": 9 - }, - { - "value": "lseries", - "label": "Lseries", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lsvision", - "label": "Lsvision", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "ltc", - "label": "Ltc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ltek", - "label": "Ltek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ltp", - "label": "Ltp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lts", - "label": "Lts", - "models_count": 127, - "entries_count": 38 - }, - { - "value": "ltv", - "label": "Ltv", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "lu", - "label": "Lu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "luatek", - "label": "Luatek", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "lucem", - "label": "Lucem", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "lucidphone", - "label": "Lucidphone", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lucky-star", - "label": "Lucky Star", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "lukavi", - "label": "Lukavi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "lum-700-bul-iph-gr", - "label": "Lum-700-bul-iph-gr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "luma", - "label": "Luma", - "models_count": 20, - "entries_count": 4 - }, - { - "value": "lumenera", - "label": "Lumenera", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "lumens", - "label": "Lumens", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "lumia", - "label": "Lumia", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "lumiere", - "label": "Lumiere", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "luna", - "label": "Luna", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "luowice", - "label": "Luowice", - "models_count": 45, - "entries_count": 8 - }, - { - "value": "lupes-electronics", - "label": "Lupes Electronics", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lupus", - "label": "Lupus", - "models_count": 40, - "entries_count": 21 - }, - { - "value": "luxon", - "label": "Luxon", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "luxonvideo", - "label": "Luxonvideo", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "luxor", - "label": "Luxor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "luxvision", - "label": "Luxvision", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "lw", - "label": "Lw", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "lyd", - "label": "Lyd", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "lylu", - "label": "Lylu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "lynstan", - "label": "Lynstan", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "mabio", - "label": "Mabio", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mace", - "label": "Mace", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mach", - "label": "Mach", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "macrovision", - "label": "Macrovision", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "magic-eye", - "label": "Magic Eye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "magic-vision-box-series", - "label": "Magic Vision Box Series", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "maginon", - "label": "Maginon", - "models_count": 377, - "entries_count": 48 - }, - { - "value": "magnus", - "label": "Magnus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "maizic", - "label": "Maizic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "makecell", - "label": "Makecell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "manhattan", - "label": "Manhattan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "manse", - "label": "Manse", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mant", - "label": "Mant", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "march-networks", - "label": "March Networks", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "marlboze", - "label": "Marlboze", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "marmitek", - "label": "Marmitek", - "models_count": 54, - "entries_count": 18 - }, - { - "value": "marquis", - "label": "Marquis", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "marshall", - "label": "Marshall", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "masione", - "label": "Masione", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "master", - "label": "Master", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "matchpoint", - "label": "Matchpoint", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "matecam", - "label": "Matecam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "matrix", - "label": "Matrix", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "mattex", - "label": "Mattex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mavell", - "label": "Mavell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "maximus", - "label": "Maximus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "maxpixel", - "label": "Maxpixel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "maxron", - "label": "Maxron", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "maxvideo", - "label": "Maxvideo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "maxvision", - "label": "Maxvision", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "maxwest", - "label": "Maxwest", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "maxxone", - "label": "Maxxone", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "maygion", - "label": "Maygion", - "models_count": 68, - "entries_count": 22 - }, - { - "value": "mazi", - "label": "Mazi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mbx", - "label": "Mbx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mc-electronics", - "label": "Mc Electronics", - "models_count": 12, - "entries_count": 10 - }, - { - "value": "mc-cam", - "label": "Mc-cam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mci", - "label": "Mci", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mcl", - "label": "Mcl", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "mdi", - "label": "Mdi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "meco", - "label": "Meco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "medialink", - "label": "Medialink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mediatech", - "label": "Mediatech", - "models_count": 26, - "entries_count": 7 - }, - { - "value": "medion", - "label": "Medion", - "models_count": 34, - "entries_count": 11 - }, - { - "value": "medisana", - "label": "Medisana", - "models_count": 13, - "entries_count": 9 - }, - { - "value": "mega-pixel", - "label": "Mega-pixel", - "models_count": 113, - "entries_count": 39 - }, - { - "value": "megacam", - "label": "Megacam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "megapix", - "label": "Megapix", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "megavideo", - "label": "Megavideo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "meiego", - "label": "Meiego", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "meisort", - "label": "Meisort", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "melchioni", - "label": "Melchioni", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "memtex", - "label": "Memtex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "menetec", - "label": "Menetec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "meraki", - "label": "Meraki", - "models_count": 9, - "entries_count": 3 - }, - { - "value": "mercury", - "label": "Mercury", - "models_count": 11, - "entries_count": 10 - }, - { - "value": "merit-lilin", - "label": "Merit Lilin", - "models_count": 166, - "entries_count": 37 - }, - { - "value": "meriva", - "label": "Meriva", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "merk", - "label": "Merk", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "merkury", - "label": "Merkury", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "merlan", - "label": "Merlan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "merlin", - "label": "Merlin", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "meshare", - "label": "Meshare", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "messoa", - "label": "Messoa", - "models_count": 61, - "entries_count": 21 - }, - { - "value": "metrocom", - "label": "Metrocom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "metzler", - "label": "Metzler", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "meye", - "label": "Meye", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "meyetech", - "label": "Meyetech", - "models_count": 23, - "entries_count": 12 - }, - { - "value": "mi-casa-verde", - "label": "Mi Casa Verde", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "mia", - "label": "Mia", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mibao", - "label": "Mibao", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "micro-digital", - "label": "Micro Digital", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "micro-view", - "label": "Micro View", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "microdigital", - "label": "Microdigital", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "microlino", - "label": "Microlino", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "micromax", - "label": "Micromax", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "micronet", - "label": "Micronet", - "models_count": 41, - "entries_count": 20 - }, - { - "value": "microseven", - "label": "Microseven", - "models_count": 76, - "entries_count": 13 - }, - { - "value": "microsoft", - "label": "Microsoft", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "microview", - "label": "Microview", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "midas-link", - "label": "Midas-link", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "midaslink", - "label": "Midaslink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "midconer", - "label": "Midconer", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mieke-ipcamera", - "label": "Mieke Ipcamera", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "milesight", - "label": "Milesight", - "models_count": 97, - "entries_count": 15 - }, - { - "value": "milestone", - "label": "Milestone", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "millennial", - "label": "Millennial", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mingyoushi", - "label": "Mingyoushi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mini", - "label": "Mini", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mini-hd-ir-speed-dome", - "label": "Mini Hd Ir Speed Dome", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "minicam", - "label": "Minicam", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "minking", - "label": "Minking", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "minnray", - "label": "Minnray", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "minolta", - "label": "Minolta", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "miosmart", - "label": "Miosmart", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "mipc", - "label": "Mipc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mipcam", - "label": "Mipcam", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "mips", - "label": "Mips", - "models_count": 9, - "entries_count": 9 - }, - { - "value": "misecu", - "label": "Misecu", - "models_count": 27, - "entries_count": 5 - }, - { - "value": "mitec", - "label": "Mitec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mitra-utama", - "label": "Mitra Utama", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mivision", - "label": "Mivision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mjpeg", - "label": "Mjpeg", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mjpg-streamer", - "label": "Mjpg-streamer", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "mnet-dvr", - "label": "Mnet Dvr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mobiwire", - "label": "Mobiwire", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mobotix", - "label": "Mobotix", - "models_count": 294, - "entries_count": 54 - }, - { - "value": "mocam", - "label": "Mocam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mocon", - "label": "Mocon", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "moja-ip", - "label": "Moja Ip", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "moko", - "label": "Moko", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "momentum", - "label": "Momentum", - "models_count": 105, - "entries_count": 22 - }, - { - "value": "monacor", - "label": "Monacor", - "models_count": 10, - "entries_count": 9 - }, - { - "value": "monita-cctv", - "label": "Monita Cctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "monomat", - "label": "Monomat", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "monoprice", - "label": "Monoprice", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "monsterip", - "label": "Monsterip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "morphxstar", - "label": "Morphxstar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mosafe", - "label": "Mosafe", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "motion", - "label": "Motion", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "motioneye", - "label": "Motioneye", - "models_count": 19, - "entries_count": 5 - }, - { - "value": "moto", - "label": "Moto", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "motorola", - "label": "Motorola", - "models_count": 324, - "entries_count": 46 - }, - { - "value": "motos", - "label": "Motos", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "motru", - "label": "Motru", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mov-cam", - "label": "Mov Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "movo", - "label": "Movo", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "movols", - "label": "Movols", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "moxa", - "label": "Moxa", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "mpcam", - "label": "Mpcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mrsafe", - "label": "Mrsafe", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "ms-3000", - "label": "Ms 3000", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mscamera", - "label": "Mscamera", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "mstar", - "label": "Mstar", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "msv", - "label": "Msv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mtstar", - "label": "Mtstar", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "mubview", - "label": "Mubview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "multilaser", - "label": "Multilaser", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mustcam", - "label": "Mustcam", - "models_count": 15, - "entries_count": 5 - }, - { - "value": "mv-power", - "label": "Mv Power", - "models_count": 23, - "entries_count": 9 - }, - { - "value": "mvs", - "label": "Mvs", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "mvteam", - "label": "Mvteam", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "mwr", - "label": "Mwr", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "my-connex", - "label": "My Connex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "myeye", - "label": "Myeye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "myindoorcam", - "label": "Myindoorcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mymology", - "label": "Mymology", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mysmartvideo", - "label": "Mysmartvideo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "mytech", - "label": "Mytech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nadatel", - "label": "Nadatel", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "namai", - "label": "Namai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nanocam", - "label": "Nanocam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "nanshiba", - "label": "Nanshiba", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "napco-security", - "label": "Napco Security", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "nari", - "label": "Nari", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "nas", - "label": "Nas", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nassicam", - "label": "Nassicam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "naum-pro", - "label": "Naum Pro", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nbvision", - "label": "Nbvision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ncp", - "label": "Ncp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ncx", - "label": "Ncx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nedis", - "label": "Nedis", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "neewer", - "label": "Neewer", - "models_count": 27, - "entries_count": 16 - }, - { - "value": "neo-coolcam", - "label": "Neo Coolcam", - "models_count": 197, - "entries_count": 42 - }, - { - "value": "neos", - "label": "Neos", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "neostar", - "label": "Neostar", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "neposmart", - "label": "Neposmart", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ness", - "label": "Ness", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "nesuniq", - "label": "Nesuniq", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "net-generation", - "label": "Net Generation", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "netcam", - "label": "Netcam", - "models_count": 183, - "entries_count": 22 - }, - { - "value": "netcat", - "label": "Netcat", - "models_count": 27, - "entries_count": 5 - }, - { - "value": "netcomm", - "label": "Netcomm", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "netis", - "label": "Netis", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "netiscom", - "label": "Netiscom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "netmedia", - "label": "Netmedia", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "netsurveillance-dvr-h.264-network-video-recorder", - "label": "Netsurveillance Dvr H.264 Network Video Recorder", - "models_count": 21, - "entries_count": 13 - }, - { - "value": "nettoly", - "label": "Nettoly", - "models_count": 9, - "entries_count": 2 - }, - { - "value": "netvideo", - "label": "Netvideo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "netview", - "label": "Netview", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "netvision", - "label": "Netvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "netvue", - "label": "Netvue", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "netware", - "label": "Netware", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "netwave", - "label": "Netwave", - "models_count": 18, - "entries_count": 9 - }, - { - "value": "network-digital-video", - "label": "Network Digital Video", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "network-video-recorder", - "label": "Network Video Recorder", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "neufusion", - "label": "Neufusion", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "neugent", - "label": "Neugent", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "neutron", - "label": "Neutron", - "models_count": 23, - "entries_count": 14 - }, - { - "value": "nevalley", - "label": "Nevalley", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nevenoe", - "label": "Nevenoe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "neview", - "label": "Neview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "newvision", - "label": "Newvision", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "nexcom", - "label": "Nexcom", - "models_count": 14, - "entries_count": 9 - }, - { - "value": "nexgadget", - "label": "Nexgadget", - "models_count": 14, - "entries_count": 4 - }, - { - "value": "nexht", - "label": "Nexht", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "nexsmart", - "label": "Nexsmart", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "nextech", - "label": "Nextech", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "nexus", - "label": "Nexus", - "models_count": 13, - "entries_count": 5 - }, - { - "value": "nexus-cctv", - "label": "Nexus Cctv", - "models_count": 36, - "entries_count": 15 - }, - { - "value": "nexxt-solution", - "label": "Nexxt Solution", - "models_count": 30, - "entries_count": 19 - }, - { - "value": "neye", - "label": "Neye", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "neye3c", - "label": "Neye3c", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ngm", - "label": "Ngm", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ngteco", - "label": "Ngteco", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "niante", - "label": "Niante", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "niceborn", - "label": "Niceborn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nicecam", - "label": "Nicecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "niceview", - "label": "Niceview", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "night-owl", - "label": "Night Owl", - "models_count": 156, - "entries_count": 27 - }, - { - "value": "nighteye", - "label": "Nighteye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nightwatcher", - "label": "Nightwatcher", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "nihon", - "label": "Nihon", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "nikodem", - "label": "Nikodem", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nilox", - "label": "Nilox", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "nimbus", - "label": "Nimbus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nip", - "label": "Nip", - "models_count": 15, - "entries_count": 8 - }, - { - "value": "nishimon", - "label": "Nishimon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nisuta", - "label": "Nisuta", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nitedevil", - "label": "Nitedevil", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "niutek", - "label": "Niutek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "niv", - "label": "Niv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nivian", - "label": "Nivian", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "nixzen", - "label": "Nixzen", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "nlc-cam", - "label": "Nlc Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nobelic", - "label": "Nobelic", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "nobitech", - "label": "Nobitech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "nokia", - "label": "Nokia", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "noname-chinese", - "label": "Noname Chinese", - "models_count": 9, - "entries_count": 9 - }, - { - "value": "none", - "label": "None", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nonwee", - "label": "Nonwee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nooie-360", - "label": "Nooie 360", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "norden", - "label": "Norden", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "norelco", - "label": "Norelco", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "northern", - "label": "Northern", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "northq", - "label": "Northq", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "novate", - "label": "Novate", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "novell", - "label": "Novell", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "novicam", - "label": "Novicam", - "models_count": 15, - "entries_count": 3 - }, - { - "value": "novodio", - "label": "Novodio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "novomoskow", - "label": "Novomoskow", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "novus", - "label": "Novus", - "models_count": 20, - "entries_count": 9 - }, - { - "value": "nram", - "label": "Nram", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ntse", - "label": "Ntse", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "nufebs", - "label": "Nufebs", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "nutri-vision", - "label": "Nutri Vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nuvico", - "label": "Nuvico", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "nv-mbw", - "label": "Nv-mbw", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nvr", - "label": "Nvr", - "models_count": 46, - "entries_count": 10 - }, - { - "value": "nvsip", - "label": "Nvsip", - "models_count": 17, - "entries_count": 8 - }, - { - "value": "nvt", - "label": "Nvt", - "models_count": 275, - "entries_count": 25 - }, - { - "value": "nwp", - "label": "Nwp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "nwsvr", - "label": "Nwsvr", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "obs", - "label": "Obs", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oceantools", - "label": "Oceantools", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oco", - "label": "Oco", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "octopi", - "label": "Octopi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "octoprint", - "label": "Octoprint", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "ocular", - "label": "Ocular", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oculus", - "label": "Oculus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "odesys", - "label": "Odesys", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "oem", - "label": "Oem", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "oemcameras", - "label": "Oemcameras", - "models_count": 12, - "entries_count": 11 - }, - { - "value": "off", - "label": "Off", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "office-one", - "label": "Office One", - "models_count": 52, - "entries_count": 19 - }, - { - "value": "officeone", - "label": "Officeone", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ohwoai", - "label": "Ohwoai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oltec", - "label": "Oltec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "olympia", - "label": "Olympia", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "omega", - "label": "Omega", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "omega-power", - "label": "Omega Power", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "omenex", - "label": "Omenex", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "omni", - "label": "Omni", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "omnibase", - "label": "Omnibase", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "omniview", - "label": "Omniview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "omnivision", - "label": "Omnivision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "omny", - "label": "Omny", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "omp", - "label": "Omp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oncam-grandeye", - "label": "Oncam Grandeye", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "onepixel", - "label": "Onepixel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oneteck", - "label": "Oneteck", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "oniv", - "label": "Oniv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "onix-usa", - "label": "Onix Usa", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "onvey", - "label": "Onvey", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "onvif", - "label": "Onvif", - "models_count": 161, - "entries_count": 32 - }, - { - "value": "onwote", - "label": "Onwote", - "models_count": 21, - "entries_count": 8 - }, - { - "value": "oossxx", - "label": "Oossxx", - "models_count": 33, - "entries_count": 11 - }, - { - "value": "opax", - "label": "Opax", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "openeye", - "label": "Openeye", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "openwrt", - "label": "Openwrt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "opexia", - "label": "Opexia", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "optica-video", - "label": "Optica Video", - "models_count": 44, - "entries_count": 19 - }, - { - "value": "opticam", - "label": "Opticam", - "models_count": 39, - "entries_count": 8 - }, - { - "value": "optics", - "label": "Optics", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "optima", - "label": "Optima", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "optimus", - "label": "Optimus", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "optio", - "label": "Optio", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "optiview", - "label": "Optiview", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "optivision", - "label": "Optivision", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "optris", - "label": "Optris", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "orbit", - "label": "Orbit", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "ordro", - "label": "Ordro", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "orient", - "label": "Orient", - "models_count": 18, - "entries_count": 10 - }, - { - "value": "orion", - "label": "Orion", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "orite", - "label": "Orite", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "orllo", - "label": "Orllo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "orosaurus", - "label": "Orosaurus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "orvibo", - "label": "Orvibo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oswoo", - "label": "Oswoo", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "other", - "label": "Other", - "models_count": 536, - "entries_count": 101 - }, - { - "value": "otima", - "label": "Otima", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "otto", - "label": "Otto", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "oude-camera", - "label": "Oude Camera", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "oukitel", - "label": "Oukitel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "outdoor-mini-speed-dome-cmera", - "label": "Outdoor Mini Speed Dome Cmera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ouvis", - "label": "Ouvis", - "models_count": 15, - "entries_count": 8 - }, - { - "value": "overcap", - "label": "Overcap", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "overmax", - "label": "Overmax", - "models_count": 70, - "entries_count": 14 - }, - { - "value": "overseer", - "label": "Overseer", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ovislink", - "label": "Ovislink", - "models_count": 15, - "entries_count": 7 - }, - { - "value": "owl", - "label": "Owl", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "owlcam", - "label": "Owlcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "owlcat", - "label": "Owlcat", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "owluck", - "label": "Owluck", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "owlvision", - "label": "Owlvision", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "owsoo", - "label": "Owsoo", - "models_count": 10, - "entries_count": 8 - }, - { - "value": "ozero", - "label": "Ozero", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "p-link", - "label": "P-link", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "p2p", - "label": "P2p", - "models_count": 48, - "entries_count": 15 - }, - { - "value": "p6lite", - "label": "P6lite", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pace", - "label": "Pace", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "pacidal", - "label": "Pacidal", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pacom", - "label": "Pacom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "paisan", - "label": "Paisan", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "palmvid", - "label": "Palmvid", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "palus-f", - "label": "Palus-f", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pana", - "label": "Pana", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "panasonic", - "label": "Panasonic", - "models_count": 1491, - "entries_count": 101 - }, - { - "value": "panatek", - "label": "Panatek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pangolin", - "label": "Pangolin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "panoeagle", - "label": "Panoeagle", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "panomera", - "label": "Panomera", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "panoob", - "label": "Panoob", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "panorama", - "label": "Panorama", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "panoramic", - "label": "Panoramic", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "panoraxy", - "label": "Panoraxy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "pantech", - "label": "Pantech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "parolo", - "label": "Parolo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "partizan", - "label": "Partizan", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "pasillo", - "label": "Pasillo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "patronum", - "label": "Patronum", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pci", - "label": "Pci", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "pco", - "label": "Pco", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pcs", - "label": "Pcs", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pcview", - "label": "Pcview", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "peak", - "label": "Peak", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pearl", - "label": "Pearl", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "pecan", - "label": "Pecan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pecham", - "label": "Pecham", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pegatah", - "label": "Pegatah", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pelco", - "label": "Pelco", - "models_count": 191, - "entries_count": 30 - }, - { - "value": "pelco-sarix", - "label": "Pelco Sarix", - "models_count": 67, - "entries_count": 8 - }, - { - "value": "pelconet", - "label": "Pelconet", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "pembroke", - "label": "Pembroke", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "peoplefu", - "label": "Peoplefu", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "periscope-app", - "label": "Periscope App", - "models_count": 0, - "entries_count": 1 - }, - { - "value": "petawise", - "label": "Petawise", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "petiszobaja", - "label": "Petiszobaja", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pheenet", - "label": "Pheenet", - "models_count": 11, - "entries_count": 3 - }, - { - "value": "philco", - "label": "Philco", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "philips", - "label": "Philips", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "phobe-micro-ink", - "label": "Phobe Micro Ink", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "phonescam", - "label": "Phonescam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "photonisvip", - "label": "Photonisvip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "phylink", - "label": "Phylink", - "models_count": 24, - "entries_count": 3 - }, - { - "value": "phytech", - "label": "Phytech", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "picotech", - "label": "Picotech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "piczel", - "label": "Piczel", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "pilot", - "label": "Pilot", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "pimfg", - "label": "Pimfg", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pinetron", - "label": "Pinetron", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "pinnacle", - "label": "Pinnacle", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pintu", - "label": "Pintu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pipc", - "label": "Pipc", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "pipcam", - "label": "Pipcam", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "piper", - "label": "Piper", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pir", - "label": "Pir", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "pisocosina", - "label": "Pisocosina", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pixart", - "label": "Pixart", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pixeye", - "label": "Pixeye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pixmy", - "label": "Pixmy", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "pixord", - "label": "Pixord", - "models_count": 66, - "entries_count": 19 - }, - { - "value": "pixpo", - "label": "Pixpo", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "pixus", - "label": "Pixus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pizdets", - "label": "Pizdets", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pizero", - "label": "Pizero", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "plac", - "label": "Plac", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "plaisio", - "label": "Plaisio", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "planet", - "label": "Planet", - "models_count": 291, - "entries_count": 56 - }, - { - "value": "planex", - "label": "Planex", - "models_count": 64, - "entries_count": 22 - }, - { - "value": "plantron", - "label": "Plantron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "platinum", - "label": "Platinum", - "models_count": 7, - "entries_count": 1 - }, - { - "value": "plc", - "label": "Plc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "plenty", - "label": "Plenty", - "models_count": 22, - "entries_count": 8 - }, - { - "value": "plexonics", - "label": "Plexonics", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "plustek", - "label": "Plustek", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "plv", - "label": "Plv", - "models_count": 26, - "entries_count": 6 - }, - { - "value": "pni", - "label": "Pni", - "models_count": 61, - "entries_count": 25 - }, - { - "value": "pnp", - "label": "Pnp", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "pnzeo", - "label": "Pnzeo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "podofo", - "label": "Podofo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "poe", - "label": "Poe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "polaris-usa", - "label": "Polaris-usa", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "polarity", - "label": "Polarity", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "polaroid", - "label": "Polaroid", - "models_count": 73, - "entries_count": 18 - }, - { - "value": "policetech", - "label": "Policetech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "pollo", - "label": "Pollo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "poly", - "label": "Poly", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "polycom", - "label": "Polycom", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "polyvision", - "label": "Polyvision", - "models_count": 15, - "entries_count": 3 - }, - { - "value": "popp", - "label": "Popp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "porta", - "label": "Porta", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "positivo", - "label": "Positivo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "posonic", - "label": "Posonic", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "powerbizt", - "label": "Powerbizt", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "powerextra", - "label": "Powerextra", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "powerlead", - "label": "Powerlead", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "powerpack", - "label": "Powerpack", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "prada", - "label": "Prada", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "praxis", - "label": "Praxis", - "models_count": 23, - "entries_count": 13 - }, - { - "value": "predator", - "label": "Predator", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "premier", - "label": "Premier", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "premiumblue", - "label": "Premiumblue", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "prestel", - "label": "Prestel", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "prikim", - "label": "Prikim", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "prime", - "label": "Prime", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "pripaso", - "label": "Pripaso", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pristenek", - "label": "Pristenek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "pritech", - "label": "Pritech", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "privileg", - "label": "Privileg", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "proba", - "label": "Proba", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "probe-digital", - "label": "Probe Digital", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "procam", - "label": "Procam", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "procctv", - "label": "Procctv", - "models_count": 14, - "entries_count": 10 - }, - { - "value": "produttore-ignoto-%23!", - "label": "Produttore Ignoto #!", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "proelite", - "label": "Proelite", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "proimage", - "label": "Proimage", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "prok-electronics", - "label": "Prok Electronics", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "prolab-security", - "label": "Prolab Security", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "proline", - "label": "Proline", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "proline-uk", - "label": "Proline Uk", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "prolink", - "label": "Prolink", - "models_count": 13, - "entries_count": 4 - }, - { - "value": "prolook", - "label": "Prolook", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "prolynx", - "label": "Prolynx", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "promax-usa", - "label": "Promax Usa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "promelit", - "label": "Promelit", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "pronext", - "label": "Pronext", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "proscan", - "label": "Proscan", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "provecam", - "label": "Provecam", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "provideo", - "label": "Provideo", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "proview", - "label": "Proview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "provision", - "label": "Provision", - "models_count": 51, - "entries_count": 14 - }, - { - "value": "provisual", - "label": "Provisual", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ps-link", - "label": "Ps-link", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "psi-robot", - "label": "Psi Robot", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "psp", - "label": "Psp", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "psy-link", - "label": "Psy-link", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "ptcl", - "label": "Ptcl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ptz05", - "label": "Ptz05", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ptzoptics", - "label": "Ptzoptics", - "models_count": 16, - "entries_count": 10 - }, - { - "value": "pumatronix", - "label": "Pumatronix", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "pyle", - "label": "Pyle", - "models_count": 29, - "entries_count": 7 - }, - { - "value": "q-nest", - "label": "Q-nest", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "q-see", - "label": "Q-see", - "models_count": 173, - "entries_count": 37 - }, - { - "value": "q-sys", - "label": "Q-sys", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "q6-wifi-smart-camera", - "label": "Q6 Wifi Smart Camera", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "qavi", - "label": "Qavi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "qbus", - "label": "Qbus", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "qcam", - "label": "Qcam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "qcamera", - "label": "Qcamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "qeye", - "label": "Qeye", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "qgs", - "label": "Qgs", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "qian-yao", - "label": "Qian Yao", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "qihan", - "label": "Qihan", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "qiozdio", - "label": "Qiozdio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "qnap", - "label": "Qnap", - "models_count": 13, - "entries_count": 12 - }, - { - "value": "qoltec", - "label": "Qoltec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "qtech", - "label": "Qtech", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "quadrant-technology", - "label": "Quadrant Technology", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "qualcomm-incorporated", - "label": "Qualcomm Incorporated", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "quanmin", - "label": "Quanmin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "qube", - "label": "Qube", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "qubo", - "label": "Qubo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "queback", - "label": "Queback", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "questek", - "label": "Questek", - "models_count": 16, - "entries_count": 8 - }, - { - "value": "qvis", - "label": "Qvis", - "models_count": 13, - "entries_count": 7 - }, - { - "value": "qwe", - "label": "Qwe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "r-tech", - "label": "R-tech", - "models_count": 13, - "entries_count": 8 - }, - { - "value": "rabbitstorm", - "label": "Rabbitstorm", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rainbow", - "label": "Rainbow", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ralink", - "label": "Ralink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "raspberry-pi", - "label": "Raspberry Pi", - "models_count": 133, - "entries_count": 29 - }, - { - "value": "raster", - "label": "Raster", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "ratingsecu", - "label": "Ratingsecu", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "raycam", - "label": "Raycam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "rayline", - "label": "Rayline", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "raylios", - "label": "Raylios", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "raynic", - "label": "Raynic", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "raysharp", - "label": "Raysharp", - "models_count": 13, - "entries_count": 7 - }, - { - "value": "rca", - "label": "Rca", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "rds", - "label": "Rds", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "real-hd", - "label": "Real Hd", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "realink", - "label": "Realink", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "realm", - "label": "Realm", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "realtek", - "label": "Realtek", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "redleaf-security", - "label": "Redleaf Security", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "redline", - "label": "Redline", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "redragon", - "label": "Redragon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "redrock", - "label": "Redrock", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "redvision", - "label": "Redvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "reel-tech", - "label": "Reel Tech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "reidubo", - "label": "Reidubo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "reigy", - "label": "Reigy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "relicam", - "label": "Relicam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "remo", - "label": "Remo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "reobiux", - "label": "Reobiux", - "models_count": 6, - "entries_count": 1 - }, - { - "value": "reolink", - "label": "Reolink", - "models_count": 805, - "entries_count": 80 - }, - { - "value": "reotech", - "label": "Reotech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "repotec", - "label": "Repotec", - "models_count": 10, - "entries_count": 5 - }, - { - "value": "reticam", - "label": "Reticam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "retina", - "label": "Retina", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "revo", - "label": "Revo", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "revodata", - "label": "Revodata", - "models_count": 14, - "entries_count": 3 - }, - { - "value": "revotech", - "label": "Revotech", - "models_count": 82, - "entries_count": 22 - }, - { - "value": "rfid-poker-table", - "label": "Rfid Poker Table", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "rhinoco", - "label": "Rhinoco", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "ribbon", - "label": "Ribbon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rifatron", - "label": "Rifatron", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "rigoo", - "label": "Rigoo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rimax", - "label": "Rimax", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "ring", - "label": "Ring", - "models_count": 14, - "entries_count": 9 - }, - { - "value": "rinin", - "label": "Rinin", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "rinnin", - "label": "Rinnin", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "risco", - "label": "Risco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "riva-flex", - "label": "Riva-flex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rivatech", - "label": "Rivatech", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "riwyth", - "label": "Riwyth", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "robaxo", - "label": "Robaxo", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "robicam", - "label": "Robicam", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "robocam", - "label": "Robocam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "rocam", - "label": "Rocam", - "models_count": 48, - "entries_count": 18 - }, - { - "value": "rohs", - "label": "Rohs", - "models_count": 33, - "entries_count": 20 - }, - { - "value": "roidmi", - "label": "Roidmi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "roline", - "label": "Roline", - "models_count": 13, - "entries_count": 6 - }, - { - "value": "rollei", - "label": "Rollei", - "models_count": 13, - "entries_count": 5 - }, - { - "value": "romai", - "label": "Romai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "romi", - "label": "Romi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ronin", - "label": "Ronin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rosewill", - "label": "Rosewill", - "models_count": 37, - "entries_count": 15 - }, - { - "value": "rosh", - "label": "Rosh", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "roswill", - "label": "Roswill", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rovio", - "label": "Rovio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "royal", - "label": "Royal", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "royallite", - "label": "Royallite", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rpi", - "label": "Rpi", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "rraycom", - "label": "Rraycom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rstahl", - "label": "Rstahl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rtt", - "label": "Rtt", - "models_count": 17, - "entries_count": 2 - }, - { - "value": "rtx", - "label": "Rtx", - "models_count": 42, - "entries_count": 17 - }, - { - "value": "rua", - "label": "Rua", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ruang-tamu", - "label": "Ruang Tamu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "rubetek", - "label": "Rubetek", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "ruisvision", - "label": "Ruisvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "runyan-gate", - "label": "Runyan Gate", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "rvi", - "label": "Rvi", - "models_count": 48, - "entries_count": 27 - }, - { - "value": "s.vision", - "label": "S.vision", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "s3vc", - "label": "S3vc", - "models_count": 15, - "entries_count": 7 - }, - { - "value": "saance", - "label": "Saance", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "sab", - "label": "Sab", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "sacam", - "label": "Sacam", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "saewit", - "label": "Saewit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "safecam", - "label": "Safecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "safehome", - "label": "Safehome", - "models_count": 101, - "entries_count": 30 - }, - { - "value": "safer", - "label": "Safer", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "safesky-cn", - "label": "Safesky Cn", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "safevant", - "label": "Safevant", - "models_count": 5, - "entries_count": 1 - }, - { - "value": "safire", - "label": "Safire", - "models_count": 16, - "entries_count": 6 - }, - { - "value": "samgane", - "label": "Samgane", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "samsco", - "label": "Samsco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "samsung", - "label": "Samsung", - "models_count": 720, - "entries_count": 101 - }, - { - "value": "sanan-cctv", - "label": "Sanan-cctv", - "models_count": 14, - "entries_count": 11 - }, - { - "value": "sanetron", - "label": "Sanetron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sannce", - "label": "Sannce", - "models_count": 95, - "entries_count": 33 - }, - { - "value": "sansco", - "label": "Sansco", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "santachi", - "label": "Santachi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "santec-video", - "label": "Santec-video", - "models_count": 18, - "entries_count": 12 - }, - { - "value": "sanyo", - "label": "Sanyo", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "sanzio", - "label": "Sanzio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "saocom", - "label": "Saocom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "saphire", - "label": "Saphire", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "sapsan", - "label": "Sapsan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "saqicam", - "label": "Saqicam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sarmatt", - "label": "Sarmatt", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "sarotech", - "label": "Sarotech", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "sartek", - "label": "Sartek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sas-digital", - "label": "Sas Digital", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "satvision", - "label": "Satvision", - "models_count": 12, - "entries_count": 6 - }, - { - "value": "savitmicro", - "label": "Savitmicro", - "models_count": 16, - "entries_count": 9 - }, - { - "value": "savvypixel", - "label": "Savvypixel", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sawyobi", - "label": "Sawyobi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "saxxon", - "label": "Saxxon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sayus", - "label": "Sayus", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "scada-technology", - "label": "Scada Technology", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "scancam", - "label": "Scancam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "schlage", - "label": "Schlage", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "schneider", - "label": "Schneider", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "scout-cctv", - "label": "Scout Cctv", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "scs", - "label": "Scs", - "models_count": 13, - "entries_count": 8 - }, - { - "value": "scsi", - "label": "Scsi", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "scv3", - "label": "Scv3", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "scw", - "label": "Scw", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "sdc", - "label": "Sdc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sdeter", - "label": "Sdeter", - "models_count": 23, - "entries_count": 10 - }, - { - "value": "sea-wit", - "label": "Sea Wit", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "secam-cctv", - "label": "Secam Cctv", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "seccam", - "label": "Seccam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sectec", - "label": "Sectec", - "models_count": 14, - "entries_count": 5 - }, - { - "value": "secu-first", - "label": "Secu First", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "secueasy", - "label": "Secueasy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "seculink", - "label": "Seculink", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "secuon", - "label": "Secuon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "secuplug", - "label": "Secuplug", - "models_count": 19, - "entries_count": 8 - }, - { - "value": "secur-eye", - "label": "Secur Eye", - "models_count": 22, - "entries_count": 17 - }, - { - "value": "secur360", - "label": "Secur360", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "securecam", - "label": "Securecam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "securia-pro", - "label": "Securia Pro", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "securicom-tunisie", - "label": "Securicom Tunisie", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "security", - "label": "Security", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "security-cam", - "label": "Security Cam", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "security-camera-2000", - "label": "Security Camera 2000", - "models_count": 12, - "entries_count": 9 - }, - { - "value": "security-camera-warehouse", - "label": "Security Camera Warehouse", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "security-labs", - "label": "Security Labs", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "securitytronix", - "label": "Securitytronix", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "securix", - "label": "Securix", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "secuvision", - "label": "Secuvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "secvision", - "label": "Secvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seecam", - "label": "Seecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seecom", - "label": "Seecom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seedary", - "label": "Seedary", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "seenergy", - "label": "Seenergy", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seesoon", - "label": "Seesoon", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "seetong", - "label": "Seetong", - "models_count": 10, - "entries_count": 3 - }, - { - "value": "sefica", - "label": "Sefica", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seif", - "label": "Seif", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seimem", - "label": "Seimem", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "seisa", - "label": "Seisa", - "models_count": 13, - "entries_count": 13 - }, - { - "value": "seisatek", - "label": "Seisatek", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "selea", - "label": "Selea", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "semac", - "label": "Semac", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "senao", - "label": "Senao", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sensormatic", - "label": "Sensormatic", - "models_count": 24, - "entries_count": 6 - }, - { - "value": "sentient-pro", - "label": "Sentient Pro", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "sentry-360", - "label": "Sentry 360", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "sentryview", - "label": "Sentryview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sentul", - "label": "Sentul", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sepcam", - "label": "Sepcam", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "septekon", - "label": "Septekon", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "sequrecam", - "label": "Sequrecam", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "serage", - "label": "Serage", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "serang", - "label": "Serang", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sercam", - "label": "Sercam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sercomm", - "label": "Sercomm", - "models_count": 543, - "entries_count": 28 - }, - { - "value": "serioux", - "label": "Serioux", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "sertek", - "label": "Sertek", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "ses", - "label": "Ses", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sesco-security", - "label": "Sesco Security", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "seteye", - "label": "Seteye", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "setik", - "label": "Setik", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "seven-systems", - "label": "Seven Systems", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sgs", - "label": "Sgs", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "shamim", - "label": "Shamim", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "shany", - "label": "Shany", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "sharx-security", - "label": "Sharx Security", - "models_count": 45, - "entries_count": 14 - }, - { - "value": "shenwhen-neo-electronic-co", - "label": "Shenwhen Neo Electronic Co", - "models_count": 34, - "entries_count": 23 - }, - { - "value": "shenzhen", - "label": "Shenzhen", - "models_count": 113, - "entries_count": 34 - }, - { - "value": "shenzhen-reecam-tech.ltd.", - "label": "Shenzhen Reecam Tech.ltd.", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "shenzhen-tong-bo-wei", - "label": "Shenzhen Tong Bo Wei", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "shenzhen-toptech", - "label": "Shenzhen Toptech", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "shenzhen-ycx-electronics", - "label": "Shenzhen Ycx Electronics", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "shieldeye", - "label": "Shieldeye", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "shindai", - "label": "Shindai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "shinsoft-co", - "label": "Shinsoft Co", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "shiwojia", - "label": "Shiwojia", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "shixin-china", - "label": "Shixin China", - "models_count": 40, - "entries_count": 22 - }, - { - "value": "short", - "label": "Short", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "short-8ch-nvr", - "label": "Short 8ch Nvr", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "showtec", - "label": "Showtec", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "sibel", - "label": "Sibel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sibo", - "label": "Sibo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sichuan", - "label": "Sichuan", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "siemens", - "label": "Siemens", - "models_count": 41, - "entries_count": 17 - }, - { - "value": "siepem", - "label": "Siepem", - "models_count": 35, - "entries_count": 7 - }, - { - "value": "sightlogix", - "label": "Sightlogix", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "sigma-electronics", - "label": "Sigma Electronics", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sigmatel", - "label": "Sigmatel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "signet", - "label": "Signet", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sikvio", - "label": "Sikvio", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "silent-sentinel", - "label": "Silent Sentinel", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "silicon-labs", - "label": "Silicon Labs", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "silvus", - "label": "Silvus", - "models_count": 17, - "entries_count": 8 - }, - { - "value": "simi-ip-camera-viewer", - "label": "Simi Ip Camera Viewer", - "models_count": 18, - "entries_count": 8 - }, - { - "value": "simicam", - "label": "Simicam", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "simshine", - "label": "Simshine", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sineoji", - "label": "Sineoji", - "models_count": 17, - "entries_count": 8 - }, - { - "value": "sinocam", - "label": "Sinocam", - "models_count": 101, - "entries_count": 16 - }, - { - "value": "sinovision", - "label": "Sinovision", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "sionyx", - "label": "Sionyx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sip", - "label": "Sip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "siqura", - "label": "Siqura", - "models_count": 42, - "entries_count": 12 - }, - { - "value": "sircom", - "label": "Sircom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "siricam", - "label": "Siricam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "siricom", - "label": "Siricom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sisview", - "label": "Sisview", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sitecom", - "label": "Sitecom", - "models_count": 38, - "entries_count": 18 - }, - { - "value": "sjet", - "label": "Sjet", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sk-tel", - "label": "Sk Tel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "skilleye", - "label": "Skilleye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "skjm", - "label": "Skjm", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "sklad", - "label": "Sklad", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "skone", - "label": "Skone", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "skvision", - "label": "Skvision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sky-genious", - "label": "Sky Genious", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "skyfield", - "label": "Skyfield", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "skylink", - "label": "Skylink", - "models_count": 13, - "entries_count": 8 - }, - { - "value": "skyreo", - "label": "Skyreo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "skytronic", - "label": "Skytronic", - "models_count": 15, - "entries_count": 5 - }, - { - "value": "skyview", - "label": "Skyview", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "skyvision", - "label": "Skyvision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "skyway-security", - "label": "Skyway Security", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "sline", - "label": "Sline", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smallcell", - "label": "Smallcell", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smanos", - "label": "Smanos", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smar", - "label": "Smar", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "smart", - "label": "Smart", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "smart-cloud-camera", - "label": "Smart Cloud Camera", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "smart-hd-wifi-camera", - "label": "Smart Hd Wifi Camera", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "smart-home", - "label": "Smart Home", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "smart-industry", - "label": "Smart Industry", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "smart-net-camera", - "label": "Smart Net Camera", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "smart-pixel", - "label": "Smart Pixel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smart-security", - "label": "Smart Security", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smart-zoom", - "label": "Smart Zoom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smart380", - "label": "Smart380", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smartcam", - "label": "Smartcam", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "smartec", - "label": "Smartec", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "smartek", - "label": "Smartek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smarteye", - "label": "Smarteye", - "models_count": 50, - "entries_count": 28 - }, - { - "value": "smartfrog", - "label": "Smartfrog", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "smartguard", - "label": "Smartguard", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "smarthome", - "label": "Smarthome", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "smartiscam", - "label": "Smartiscam", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "smartit", - "label": "Smartit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smartrol", - "label": "Smartrol", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "smartsecurity", - "label": "Smartsecurity", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "smartsf", - "label": "Smartsf", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smarttec", - "label": "Smarttec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "smarttek", - "label": "Smarttek", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "smartview", - "label": "Smartview", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "smartvision", - "label": "Smartvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smartwares", - "label": "Smartwares", - "models_count": 68, - "entries_count": 15 - }, - { - "value": "smartz", - "label": "Smartz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smax", - "label": "Smax", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "smc", - "label": "Smc", - "models_count": 60, - "entries_count": 19 - }, - { - "value": "smonet", - "label": "Smonet", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "smp", - "label": "Smp", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "smtkey", - "label": "Smtkey", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "smtsec", - "label": "Smtsec", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "smvi", - "label": "Smvi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sn-ipc", - "label": "Sn Ipc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "snapav", - "label": "Snapav", - "models_count": 19, - "entries_count": 9 - }, - { - "value": "soar", - "label": "Soar", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "soggi", - "label": "Soggi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "soho", - "label": "Soho", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "solar-ip-camera", - "label": "Solar Ip Camera", - "models_count": 10, - "entries_count": 4 - }, - { - "value": "solarcam", - "label": "Solarcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "soleratec", - "label": "Soleratec", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "solosecurity", - "label": "Solosecurity", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "solwise", - "label": "Solwise", - "models_count": 13, - "entries_count": 12 - }, - { - "value": "sonoff", - "label": "Sonoff", - "models_count": 22, - "entries_count": 6 - }, - { - "value": "sony", - "label": "Sony", - "models_count": 722, - "entries_count": 83 - }, - { - "value": "soohao", - "label": "Soohao", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "soospy", - "label": "Soospy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sorrano", - "label": "Sorrano", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sotion", - "label": "Sotion", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "soullife", - "label": "Soullife", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "sovmiku", - "label": "Sovmiku", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sozo", - "label": "Sozo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "space-technology", - "label": "Space Technology", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "spacetronik", - "label": "Spacetronik", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sparklan", - "label": "Sparklan", - "models_count": 21, - "entries_count": 12 - }, - { - "value": "spc", - "label": "Spc", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "speco", - "label": "Speco", - "models_count": 91, - "entries_count": 33 - }, - { - "value": "sperado-cctv", - "label": "Sperado Cctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spetslab", - "label": "Spetslab", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spider", - "label": "Spider", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spigen", - "label": "Spigen", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spotai", - "label": "Spotai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spotcam", - "label": "Spotcam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sprint-cctv", - "label": "Sprint Cctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spy-cameras", - "label": "Spy Cameras", - "models_count": 10, - "entries_count": 8 - }, - { - "value": "spycam", - "label": "Spycam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "spyclops", - "label": "Spyclops", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "spydroid", - "label": "Spydroid", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "spytech", - "label": "Spytech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "spytecinc", - "label": "Spytecinc", - "models_count": 7, - "entries_count": 5 - }, - { - "value": "sq11", - "label": "Sq11", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "squira", - "label": "Squira", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sricam", - "label": "Sricam", - "models_count": 486, - "entries_count": 58 - }, - { - "value": "sricctv", - "label": "Sricctv", - "models_count": 172, - "entries_count": 26 - }, - { - "value": "srihome", - "label": "Srihome", - "models_count": 62, - "entries_count": 10 - }, - { - "value": "sspc", - "label": "Sspc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sst", - "label": "Sst", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sstech", - "label": "Sstech", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "st-(spacetechnology)", - "label": "St (spacetechnology)", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "st-nt280e1", - "label": "St-nt280e1", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "st-team", - "label": "St-team", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "stabo", - "label": "Stabo", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "stadis", - "label": "Stadis", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "stalwall", - "label": "Stalwall", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "stanley", - "label": "Stanley", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "star-eye", - "label": "Star Eye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "star-vedia", - "label": "Star Vedia", - "models_count": 41, - "entries_count": 18 - }, - { - "value": "starcam", - "label": "Starcam", - "models_count": 19, - "entries_count": 9 - }, - { - "value": "stardot", - "label": "Stardot", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "stardot-tech", - "label": "Stardot Tech", - "models_count": 36, - "entries_count": 11 - }, - { - "value": "starir", - "label": "Starir", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "starlight", - "label": "Starlight", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "start-vision", - "label": "Start Vision", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "starvedia", - "label": "Starvedia", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "starvision", - "label": "Starvision", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "steinel", - "label": "Steinel", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "stem", - "label": "Stem", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "steren", - "label": "Steren", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "stipelectronics", - "label": "Stipelectronics", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "stopcontact", - "label": "Stopcontact", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "storage-options", - "label": "Storage Options", - "models_count": 37, - "entries_count": 20 - }, - { - "value": "storex", - "label": "Storex", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "storm", - "label": "Storm", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "strawberry", - "label": "Strawberry", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "strongshine", - "label": "Strongshine", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "stuart-cam", - "label": "Stuart Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "styco", - "label": "Styco", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "suba", - "label": "Suba", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sucam", - "label": "Sucam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sucjar", - "label": "Sucjar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sucura-networks", - "label": "Sucura Networks", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "sudvision", - "label": "Sudvision", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "summvision", - "label": "Summvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sumpple", - "label": "Sumpple", - "models_count": 38, - "entries_count": 7 - }, - { - "value": "sumvision", - "label": "Sumvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sunba", - "label": "Sunba", - "models_count": 42, - "entries_count": 14 - }, - { - "value": "sunbio", - "label": "Sunbio", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "sunchan", - "label": "Sunchan", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "suncomm", - "label": "Suncomm", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "sundari", - "label": "Sundari", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sunell-security", - "label": "Sunell Security", - "models_count": 10, - "entries_count": 1 - }, - { - "value": "suneyes", - "label": "Suneyes", - "models_count": 137, - "entries_count": 26 - }, - { - "value": "sunivision", - "label": "Sunivision", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "sunkwang", - "label": "Sunkwang", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "sunluxy", - "label": "Sunluxy", - "models_count": 74, - "entries_count": 24 - }, - { - "value": "sunnex", - "label": "Sunnex", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sunnylux", - "label": "Sunnylux", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sunplus-innovation", - "label": "Sunplus Innovation", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sunsom", - "label": "Sunsom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "suntek", - "label": "Suntek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sunvision-us", - "label": "Sunvision Us", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "sunywo", - "label": "Sunywo", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "super-focus", - "label": "Super Focus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "supera", - "label": "Supera", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "supercircuits", - "label": "Supercircuits", - "models_count": 12, - "entries_count": 9 - }, - { - "value": "supereye", - "label": "Supereye", - "models_count": 12, - "entries_count": 10 - }, - { - "value": "superspring", - "label": "Superspring", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "supervision", - "label": "Supervision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "supra-space", - "label": "Supra Space", - "models_count": 66, - "entries_count": 25 - }, - { - "value": "supvin", - "label": "Supvin", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "surcomm", - "label": "Surcomm", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "sure-eye", - "label": "Sure-eye", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "surecom", - "label": "Surecom", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "surip-cam", - "label": "Surip Cam", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "surveilist", - "label": "Surveilist", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "surveon", - "label": "Surveon", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "surway-technology", - "label": "Surway Technology", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "surya-net", - "label": "Surya-net", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sv-b0w-720p-hx", - "label": "Sv-b0w-720p-hx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sv3c", - "label": "Sv3c", - "models_count": 349, - "entries_count": 41 - }, - { - "value": "sv3p", - "label": "Sv3p", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "svat", - "label": "Svat", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "svb-international", - "label": "Svb International", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "svbc", - "label": "Svbc", - "models_count": 13, - "entries_count": 3 - }, - { - "value": "svc", - "label": "Svc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sve3", - "label": "Sve3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "svec", - "label": "Svec", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "svi", - "label": "Svi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "svision-co", - "label": "Svision Co", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "svn", - "label": "Svn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "svplus", - "label": "Svplus", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "sw360", - "label": "Sw360", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "swann", - "label": "Swann", - "models_count": 503, - "entries_count": 101 - }, - { - "value": "sweex", - "label": "Sweex", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "swibe", - "label": "Swibe", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "swnhd-800cam", - "label": "Swnhd-800cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "sy2l", - "label": "Sy2l", - "models_count": 12, - "entries_count": 3 - }, - { - "value": "sygonix", - "label": "Sygonix", - "models_count": 21, - "entries_count": 9 - }, - { - "value": "symynelec", - "label": "Symynelec", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "syneye", - "label": "Syneye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "synshore", - "label": "Synshore", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "syny-snc", - "label": "Syny-snc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "syokudou", - "label": "Syokudou", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "syscom-cctv", - "label": "Syscom Cctv", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "systemmax", - "label": "Systemmax", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "systoda", - "label": "Systoda", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "szneo", - "label": "Szneo", - "models_count": 112, - "entries_count": 32 - }, - { - "value": "szsinocam", - "label": "Szsinocam", - "models_count": 240, - "entries_count": 22 - }, - { - "value": "t.one", - "label": "T.one", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "taber", - "label": "Taber", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "takaovi", - "label": "Takaovi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "taller", - "label": "Taller", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "talos", - "label": "Talos", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "talos-security", - "label": "Talos Security", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "tank", - "label": "Tank", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tapo", - "label": "Tapo", - "models_count": 399, - "entries_count": 28 - }, - { - "value": "targa", - "label": "Targa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tas-tech", - "label": "Tas-tech", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "tbi", - "label": "Tbi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tbkvision", - "label": "Tbkvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tbs", - "label": "Tbs", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tcs-avd-ip", - "label": "Tcs Avd Ip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "teamme", - "label": "Teamme", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "teamvision", - "label": "Teamvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tech", - "label": "Tech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tech-world", - "label": "Tech World", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "techage", - "label": "Techage", - "models_count": 61, - "entries_count": 15 - }, - { - "value": "techmaxx", - "label": "Techmaxx", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "technaxx", - "label": "Technaxx", - "models_count": 13, - "entries_count": 10 - }, - { - "value": "technology", - "label": "Technology", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "techpro", - "label": "Techpro", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "techview", - "label": "Techview", - "models_count": 84, - "entries_count": 22 - }, - { - "value": "techvision", - "label": "Techvision", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "techyo", - "label": "Techyo", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "teckin", - "label": "Teckin", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "tecvoz", - "label": "Tecvoz", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "tedun", - "label": "Tedun", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "telca", - "label": "Telca", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "telco", - "label": "Telco", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "telekom", - "label": "Telekom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "teleste", - "label": "Teleste", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "telesystem", - "label": "Telesystem", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "teletek-electronics", - "label": "Teletek Electronics", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "telview-cctv", - "label": "Telview Cctv", - "models_count": 16, - "entries_count": 9 - }, - { - "value": "tenda", - "label": "Tenda", - "models_count": 39, - "entries_count": 17 - }, - { - "value": "tensai", - "label": "Tensai", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tensky", - "label": "Tensky", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tenvis", - "label": "Tenvis", - "models_count": 782, - "entries_count": 97 - }, - { - "value": "tenvus", - "label": "Tenvus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "teruhal", - "label": "Teruhal", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "tesco", - "label": "Tesco", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tethys-innovation", - "label": "Tethys Innovation", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tevah", - "label": "Tevah", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "texhnaxx", - "label": "Texhnaxx", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "thethys", - "label": "Thethys", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "thingino", - "label": "Thingino", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "thinkvalue", - "label": "Thinkvalue", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "thomson", - "label": "Thomson", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "threeboy", - "label": "Threeboy", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "thrifty-tech", - "label": "Thrifty Tech", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "tiandy", - "label": "Tiandy", - "models_count": 16, - "entries_count": 5 - }, - { - "value": "tic", - "label": "Tic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tidetech", - "label": "Tidetech", - "models_count": 11, - "entries_count": 3 - }, - { - "value": "tigersecu", - "label": "Tigersecu", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "tigris", - "label": "Tigris", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "timhillone", - "label": "Timhillone", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "tinosec", - "label": "Tinosec", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "tinycam", - "label": "Tinycam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "tipo", - "label": "Tipo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "titanium", - "label": "Titanium", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "titathink", - "label": "Titathink", - "models_count": 19, - "entries_count": 6 - }, - { - "value": "tl-sc3130g", - "label": "Tl-sc3130g", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tmezon", - "label": "Tmezon", - "models_count": 23, - "entries_count": 8 - }, - { - "value": "tmt", - "label": "Tmt", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "toa", - "label": "Toa", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "toaioho", - "label": "Toaioho", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "toguard", - "label": "Toguard", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "tomtop", - "label": "Tomtop", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tonton", - "label": "Tonton", - "models_count": 41, - "entries_count": 9 - }, - { - "value": "top-sky", - "label": "Top Sky", - "models_count": 14, - "entries_count": 7 - }, - { - "value": "top-vision", - "label": "Top Vision", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "topcam", - "label": "Topcam", - "models_count": 26, - "entries_count": 14 - }, - { - "value": "topcony", - "label": "Topcony", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "topica-cctv", - "label": "Topica Cctv", - "models_count": 35, - "entries_count": 20 - }, - { - "value": "topmountain", - "label": "Topmountain", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "topo", - "label": "Topo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "topodome", - "label": "Topodome", - "models_count": 12, - "entries_count": 3 - }, - { - "value": "topsee", - "label": "Topsee", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "topsicherheit", - "label": "Topsicherheit", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "toptech", - "label": "Toptech", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "topway", - "label": "Topway", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "topwelltech", - "label": "Topwelltech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "torno", - "label": "Torno", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "torv", - "label": "Torv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "toscan", - "label": "Toscan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "toshiba", - "label": "Toshiba", - "models_count": 128, - "entries_count": 30 - }, - { - "value": "toughdog", - "label": "Toughdog", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "touralle", - "label": "Touralle", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tp-ipc", - "label": "Tp-ipc", - "models_count": 42, - "entries_count": 4 - }, - { - "value": "tp-link", - "label": "Tp-link", - "models_count": 742, - "entries_count": 89 - }, - { - "value": "tptek", - "label": "Tptek", - "models_count": 14, - "entries_count": 3 - }, - { - "value": "tr-d4101ir1v3", - "label": "Tr-d4101ir1v3", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "traficon", - "label": "Traficon", - "models_count": 9, - "entries_count": 6 - }, - { - "value": "trantech", - "label": "Trantech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "trasera", - "label": "Trasera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "trassir", - "label": "Trassir", - "models_count": 31, - "entries_count": 4 - }, - { - "value": "trek", - "label": "Trek", - "models_count": 8, - "entries_count": 4 - }, - { - "value": "trendnet", - "label": "Trendnet", - "models_count": 1251, - "entries_count": 97 - }, - { - "value": "triax", - "label": "Triax", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "trident", - "label": "Trident", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "trivision", - "label": "Trivision", - "models_count": 85, - "entries_count": 17 - }, - { - "value": "tronitec", - "label": "Tronitec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "truen", - "label": "Truen", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "trueview", - "label": "Trueview", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "truman", - "label": "Truman", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "trust", - "label": "Trust", - "models_count": 19, - "entries_count": 15 - }, - { - "value": "truvision", - "label": "Truvision", - "models_count": 47, - "entries_count": 15 - }, - { - "value": "ts4001", - "label": "Ts4001", - "models_count": 7, - "entries_count": 3 - }, - { - "value": "tseeu", - "label": "Tseeu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tshicom", - "label": "Tshicom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tsm", - "label": "Tsm", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "tucam", - "label": "Tucam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tuin", - "label": "Tuin", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "tungson-ages", - "label": "Tungson Ages", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "turbo-x", - "label": "Turbo X", - "models_count": 62, - "entries_count": 24 - }, - { - "value": "turing", - "label": "Turing", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "turtle", - "label": "Turtle", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tutk", - "label": "Tutk", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "tuya", - "label": "Tuya", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "tvc", - "label": "Tvc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tvpsii", - "label": "Tvpsii", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tvt", - "label": "Tvt", - "models_count": 15, - "entries_count": 3 - }, - { - "value": "tweety-camera", - "label": "Tweety Camera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "twg", - "label": "Twg", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "tyco", - "label": "Tyco", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "typhoon", - "label": "Typhoon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "tysvance", - "label": "Tysvance", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "tzmezon", - "label": "Tzmezon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ubee", - "label": "Ubee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ubiquiti", - "label": "Ubiquiti", - "models_count": 76, - "entries_count": 27 - }, - { - "value": "ubnt", - "label": "Ubnt", - "models_count": 13, - "entries_count": 11 - }, - { - "value": "ucam-247", - "label": "Ucam 247", - "models_count": 38, - "entries_count": 10 - }, - { - "value": "uche-camera", - "label": "Uche Camera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ucloud", - "label": "Ucloud", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "ucybo", - "label": "Ucybo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "udp-technology", - "label": "Udp Technology", - "models_count": 15, - "entries_count": 5 - }, - { - "value": "udvar", - "label": "Udvar", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "uhi", - "label": "Uhi", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "uipopo", - "label": "Uipopo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "uk-plus", - "label": "Uk-plus", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ukc", - "label": "Ukc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ukiyoo", - "label": "Ukiyoo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ul-tech", - "label": "Ul-tech", - "models_count": 13, - "entries_count": 4 - }, - { - "value": "ular", - "label": "Ular", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ulkokamera", - "label": "Ulkokamera", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "umanor", - "label": "Umanor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "uniarch", - "label": "Uniarch", - "models_count": 15, - "entries_count": 9 - }, - { - "value": "unicad", - "label": "Unicad", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "unicorn", - "label": "Unicorn", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "uniden", - "label": "Uniden", - "models_count": 36, - "entries_count": 13 - }, - { - "value": "unidvr", - "label": "Unidvr", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "unifi", - "label": "Unifi", - "models_count": 46, - "entries_count": 20 - }, - { - "value": "unilook", - "label": "Unilook", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "unimo", - "label": "Unimo", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "unioncam", - "label": "Unioncam", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "unioptek", - "label": "Unioptek", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "unique-cctv", - "label": "Unique-cctv", - "models_count": 11, - "entries_count": 8 - }, - { - "value": "unitech", - "label": "Unitech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "unitoptek", - "label": "Unitoptek", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "uniue-vision", - "label": "Uniue Vision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "universal", - "label": "Universal", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "uniview", - "label": "Uniview", - "models_count": 131, - "entries_count": 17 - }, - { - "value": "univision", - "label": "Univision", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "univivi", - "label": "Univivi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "unotech", - "label": "Unotech", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "unv", - "label": "Unv", - "models_count": 72, - "entries_count": 9 - }, - { - "value": "unview", - "label": "Unview", - "models_count": 30, - "entries_count": 16 - }, - { - "value": "unzano", - "label": "Unzano", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "uokoo", - "label": "Uokoo", - "models_count": 52, - "entries_count": 11 - }, - { - "value": "upcam", - "label": "Upcam", - "models_count": 10, - "entries_count": 2 - }, - { - "value": "upupin", - "label": "Upupin", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "uranium", - "label": "Uranium", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "uray-encoder", - "label": "Uray Encoder", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "urban-security-group", - "label": "Urban Security Group", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "urmet", - "label": "Urmet", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "us-auto", - "label": "Us Auto", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "usaginc", - "label": "Usaginc", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "usavision", - "label": "Usavision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "usb", - "label": "Usb", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "usg", - "label": "Usg", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ut-alert", - "label": "Ut Alert", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "utalent", - "label": "Utalent", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "uxdsecurity", - "label": "Uxdsecurity", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "v200", - "label": "V200", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "v308", - "label": "V308", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "v360", - "label": "V360", - "models_count": 6, - "entries_count": 5 - }, - { - "value": "v380", - "label": "V380", - "models_count": 83, - "entries_count": 14 - }, - { - "value": "v380pro", - "label": "V380pro", - "models_count": 25, - "entries_count": 15 - }, - { - "value": "v4l2rtspserver", - "label": "V4l2rtspserver", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "v600", - "label": "V600", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "v89", - "label": "V89", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vacron", - "label": "Vacron", - "models_count": 13, - "entries_count": 4 - }, - { - "value": "vaddio", - "label": "Vaddio", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "vahti", - "label": "Vahti", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "valtronics", - "label": "Valtronics", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "valuecam", - "label": "Valuecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vanderbilt", - "label": "Vanderbilt", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "vandersec", - "label": "Vandersec", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "vandesc", - "label": "Vandesc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vangold", - "label": "Vangold", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "vantage", - "label": "Vantage", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "vantech", - "label": "Vantech", - "models_count": 31, - "entries_count": 19 - }, - { - "value": "vaste-achter-8mp104", - "label": "Vaste Achter 8mp104", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vastsee", - "label": "Vastsee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vatel", - "label": "Vatel", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "vatilon", - "label": "Vatilon", - "models_count": 12, - "entries_count": 6 - }, - { - "value": "vcam", - "label": "Vcam", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "vcatch", - "label": "Vcatch", - "models_count": 20, - "entries_count": 8 - }, - { - "value": "vcenter", - "label": "Vcenter", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "vchod", - "label": "Vchod", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vcs", - "label": "Vcs", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "vea", - "label": "Vea", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "veevocam", - "label": "Veevocam", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "veezon", - "label": "Veezon", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "veezoom", - "label": "Veezoom", - "models_count": 5, - "entries_count": 2 - }, - { - "value": "veho", - "label": "Veho", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "veilux", - "label": "Veilux", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "velleman", - "label": "Velleman", - "models_count": 11, - "entries_count": 6 - }, - { - "value": "velpro", - "label": "Velpro", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "velvu", - "label": "Velvu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ventech", - "label": "Ventech", - "models_count": 8, - "entries_count": 5 - }, - { - "value": "veo%2fvidi", - "label": "Veo/vidi", - "models_count": 12, - "entries_count": 7 - }, - { - "value": "veravista", - "label": "Veravista", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "verifly", - "label": "Verifly", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "verint", - "label": "Verint", - "models_count": 10, - "entries_count": 8 - }, - { - "value": "verizon", - "label": "Verizon", - "models_count": 14, - "entries_count": 6 - }, - { - "value": "verkada", - "label": "Verkada", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "veroyi", - "label": "Veroyi", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "veskys", - "label": "Veskys", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "vesta", - "label": "Vesta", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "vesta-alarms", - "label": "Vesta Alarms", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "vevotek", - "label": "Vevotek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "veyo", - "label": "Veyo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vgroup", - "label": "Vgroup", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vgsion", - "label": "Vgsion", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "vguard", - "label": "Vguard", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "vhod", - "label": "Vhod", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vicom", - "label": "Vicom", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vicon-security", - "label": "Vicon Security", - "models_count": 28, - "entries_count": 15 - }, - { - "value": "vicsung", - "label": "Vicsung", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "victex", - "label": "Victex", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "victure", - "label": "Victure", - "models_count": 88, - "entries_count": 26 - }, - { - "value": "videoiq", - "label": "Videoiq", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "videosec-security", - "label": "Videosec Security", - "models_count": 9, - "entries_count": 8 - }, - { - "value": "videotec", - "label": "Videotec", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "videoteknika", - "label": "Videoteknika", - "models_count": 8, - "entries_count": 8 - }, - { - "value": "videotrend", - "label": "Videotrend", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "videotronik", - "label": "Videotronik", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "videra", - "label": "Videra", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vidiline", - "label": "Vidiline", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "vido.at", - "label": "Vido.at", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "vidstar", - "label": "Vidstar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "viewmax", - "label": "Viewmax", - "models_count": 7, - "entries_count": 4 - }, - { - "value": "viewsca", - "label": "Viewsca", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "viewscan", - "label": "Viewscan", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vigilant", - "label": "Vigilant", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "viking", - "label": "Viking", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vikviz", - "label": "Vikviz", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "vikylin", - "label": "Vikylin", - "models_count": 16, - "entries_count": 6 - }, - { - "value": "vilar", - "label": "Vilar", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "vimar", - "label": "Vimar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vimicro", - "label": "Vimicro", - "models_count": 15, - "entries_count": 10 - }, - { - "value": "vimtag", - "label": "Vimtag", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "vimtech", - "label": "Vimtech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "viofo", - "label": "Viofo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vip-vision", - "label": "Vip Vision", - "models_count": 9, - "entries_count": 4 - }, - { - "value": "vipcam", - "label": "Vipcam", - "models_count": 8, - "entries_count": 7 - }, - { - "value": "viral", - "label": "Viral", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "visicom", - "label": "Visicom", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "vision", - "label": "Vision", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "vision-digi", - "label": "Vision Digi", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "vision-gs", - "label": "Vision Gs", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vision-hi-tech-co", - "label": "Vision Hi-tech Co", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "visioncool-cctv", - "label": "Visioncool Cctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "visionhitech-americas", - "label": "Visionhitech Americas", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "visionite", - "label": "Visionite", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "visionlite", - "label": "Visionlite", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "visionstar", - "label": "Visionstar", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "visionxip", - "label": "Visionxip", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "visiotech", - "label": "Visiotech", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "visiotys", - "label": "Visiotys", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "visonic", - "label": "Visonic", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "visortech", - "label": "Visortech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vista-cctv", - "label": "Vista Cctv", - "models_count": 15, - "entries_count": 11 - }, - { - "value": "vistacam", - "label": "Vistacam", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "visualint", - "label": "Visualint", - "models_count": 25, - "entries_count": 5 - }, - { - "value": "vitek", - "label": "Vitek", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vitek-cctv", - "label": "Vitek Cctv", - "models_count": 23, - "entries_count": 15 - }, - { - "value": "vitorcam", - "label": "Vitorcam", - "models_count": 10, - "entries_count": 7 - }, - { - "value": "vivint", - "label": "Vivint", - "models_count": 64, - "entries_count": 15 - }, - { - "value": "vivitar", - "label": "Vivitar", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "vivotek", - "label": "Vivotek", - "models_count": 1108, - "entries_count": 59 - }, - { - "value": "viziuuy", - "label": "Viziuuy", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "vlc", - "label": "Vlc", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "voger", - "label": "Voger", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "vonnic", - "label": "Vonnic", - "models_count": 21, - "entries_count": 12 - }, - { - "value": "vonninc", - "label": "Vonninc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "vonnision", - "label": "Vonnision", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "vonz", - "label": "Vonz", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "voor%2fkeuken", - "label": "Voor/keuken", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "voordeur", - "label": "Voordeur", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "voyager", - "label": "Voyager", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "voycam", - "label": "Voycam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "voyo", - "label": "Voyo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vpl", - "label": "Vpl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vr-cam", - "label": "Vr Cam", - "models_count": 56, - "entries_count": 7 - }, - { - "value": "vr360", - "label": "Vr360", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "vsc", - "label": "Vsc", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "vsonic", - "label": "Vsonic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "vstarcam", - "label": "Vstarcam", - "models_count": 615, - "entries_count": 64 - }, - { - "value": "vta", - "label": "Vta", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "vtech", - "label": "Vtech", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "walkertone", - "label": "Walkertone", - "models_count": 6, - "entries_count": 4 - }, - { - "value": "wallcharger", - "label": "Wallcharger", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wanscam", - "label": "Wanscam", - "models_count": 1653, - "entries_count": 101 - }, - { - "value": "wansview", - "label": "Wansview", - "models_count": 508, - "entries_count": 59 - }, - { - "value": "wapa", - "label": "Wapa", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "wardmay-cctv", - "label": "Wardmay Cctv", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wareshare", - "label": "Wareshare", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "watashi", - "label": "Watashi", - "models_count": 27, - "entries_count": 7 - }, - { - "value": "watch-bot-camera", - "label": "Watch Bot Camera", - "models_count": 30, - "entries_count": 20 - }, - { - "value": "watchdog", - "label": "Watchdog", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "watchguard", - "label": "Watchguard", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "watchmeip", - "label": "Watchmeip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "watchnet-inc", - "label": "Watchnet Inc", - "models_count": 18, - "entries_count": 6 - }, - { - "value": "waylens", - "label": "Waylens", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "waymoon", - "label": "Waymoon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wbox", - "label": "Wbox", - "models_count": 17, - "entries_count": 5 - }, - { - "value": "wca", - "label": "Wca", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "webcamxp", - "label": "Webcamxp", - "models_count": 8, - "entries_count": 7 - }, - { - "value": "webeye", - "label": "Webeye", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "webgate", - "label": "Webgate", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "webo", - "label": "Webo", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "webvision", - "label": "Webvision", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "wecam", - "label": "Wecam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "weldex", - "label": "Weldex", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "wepra", - "label": "Wepra", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "westcam", - "label": "Westcam", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "western-digital", - "label": "Western Digital", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "westline", - "label": "Westline", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "westmile", - "label": "Westmile", - "models_count": 24, - "entries_count": 5 - }, - { - "value": "wetranstek", - "label": "Wetranstek", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "wevo", - "label": "Wevo", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "wgcc", - "label": "Wgcc", - "models_count": 15, - "entries_count": 9 - }, - { - "value": "whfi", - "label": "Whfi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wi-tec", - "label": "Wi-tec", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wic", - "label": "Wic", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "widix", - "label": "Widix", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wifi-baby", - "label": "Wifi Baby", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "wifi-mi", - "label": "Wifi Mi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wifi-smart-net-camera", - "label": "Wifi Smart Net Camera", - "models_count": 11, - "entries_count": 4 - }, - { - "value": "winbook", - "label": "Winbook", - "models_count": 57, - "entries_count": 27 - }, - { - "value": "winic", - "label": "Winic", - "models_count": 9, - "entries_count": 3 - }, - { - "value": "wintech", - "label": "Wintech", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "wireless-charger-cam", - "label": "Wireless Charger Cam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wirepath", - "label": "Wirepath", - "models_count": 8, - "entries_count": 3 - }, - { - "value": "wise-group", - "label": "Wise Group", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "wisenet", - "label": "Wisenet", - "models_count": 29, - "entries_count": 13 - }, - { - "value": "wisevision", - "label": "Wisevision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wish", - "label": "Wish", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "wistino", - "label": "Wistino", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "wistron", - "label": "Wistron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "witi", - "label": "Witi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "wiwacam", - "label": "Wiwacam", - "models_count": 13, - "entries_count": 5 - }, - { - "value": "wlw", - "label": "Wlw", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wodsee", - "label": "Wodsee", - "models_count": 19, - "entries_count": 9 - }, - { - "value": "wolulu", - "label": "Wolulu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wonsdar", - "label": "Wonsdar", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "woodie-view", - "label": "Woodie View", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "woonkamer", - "label": "Woonkamer", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "wouwon", - "label": "Wouwon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wsdcam", - "label": "Wsdcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wtw", - "label": "Wtw", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wtw-tsukamoto", - "label": "Wtw Tsukamoto", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wwgc", - "label": "Wwgc", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "wyzecam", - "label": "Wyzecam", - "models_count": 59, - "entries_count": 17 - }, - { - "value": "x-zhang", - "label": "X Zhang", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "x-price", - "label": "X-price", - "models_count": 7, - "entries_count": 6 - }, - { - "value": "x-security", - "label": "X-security", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "x-view", - "label": "X-view", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "x10", - "label": "X10", - "models_count": 108, - "entries_count": 27 - }, - { - "value": "xaimoi", - "label": "Xaimoi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xanboo", - "label": "Xanboo", - "models_count": 30, - "entries_count": 10 - }, - { - "value": "xblitz", - "label": "Xblitz", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xblock", - "label": "Xblock", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xdh", - "label": "Xdh", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xelpon", - "label": "Xelpon", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xenocam", - "label": "Xenocam", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "xenta", - "label": "Xenta", - "models_count": 4, - "entries_count": 2 - }, - { - "value": "xfinity", - "label": "Xfinity", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "xgody", - "label": "Xgody", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "xiaomi", - "label": "Xiaomi", - "models_count": 67, - "entries_count": 22 - }, - { - "value": "xiaovv", - "label": "Xiaovv", - "models_count": 13, - "entries_count": 10 - }, - { - "value": "xiaoyi", - "label": "Xiaoyi", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "xin-ling", - "label": "Xin Ling", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "xineron", - "label": "Xineron", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xinfi", - "label": "Xinfi", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "xingchuang", - "label": "Xingchuang", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xingling", - "label": "Xingling", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xinsan", - "label": "Xinsan", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "xiongmai-dvr", - "label": "Xiongmai Dvr", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "xipcam", - "label": "Xipcam", - "models_count": 5, - "entries_count": 3 - }, - { - "value": "xka", - "label": "Xka", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xmarto", - "label": "Xmarto", - "models_count": 15, - "entries_count": 5 - }, - { - "value": "xmate", - "label": "Xmate", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xmeye", - "label": "Xmeye", - "models_count": 81, - "entries_count": 22 - }, - { - "value": "xonz", - "label": "Xonz", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "xpcam", - "label": "Xpcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xperia", - "label": "Xperia", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "xpia", - "label": "Xpia", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xseries", - "label": "Xseries", - "models_count": 8, - "entries_count": 2 - }, - { - "value": "xshcam", - "label": "Xshcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xtendrobotics", - "label": "Xtendrobotics", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "xtremepro", - "label": "Xtremepro", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xts-corp", - "label": "Xts Corp", - "models_count": 9, - "entries_count": 7 - }, - { - "value": "xtsy", - "label": "Xtsy", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xtu", - "label": "Xtu", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xvi", - "label": "Xvi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xvim", - "label": "Xvim", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "xvision", - "label": "Xvision", - "models_count": 76, - "entries_count": 25 - }, - { - "value": "xvr", - "label": "Xvr", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "xxcamera", - "label": "Xxcamera", - "models_count": 38, - "entries_count": 12 - }, - { - "value": "xxk", - "label": "Xxk", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "xy-ip", - "label": "Xy-ip", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "xyclop", - "label": "Xyclop", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "y-cam", - "label": "Y-cam", - "models_count": 119, - "entries_count": 35 - }, - { - "value": "yale", - "label": "Yale", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "yamla", - "label": "Yamla", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yanivision", - "label": "Yanivision", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "yarsor", - "label": "Yarsor", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yatwin", - "label": "Yatwin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yawcam", - "label": "Yawcam", - "models_count": 36, - "entries_count": 19 - }, - { - "value": "ycc", - "label": "Ycc", - "models_count": 10, - "entries_count": 4 - }, - { - "value": "ycc365", - "label": "Ycc365", - "models_count": 35, - "entries_count": 15 - }, - { - "value": "ycc365-plus", - "label": "Ycc365 Plus", - "models_count": 11, - "entries_count": 7 - }, - { - "value": "yccplus", - "label": "Yccplus", - "models_count": 6, - "entries_count": 6 - }, - { - "value": "yctechcam", - "label": "Yctechcam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yeekamo", - "label": "Yeekamo", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "yeesee", - "label": "Yeesee", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "yeluor-360-2k", - "label": "Yeluor 360 2k", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yeskam", - "label": "Yeskam", - "models_count": 6, - "entries_count": 3 - }, - { - "value": "yeskamo", - "label": "Yeskamo", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "yhdo", - "label": "Yhdo", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "yi", - "label": "Yi", - "models_count": 28, - "entries_count": 8 - }, - { - "value": "yiantime", - "label": "Yiantime", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "yicam", - "label": "Yicam", - "models_count": 13, - "entries_count": 3 - }, - { - "value": "yihack", - "label": "Yihack", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "yiliao", - "label": "Yiliao", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "yinxn", - "label": "Yinxn", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yipc", - "label": "Yipc", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "yoics", - "label": "Yoics", - "models_count": 8, - "entries_count": 6 - }, - { - "value": "yoko-tech", - "label": "Yoko Tech", - "models_count": 10, - "entries_count": 6 - }, - { - "value": "yoluke", - "label": "Yoluke", - "models_count": 42, - "entries_count": 5 - }, - { - "value": "yoosee", - "label": "Yoosee", - "models_count": 72, - "entries_count": 12 - }, - { - "value": "yoteware", - "label": "Yoteware", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "yotex", - "label": "Yotex", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "youluke", - "label": "Youluke", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "ysa", - "label": "Ysa", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ysee", - "label": "Ysee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ysxlite", - "label": "Ysxlite", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "yucheng", - "label": "Yucheng", - "models_count": 41, - "entries_count": 7 - }, - { - "value": "yucvision", - "label": "Yucvision", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "yudor", - "label": "Yudor", - "models_count": 9, - "entries_count": 5 - }, - { - "value": "yunch", - "label": "Yunch", - "models_count": 4, - "entries_count": 1 - }, - { - "value": "yunshian", - "label": "Yunshian", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "yunsye", - "label": "Yunsye", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "yuzun", - "label": "Yuzun", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "z-bravo", - "label": "Z-bravo", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "z5s", - "label": "Z5s", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "zatel", - "label": "Zatel", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zaunip", - "label": "Zaunip", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zavio", - "label": "Zavio", - "models_count": 234, - "entries_count": 17 - }, - { - "value": "zebion", - "label": "Zebion", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zebronics", - "label": "Zebronics", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "zee", - "label": "Zee", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zee-cure", - "label": "Zee Cure", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "zeecam", - "label": "Zeecam", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zeetopin", - "label": "Zeetopin", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zekona", - "label": "Zekona", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "zencam", - "label": "Zencam", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "zenith-cctv", - "label": "Zenith Cctv", - "models_count": 7, - "entries_count": 7 - }, - { - "value": "zennox", - "label": "Zennox", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "zetronix", - "label": "Zetronix", - "models_count": 4, - "entries_count": 4 - }, - { - "value": "zeustech", - "label": "Zeustech", - "models_count": 6, - "entries_count": 2 - }, - { - "value": "zgwang", - "label": "Zgwang", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "zhejiang", - "label": "Zhejiang", - "models_count": 5, - "entries_count": 5 - }, - { - "value": "zicom", - "label": "Zicom", - "models_count": 5, - "entries_count": 4 - }, - { - "value": "zigxico", - "label": "Zigxico", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zilink", - "label": "Zilink", - "models_count": 17, - "entries_count": 9 - }, - { - "value": "zintronic", - "label": "Zintronic", - "models_count": 11, - "entries_count": 5 - }, - { - "value": "zivif", - "label": "Zivif", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "zjuxin", - "label": "Zjuxin", - "models_count": 3, - "entries_count": 2 - }, - { - "value": "zkteco", - "label": "Zkteco", - "models_count": 15, - "entries_count": 8 - }, - { - "value": "zmodo", - "label": "Zmodo", - "models_count": 159, - "entries_count": 56 - }, - { - "value": "znv", - "label": "Znv", - "models_count": 7, - "entries_count": 2 - }, - { - "value": "zodiac-security", - "label": "Zodiac Security", - "models_count": 3, - "entries_count": 3 - }, - { - "value": "zoelink", - "label": "Zoelink", - "models_count": 3, - "entries_count": 1 - }, - { - "value": "zoneminder", - "label": "Zoneminder", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zonet", - "label": "Zonet", - "models_count": 22, - "entries_count": 10 - }, - { - "value": "zoneway", - "label": "Zoneway", - "models_count": 41, - "entries_count": 12 - }, - { - "value": "zonx", - "label": "Zonx", - "models_count": 4, - "entries_count": 3 - }, - { - "value": "zoohi", - "label": "Zoohi", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "zosi", - "label": "Zosi", - "models_count": 238, - "entries_count": 33 - }, - { - "value": "zsgl", - "label": "Zsgl", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "ztcolife-mini-wifi", - "label": "Ztcolife Mini Wifi", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zte", - "label": "Zte", - "models_count": 32, - "entries_count": 11 - }, - { - "value": "zulex", - "label": "Zulex", - "models_count": 2, - "entries_count": 1 - }, - { - "value": "zuum", - "label": "Zuum", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "zvision", - "label": "Zvision", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zxtech", - "label": "Zxtech", - "models_count": 58, - "entries_count": 16 - }, - { - "value": "zysecurity", - "label": "Zysecurity", - "models_count": 2, - "entries_count": 2 - }, - { - "value": "zyxel", - "label": "Zyxel", - "models_count": 46, - "entries_count": 19 - }, - { - "value": "zzlink", - "label": "Zzlink", - "models_count": 1, - "entries_count": 1 - }, - { - "value": "zzmoon", - "label": "Zzmoon", - "models_count": 2, - "entries_count": 2 - } -] \ No newline at end of file diff --git a/data/brands/indexa.json b/data/brands/indexa.json deleted file mode 100644 index de195c8..0000000 --- a/data/brands/indexa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Indexa", - "brand_id": "indexa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NB5210" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "NWB6230F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01.264?dev=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/indigo.json b/data/brands/indigo.json deleted file mode 100644 index e76673a..0000000 --- a/data/brands/indigo.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Indigo", - "brand_id": "indigo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9250" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/profile1" - }, - { - "models": [ - "BX520", - "BX600" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "BX600", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "bx620" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Security HDxxP DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/camera[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/indkoersel.json b/data/brands/indkoersel.json deleted file mode 100644 index 2be7329..0000000 --- a/data/brands/indkoersel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Indkoersel", - "brand_id": "indkoersel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/inesun.json b/data/brands/inesun.json deleted file mode 100644 index 01a6349..0000000 --- a/data/brands/inesun.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "brand": "Inesun", - "brand_id": "inesun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2mp", - "HD-IPC", - "INS-HD360AE-2.0MP", - "INS-HD42-2MP-3X-Plastic", - "INS-HD54F-WIFI", - "IP66", - "IPD-D53Y00", - "IPD-E36Y0701-BS", - "Other", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "5MP", - "INS-HD360AE-2.0MP", - "INS-HD361-2.0MP", - "INS-HD46A-5", - "INS-HD54FAL-5.0MP+POE", - "INS-HD64FAL-5", - "IPD-D53L02-BS", - "IPD-E2A5L18-BS", - "Other", - "PTZ", - "PZT IP", - "THEBEST" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "5MP", - "HDIPC", - "Inesun PTZ", - "INS-HD360AE-2.0MP", - "INS-HD46A-5", - "INS-HD54FAL-5", - "Other", - "ptz", - "pzt ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/mpeg4cif" - }, - { - "models": [ - "INS-HD360AE-2.0MP", - "INS-HD43AE-2.0MP", - "INS-HD616-5", - "IPD-E36Y0701-BS", - "Other", - "PTZ camera", - "PZT IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "INS-HD46RM-5.0MP+poe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "INS-HD54F-WIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "IPD-D53Y0701-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264major" - }, - { - "models": [ - "IPD-D53Y0701-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264minor" - } - ] -} \ No newline at end of file diff --git a/data/brands/infinity.json b/data/brands/infinity.json deleted file mode 100644 index 43cfe5d..0000000 --- a/data/brands/infinity.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Infinity", - "brand_id": "infinity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "253L", - "ISE-2000EX Z22" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - }, - { - "models": [ - "253L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "i82" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "IPB-TDN540SL" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "IPG40A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/infinova.json b/data/brands/infinova.json deleted file mode 100644 index 18fa0c6..0000000 --- a/data/brands/infinova.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Infinova", - "brand_id": "infinova", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "onvif", - "Other", - "V1492MP-30T", - "V1492MP-30T25HE", - "V6204", - "v6411", - "VH111-A20B-A0", - "VH224-A20B-A012" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1/h264major" - }, - { - "models": [ - "Other", - "V2501-M" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other", - "V6204" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1.AMP" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1/mjpeg" - }, - { - "models": [ - "V6842" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video1enc1" - } - ] -} \ No newline at end of file diff --git a/data/brands/infocus.json b/data/brands/infocus.json deleted file mode 100644 index 654f1b7..0000000 --- a/data/brands/infocus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Infocus", - "brand_id": "infocus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INA-PTZ-3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ing.json b/data/brands/ing.json deleted file mode 100644 index f339f2f..0000000 --- a/data/brands/ing.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ing", - "brand_id": "ing", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ingeek.json b/data/brands/ingeek.json deleted file mode 100644 index 5dab05e..0000000 --- a/data/brands/ingeek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ingeek", - "brand_id": "ingeek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ingenic-v01.json b/data/brands/ingenic-v01.json deleted file mode 100644 index 79683f1..0000000 --- a/data/brands/ingenic-v01.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ingenic-v01", - "brand_id": "ingenic-v01", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM-100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ingresso.json b/data/brands/ingresso.json deleted file mode 100644 index 611b75e..0000000 --- a/data/brands/ingresso.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Ingresso", - "brand_id": "ingresso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IN-3010" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_tunnel" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/ingressosede.json b/data/brands/ingressosede.json deleted file mode 100644 index 109227b..0000000 --- a/data/brands/ingressosede.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ingressosede", - "brand_id": "ingressosede", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/inisoft-cam.json b/data/brands/inisoft-cam.json deleted file mode 100644 index 1b30630..0000000 --- a/data/brands/inisoft-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Inisoft-cam", - "brand_id": "inisoft-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Stan 2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/inkovideo.json b/data/brands/inkovideo.json deleted file mode 100644 index d1e90bf..0000000 --- a/data/brands/inkovideo.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "brand": "Inkovideo", - "brand_id": "inkovideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "107HD", - "V-105HD", - "v107", - "V107-HD", - "V-111HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "110hd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "117hd", - "120", - "125", - "v120", - "V811-8MW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "120" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/22/" - }, - { - "models": [ - "125", - "ty803", - "V-111-4M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "125", - "v120" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/22" - }, - { - "models": [ - "IK-312W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other", - "Wohnzimmer" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "V-104" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "v-104w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "V-105" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "V-110" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "V-110" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "V-110HD", - "V-111HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "V-110HD", - "V200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/innekt.json b/data/brands/innekt.json deleted file mode 100644 index acd05b1..0000000 --- a/data/brands/innekt.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Innekt", - "brand_id": "innekt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SP-H02W", - "zd12033p", - "ZDI2033P", - "ZP1132P", - "ZPI132P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ZDI2033P", - "ZPI132P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "ZDI2033P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/inngang.json b/data/brands/inngang.json deleted file mode 100644 index bfb0dec..0000000 --- a/data/brands/inngang.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Inngang", - "brand_id": "inngang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DCS-930LB1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "DCS-932LB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/innmat.json b/data/brands/innmat.json deleted file mode 100644 index d7def92..0000000 --- a/data/brands/innmat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Innmat", - "brand_id": "innmat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/inno-vision.json b/data/brands/inno-vision.json deleted file mode 100644 index 3161864..0000000 --- a/data/brands/inno-vision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Inno Vision", - "brand_id": "inno-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VONO2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VONO2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/innotrends.json b/data/brands/innotrends.json deleted file mode 100644 index 999a94c..0000000 --- a/data/brands/innotrends.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Innotrends", - "brand_id": "innotrends", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "xm-202-2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "Smart Wifi Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/innovatek.json b/data/brands/innovatek.json deleted file mode 100644 index 4bc74ca..0000000 --- a/data/brands/innovatek.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Innovatek", - "brand_id": "innovatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/innovative-security-designs.json b/data/brands/innovative-security-designs.json deleted file mode 100644 index a6dd9d6..0000000 --- a/data/brands/innovative-security-designs.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Innovative Security Designs", - "brand_id": "innovative-security-designs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/innovo.json b/data/brands/innovo.json deleted file mode 100644 index b6ce41c..0000000 --- a/data/brands/innovo.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Innovo", - "brand_id": "innovo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Vono 2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Vono 2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Vono 2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/inosun.json b/data/brands/inosun.json deleted file mode 100644 index 3914acc..0000000 --- a/data/brands/inosun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Inosun", - "brand_id": "inosun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/inpotek.json b/data/brands/inpotek.json deleted file mode 100644 index b0601d3..0000000 --- a/data/brands/inpotek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Inpotek", - "brand_id": "inpotek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC66RV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/inqmega.json b/data/brands/inqmega.json deleted file mode 100644 index 40a45a9..0000000 --- a/data/brands/inqmega.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Inqmega", - "brand_id": "inqmega", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "AKPRO", - "CloudCam", - "H264", - "HD 1080P", - "HIP291L", - "IL-HIP291L-2M-AI", - "Other", - "ST-381-2M-TY", - "ST-382-2M-YC", - "ST-425E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/h264_stream" - }, - { - "models": [ - "1080", - "11080", - "720p", - "AKPRO", - "cloudcam", - "HD 1080P", - "HIP291", - "Other", - "st-379", - "st-381", - "ST-382-2M-YC", - "ST-425-3M-TY", - "ycc365 plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "HD 1080P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/inscape.json b/data/brands/inscape.json deleted file mode 100644 index aca7c20..0000000 --- a/data/brands/inscape.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Inscape", - "brand_id": "inscape", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Data NVC910H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg.jpg" - }, - { - "models": [ - "Data NVC910H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg1.jpg" - }, - { - "models": [ - "Data NVC910H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg2.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/inside.json b/data/brands/inside.json deleted file mode 100644 index be12ae0..0000000 --- a/data/brands/inside.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Inside", - "brand_id": "inside", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC-1200 SERIES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "V3080S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/insma.json b/data/brands/insma.json deleted file mode 100644 index 6e049de..0000000 --- a/data/brands/insma.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Insma", - "brand_id": "insma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Minicam", - "Mini-camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/instar.json b/data/brands/instar.json deleted file mode 100644 index 02c8806..0000000 --- a/data/brands/instar.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "brand": "Instar", - "brand_id": "instar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080HD", - "5905", - "5907HD", - "5907HD-oniv", - "6001", - "6001HD", - "6012", - "6012HD", - "7011", - "7011 HD", - "9003", - "9008FullHD", - "9020", - "HD6014", - "IN-1612HD", - "IN2901", - "IN-5907", - "IN-6012", - "IN-6012HD", - "IN-6014", - "IN-6014HD", - "IN-8001 Full HD", - "IN-8003 FullHD PoE", - "IN-8003FHD-PoE", - "IN-9008FHD-POE", - "IN-9020HD", - "instar 6012 HD", - "INSTAR IN-5/6/7 HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "2090", - "IN-9020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "29025", - "2905", - "3003", - "3005", - "3011", - "4010", - "4011", - "IN-2/3/4 Series", - "IN2901", - "IN-2905 V2", - "IN-2908", - "IN-3010", - "IN-3011", - "INSTAR3011", - "INSTAR3100", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "2905", - "6102", - "IN-7011" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "2905", - "IN-2905", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2905", - "IN-3011", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2905" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "2905", - "3010", - "4010", - "IN-3011", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "2905" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "3003", - "IN-2905", - "IN-3010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "3011", - "IN-2905", - "IN-2905 v2", - "IN-2907", - "IN-2908" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "4010", - "IN-2/3/4 Series", - "IN-2905", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "4010", - "IN-3010" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "4010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "4011", - "IN-2/3/4 Series", - "IN-3010", - "IN-3011", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "5905-HD", - "5907HD", - "7011" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "5907", - "5907HD", - "5907HD-ONIV", - "6001", - "6011", - "6012", - "6012HD", - "6014HD", - "7011 HD", - "8015", - "9008HD", - "9020", - "HD5907", - "IN-3010", - "IN-5907", - "IN-6001HD", - "IN-6011", - "IN-6012HD", - "in-8015", - "IN-8015 Full HD", - "IN-8015 FullHD", - "IN-9008HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "5907", - "5907HD", - "IN-6012", - "IN-6014HD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "5907", - "6011" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5907HD", - "6012 (RTSP)", - "6012HD", - "6014HD", - "IN-2905", - "IN-6014HD", - "instar 6012 HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "5907HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias[CHANNEL]" - }, - { - "models": [ - "5907HD", - "5907HD-rtsp", - "6001HD", - "HD6014", - "IN-6001HD", - "IN-8003 FullHD PoE", - "IN-9010FullHD", - "IN-9408 2K+ POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "5908" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "6011", - "IN-9008HD" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "6011" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "8415 2K+", - "9820", - "IN-9408", - "IN-9408 2K+", - "IN-9408 2K+ POE", - "IN-9420 2K", - "IN-9420 2K+" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/livestream/11" - }, - { - "models": [ - "9420", - "IN-8401 2K+", - "IN-9408 2K+" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/livestream/13" - }, - { - "models": [ - "9420 4k+" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/livestream/11?action=play&media=mjpeg&user=[USERNAME]&pwd=TestInstar12345%21" - }, - { - "models": [ - "9420 4k+" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/livestream/13?action=play&media=mjpeg&user=[USERNAME]&pwd=TestInstar12345%21" - }, - { - "models": [ - "IN-2/3/4 Series", - "IN-2905", - "IN-3010", - "IN-3011" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "IN2901", - "IN-3010", - "IN-9020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "IN-2905 v2", - "IN-3011", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IN-6001HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IN-8015 Full HD", - "IN-9010FullHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "IN-8401 2K+" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/livestream/12?action=play&media=mjpeg&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IN-9008FHD-POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/13" - }, - { - "models": [ - "IN-9408 2K+" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/livestream/12" - }, - { - "models": [ - "IN-9408 2K+" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/livestream/12?action=play&media=mjpeg&user=[USERNAME]&pwd=Bellavista%40213695" - }, - { - "models": [ - "IN-9408 2K+ POE", - "IN-9420 2K", - "Instar9408" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/livestream/11?action=play&media=mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/instek-digital.json b/data/brands/instek-digital.json deleted file mode 100644 index ada884e..0000000 --- a/data/brands/instek-digital.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Instek Digital", - "brand_id": "instek-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/insun.json b/data/brands/insun.json deleted file mode 100644 index 77ac8b0..0000000 --- a/data/brands/insun.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Insun", - "brand_id": "insun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INS-IPPTZ02", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/insys.json b/data/brands/insys.json deleted file mode 100644 index 9e6188a..0000000 --- a/data/brands/insys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Insys", - "brand_id": "insys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "350" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/intamac.json b/data/brands/intamac.json deleted file mode 100644 index 6593c7b..0000000 --- a/data/brands/intamac.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Intamac", - "brand_id": "intamac", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/intelbras.json b/data/brands/intelbras.json deleted file mode 100644 index 64dc1e9..0000000 --- a/data/brands/intelbras.json +++ /dev/null @@ -1,449 +0,0 @@ -{ - "brand": "Intelbras", - "brand_id": "intelbras", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1230", - "im5", - "iM7", - "MHDX1016", - "Other", - "VIP", - "VIP-5450-D-Z", - "VIPS4220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "3000vd", - "IC4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=3&subtype=00" - }, - { - "models": [ - "3008HDX", - "ic3", - "MHDX1016", - "NVD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=0" - }, - { - "models": [ - "3220B", - "HDCVI 3116 G2", - "iM5+ Full Color", - "muithd", - "MULTIHD", - "Other", - "v3000", - "VIP 1230" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "5450", - "iM7", - "mhdx 1116", - "MHDX1016", - "OUTRO", - "VD5032", - "vip 3020", - "VIP S3020 G2", - "VIPS3020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "BR_1", - "Other", - "OUTRO", - "S4120", - "vip", - "VIP 1020 G2", - "VIP 5230 SD", - "VIP 5450 D Z", - "VIP4120", - "VIPS3020", - "VIP-S3120", - "VIPS4020g2", - "WS100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "dvr 3116" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 554, - "url": "/2Fonvif/2Fdevice_service" - }, - { - "models": [ - "DVR iMHDX 3016" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 54713, - "url": "/cam/realmonitor?channel=2&subtype=1" - }, - { - "models": [ - "DVR MHDX 508", - "MHDX 3116", - "mxhd 3108" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=4&subtype=1&authBasic=YWRtaW46KkFkMzFuMTV0UjJjWDAj" - }, - { - "models": [ - "HDCI 1032", - "Other", - "vd3000", - "VIP 1230" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HDCVI 3116 G2", - "iM3", - "Mibo IM3", - "VIp", - "VIP-S3330", - "VIP-S3330-G2", - "VIP-S4020-G2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "ic3", - "IC3", - "IC4", - "VIP 1020 G2", - "VIP1220", - "VIP1220B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "ic3", - "iM4-C", - "IM4C", - "IME 360", - "mhdx 1116", - "mibo ic3", - "Mibo IM3", - "teste", - "VIP", - "VIP 3230", - "VIP-1020-B-G2", - "VIP-S3120", - "VIPS4020g2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "ic3", - "IC5", - "Innovar", - "ISIC 6", - "Mibo iC3", - "Other", - "S3020", - "s3120", - "VD3016", - "VIP", - "VIP 3250 MIC", - "vip25", - "VIP4120", - "VIPS3020", - "VIP-S3120", - "VIPS4100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ic3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IM3", - "VIP-1230-D-G3" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true" - }, - { - "models": [ - "IM4" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=T%4001051938" - }, - { - "models": [ - "IM5 SC" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=tkto%40070810" - }, - { - "models": [ - "iM5+ Full Color", - "MHDX 3004-C", - "Multihd", - "VIP 3230", - "VIP-1230-D-G2", - "VIP-3230-B-SL", - "VIP-3230-D-SL-G2", - "VIP-3240-Z-G3" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "iM7-FC-8138", - "Multi HD", - "VIP 1230", - "VIP 1230 B", - "VIP 3330 G2", - "VIP-1230-B-G2", - "VIP-3240-ZG3" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "iMHDX 3016" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 54713, - "url": "/cam/realmonitor?channel=3&subtype=1" - }, - { - "models": [ - "ISIC 6", - "Other", - "VD3016", - "VD5032" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "MHDX 1008", - "VIP-3240-D-IA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=nederland1%21" - }, - { - "models": [ - "MHDX 508" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authBasic=YWRtaW46KkFkMzFuMTV0UjJjWDAj" - }, - { - "models": [ - "MHDX 508" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=2&subtype=1&authBasic=YWRtaW46KkFkMzFuMTV0UjJjWDAj" - }, - { - "models": [ - "Mibo iC3", - "vip 3020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=00" - }, - { - "models": [ - "Other", - "PVIP1000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5501, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "Other", - "VIPS4020g2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Olumornezcpc11%23" - }, - { - "models": [ - "vd3000", - "VIP 1020 G2", - "VIP 1220B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "url": "/" - }, - { - "models": [ - "VIP", - "VIP E4320Z", - "VIPS4100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "VIP 1020 G2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[PASSWORD]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "vip 1220 B", - "VIP 1220B", - "VIP1220G3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "VIP E-5230 SD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "VIP-3230-D-SL-G2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=6pRb%237h8" - }, - { - "models": [ - "VIPP" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VIPS4020g2" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "VIPS4100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/intelkam.json b/data/brands/intelkam.json deleted file mode 100644 index d2c6c48..0000000 --- a/data/brands/intelkam.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Intelkam", - "brand_id": "intelkam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "203", - "wr-109" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "203", - "wip-203vr", - "ZZZZ-580812-FBDEE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "wip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "wip-203vr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/intelli.json b/data/brands/intelli.json deleted file mode 100644 index 83096b9..0000000 --- a/data/brands/intelli.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Intelli", - "brand_id": "intelli", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/intelligent-network.json b/data/brands/intelligent-network.json deleted file mode 100644 index a56102b..0000000 --- a/data/brands/intelligent-network.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Intelligent Network", - "brand_id": "intelligent-network", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CN-PT200", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "GE-100-CB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/intellinet.json b/data/brands/intellinet.json deleted file mode 100644 index 14b6c18..0000000 --- a/data/brands/intellinet.json +++ /dev/null @@ -1,331 +0,0 @@ -{ - "brand": "Intellinet", - "brand_id": "intellinet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5031277", - "503792", - "524421", - "5302468", - "550710", - "BVJH", - "ICD-862 HD", - "IDC-862", - "Int L200", - "INTELLINET CAMERA", - "INT-L10", - "INT-W200", - "L10", - "MNC-L10", - "N1000", - "NBC30", - "NBC30-IR", - "NCS18", - "NFC30", - "NFC30IR", - "NFC30-WG", - "nfc31", - "NFC31IR", - "NFC-WG", - "NFD30", - "NSC11", - "NSC11-WN", - "NSC15", - "NSC16-WG", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "503792", - "551106", - "l10", - "MNC-L10", - "NCS18", - "NSC18", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "temp/image.jpg" - }, - { - "models": [ - "503792", - "551106", - "NSC18", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "503792", - "550710", - "INT-L10", - "NSC18", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "5057231", - "5237001", - "550710", - "551106", - "Int L200", - "INTELLINET CAMERA", - "INT-L10", - "MNC-L10", - "NBC", - "NFC30", - "NFC-WG", - "NFD130-IR", - "nfd30", - "NSC16-WG", - "NSC18", - "Other", - "romanelli" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "550710", - "551106", - "INT-L10", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi" - }, - { - "models": [ - "550949", - "NFC30", - "NFC30-IR", - "NFC31", - "NFC31 IR", - "NSC15-WG", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "550963", - "INTELLINET CAMERA", - "N1250", - "NFD130-IR", - "NFD30", - "NSC15", - "OLD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mp4" - }, - { - "models": [ - "551106", - "intellinet camera", - "INT-L10", - "N1000", - "NCS18", - "NFC31", - "NFD130-IR", - "NFD30", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "551106", - "intellinet camera", - "NBC30-IR", - "NFC30", - "NFC30IR", - "NFC30-WG", - "NFC31", - "NFD30", - "NSC11-WN", - "NSC15", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "IBC-637IR", - "IDC-757IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - }, - { - "models": [ - "IBC-637IR", - "IDC-752IR", - "IDC-757IR", - "IDC-767IR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "ic-1500s", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "intellinet camera", - "int-w100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image.cgi" - }, - { - "models": [ - "INT-L10", - "MNC-L10" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/image.jpg" - }, - { - "models": [ - "NCS18", - "NSC11", - "NSC11-WN", - "NSC18", - "NSC18-WN", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "NFC31", - "NFC31 IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "NSC11", - "OLD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "NSC11-WN", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "NSC18" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "loginfree.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/intellio.json b/data/brands/intellio.json deleted file mode 100644 index f1edb58..0000000 --- a/data/brands/intellio.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Intellio", - "brand_id": "intellio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ILB-340-BL-F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/intellsec.json b/data/brands/intellsec.json deleted file mode 100644 index 3ab694d..0000000 --- a/data/brands/intellsec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Intellsec", - "brand_id": "intellsec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7Inch 20X" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/interlogix.json b/data/brands/interlogix.json deleted file mode 100644 index 33647cb..0000000 --- a/data/brands/interlogix.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "brand": "Interlogix", - "brand_id": "interlogix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVT-M1210W-2W-N", - "Other", - "TVB-5302", - "TVD-3105", - "TVD-5502", - "TvW-3101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other", - "tvd-5302", - "TVW-1101", - "TVW-3101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 64001, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other", - "TVW-3101" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other", - "TVB-5304", - "TVB-5605", - "TVD-1103", - "tvd-5302", - "TVD-M1245E-2M-N", - "TVW-1101", - "TVW-3101", - "TVW-3120", - "TVW-5302" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 64001, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "RS-3250", - "TVW-3120" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "RS-3251" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "TVD-3101", - "TVW-5305" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/interna.json b/data/brands/interna.json deleted file mode 100644 index 370ccf2..0000000 --- a/data/brands/interna.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Interna", - "brand_id": "interna", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/internal.json b/data/brands/internal.json deleted file mode 100644 index a7de8c4..0000000 --- a/data/brands/internal.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Internal", - "brand_id": "internal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/internet-eye.json b/data/brands/internet-eye.json deleted file mode 100644 index 14b5b6f..0000000 --- a/data/brands/internet-eye.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Internet Eye", - "brand_id": "internet-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M6840" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "M6840", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "M6840" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/stream_[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/interno.json b/data/brands/interno.json deleted file mode 100644 index 721da60..0000000 --- a/data/brands/interno.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Interno", - "brand_id": "interno", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Pelco" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/intervision.json b/data/brands/intervision.json deleted file mode 100644 index 60a8660..0000000 --- a/data/brands/intervision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Intervision", - "brand_id": "intervision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/intex.json b/data/brands/intex.json deleted file mode 100644 index bafcfa1..0000000 --- a/data/brands/intex.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Intex", - "brand_id": "intex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "It 101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "video" - } - ] -} \ No newline at end of file diff --git a/data/brands/invid.json b/data/brands/invid.json deleted file mode 100644 index ef7687a..0000000 --- a/data/brands/invid.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Invid", - "brand_id": "invid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MK21", - "MK279IR", - "VKS87" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - }, - { - "models": [ - "MK21", - "VKS87" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/invidtech.json b/data/brands/invidtech.json deleted file mode 100644 index 82cfc50..0000000 --- a/data/brands/invidtech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Invidtech", - "brand_id": "invidtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ULT-P4DRIR28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "ULT-P4DRIR28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/inwerang.json b/data/brands/inwerang.json deleted file mode 100644 index 1e7dc3a..0000000 --- a/data/brands/inwerang.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Inwerang", - "brand_id": "inwerang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IWR-IP2P21DSWE7" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IWR-IP2P21DSWE7" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/0/MAIN" - } - ] -} \ No newline at end of file diff --git a/data/brands/io-data.json b/data/brands/io-data.json deleted file mode 100644 index 5e40e9d..0000000 --- a/data/brands/io-data.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "brand": "Io Data", - "brand_id": "io-data", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "Qwatch", - "TS-NA220W", - "TS-NS410W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other", - "qwatch", - "Qwatch", - "TS-WLC2", - "TS-WPTCAM", - "ts-wrfe" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "qwatch", - "Qwatch", - "TS-WLC2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "qwatch", - "RTSTS-WRLP", - "TS-WRLP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "Qwatch" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Qwatch" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-300ptw.json b/data/brands/ip-300ptw.json deleted file mode 100644 index 04b099e..0000000 --- a/data/brands/ip-300ptw.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip-300ptw", - "brand_id": "ip-300ptw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-402b.json b/data/brands/ip-402b.json deleted file mode 100644 index 2a52fca..0000000 --- a/data/brands/ip-402b.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ip-402b", - "brand_id": "ip-402b", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-buiten.json b/data/brands/ip-buiten.json deleted file mode 100644 index 5bac7ca..0000000 --- a/data/brands/ip-buiten.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip Buiten", - "brand_id": "ip-buiten", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip LAN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-camera-(android).json b/data/brands/ip-camera-(android).json deleted file mode 100644 index 97992d8..0000000 --- a/data/brands/ip-camera-(android).json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "brand": "Ip Camera (android)", - "brand_id": "ip-camera-(android)", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SGZ3N0P3L2", - "C9F0SfZ3N0P6L0", - "C9F0SgZ3N0PbL0", - "ssd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HKview" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP WEBCAM FOR ANDROID", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "IP WEBCAM FOR ANDROID" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4747, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "IP-CAMERA", - "XT1609" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video" - }, - { - "models": [ - "Pixel", - "Pro" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "TinyCam" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 8083, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-camera.json b/data/brands/ip-camera.json deleted file mode 100644 index 0ac81a1..0000000 --- a/data/brands/ip-camera.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Ip-camera", - "brand_id": "ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC 1.3.0" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 80, - "url": "/ch0_0.264" - }, - { - "models": [ - "IPC 1.3.0" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 80, - "url": "/ch0_1.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "v380pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-chitchat.json b/data/brands/ip-chitchat.json deleted file mode 100644 index 9e9aae3..0000000 --- a/data/brands/ip-chitchat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip Chitchat", - "brand_id": "ip-chitchat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PT-DOOR01C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-m-p836v.json b/data/brands/ip-m-p836v.json deleted file mode 100644 index e969235..0000000 --- a/data/brands/ip-m-p836v.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip-m-p836v", - "brand_id": "ip-m-p836v", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-phone-camera.json b/data/brands/ip-phone-camera.json deleted file mode 100644 index a92a6e1..0000000 --- a/data/brands/ip-phone-camera.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Ip Phone Camera", - "brand_id": "ip-phone-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF PROFILE S", - "safikul" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-power.json b/data/brands/ip-power.json deleted file mode 100644 index ea26c84..0000000 --- a/data/brands/ip-power.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Ip Power", - "brand_id": "ip-power", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NIT C422D-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/snl/live/1/2" - }, - { - "models": [ - "NLP C2712M-W72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/profile1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-pro-tech.json b/data/brands/ip-pro-tech.json deleted file mode 100644 index f6d3521..0000000 --- a/data/brands/ip-pro-tech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ip Pro Tech", - "brand_id": "ip-pro-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-speeddome.json b/data/brands/ip-speeddome.json deleted file mode 100644 index e0b975b..0000000 --- a/data/brands/ip-speeddome.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Ip-speeddome", - "brand_id": "ip-speeddome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EP_PELCO_D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v2" - }, - { - "models": [ - "EP_PELCO_D", - "Secuplug" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "IPN3402HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-t5201-f.json b/data/brands/ip-t5201-f.json deleted file mode 100644 index 491c6f9..0000000 --- a/data/brands/ip-t5201-f.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip-t5201-f", - "brand_id": "ip-t5201-f", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Escam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-video.json b/data/brands/ip-video.json deleted file mode 100644 index ef76c18..0000000 --- a/data/brands/ip-video.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ip Video", - "brand_id": "ip-video", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "9100A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-webcam-(android).json b/data/brands/ip-webcam-(android).json deleted file mode 100644 index d158b87..0000000 --- a/data/brands/ip-webcam-(android).json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "brand": "Ip Webcam (android)", - "brand_id": "ip-webcam-(android)", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANDOID IP CAMERA", - "ANDROID LG", - "IP WEBCAM ANDROID", - "IP-CAMERA", - "IPHONE", - "LG K4 2017", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "ANDROID LG", - "IP Webcam(Android)", - "Other", - "wiko" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "ip web", - "Pixel 2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - }, - { - "models": [ - "IP WEBCAM ANDROID", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "IP WEBCAM ANDROID", - "Other", - "Xiaomi Redmi Note 5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "IP WEBCAM ANDROID" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video?submenu=mjpg" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Pixel 2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-webcam-android.json b/data/brands/ip-webcam-android.json deleted file mode 100644 index e9d037a..0000000 --- a/data/brands/ip-webcam-android.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Ip Webcam Android", - "brand_id": "ip-webcam-android", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP WEBCAM FOR ANDROID", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video?1280x720" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "White Phone" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-webcam-app.json b/data/brands/ip-webcam-app.json deleted file mode 100644 index e04900d..0000000 --- a/data/brands/ip-webcam-app.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Ip Webcam App", - "brand_id": "ip-webcam-app", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Webcam(Android)" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "IP-CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IP-CAMERA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Telefoon" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-webcam-pro.json b/data/brands/ip-webcam-pro.json deleted file mode 100644 index becfe5b..0000000 --- a/data/brands/ip-webcam-pro.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Ip Webcam Pro", - "brand_id": "ip-webcam-pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Galaxy note 8", - "Galaxy S21", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "Galaxy S10+", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - }, - { - "models": [ - "Moto G", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "videofeed" - }, - { - "models": [ - "Moto G" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video/mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/video/h264" - }, - { - "models": [ - "PSI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip-webcam.json b/data/brands/ip-webcam.json deleted file mode 100644 index 5b01594..0000000 --- a/data/brands/ip-webcam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ip Webcam", - "brand_id": "ip-webcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAMHI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - }, - { - "models": [ - "SN-IPC-HW16" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip112.json b/data/brands/ip112.json deleted file mode 100644 index a6733ca..0000000 --- a/data/brands/ip112.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ip112", - "brand_id": "ip112", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EASYN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip302.json b/data/brands/ip302.json deleted file mode 100644 index 45a2c3d..0000000 --- a/data/brands/ip302.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip302", - "brand_id": "ip302", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip3393pv2.json b/data/brands/ip3393pv2.json deleted file mode 100644 index 0495d0c..0000000 --- a/data/brands/ip3393pv2.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Ip3393pv2", - "brand_id": "ip3393pv2", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "zot" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Other", - "ZOT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip400.json b/data/brands/ip400.json deleted file mode 100644 index e96b509..0000000 --- a/data/brands/ip400.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip400", - "brand_id": "ip400", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip4112poe.json b/data/brands/ip4112poe.json deleted file mode 100644 index 0af602d..0000000 --- a/data/brands/ip4112poe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip4112poe", - "brand_id": "ip4112poe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip66.json b/data/brands/ip66.json deleted file mode 100644 index d95d7a3..0000000 --- a/data/brands/ip66.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ip66", - "brand_id": "ip66", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip6795p.json b/data/brands/ip6795p.json deleted file mode 100644 index 0c75ce0..0000000 --- a/data/brands/ip6795p.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip6795p", - "brand_id": "ip6795p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ip_cam_inspector.json b/data/brands/ip_cam_inspector.json deleted file mode 100644 index 1906a15..0000000 --- a/data/brands/ip_cam_inspector.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ip_cam_inspector", - "brand_id": "ip_cam_inspector", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Turbo-X" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipbell.json b/data/brands/ipbell.json deleted file mode 100644 index a6d07f5..0000000 --- a/data/brands/ipbell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipbell", - "brand_id": "ipbell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "doorbell" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc-bo.json b/data/brands/ipc-bo.json deleted file mode 100644 index 7304177..0000000 --- a/data/brands/ipc-bo.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "brand": "Ipc-bo", - "brand_id": "ipc-bo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "01b", - "A03", - "Reo-A03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_06_sub" - }, - { - "models": [ - "02a", - "160", - "193", - "A01", - "B01", - "REO-A01", - "Reo-B1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_03_sub" - }, - { - "models": [ - "02b", - "192", - "B02", - "Reo_B02", - "RLN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_11_sub" - }, - { - "models": [ - "410ws", - "baksida", - "C1 Pro", - "E1pro", - "fewr", - "Other", - "RCL-422W", - "rlc 410", - "RLC240", - "rlc-422w", - "RLC-511", - "RLC-511W", - "RLC-520", - "rln16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "B02", - "Reo_B02", - "rln16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_04_sub" - }, - { - "models": [ - "IPC_523128M5MP", - "ip-rln", - "Other", - "rlc-410-5mp", - "RLC-520A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_sub" - }, - { - "models": [ - "IPG-8150PSS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/MainStream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_03_main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_02_main" - }, - { - "models": [ - "RCL-520A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc-f10p.json b/data/brands/ipc-f10p.json deleted file mode 100644 index b75cd12..0000000 --- a/data/brands/ipc-f10p.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipc-f10p", - "brand_id": "ipc-f10p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc-model.json b/data/brands/ipc-model.json deleted file mode 100644 index d9fdc37..0000000 --- a/data/brands/ipc-model.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Ipc-model", - "brand_id": "ipc-model", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "255" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "c2m", - "DOME", - "FOSCAM G2", - "ip2m-841" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "FI9828" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/videoSub" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc-other.json b/data/brands/ipc-other.json deleted file mode 100644 index 642f30c..0000000 --- a/data/brands/ipc-other.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ipc-other", - "brand_id": "ipc-other", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3.0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "ONVIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "V380 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc.json b/data/brands/ipc.json deleted file mode 100644 index 2f1b2a5..0000000 --- a/data/brands/ipc.json +++ /dev/null @@ -1,1121 +0,0 @@ -{ - "brand": "Ipc", - "brand_id": "ipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002", - "007", - "008", - "0431113", - "1.0", - "128", - "270", - "2cu", - "2mpvd28w", - "355903", - "409217", - "41528", - "420", - "420274", - "432836", - "509", - "720 P IP Camera", - "888888", - "900", - "999999", - "aldi", - "Aly011", - "AOMG", - "ap009", - "ap011", - "black", - "C1801w", - "CACOON", - "cam400637", - "CAMERA_ALBA", - "camnoopy", - "camnoopy usc1401w", - "cn-PT100", - "Cocoon", - "COCOON", - "cotpro", - "CS1", - "cube", - "Cube-Cam-GF", - "Daz", - "DB power", - "dbpower", - "DBPOWER", - "DBPower C200E", - "Demo", - "Dev.GW", - "Digital Zoom Dome", - "dre", - "EagleStar Pro", - "e-ray", - "eRobot", - "ESCAM", - "escam patron", - "ESCAM QF500", - "EscamPea", - "EscamQF500", - "ES-IP810W", - "eture", - "FS-IPH02W", - "hikam", - "HiKam", - "HIKam", - "HIKAM", - "HiKam Q7", - "Hosafe", - "HS-100", - "ideanext", - "IdeaNext", - "IPBH02", - "IPC_407046", - "IPC_435247", - "IPC_W3", - "IPC-911", - "IPcamera1", - "iphd08", - "IPW71", - "ircam", - "IT315003", - "IZTouch", - "JA-700MRB-T-US", - "ja-as-us", - "klingel", - "latset", - "lta", - "model", - "MTSP007", - "Neptune", - "ONVIF", - "Other", - "Otherd", - "p9000", - "pool cam", - "PT100", - "PT100A", - "qd300", - "QF 502", - "qf500", - "QF500", - "QF506", - "QF605", - "QP500", - "S0008", - "s008", - "Scricam AP004", - "second_ipcam", - "sheraz", - "Sircam", - "siri1", - "sp0008", - "SP0008", - "sp005", - "SP005", - "sp006", - "SP006", - "sp007", - "SP007", - "sp008", - "SP008", - "sp009", - "SP009", - "SP009A", - "SP011", - "SP012", - "SP06", - "SP07", - "sp09", - "sp900c", - "SPC_KST-1-720P", - "SPC-KST-1-720", - "SPOO5", - "SR008", - "sri", - "Sri1", - "SRI-2", - "sricam", - "Sricam", - "SRICAM", - "SriCam AP006", - "Sricam AP009", - "Sricam SP", - "sricam sp007", - "sricam sp009", - "Sricam SP009", - "SRICAM SP011", - "SriCam SP09", - "Sricam_011", - "sricam1", - "Sricamm", - "st-hip296", - "TATA_ALBA", - "testcam", - "TP100", - "TP100C", - "ts-hip296", - "USC 1503W", - "USC1901W", - "VC-IPC01", - "XH-W3", - "yoosee 360 cam", - "yoosee360", - "yy100s-zcm", - "yyp2p", - "Zebora", - "zimmer", - "ZND113M", - "Zosi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "002", - "ip-cam", - "Other", - "ZOSI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "1", - "2", - "730", - "active", - "AMAXN1", - "Dome", - "fisheyes", - "GUANGZHOU", - "h360", - "IP-CAM", - "ipcan", - "IPCM", - "IPG-5013PAS-S", - "ja-c6712a", - "Meseias", - "Model99", - "nk521WEL", - "Other", - "saance", - "sricam sp007", - "Tn Systems", - "VRCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "1.2.0", - "1.4.0", - "1232", - "1920", - "1mp", - "2101IP-V", - "550", - "720", - "720p", - "a", - "A-811", - "aesun", - "ak-3509", - "AK3509", - "AMAX_6322W1", - "Anben", - "B10", - "BP20S-13H", - "BPI205-2H", - "BSC01611", - "bullet", - "BULLWARK", - "cctvkit", - "comelit", - "CYBER", - "dkseg", - "DOOM", - "fdre", - "gq6062ha", - "h360", - "HDCCTV", - "IPC02", - "IPC1MP", - "ip-cam", - "ja-c6712a", - "j-d700l", - "kenvs", - "kuhinja", - "KVSDOME200-95", - "LZ-915IPC", - "M05", - "MADE IN CHINA", - "marcucci", - "napco", - "NK-521 WEL", - "nvr", - "Other", - "p9000", - "P-D140", - "P-S210VB", - "Reverse", - "R-MQ705V", - "snb-1322", - "svision", - "teste", - "vanxse", - "v-b810", - "V-B811", - "V-D348", - "V-D348-IP", - "VG2.0MP", - "vr camera", - "VRCAM", - "wide", - "wip30", - "wooodsee", - "YooseBullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "10001WI", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "1MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch1_s1" - }, - { - "models": [ - "2006w", - "B1", - "B-Series", - "IPC-2007W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "200BMP", - "365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "201", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "2138", - "IPC-A26H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "2138", - "38JPX", - "HDIPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "2MPVD28E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3.9.3", - "EC107-X15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "325", - "IP-CAM", - "IPG-7420PHS-S", - "IPG-7920PSS-AI/FD/T6", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "365" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "365", - "A7-New", - "DM80IPS12AF30R", - "Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "38JPX", - "Other", - "SRI", - "SRICAM SP004", - "SRICAM SP007", - "SRICAM_Martyn", - "ZOSI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "4015uk", - "ml-203w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "4300", - "IPC-HDB3200C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "507-20XC", - "805-dg20x", - "805D-X20", - "805S-N4-T", - "850-D20X", - "ambarella", - "colin", - "NDR-LT-S120A", - "obrotowa", - "onvif", - "Other", - "sunba", - "Teis 2", - "Teis 3", - "Teis 4", - "Teis Test", - "True" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "510wa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Preview_01_sub" - }, - { - "models": [ - "720 P IP Camera", - "ip-cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "720 P IP CAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "720 P IP CAMERA", - "720 pro", - "IPCAMERA1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "81XXF" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "912", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Acunico", - "ddddddddd", - "Foroosh", - "h720", - "HI-IP3D", - "IPB-2MP", - "KEDACOM", - "Mitsuvision", - "modiriat", - "N2100W40W", - "Other", - "R10", - "tarahi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "AP006", - "SRICAM1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "AR_SEC_PTZ", - "Other", - "raycam x3", - "RCL-420", - "reolink c2", - "Reolink RLC-423", - "rlc410s", - "wmpower" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "BPI205-2H", - "IPCAMERA1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Bras", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "B-Series", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "B-Series", - "IPC02", - "ipc-10ac", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "B-Series", - "Other", - "SRICAM AP006" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "B-Series", - "h", - "h series", - "HDW2100", - "IPVD-EL2MP-2.8", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "camview" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif_1550334450_285123146" - }, - { - "models": [ - "Cenova", - "IPG-8150PSS", - "Other", - "yoosee 360 cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/MainStream" - }, - { - "models": [ - "CENOVA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/SubStream" - }, - { - "models": [ - "Cocoon", - "hosafe", - "IPBH02", - "Other", - "s0004", - "SP008", - "sri", - "sri2", - "sricam", - "Sricam", - "Sricam SP", - "sricam sp004" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif2" - }, - { - "models": [ - "concorde", - "QC5620" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01/0" - }, - { - "models": [ - "concorde", - "IPC-DFR960P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "D41y07", - "HIKAM", - "IPD-D53Y0701-BS series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "ddd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1.video" - }, - { - "models": [ - "DH-IPC-EB5400P", - "IPC-HFW3200S", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Dome" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 556, - "url": "/onvif/device_service" - }, - { - "models": [ - "ED258ACD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/main" - }, - { - "models": [ - "h series", - "IP-CAM", - "ipsl20ff200", - "N2100W40W", - "ONVIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "h series (hdb3200cn)", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "h720", - "IPC-H610", - "Other", - "VVS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "HDW2100", - "QC-8626" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "imx322+HI3516", - "SR-IN25F36IRL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IPC_NT98566_80N50_S38" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]" - }, - { - "models": [ - "IPC_NT98566_80N50_S38", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC02" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "IPC02" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "IPC02", - "SRICAM AP009", - "SRICAM SP004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC365", - "NexHT360", - "Other", - "PC730" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/realmonitor" - }, - { - "models": [ - "IPC6355-VRZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/LiveMedia/ch1/Media1" - }, - { - "models": [ - "IP-CAM", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IPC-HDW4631EMN-ASE", - "IPG-7930PHS-T7/S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "kedacom", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/id=0" - }, - { - "models": [ - "N2100W40W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "NDR-LT-S120A", - "Other", - "Sunba Tech" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "nidea" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other", - "SRICAM AP009" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other", - "S5030-m", - "S5030-TF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SRICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "Other", - "SRICAM SP011" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "P450" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "p9000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 34567, - "url": "/cgi-bin/view.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "RC-410", - "RC-PTZ", - "ReoLink 423" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_sub" - }, - { - "models": [ - "SRICAM SP004" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc360.json b/data/brands/ipc360.json deleted file mode 100644 index ad0dc76..0000000 --- a/data/brands/ipc360.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "brand": "Ipc360", - "brand_id": "ipc360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360Eyes", - "FQ25-8MP-BL-WIFI", - "IPC-V380-Q79" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "360Eyes" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "c6c-p", - "IPC365", - "Mini Wifi Kamera", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IPC31-8MP-BL-EU", - "IPC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipc365.json b/data/brands/ipc365.json deleted file mode 100644 index b0c4b65..0000000 --- a/data/brands/ipc365.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Ipc365", - "brand_id": "ipc365", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360", - "gesee", - "Mibao", - "NEXHT CAM", - "Other", - "P450", - "PW2C1806E-GTY", - "VICTURE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/realmonitor" - }, - { - "models": [ - "81XXF", - "d100", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "ey-wf0358weus" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other", - "PW2K2N06E-GTWY" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "Other", - "PW2K2N06E-GTWY" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipcam-2015.json b/data/brands/ipcam-2015.json deleted file mode 100644 index b31f145..0000000 --- a/data/brands/ipcam-2015.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "brand": "Ipcam 2015", - "brand_id": "ipcam-2015", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.7", - "23858", - "C6F0SEZ0N0P0L0", - "C9F0SeZ0N0P4L0", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1.7", - "C9F0SgZ0N0P8L0", - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "23858", - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "C6F0SeZ0N0P0L0" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "C6F0SgZ0N0PhL2", - "C6F0SiZ3N0P0L0", - "C9F0SEZ0N0P4L0", - "C9F0SeZ3N0P8L0", - "CamHi", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipcam.json b/data/brands/ipcam.json deleted file mode 100644 index a206cab..0000000 --- a/data/brands/ipcam.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "brand": "Ipcam", - "brand_id": "ipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "121", - "125", - "4444", - "458", - "569", - "720", - "963", - "belakang", - "C6F0SgZ3N0P6L2", - "C9F0SgZ3N0P8L0", - "camhi", - "DIUS", - "G02", - "III", - "jidycam", - "monitoring mgcc", - "Other", - "PK4", - "PK5", - "PM1", - "RW-C360HD-1080p-dz", - "SD CARD Mul", - "side", - "SN-IPC-5033SW-UK", - "th661", - "uuu", - "WAJAH PK5", - "WAJAH PM1", - "WAJAH PM3", - "wer" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "125", - "6024PB-HX131", - "7902", - "8810", - "asdasd", - "B6C-CAM-WIFI-1080P-22X", - "Boavision", - "boh", - "C1329DN4-H", - "C6F0SfZ3N0P6L2", - "C6F0SgZ0N0PfL2", - "C6F0SgZ3N0P6L2", - "C6F0SgZ3N0PcL2", - "c6fos", - "C9F0SeZ3N0P8L0", - "C9F0SeZ3NOP8LO", - "C9F0SgZ3N0P8L0", - "cambassa", - "CARS", - "chima", - "CTIPC-285C", - "escamg12", - "Genbolt", - "H254", - "HX.9.6", - "HX-HD50M28AS", - "iegek", - "KAMERA CCTV", - "lane", - "Other", - "otp", - "P1-4X", - "Pan-Tilt", - "RT2860", - "s3vc", - "SD CARD MDv", - "sn-ipc-5033sw-uk", - "soullife", - "SV-B01W-960P-HX", - "SVBC", - "sxs", - "szinocam", - "t8809", - "tonda", - "wh0026", - "Y4A-ZA2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "7links", - "ISNATCH", - "Sannce", - "WIBULL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 6554, - "url": "/stream_0" - }, - { - "models": [ - "C6F0SEZ0N0P0L0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "C6F0SfZ3N0P6L2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/2" - }, - { - "models": [ - "C6F0SgZ3N0P6L2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "C6F0SgZ3N0PdL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "C9F0SeZ3N0P0L1", - "Other", - "wxh" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CLOUD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "C-PO5" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI-362B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/1jfiegbrqhd4q_p0_FUZGACFWEXMY" - }, - { - "models": [ - "kamtron 826" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/1jfiegbrqop2a_p0_CNCOZJTHRMYP" - }, - { - "models": [ - "kt1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/1jfiegbrqop2a_p0_LBRUMVRZOQXB" - }, - { - "models": [ - "KT1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/1jfiegbrqop2a_p0_ISUOFYIAJSWB" - }, - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "OV2460" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/stream" - }, - { - "models": [ - "PE-5577" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg" - }, - { - "models": [ - "PHD46F325AP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "VIG-us723A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipcameros.json b/data/brands/ipcameros.json deleted file mode 100644 index 3159afc..0000000 --- a/data/brands/ipcameros.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Ipcameros", - "brand_id": "ipcameros", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3455", - "546", - "584" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipcami.json b/data/brands/ipcami.json deleted file mode 100644 index b011ca9..0000000 --- a/data/brands/ipcami.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ipcami", - "brand_id": "ipcami", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Chinacam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 6554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipcc.json b/data/brands/ipcc.json deleted file mode 100644 index 2b87414..0000000 --- a/data/brands/ipcc.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "brand": "Ipcc", - "brand_id": "ipcc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "21w", - "7206E", - "7207E", - "7210E", - "B10", - "B12", - "B12L", - "B12NW", - "B13N", - "B20", - "B22", - "B24", - "D23", - "H-02", - "H03", - "H05", - "IIII-551433-ABEBF", - "IPCC-B11", - "IPCC-B11N-W", - "IPCC-B13N", - "IPCC-H05S-W", - "ipcc-H05-w1080p", - "IPCC-SDM21LW", - "IPCLOUD", - "MD532P", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "2480" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "3XPTZ", - "9610", - "B10", - "B15N-W", - "ipcc-9610 v2", - "ipcc-H05--W-1080P", - "IPCC-H05W-1080p", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "3XPTZ", - "7210", - "7210W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5080", - "B11N", - "B12", - "IPCC-H05-POEA", - "IPCC-H05-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "5533" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "720", - "7210W", - "h03", - "IPCC-7210W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720", - "IPCC-7210e" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "7206E", - "7606E", - "H-02n" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "7210W", - "7210W-3X", - "B10", - "B10A", - "B12nw", - "B12NW", - "B12N-W", - "B15N-W", - "b22", - "IPCC-009041-BUFXD", - "IPCC-7210W", - "IPCC-B15N-W", - "IPCC-B17-1080P", - "VVVIPC1501223580HSDS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "7210W", - "IPCC-7210W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "7210W", - "7210W-MJPEG", - "IPCC-7210W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "7210W", - "7210W-MJPEG", - "IPCC-7210W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "B10", - "HD MEGAPIXEL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ipcc h02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "IPCC-7210W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "x01" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipce.json b/data/brands/ipce.json deleted file mode 100644 index 3a104d4..0000000 --- a/data/brands/ipce.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipce", - "brand_id": "ipce", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipcmontor.json b/data/brands/ipcmontor.json deleted file mode 100644 index 5ac40bc..0000000 --- a/data/brands/ipcmontor.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Ipcmontor", - "brand_id": "ipcmontor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H Series", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "H Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "H Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipd.json b/data/brands/ipd.json deleted file mode 100644 index b1bad0d..0000000 --- a/data/brands/ipd.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ipd", - "brand_id": "ipd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E1C2L18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "E1C2L18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipdom-hz0102.json b/data/brands/ipdom-hz0102.json deleted file mode 100644 index 7305ac7..0000000 --- a/data/brands/ipdom-hz0102.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipdom-hz0102", - "brand_id": "ipdom-hz0102", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Eyecam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipega.json b/data/brands/ipega.json deleted file mode 100644 index 233ba24..0000000 --- a/data/brands/ipega.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Ipega", - "brand_id": "ipega", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KP-CA 178", - "KP-CA110", - "KP-CA127", - "KP-CA176" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "KP-CA127" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile1" - }, - { - "models": [ - "KP-CA173", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipeye.json b/data/brands/ipeye.json deleted file mode 100644 index f114e97..0000000 --- a/data/brands/ipeye.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Ipeye", - "brand_id": "ipeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3802" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "B5-SNPR-2.8-12-13", - "D2-SUPR-2.8-12-01", - "TH38C4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipfd200.json b/data/brands/ipfd200.json deleted file mode 100644 index e42a2c8..0000000 --- a/data/brands/ipfd200.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipfd200", - "brand_id": "ipfd200", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPID-2MPIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream.sdp1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipfd201.json b/data/brands/ipfd201.json deleted file mode 100644 index 2b85521..0000000 --- a/data/brands/ipfd201.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipfd201", - "brand_id": "ipfd201", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream.sdp1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipg.json b/data/brands/ipg.json deleted file mode 100644 index 084f63b..0000000 --- a/data/brands/ipg.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Ipg", - "brand_id": "ipg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8150PSS", - "IPG-7920PSS-AI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/0/MAIN" - }, - { - "models": [ - "IPG-6220PSS-F30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipgah9oc2am7.json b/data/brands/ipgah9oc2am7.json deleted file mode 100644 index ff8b590..0000000 --- a/data/brands/ipgah9oc2am7.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipgah9oc2am7", - "brand_id": "ipgah9oc2am7", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVLM-I333" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/iphdcam.json b/data/brands/iphdcam.json deleted file mode 100644 index 0d8f61f..0000000 --- a/data/brands/iphdcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iphdcam", - "brand_id": "iphdcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KeeKoon" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipixo.json b/data/brands/ipixo.json deleted file mode 100644 index ffc364d..0000000 --- a/data/brands/ipixo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipixo", - "brand_id": "ipixo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Internal wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipm-1z-20x-dn.json b/data/brands/ipm-1z-20x-dn.json deleted file mode 100644 index 7b530d9..0000000 --- a/data/brands/ipm-1z-20x-dn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipm-1z-20x-dn", - "brand_id": "ipm-1z-20x-dn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "avantura" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipnawin7.json b/data/brands/ipnawin7.json deleted file mode 100644 index 730a5b7..0000000 --- a/data/brands/ipnawin7.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipnawin7", - "brand_id": "ipnawin7", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP CAMERA 002A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipnc.json b/data/brands/ipnc.json deleted file mode 100644 index 7cfe377..0000000 --- a/data/brands/ipnc.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "brand": "Ipnc", - "brand_id": "ipnc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1010", - "IPDOME_MEGA200", - "spy" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1.ch" - }, - { - "models": [ - "1322", - "chiu", - "Cool", - "shani", - "shanyh2", - "SNC-WD91M1322", - "TECHSON" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264main" - }, - { - "models": [ - "3Mega", - "jano", - "jano-24", - "jano3", - "Other", - "shani", - "TechSon" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/2" - }, - { - "models": [ - "764", - "ccd", - "CCD CAMERA", - "escam knockoff", - "EVERVOX", - "hi1602", - "hislicon", - "IVS-D6000", - "kinietis", - "onvif", - "Other", - "senzor", - "Testi", - "Web Cam Hi3518" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Acunico", - "ARCUNICO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7554, - "url": "/dev=IPC-00000000/media=0/channel=0&level=0" - }, - { - "models": [ - "Acunico" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7554, - "url": "/dev=IPC-00000000/media=0/channel=0&level=1" - }, - { - "models": [ - "Aoshidi", - "Aoshido", - "CCD", - "H20237", - "oma", - "spy", - "suchinko", - "teset" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0.ch" - }, - { - "models": [ - "KK_IP_CAM", - "nima", - "Other", - "p1001", - "Robocam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "KK_IP_CAM", - "Other", - "SOAR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TESTJPEG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mjpeg" - }, - { - "models": [ - "TH32E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipnetcam.json b/data/brands/ipnetcam.json deleted file mode 100644 index 2ab0eef..0000000 --- a/data/brands/ipnetcam.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "brand": "Ipnetcam", - "brand_id": "ipnetcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "floor1", - "Messoa", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264" - }, - { - "models": [ - "IPC360", - "OUVIS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "IPC360" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "IP-CAM", - "pnp" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IXQ2-L", - "NVT of netcam", - "Other", - "WANSCAM", - "WANSCAM0004" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other", - "WANSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other", - "SHENZHEN" - ], - "type": "VLC", - "protocol": "http", - "port": 10554, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SHENZHEN", - "WANSCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WANSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipnz.json b/data/brands/ipnz.json deleted file mode 100644 index 166e3b2..0000000 --- a/data/brands/ipnz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipnz", - "brand_id": "ipnz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipq1652x.json b/data/brands/ipq1652x.json deleted file mode 100644 index d80c626..0000000 --- a/data/brands/ipq1652x.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipq1652x", - "brand_id": "ipq1652x", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipq1658x.json b/data/brands/ipq1658x.json deleted file mode 100644 index 10426a4..0000000 --- a/data/brands/ipq1658x.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipq1658x", - "brand_id": "ipq1658x", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipr31esx.json b/data/brands/ipr31esx.json deleted file mode 100644 index 233dcf9..0000000 --- a/data/brands/ipr31esx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipr31esx", - "brand_id": "ipr31esx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph264vga" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipr712m.json b/data/brands/ipr712m.json deleted file mode 100644 index f117483..0000000 --- a/data/brands/ipr712m.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipr712m", - "brand_id": "ipr712m", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph264vga" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipr7424%2f8e.json b/data/brands/ipr7424%2f8e.json deleted file mode 100644 index 28ed54e..0000000 --- a/data/brands/ipr7424%2f8e.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipr7424/8e", - "brand_id": "ipr7424%2f8e", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipro.json b/data/brands/ipro.json deleted file mode 100644 index 0c327d9..0000000 --- a/data/brands/ipro.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ipro", - "brand_id": "ipro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "WV-S4156" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/stream_2" - } - ] -} \ No newline at end of file diff --git a/data/brands/iprobot3.json b/data/brands/iprobot3.json deleted file mode 100644 index 6869bd1..0000000 --- a/data/brands/iprobot3.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Iprobot3", - "brand_id": "iprobot3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ips-21w.json b/data/brands/ips-21w.json deleted file mode 100644 index 542c062..0000000 --- a/data/brands/ips-21w.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ips-21w", - "brand_id": "ips-21w", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ir-ipc-2013a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ips.json b/data/brands/ips.json deleted file mode 100644 index 787fb26..0000000 --- a/data/brands/ips.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "brand": "Ips", - "brand_id": "ips", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1024V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "1812VW", - "EA1812", - "ea-1822", - "EYE 03W", - "ips-eye01w", - "IPS-Ki-EL", - "Ki-DL", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "7038", - "911", - "914V", - "922V", - "924v", - "925POE", - "925POE (RS7507)", - "ips-eye01w", - "IPS-EYE01W2", - "IPS-eye03w", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "911", - "913V", - "922V", - "923", - "Eye", - "Hi3507 RS7507H", - "ips-eye01a", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - }, - { - "models": [ - "911", - "911s", - "911V", - "912", - "913V", - "914V", - "922", - "924VPOE", - "925", - "925POE", - "eye01w", - "Eye3", - "eyeow1", - "Hi3507 RS7507H", - "IPS-911", - "IPS-924V", - "IPS-EYE01W", - "IPS-EYE01W2", - "IPS-eye03w", - "Ki-C", - "ki-e", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "911", - "IPS IPS-EYE01W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "913V" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_[CHANNEL].H264" - }, - { - "models": [ - "ips-eye01w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipscam.json b/data/brands/ipscam.json deleted file mode 100644 index 9455372..0000000 --- a/data/brands/ipscam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ipscam", - "brand_id": "ipscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "925POE (RS7507)", - "IPS911" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipteles.json b/data/brands/ipteles.json deleted file mode 100644 index 7d5ad52..0000000 --- a/data/brands/ipteles.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ipteles", - "brand_id": "ipteles", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/iptime.json b/data/brands/iptime.json deleted file mode 100644 index c43d8a2..0000000 --- a/data/brands/iptime.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iptime", - "brand_id": "iptime", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/iptronic.json b/data/brands/iptronic.json deleted file mode 100644 index 13a9ac5..0000000 --- a/data/brands/iptronic.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Iptronic", - "brand_id": "iptronic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10803", - "6", - "ipt-ipl 1080", - "IPT-IPL1080DP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "ipl720", - "IPT-IPC720B2", - "ipt-ipl 1080", - "IPT-IPL1080DP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "ipt-ip4bm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/iptz-h20xx.json b/data/brands/iptz-h20xx.json deleted file mode 100644 index 0176632..0000000 --- a/data/brands/iptz-h20xx.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Iptz-h20xx", - "brand_id": "iptz-h20xx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Drop Deiling" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile/profile01" - }, - { - "models": [ - "P14" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipux.json b/data/brands/ipux.json deleted file mode 100644 index 6c48f36..0000000 --- a/data/brands/ipux.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "brand": "Ipux", - "brand_id": "ipux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "1330", - "2030", - "CS6000/E", - "ICS-100", - "ICS1310", - "ICS-131A", - "ICS-2330", - "ICS7220", - "Other", - "SC6000/E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "1003", - "1013", - "1033", - "1330", - "ICS-100", - "ICS-1310", - "ICS1330", - "ICS-2330", - "okok", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "1013", - "CS6000/E", - "ICS-1033", - "ICS1310", - "ICS-1310", - "ICS1330", - "ics2330", - "ICS-2330", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "1013", - "ICS-100", - "ICS-1033", - "ICS1330", - "ICS2330", - "ICS303A", - "ICS7220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ICS2330" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "ip-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipvd300.json b/data/brands/ipvd300.json deleted file mode 100644 index 204e8ce..0000000 --- a/data/brands/ipvd300.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ipvd300", - "brand_id": "ipvd300", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPVD-3MPVFIR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream.sdp1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipvideo.json b/data/brands/ipvideo.json deleted file mode 100644 index f9c2a91..0000000 --- a/data/brands/ipvideo.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ipvideo", - "brand_id": "ipvideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip9000", - "Network Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipwebcam-app.json b/data/brands/ipwebcam-app.json deleted file mode 100644 index 60aad65..0000000 --- a/data/brands/ipwebcam-app.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ipwebcam App", - "brand_id": "ipwebcam-app", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipwebcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Nexus 7" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ipx.json b/data/brands/ipx.json deleted file mode 100644 index e4f0843..0000000 --- a/data/brands/ipx.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "brand": "Ipx", - "brand_id": "ipx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DDK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi" - }, - { - "models": [ - "DDK", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "camera.stm" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "IPXAnalytics jpg" - ], - "type": "JPEG", - "protocol": "http", - "port": 8050, - "url": "/?Video=1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "screen.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image640x480.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "control/faststream.jpg?stream=full" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/iq-eye.json b/data/brands/iq-eye.json deleted file mode 100644 index 9eaa625..0000000 --- a/data/brands/iq-eye.json +++ /dev/null @@ -1,354 +0,0 @@ -{ - "brand": "Iq Eye", - "brand_id": "iq-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "216fd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "3", - "IQ8712", - "IQR53" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/onvif" - }, - { - "models": [ - "3", - "4 SERIES", - "501", - "511", - "711D", - "IP Cams", - "IP CAMS", - "IQ031S", - "IQ041S", - "IQ511", - "IQ732N", - "IQD10S", - "iqm52w", - "Other", - "SENTINEL 855" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg?ds=" - }, - { - "models": [ - "30S", - "4 Series", - "IQ711" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/now.jpg?snap=spush?ww=1600?wh=1200?wx=0?wy=0" - }, - { - "models": [ - "4 series", - "4 SERIES", - "511DV", - "542S", - "703", - "732", - "752", - "832.33", - "832.34", - "832.35", - "832.36", - "A12S", - "IQ031S", - "IQ041S", - "IQ711", - "IQ732N", - "IQ865N", - "IQA15N", - "IQA32N", - "IQD32S", - "IQM32N", - "iqm61n", - "Other", - "S031" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg?snap=spush" - }, - { - "models": [ - "4 SERIES", - "511", - "IP Cams", - "IP CAMS", - "IQ4xx", - "IQ511", - "IQM32N", - "m53", - "Other", - "SENTINEL 855" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg?snap=spush?ds=" - }, - { - "models": [ - "501", - "705", - "752", - "855", - "A12n", - "A12S", - "IP Cams", - "iq511", - "IQ711", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "501", - "511DV", - "711D", - "755", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "511DV", - "803", - "iqa15n", - "IQeye753" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "703", - "753", - "803", - "855", - "IP CAMS", - "SENTINEL 855" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "705", - "755", - "802", - "A12S", - "IP CAMS", - "IQA15N", - "IQeye753" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "705", - "855", - "862", - "IP CAMS", - "IQ031s", - "IQ031S", - "IQ732N", - "IQ862N", - "IQ863N", - "IQA32N", - "IQD32S", - "IQD41s", - "IQD62", - "IQM31N", - "IQM32N", - "Other", - "Sentinel 855", - "SENTINEL 855", - "serie 4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "752", - "753", - "803", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "752" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "//now.jpg?snap=spush0.033?ds=1" - }, - { - "models": [ - "775" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg" - }, - { - "models": [ - "862" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/stream1" - }, - { - "models": [ - "IQ732N", - "IQD31SV-F1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "now.mp4" - }, - { - "models": [ - "IQ862n" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "IQ865N", - "iqa15n", - "Sentinel 853", - "Sentinel 855" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/now.jpg?snap=spush" - }, - { - "models": [ - "IQD32S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/now.mp4&res=high" - }, - { - "models": [ - "IQD32S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/now.mp4&res=low" - }, - { - "models": [ - "IQM31N", - "IQM32N" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mp4" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/now.mp4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/now.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/iqinvision.json b/data/brands/iqinvision.json deleted file mode 100644 index f5861c6..0000000 --- a/data/brands/iqinvision.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "brand": "Iqinvision", - "brand_id": "iqinvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "811", - "IQA32N", - "IQeye811" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg?snap=spush" - }, - { - "models": [ - "A10N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "AZ032S", - "AZ765N", - "AZD075", - "iq765n", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "IQ032S" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/now.jpg" - }, - { - "models": [ - "IQeye752" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/now.jpg?snap=spush" - } - ] -} \ No newline at end of file diff --git a/data/brands/iqr.json b/data/brands/iqr.json deleted file mode 100644 index 87361bf..0000000 --- a/data/brands/iqr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iqr", - "brand_id": "iqr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "I32" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/ir-color-ip-camera.json b/data/brands/ir-color-ip-camera.json deleted file mode 100644 index 27d3698..0000000 --- a/data/brands/ir-color-ip-camera.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Ir Color Ip Camera", - "brand_id": "ir-color-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS-2CD2420F-IW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "MCD-720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "MCD-720P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "SunEyes" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/irea.json b/data/brands/irea.json deleted file mode 100644 index cb5b8ce..0000000 --- a/data/brands/irea.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Irea", - "brand_id": "irea", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GV-T540" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/iris.json b/data/brands/iris.json deleted file mode 100644 index 60a56ab..0000000 --- a/data/brands/iris.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "brand": "Iris", - "brand_id": "iris", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0C830", - "IndoorOutdoor", - "NetCam", - "oc432", - "OC81D", - "OC821", - "oc8221", - "oc8821", - "Other", - "RC8221", - "SERCOMM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "AICN500", - "OC821", - "oc821D", - "oc8221", - "OC830", - "Other", - "rc8221", - "RC-8221", - "sercomm" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "AICN500/A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Indoor", - "Indoor / Outdoor", - "OC810", - "OC821", - "OC821D", - "oc8221", - "OC830", - "Other", - "Outdoor IP Camera", - "rc8221", - "RC-8221", - "rc8221d" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "indoorcam", - "rc-8221", - "RC8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "oc821", - "oc821D", - "RC-8221" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "oc821", - "RC8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "rc8221" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "S460" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/media.sav" - } - ] -} \ No newline at end of file diff --git a/data/brands/irlab.json b/data/brands/irlab.json deleted file mode 100644 index 46b2626..0000000 --- a/data/brands/irlab.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Irlab", - "brand_id": "irlab", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INS-IP311DIR-3.0MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/CH001.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/isabeau.json b/data/brands/isabeau.json deleted file mode 100644 index f2551a8..0000000 --- a/data/brands/isabeau.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Isabeau", - "brand_id": "isabeau", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CHD-B1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/isbsupport.json b/data/brands/isbsupport.json deleted file mode 100644 index 1bdaf21..0000000 --- a/data/brands/isbsupport.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Isbsupport", - "brand_id": "isbsupport", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CP-UNC-DA13L3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/isd-jaguar.json b/data/brands/isd-jaguar.json deleted file mode 100644 index 3326817..0000000 --- a/data/brands/isd-jaguar.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Isd Jaguar", - "brand_id": "isd-jaguar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ISDcam", - "JDV-AF-1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/stream1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/iseeu.json b/data/brands/iseeu.json deleted file mode 100644 index 36c9794..0000000 --- a/data/brands/iseeu.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Iseeu", - "brand_id": "iseeu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "Analog", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/401" - }, - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/501" - }, - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/601" - }, - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/701" - }, - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/901" - }, - { - "models": [ - "Analog" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/201" - } - ] -} \ No newline at end of file diff --git a/data/brands/isit.json b/data/brands/isit.json deleted file mode 100644 index 2c096cc..0000000 --- a/data/brands/isit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Isit", - "brand_id": "isit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/isotect.json b/data/brands/isotect.json deleted file mode 100644 index 8097cf3..0000000 --- a/data/brands/isotect.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Isotect", - "brand_id": "isotect", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Genaric", - "h.265", - "K9608-W", - "Other", - "strong version" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/isp.json b/data/brands/isp.json deleted file mode 100644 index cc7c84f..0000000 --- a/data/brands/isp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Isp", - "brand_id": "isp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Eye01w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ispy.json b/data/brands/ispy.json deleted file mode 100644 index 56727b9..0000000 --- a/data/brands/ispy.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Ispy", - "brand_id": "ispy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Agent DVR (all cameras)", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg" - }, - { - "models": [ - "Agent DVR (single channel)" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=[CHANNEL]&size=640x480&fitType=Zoom" - }, - { - "models": [ - "original" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/mjpegfeed?oid=1&full" - } - ] -} \ No newline at end of file diff --git a/data/brands/itajto.json b/data/brands/itajto.json deleted file mode 100644 index fb7007f..0000000 --- a/data/brands/itajto.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Itajto", - "brand_id": "itajto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "genrui" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/italsistem.json b/data/brands/italsistem.json deleted file mode 100644 index 2d24ca2..0000000 --- a/data/brands/italsistem.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Italsistem", - "brand_id": "italsistem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ITS IP D36H200", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/its.json b/data/brands/its.json deleted file mode 100644 index 7b0f1fc..0000000 --- a/data/brands/its.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Its", - "brand_id": "its", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/itx-security.json b/data/brands/itx-security.json deleted file mode 100644 index 810a1eb..0000000 --- a/data/brands/itx-security.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "brand": "Itx-security", - "brand_id": "itx-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bullet", - "dddd", - "IND2", - "KCEZB", - "NCD-2003PRH", - "NMB2300PR", - "RB300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "INDi-3007PR", - "sme-2220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "IPDM844" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "KCEZB", - "NCD-2003PR2003PR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/second" - } - ] -} \ No newline at end of file diff --git a/data/brands/itx.json b/data/brands/itx.json deleted file mode 100644 index 55e47b5..0000000 --- a/data/brands/itx.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Itx", - "brand_id": "itx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "HEVM-0412" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "HEVM-0412" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/iv9000.json b/data/brands/iv9000.json deleted file mode 100644 index 96ba45a..0000000 --- a/data/brands/iv9000.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iv9000", - "brand_id": "iv9000", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9150" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ivc.json b/data/brands/ivc.json deleted file mode 100644 index dd2acc9..0000000 --- a/data/brands/ivc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ivc", - "brand_id": "ivc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "128" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "AMZ-HD41" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ivcc.json b/data/brands/ivcc.json deleted file mode 100644 index d1d5ea4..0000000 --- a/data/brands/ivcc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ivcc", - "brand_id": "ivcc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ivideon.json b/data/brands/ivideon.json deleted file mode 100644 index ea1044a..0000000 --- a/data/brands/ivideon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ivideon", - "brand_id": "ivideon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NBLC-1210F-WMSD/P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ivio.json b/data/brands/ivio.json deleted file mode 100644 index 10109ed..0000000 --- a/data/brands/ivio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ivio", - "brand_id": "ivio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IV-3008NH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/iwh-31ir.json b/data/brands/iwh-31ir.json deleted file mode 100644 index 4f96264..0000000 --- a/data/brands/iwh-31ir.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Iwh-31ir", - "brand_id": "iwh-31ir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MAZi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "MAZI1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/iwigus.json b/data/brands/iwigus.json deleted file mode 100644 index 7e74581..0000000 --- a/data/brands/iwigus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iwigus", - "brand_id": "iwigus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/iz-touch.json b/data/brands/iz-touch.json deleted file mode 100644 index 8a7d98a..0000000 --- a/data/brands/iz-touch.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Iz Touch", - "brand_id": "iz-touch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "007" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/izotech.json b/data/brands/izotech.json deleted file mode 100644 index 21bef6c..0000000 --- a/data/brands/izotech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Izotech", - "brand_id": "izotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/iztouch.json b/data/brands/iztouch.json deleted file mode 100644 index ddd6a7e..0000000 --- a/data/brands/iztouch.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Iztouch", - "brand_id": "iztouch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0009", - "iz-009" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "0009", - "IZ-009", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A001", - "ap001", - "LTH-A8645-c15" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/izviz.json b/data/brands/izviz.json deleted file mode 100644 index 65523c4..0000000 --- a/data/brands/izviz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Izviz", - "brand_id": "izviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS-W2D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/j5create.json b/data/brands/j5create.json deleted file mode 100644 index e93d1cb..0000000 --- a/data/brands/j5create.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "J5create", - "brand_id": "j5create", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JVCU100" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "JVCU100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videoJ5create.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ja7204s.json b/data/brands/ja7204s.json deleted file mode 100644 index 8510a8b..0000000 --- a/data/brands/ja7204s.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ja7204s", - "brand_id": "ja7204s", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ja7208s.json b/data/brands/ja7208s.json deleted file mode 100644 index 8f60cec..0000000 --- a/data/brands/ja7208s.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Ja7208s", - "brand_id": "ja7208s", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "DVR", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ja7216nc.json b/data/brands/ja7216nc.json deleted file mode 100644 index 3a369aa..0000000 --- a/data/brands/ja7216nc.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Ja7216nc", - "brand_id": "ja7216nc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jalan.json b/data/brands/jalan.json deleted file mode 100644 index b299e70..0000000 --- a/data/brands/jalan.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Jalan", - "brand_id": "jalan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JalanTunRazak" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/h264_stream" - }, - { - "models": [ - "pelco", - "pelco1", - "pelco2", - "pelco3", - "pelco4", - "pelco5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/janex.json b/data/brands/janex.json deleted file mode 100644 index cd1c489..0000000 --- a/data/brands/janex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Janex", - "brand_id": "janex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Introx" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - } - ] -} \ No newline at end of file diff --git a/data/brands/janusz.json b/data/brands/janusz.json deleted file mode 100644 index 7ea6431..0000000 --- a/data/brands/janusz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Janusz", - "brand_id": "janusz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "kam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/japan.json b/data/brands/japan.json deleted file mode 100644 index 16fa639..0000000 --- a/data/brands/japan.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Japan", - "brand_id": "japan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KX-501" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/japon-dynamic.json b/data/brands/japon-dynamic.json deleted file mode 100644 index d738337..0000000 --- a/data/brands/japon-dynamic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Japon Dynamic", - "brand_id": "japon-dynamic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/SubStream" - } - ] -} \ No newline at end of file diff --git a/data/brands/jasboom.json b/data/brands/jasboom.json deleted file mode 100644 index 000a022..0000000 --- a/data/brands/jasboom.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Jasboom", - "brand_id": "jasboom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JAS130-F01G", - "JAS130-F030", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "JAS130-F01G", - "JAS130-F030" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/jatech.json b/data/brands/jatech.json deleted file mode 100644 index 04cd375..0000000 --- a/data/brands/jatech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jatech", - "brand_id": "jatech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPD-E2B5Y18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/javea.json b/data/brands/javea.json deleted file mode 100644 index a60a5e1..0000000 --- a/data/brands/javea.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Javea", - "brand_id": "javea", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/jaycar.json b/data/brands/jaycar.json deleted file mode 100644 index 41a414b..0000000 --- a/data/brands/jaycar.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "brand": "Jaycar", - "brand_id": "jaycar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3834", - "3836", - "Other", - "QC-3831", - "QC-3832", - "QC-3834", - "QC-3836", - "QC-3H34", - "quewad", - "Wifi Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "3834", - "3839", - "Other", - "QC-3839" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3834", - "720P", - "Other", - "QC-3831", - "QC-3832", - "QC-3834", - "QC-3836", - "QC-3839" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "38568", - "720P", - "Other", - "QC-3831", - "QC-3834", - "QC-3836", - "QC-3839" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "720P", - "QC-3839" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av0" - }, - { - "models": [ - "720P", - "Other", - "QC-3834", - "QC-3839", - "QC-3846" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "720P", - "QC-3836" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "720P", - "Other", - "QC-3836", - "QC-3839", - "QC-3846", - "QC-8282", - "QC-8626", - "QC-8638" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "720P", - "Other", - "QC-3834", - "QC-3840", - "QC-3842", - "QC-3844", - "QC-3846" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "QC-3844" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other", - "OUTDOORMAC", - "QC-3834" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "QC-3831", - "QC-3834" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "QC-3831", - "QC-3832", - "QC-3834", - "QC-3836", - "QC-3H34" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "QC-3836" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other", - "QC-3839" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other", - "QC-3834", - "QC-3836", - "QC-3839" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "QC-3831" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QC-3831", - "Webcam" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QC-3832" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "QC-3832", - "QC-3834" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QC-3832", - "QC-3834", - "QC-3836" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "QC-3832" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "QC-3834", - "QC-3836" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "QC-3834" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "QC-3836" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "QC-3839" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QC-3839", - "QC-3842", - "QC-3846" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "QC-3846" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jaytech.json b/data/brands/jaytech.json deleted file mode 100644 index 86c4fe4..0000000 --- a/data/brands/jaytech.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Jaytech", - "brand_id": "jaytech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DH43" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/Streaming/channels/0_a/unicast" - }, - { - "models": [ - "DH43" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "DH43", - "Ding" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "IP6021W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IPC019" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jbp.json b/data/brands/jbp.json deleted file mode 100644 index 27f86ca..0000000 --- a/data/brands/jbp.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Jbp", - "brand_id": "jbp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K8z", - "KZ2", - "kz8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "KZ16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "KZ2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/jcr.json b/data/brands/jcr.json deleted file mode 100644 index ab10e68..0000000 --- a/data/brands/jcr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jcr", - "brand_id": "jcr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jdl.json b/data/brands/jdl.json deleted file mode 100644 index 770bb42..0000000 --- a/data/brands/jdl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Jdl", - "brand_id": "jdl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CORE Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&framerate=5" - }, - { - "models": [ - "CORE Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?codec=mjpeg&camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jecurity.json b/data/brands/jecurity.json deleted file mode 100644 index 9bcc8ca..0000000 --- a/data/brands/jecurity.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Jecurity", - "brand_id": "jecurity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Je-q001", - "Je-q0012", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/jedicam.json b/data/brands/jedicam.json deleted file mode 100644 index 3ded80f..0000000 --- a/data/brands/jedicam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jedicam", - "brand_id": "jedicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B1 Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jeinuo.json b/data/brands/jeinuo.json deleted file mode 100644 index c42ca6b..0000000 --- a/data/brands/jeinuo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jeinuo", - "brand_id": "jeinuo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JN-IP67AR-D-wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/jen-fu.json b/data/brands/jen-fu.json deleted file mode 100644 index 0673ae0..0000000 --- a/data/brands/jen-fu.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Jen-fu", - "brand_id": "jen-fu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HVB-2M-V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "HVB-2M-V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HVB-2M-V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "HVB-2M-V3" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v01" - }, - { - "models": [ - "HVB-2M-V3" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v03" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jenimex.json b/data/brands/jenimex.json deleted file mode 100644 index d18fb60..0000000 --- a/data/brands/jenimex.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Jenimex", - "brand_id": "jenimex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1_mpx1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "2MPX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "2MPX1", - "2MPX2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "2MPX2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "5MPx" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "JENCMPP205" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9002, - "url": "/mpeg4cif" - }, - { - "models": [ - "JENCMPP205" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9002, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/jennov.json b/data/brands/jennov.json deleted file mode 100644 index fb4e4b5..0000000 --- a/data/brands/jennov.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "brand": "Jennov", - "brand_id": "jennov", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10x", - "2.0MP", - "720P(Frank)", - "ALL", - "BULLET CAM", - "MMMM-076249-CEAAF", - "ONVIF", - "Other", - "P81WT20-3-FA", - "ppp582322bccas", - "PTZ", - "T-SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "10x", - "2.0MP", - "720p", - "720P", - "720p wifi", - "720pBullet", - "a54wt20-3-fa", - "a76wt20-4x-fa-16", - "A78WT20", - "a79wt10-3-f=16", - "bullet cam", - "IP-1OO", - "IP-402", - "IPCAM HIP2P", - "JE-A79WT10-3", - "MMMM-285146-BFCAB", - "Other", - "pttz", - "t series", - "T-Series", - "zzzz-480241-cefab", - "zzzz-607748-feccb" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "10x", - "2.0MP", - "720P WIFI", - "T-SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "10x", - "2.0MP", - "Other", - "T-SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2.0mp", - "C6F0SqZ0N0P0L0", - "C9F0SgZ0N0P7L0" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "5MP PTZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "11" - }, - { - "models": [ - "720P", - "A73WG20-3-E", - "a73wg35-3-e", - "all", - "ip cam-100", - "IP-1OO", - "JMC800S_V2_AF", - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "A54WT20-3-FA", - "a73wg20-3-e", - "A76WM55-4x-EA", - "IPD-E36Y0701", - "m300e100", - "Mini PTZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "a73wg20", - "MINI PTZ", - "Modelw" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "A73WG20-3-E", - "G-Series", - "PS6006", - "s25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "A73WG20-3-E", - "IP-1OO", - "IPCAM-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "A73WJ20-3-F" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "A76WM55-4X-EA", - "IPC-1", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "A76WT20-4X-FA-16", - "A76WT55-4X-FA-32", - "A83WT20", - "C6F0SgZ0N0P0L0", - "C9F0SgZ0N0P7L0", - "IPCAM HIP2P", - "Mini PTZ", - "MINI PTZ", - "M-Series", - "ONVIF", - "Other", - "PTz", - "T-SERIES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "A89WJ25-3-FA", - "J Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "C6F0SgZ3N0P6L2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "ip cam-100" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.264" - }, - { - "models": [ - "P28HT20-3" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P87HM85-30X-EAS", - "s25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "PE4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "ptz" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/jensen.json b/data/brands/jensen.json deleted file mode 100644 index 4ef1b78..0000000 --- a/data/brands/jensen.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Jensen", - "brand_id": "jensen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "SecureLink1000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "SL1000" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/jetview.json b/data/brands/jetview.json deleted file mode 100644 index e3c2f9e..0000000 --- a/data/brands/jetview.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Jetview", - "brand_id": "jetview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "je-m800", - "JE-M820D1A", - "M800" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "je-m800" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "je-m800" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "JE-M820D1A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/h264" - }, - { - "models": [ - "M800" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "NVS-2020SN", - "nvs-365-v01", - "NVS-900L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jetvision.json b/data/brands/jetvision.json deleted file mode 100644 index 1cd2dd9..0000000 --- a/data/brands/jetvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jetvision", - "brand_id": "jetvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5meg" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jhempcam.json b/data/brands/jhempcam.json deleted file mode 100644 index 9c3d77f..0000000 --- a/data/brands/jhempcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Jhempcam", - "brand_id": "jhempcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jialite.json b/data/brands/jialite.json deleted file mode 100644 index ea84ce8..0000000 --- a/data/brands/jialite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jialite", - "brand_id": "jialite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-E3600" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/jidetech.json b/data/brands/jidetech.json deleted file mode 100644 index bf99f1a..0000000 --- a/data/brands/jidetech.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "brand": "Jidetech", - "brand_id": "jidetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P 2MP Dome", - "1080P 2MP DOME", - "D3-2MP-XM", - "P1 Plus-5X-8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080P 2MP DOME", - "1080P PTZ 2MP DOME", - "IP66", - "p2 plus-5mp-wfat" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P 2MP DOME", - "1080P PTZ 2MP DOME", - "1080P WIFI CAMERA", - "p14-4x-5mpw" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1080P 2MP DOME", - "1080P PTZ 2MP DOME", - "2mp", - "2mp POE", - "5MP POE", - "5mp ptz", - "abc", - "B01-2MP", - "BC01-2MP", - "bc1-2mp", - "BC1-5MP", - "bc3", - "D4-W5MP", - "E14000", - "e1b2000", - "f22", - "gtn-ptz2162-x3", - "GTN-PTZ22162-3x", - "Hisee SE", - "IP Security Cam 10", - "IP66", - "IPC-E1B2000", - "IPC-E36000", - "IPD-D53Y0701", - "IPD-E1A3Y04", - "IPD-E2A5Y04-DH", - "IPD-E2B5Y18", - "ONVIF IP", - "Other", - "p1-4x-2mp", - "P1-4X-2MP", - "P1-4X-5MP", - "P2-20X-5MP", - "P2-20X-5MPF", - "p2-x20", - "POE PTZ", - "PTZ", - "PTZ 5mp", - "ptz poe 5mp", - "pzt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "1080P 2MP DOME", - "1080P PTZ 2MP DOME", - "1080p Wifi Camera", - "1080P WIFI CAMERA", - "Mksut", - "Other", - "P14-5X-5MP", - "P1-4X-5MP", - "P2-20X-5mp", - "P5-5X", - "POE PTZ", - "PTC POE", - "ptz poe 5mp", - "PZT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "1080P 2MP DOME", - "1080P PTZ 2MP DOME", - "BC1-2MP", - "BC1-5MP", - "IPC-E36000", - "IPD-D53Y0701", - "ipd-e2a5y04", - "IPD-E2B5Y18", - "ONVIF IP", - "P1-4X-2MP", - "PORT", - "PTZ", - "PTZ POE 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "1080P PTZ 2MP DOME", - "5mp POE ptz", - "bullet", - "Dome 2MB PTZ", - "GTN-EYE01W", - "Other", - "P1 PLUS-5X-8MP", - "P14-4X", - "p14-4x-5mpw", - "P1-4X-5MP", - "P1-Plus-5x-8MP", - "P2- 20X-5MPW", - "p5-5x", - "PTZ POE 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "5mp", - "IPC-E14000", - "p2-20x-5mp", - "POE IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "5MP POE", - "Hi2162-PTZ3X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "B01-2MP", - "IPC-E1B3000-DH", - "IPD-E1A3Y04", - "IPD-E2A5Y04-DH", - "IPD-E36Y0701", - "P1 PLUS-5X-5MP", - "P5-5X-5MP-WFAT", - "VC- P2-20X-8MP POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "bc1-2mp", - "BC1-2MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "BC1-2MP", - "IPC-E1B2000" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "BC1-5MP", - "P5-4X-5MPAT" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "bullet-2mp", - "HX-P2-20X-5MPF", - "IPD-E2A5Y04-DH", - "IPD-E2A5Y18", - "JM800S-30", - "P2-20X-5mp", - "ptz poe 5mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "GTN-EYE03WL", - "Other", - "P14-5X", - "P1-4X-5MP", - "P2- 20X-5MPW", - "P5-4X-5MPAT", - "PT-14 x5MP PTZ", - "PTZ POE 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "IPC-E2B5000", - "IPD-E2A5Y04", - "IPD-E2B5Y18", - "P1-4x-2mp", - "P1-4X-2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "IPC-E2B5Y04" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam4/mpeg4" - }, - { - "models": [ - "IPD-E1A3Y04", - "P2-20X-5MPF", - "POE PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "IPD-E2B5Y04" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 554, - "url": "/bcs/channel0_main.bcs?token=[TOKEN]&channel=0&stream=0" - }, - { - "models": [ - "JM800S-30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam2/mpeg4" - }, - { - "models": [ - "Mksut", - "VC- P2-20X-8MP POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/2" - }, - { - "models": [ - "Other", - "POE IP", - "PoE PTZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/mpeg4" - }, - { - "models": [ - "P2Plus-5MP-WFAT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/jienuo.json b/data/brands/jienuo.json deleted file mode 100644 index d385dd6..0000000 --- a/data/brands/jienuo.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "brand": "Jienuo", - "brand_id": "jienuo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "605wifi", - "ColorVu", - "JN 107AR-D-WIFI", - "JN-02-D-WIFI", - "JN-08-E-WIFI", - "JN-107AR", - "JN-107AR-D-WIFI", - "JN-602SW", - "JN-605HV-WIF", - "JN-605HV-WIFI", - "JN-605SW", - "JN-605SW-D-WIFI", - "JN-605WS-D-WIFI", - "JN-IP107-D-WIFI", - "JN-IP407-E-POE", - "JN-IP501AR-A-WIFI", - "JN-IP501AR-B-WIFI", - "JN-IP501AR-D-WIFI", - "JN-IP516AR-D-WIFI", - "JN-IP601AR-A-WIFI", - "JN-IP601AR-D-WIFI", - "jn-ip605hv-a-wifi", - "JN-IP605HV-D-WIFI", - "JN-IP605HV-WIFI", - "JN-IP670AR-D-WIFI", - "Other", - "SSAT-145332-BDDAD", - "Terasa 1", - "WIFI IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "605wifi", - "JN 107AR-D-WIFI", - "JN-107AR-E-WIFI", - "JN-IP107", - "JN-IP107-E-WIFI", - "JN-IP45-D-wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "ar501" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Ar511", - "IP501JR", - "jn-ip501ar-d-wifi", - "jn-ip507ar-a-wifi", - "JN-IP5108AR-A-WIFI", - "jn-ip6008AR-A-Wifi", - "JN-IP608AR-A-WIFI", - "kuh" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "ip501jr", - "JN-IP506AR-A-WIFI", - "JN-IP601AR-D-WIFI", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "IP516AR", - "JN-IP501AR-A-WIFI", - "JN-IP501AR-B-WIFI", - "JN-IP5108AR-A-WIFI", - "jn-ip516", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "JN-IP516AR-D-WIFI", - "jn-ip517ar-d", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "JN-IP608AR-A-WIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/jinan.json b/data/brands/jinan.json deleted file mode 100644 index 5de6898..0000000 --- a/data/brands/jinan.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Jinan", - "brand_id": "jinan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5318", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/jitech.json b/data/brands/jitech.json deleted file mode 100644 index 3441a2b..0000000 --- a/data/brands/jitech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jitech", - "brand_id": "jitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "POE IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/jiuan.json b/data/brands/jiuan.json deleted file mode 100644 index be58bd1..0000000 --- a/data/brands/jiuan.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Jiuan", - "brand_id": "jiuan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/jlb.json b/data/brands/jlb.json deleted file mode 100644 index d82cf73..0000000 --- a/data/brands/jlb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jlb", - "brand_id": "jlb", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KZ2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jmk.json b/data/brands/jmk.json deleted file mode 100644 index 99c1be6..0000000 --- a/data/brands/jmk.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Jmk", - "brand_id": "jmk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "009", - "012", - "ica up-009", - "Other", - "UP-009", - "UP-010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/sf.cgi" - }, - { - "models": [ - "009", - "012", - "Other", - "up-009" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "jk 8808", - "JK-8808", - "Other", - "UP-035W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "JK-8808" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JK-8808" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/joko.json b/data/brands/joko.json deleted file mode 100644 index 7ebc780..0000000 --- a/data/brands/joko.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Joko", - "brand_id": "joko", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jooan.json b/data/brands/jooan.json deleted file mode 100644 index ece67f4..0000000 --- a/data/brands/jooan.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "brand": "Jooan", - "brand_id": "jooan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P IP Outdoor", - "JA-4216(X)", - "XM530_83X40_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "1080P IP OUTDOOR", - "1314", - "703", - "703CRB", - "703ERC", - "703ERC-T", - "703hrb", - "703KRA-T", - "703KRB-T 2mp", - "704ERC-T", - "704Yrc", - "705NRB-Z-P", - "720", - "720P Bullet Camera", - "720P OMNIF", - "720p PoE IP", - "737NRC-T", - "825", - "Dome IP", - "JA-404ARA-T", - "JA-703ERA-T-P", - "JA-703ERC-T", - "JA-703HRB-T-P ONVIF", - "JA-703KRA-T", - "JA-703KRA-T-mine", - "ja-703krb", - "JA-703-KRB-T-P", - "JA-703KRC-T2 (720p)", - "JA-703KR-T witrh pw", - "ja-7114poe", - "ja-733kbrt", - "ja-733krb-t", - "JA-737NRC-T-P", - "JA-763TRE", - "Other", - "TC-404", - "TC-734" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "144", - "150", - "2010", - "241", - "242", - "243", - "244", - "ip2", - "ja-734nrb-t-w", - "ONVIF", - "Other", - "PE2010" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "144", - "734eri-p", - "734eri-w", - "734KRI", - "825", - "IP2", - "IPCAM-100", - "JA-734ERI-T-P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "2TR-U", - "A2R-U", - "A6M-U", - "F10T", - "JA-4216(X)", - "JA-C9E", - "JA-F10R-4-U", - "JA-F10T-4-U", - "JA-F2R-U", - "Q3RU", - "w8-u", - "WiFi Cam-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "4208t-us", - "703KRA-T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "703 hrb", - "703KRA", - "703KRB-T 2.0", - "720P IP CAMERA", - "JA-703KRA-T", - "JA-731KRD-T", - "JA-737NRC-T-E", - "ja-f11c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "703KRA-T", - "825" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "703KRA-T", - "770", - "JA-700MRB-T", - "JA-700MRB-US", - "JA-700MR-W-US", - "JA-770MR", - "JA-770MR-US", - "JA-770MR-W", - "JA-770mr-W-US", - "JA-A5-US", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "734" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "825", - "JA-770MR-W-US", - "JA-A5-US" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif2" - }, - { - "models": [ - "825" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/channel=1_stream=0.sdp" - }, - { - "models": [ - "825", - "A2D-U", - "B07VMXHTPX", - "Dome IP", - "E9N", - "F10T", - "ja-A5-EU", - "ja-c2c-d-eu", - "JA-C2C-D-US", - "JA-C2M-D-US", - "JA-C5M-D-EU", - "ja-c6", - "JA-C6-M", - "JA-C6M-D", - "ja-c6m-d-us", - "JA-F10R-4U", - "JA-Q7R-U", - "JA-Q9T", - "q10q", - "Q7R", - "Q9T", - "W3-U", - "W8-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "825" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "825", - "IPC 1.3.0" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "a-a4m-d-us 720p", - "c9c", - "JA-C2C-D-US", - "JA-C2-D", - "ja-c2m-d-us", - "JA-C5M-D-EU", - "ja-c5m-d-us.Ian", - "ja-c6c-d-us", - "ja-c6m-d-us", - "JA-C9E", - "jaq7rl", - "ONVIF", - "Other", - "q10q", - "T2R-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Dome IP" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "DVR", - "TC404" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "JA703ERA-T-P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "JA-703ERA-T-P", - "JA-F10R-4-U" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "JA-703ERC-T" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "JA-W6XG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch01_0" - }, - { - "models": [ - "TC-734" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "W8-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch01_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/jortan.json b/data/brands/jortan.json deleted file mode 100644 index de734d6..0000000 --- a/data/brands/jortan.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "brand": "Jortan", - "brand_id": "jortan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8165HP", - "EP-JNM02", - "EP-network", - "x4c-weq" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/realmonitor?channel=0&stream=0.sdp" - }, - { - "models": [ - "8167QP-2", - "EP-JNM02", - "JT-8167QP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=01" - }, - { - "models": [ - "8170QJ", - "8806zl3", - "Dual lens", - "JT-100BW-1", - "JT-160BW-3A", - "JT-8161QJ", - "JT-8171QJ", - "JT-8172HJ", - "JT-8176", - "JT9690PRO", - "oi vida", - "x4c-weq" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "82047WK", - "8806zl3", - "JORTAN-7701QJ-IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "82047WK", - "jt-8016nvr", - "VR3D-1NVR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "82047WK" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "8806zl3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/onvif/device_service" - }, - { - "models": [ - "dvr 8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=08&stream=1.sdp" - }, - { - "models": [ - "EP-JNM02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=02" - }, - { - "models": [ - "JORTAN-7701QJ-IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "jt-2021-12", - "JT-9697", - "RE-6146AHD-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=01&stream=1.sdp" - }, - { - "models": [ - "RE-6146AHD-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=01&stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/jovision.json b/data/brands/jovision.json deleted file mode 100644 index 19052e9..0000000 --- a/data/brands/jovision.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "brand": "Jovision", - "brand_id": "jovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "506", - "H6EV200", - "HD 1MP", - "IP-B21", - "IP-SPS03", - "JVS-DA230", - "JVS-H302-A2", - "JVS-H411", - "JVS-N5DL-HC", - "JVS-N83-HY", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "B20", - "FULL HD 1080P 2MP", - "JVS-h2-21", - "JVS-H400", - "JVS-N5DL-HC", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "Full HD 1080P 2MP", - "H411", - "HD 1MP", - "JVS-H210", - "JVS-N3122SL", - "JVS-N3DL-HG-12V", - "JVS-N3FL-HF-POE", - "JVS-N3FL-HT", - "JVS-N5DL-DC", - "JVS-N5FL-DF-POE", - "JVS-N61-NA", - "JVS-N63-HC", - "JVS-N83-DY", - "N61-HA", - "N61-NA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "GK5V200-30-L18S76-S4-N", - "H411" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "GK5V200-30-L18S76-S4-N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0/cloud:Baltu912/main" - }, - { - "models": [ - "H6C-P-20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/h264" - }, - { - "models": [ - "HD 1MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "JVS-H411" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "jvs-n5fl-dd-poe", - "JVS-N5FL-DD-PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "JVS-N5FL-HT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "JVS-N83-DY", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8554, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "JVS-N83-HY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/1" - }, - { - "models": [ - "JVS-N83-HY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/0" - }, - { - "models": [ - "JVS-N83-HY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/2" - }, - { - "models": [ - "JVS-N83-HY", - "N61-NA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "JVS-N936-MDL-2.8mm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0/admin:ZaZa1970/main" - }, - { - "models": [ - "JVS-N95-X3" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "n61-na" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/joy.json b/data/brands/joy.json deleted file mode 100644 index 492ebeb..0000000 --- a/data/brands/joy.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Joy", - "brand_id": "joy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "Symphony Xplorer W16" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/joymin.json b/data/brands/joymin.json deleted file mode 100644 index 5f0a914..0000000 --- a/data/brands/joymin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Joymin", - "brand_id": "joymin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JM-6600B-IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/jp5.json b/data/brands/jp5.json deleted file mode 100644 index b7ad6f4..0000000 --- a/data/brands/jp5.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Jp5", - "brand_id": "jp5", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "live/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/jpjv.json b/data/brands/jpjv.json deleted file mode 100644 index 867a9d0..0000000 --- a/data/brands/jpjv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jpjv", - "brand_id": "jpjv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F-Serie" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jrc-tokki.json b/data/brands/jrc-tokki.json deleted file mode 100644 index 223d3f4..0000000 --- a/data/brands/jrc-tokki.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Jrc Tokki", - "brand_id": "jrc-tokki", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "81DGPOE4MP-S", - "A8Q", - "chowha-02", - "IP3MP-POE", - "LTID-57FEA-AP", - "NVT IPC", - "XM-PT825-40P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IPC_GK7205V200_G4F_S38" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp" - }, - { - "models": [ - "IPC_GK7205V200_G4F_S38", - "XM530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "XM530" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jrecam.json b/data/brands/jrecam.json deleted file mode 100644 index cca592b..0000000 --- a/data/brands/jrecam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Jrecam", - "brand_id": "jrecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JM3866W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "jw101m" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jsur.json b/data/brands/jsur.json deleted file mode 100644 index caf21a6..0000000 --- a/data/brands/jsur.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jsur", - "brand_id": "jsur", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jsw.json b/data/brands/jsw.json deleted file mode 100644 index a6969cd..0000000 --- a/data/brands/jsw.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "brand": "Jsw", - "brand_id": "jsw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "562M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "562M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "562M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[USERNAME]&quality=75&fps=5&resolution=[PASSWORD]" - }, - { - "models": [ - "562M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "562M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "562M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&fps=5&quality=75&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "562M" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "562M" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/jtech.json b/data/brands/jtech.json deleted file mode 100644 index 6e1faaf..0000000 --- a/data/brands/jtech.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Jtech", - "brand_id": "jtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SoZ3N0PfL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "DH43 1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "GTN-HS2112VW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "JT-108" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/juan.json b/data/brands/juan.json deleted file mode 100644 index 654bc33..0000000 --- a/data/brands/juan.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "brand": "Juan", - "brand_id": "juan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5323-W1", - "Other", - "PJ2013-NE", - "WT3020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "cctv", - "IPC", - "ipc 2.5.10", - "JA-F4-2", - "JC-PD3021", - "Other", - "VTA" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipc", - "Ja7204", - "Other", - "PE2010-W", - "R5108-AHD", - "WT4020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "ipc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipc 720", - "Other", - "pe30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Ja7204", - "Ja7208", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "JA7204", - "JA7208", - "Other", - "R5108-AHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Ja7208" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "JA7208" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "JA7208" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "JA-W5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "WY0513A" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jubson.json b/data/brands/jubson.json deleted file mode 100644 index c1b85c9..0000000 --- a/data/brands/jubson.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Jubson", - "brand_id": "jubson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p", - "ES500-MIP-813A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8557, - "url": "/PSIA/Streaming/channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/judge.json b/data/brands/judge.json deleted file mode 100644 index 241e423..0000000 --- a/data/brands/judge.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Judge", - "brand_id": "judge", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HCVR", - "jsvkit-a822" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/juning.json b/data/brands/juning.json deleted file mode 100644 index e601da1..0000000 --- a/data/brands/juning.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Juning", - "brand_id": "juning", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C42" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jupiter.json b/data/brands/jupiter.json deleted file mode 100644 index 4a7a36a..0000000 --- a/data/brands/jupiter.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jupiter", - "brand_id": "jupiter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/just-compare.json b/data/brands/just-compare.json deleted file mode 100644 index 5805f25..0000000 --- a/data/brands/just-compare.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Just Compare", - "brand_id": "just-compare", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4L-TZ808-960P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jvc.json b/data/brands/jvc.json deleted file mode 100644 index 31704c1..0000000 --- a/data/brands/jvc.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "brand": "Jvc", - "brand_id": "jvc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h235", - "JVC V686", - "Other", - "V686U", - "VN Series", - "VN-H37", - "VN-H657", - "VN-V225", - "vn-v25", - "vn-v26u", - "VN-X35" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/video?encode=jpeg&framerate=2&boundary=on" - }, - { - "models": [ - "JVC VN-T216/U", - "Other", - "VNH57", - "VN-T16U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/livestream" - }, - { - "models": [ - "JVC VN-V225VPU", - "Other", - "VN Series", - "VN-C20U", - "VN-H557", - "VN-V225", - "VN-v686", - "VN-X35" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "api/video?encode=jpeg" - }, - { - "models": [ - "Other", - "v685u", - "Web V.Networks" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "still.jpg" - }, - { - "models": [ - "Other", - "VN SERIES", - "VNC205U", - "vn-c625", - "WEB V.NETWORKS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "java.jpg" - }, - { - "models": [ - "Other", - "VN SERIES", - "VN-C20U", - "VN-C215", - "VN-H237", - "WEB V.NETWORKS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other", - "VN SERIES", - "VN_X35", - "VN-H557", - "VN-H57B", - "VN-H657", - "Vn-X35", - "VN-X35U/235U" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/video?encode=jpeg&framerate=15&boundary=on" - }, - { - "models": [ - "Other", - "VN SERIES", - "VN-H37", - "VNH-37U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "Other", - "VN H264", - "VN-H137", - "VN-H237", - "VN-H37", - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01_sub.264" - }, - { - "models": [ - "VN H264", - "VN T16U ?", - "VN-C20", - "vn-c20u", - "VN-C215" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "api/video?encode=h264(1)" - }, - { - "models": [ - "VN Series", - "VN-T216U", - "vn-t216vpru" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "vn-225", - "VN-H57U", - "vn-v25" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/video?encode=jpeg&framerate=2&boundary=on" - }, - { - "models": [ - "vn-225" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/api/video?encode=jpeg" - }, - { - "models": [ - "vn-c20", - "VN-C20U", - "VN-C215" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "VNC205U" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "VN-H137", - "VN-H237B" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/[CHANNEL]?maxFrameRate=15" - }, - { - "models": [ - "VN-H157WP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "VN-H557" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/Streaming/channels/0_a/unicast" - }, - { - "models": [ - "VN-T216U", - "VN-U78" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "VN-T216U" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi" - }, - { - "models": [ - "VN-T216U" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi?VideoType=[CHANNEL]" - }, - { - "models": [ - "VN-T216U" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v03" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v02" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "rtsph2641080p" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264.sdp?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "VN-T216U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "XA1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/jvr.json b/data/brands/jvr.json deleted file mode 100644 index 6df0374..0000000 --- a/data/brands/jvr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jvr", - "brand_id": "jvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JVR01" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jvs.json b/data/brands/jvs.json deleted file mode 100644 index e5459a1..0000000 --- a/data/brands/jvs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Jvs", - "brand_id": "jvs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H-510", - "JVS-B68-DX", - "JVS-H302-A2", - "N61" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/jvt.json b/data/brands/jvt.json deleted file mode 100644 index 9113389..0000000 --- a/data/brands/jvt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jvt", - "brand_id": "jvt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jwcam.json b/data/brands/jwcam.json deleted file mode 100644 index e6a9bf9..0000000 --- a/data/brands/jwcam.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "brand": "Jwcam", - "brand_id": "jwcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JWEV", - "JWEV-331237-DBCDF", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JWEV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "JWEV", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "JWEV" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "JWEV", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "JWEV-331237-DBCDF", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/jwt.json b/data/brands/jwt.json deleted file mode 100644 index e12f6b7..0000000 --- a/data/brands/jwt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jwt", - "brand_id": "jwt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/jxl.json b/data/brands/jxl.json deleted file mode 100644 index d6822c6..0000000 --- a/data/brands/jxl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Jxl", - "brand_id": "jxl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/jyacam.json b/data/brands/jyacam.json deleted file mode 100644 index 3b1167e..0000000 --- a/data/brands/jyacam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Jyacam", - "brand_id": "jyacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "JYA8010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/jyuha.json b/data/brands/jyuha.json deleted file mode 100644 index 24e0792..0000000 --- a/data/brands/jyuha.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Jyuha", - "brand_id": "jyuha", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BOC69BKNK3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "BOC69BKNK3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/k-vision.json b/data/brands/k-vision.json deleted file mode 100644 index 52a5ff7..0000000 --- a/data/brands/k-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "K-vision", - "brand_id": "k-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K-D302MPOE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/k11.json b/data/brands/k11.json deleted file mode 100644 index 7d894b6..0000000 --- a/data/brands/k11.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "K11", - "brand_id": "k11", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/kaansky.json b/data/brands/kaansky.json deleted file mode 100644 index 622da86..0000000 --- a/data/brands/kaansky.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kaansky", - "brand_id": "kaansky", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "domecam1.3mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/kado.json b/data/brands/kado.json deleted file mode 100644 index b9032df..0000000 --- a/data/brands/kado.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kado", - "brand_id": "kado", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/kadymay.json b/data/brands/kadymay.json deleted file mode 100644 index 6d34981..0000000 --- a/data/brands/kadymay.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "brand": "Kadymay", - "brand_id": "kadymay", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "791WL", - "KDM-6708AL", - "KDM-6821A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "8506", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "FishEye", - "kdm-8715d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "KDM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "KDM6700" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "KDM6702" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "KDM6702", - "KDM-6800", - "KMD-6800", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "KDM-6706AL", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "KDM-6742H" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "KDM-6821A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "KDM-6821A", - "KDM-6828A", - "KDM-6836A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "KDM-6828A", - "KDM-6836A", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "KDM-6853A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "KDM-A103" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/kafeoinos-tv.json b/data/brands/kafeoinos-tv.json deleted file mode 100644 index 6885460..0000000 --- a/data/brands/kafeoinos-tv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kafeoinos Tv", - "brand_id": "kafeoinos-tv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mjpeg_vga.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/kaikong.json b/data/brands/kaikong.json deleted file mode 100644 index 6d1c392..0000000 --- a/data/brands/kaikong.json +++ /dev/null @@ -1,472 +0,0 @@ -{ - "brand": "Kaikong", - "brand_id": "kaikong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1016", - "1602W", - "ip1018", - "ip-1801", - "Other", - "sip1018", - "sip428" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1016", - "sip1016", - "SIP1018W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1018W", - "1501" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/0.jpg" - }, - { - "models": [ - "1201", - "1602", - "1602w", - "SIP1602", - "SIP1602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1201", - "1214", - "1303", - "Other", - "sip 1303", - "SIP1130", - "SIP1201", - "SIP1201plus", - "SIP1201PLUS", - "Sip1303w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1303", - "SIP 1128", - "sip 1215", - "sip 1303", - "SIP1201" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1406", - "1601", - "1602", - "ip1018", - "Other", - "SIP 1601", - "SIP1201", - "SIP1602", - "SIP1602W", - "sip1603", - "SIP1603W", - "sip428" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "1406", - "Other", - "SIP1201", - "sip1205" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "1601", - "Sip1601" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "1601", - "1602", - "1602w", - "Other", - "sip 1601", - "sip 1602", - "sip1016", - "Sip1601", - "SIP1601", - "SIP1602", - "SIP1602W", - "SPI1602" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "1601", - "SIP1602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1602", - "SIP1602", - "SIP1602W", - "SP1602W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "1602", - "ip1018", - "Other", - "sip1018", - "sip1818" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL].jpg" - }, - { - "models": [ - "1602", - "1602w", - "sip 1602", - "SIP1602", - "SIP1602W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1602", - "sip 1601", - "SIP 1602W", - "Sip1601", - "SIP1602" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1602", - "SIP1602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "1602", - "sip 1602", - "SIP1602", - "SIP1602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "1602", - "1602W", - "SIP1602", - "sip1602w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "1602", - "1602w", - "Other", - "sip 1601", - "SIP 1602W", - "sip1601w", - "sip1601w-en", - "sip1602w", - "SIP1603" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1602", - "SIP 1602w", - "SIP 1602W", - "SIP1602" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1602w", - "sip 1016", - "SIP1602", - "sip1602w", - "SIP1602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "8900", - "IP-1018", - "ip-1080", - "sip 1016" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "CAM01", - "Other", - "SIP1201" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "ip1018", - "Other", - "SIP 1022" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "sip 1602W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "sip 1016", - "sip 1018w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SIP 1018W", - "SIP 1128", - "sip1128" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "SIP 1128", - "Sip1601" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "SIP 1201" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "sip 1602w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "sip 1602W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SIP 1602W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "SIP 1602W", - "sip1602w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "SIP1201" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "sip1303", - "sip1303w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Sip1303" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/1" - }, - { - "models": [ - "sip1602w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "sp1303" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/kaluga.json b/data/brands/kaluga.json deleted file mode 100644 index a83a8da..0000000 --- a/data/brands/kaluga.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kaluga", - "brand_id": "kaluga", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/kamera2000.json b/data/brands/kamera2000.json deleted file mode 100644 index 623d686..0000000 --- a/data/brands/kamera2000.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Kamera2000", - "brand_id": "kamera2000", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5MP Modus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "AQ-IPQ2232X-POE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "PTZ Speed Dome" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "PTZ Speed Dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/kamo.json b/data/brands/kamo.json deleted file mode 100644 index 3f2372b..0000000 --- a/data/brands/kamo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kamo", - "brand_id": "kamo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CT0190" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kamote.json b/data/brands/kamote.json deleted file mode 100644 index 03369d2..0000000 --- a/data/brands/kamote.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kamote", - "brand_id": "kamote", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Sayote" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/kamtron.json b/data/brands/kamtron.json deleted file mode 100644 index 00f9cf7..0000000 --- a/data/brands/kamtron.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Kamtron", - "brand_id": "kamtron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "826", - "f128" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "826", - "f300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "826", - "832-C" - ], - "type": "JPEG", - "protocol": "http", - "port": 7080, - "url": "/ccm/ccm_pic_get.js?dsess=1&dsess_nid=ME3UvaT9XL0M4HLe9ul46UZCESRjTvtM&dsess_sn=1jfiegbra36la&dtoken=p1_xxxxxxxxxx&dflag=2" - }, - { - "models": [ - "835", - "f300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=0.JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "f128" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/ccm/ccm_pic_get.jpg?hfrom_handle=887330&dsess=1&dsess_nid=MHts.aNrHwnbJfxbeiKi8_hCF1VhBQ&dsess_sn=[USERNAME]&dtoken=p0_xxxxxxxxxx" - }, - { - "models": [ - "f300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "f300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/kanan.json b/data/brands/kanan.json deleted file mode 100644 index 70162be..0000000 --- a/data/brands/kanan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kanan", - "brand_id": "kanan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kanda.json b/data/brands/kanda.json deleted file mode 100644 index b0c1c55..0000000 --- a/data/brands/kanda.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kanda", - "brand_id": "kanda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QooCam8K" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/kang-xun.json b/data/brands/kang-xun.json deleted file mode 100644 index 63fabb7..0000000 --- a/data/brands/kang-xun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kang Xun", - "brand_id": "kang-xun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xxc5030-t" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kantoor.json b/data/brands/kantoor.json deleted file mode 100644 index 1277a9f..0000000 --- a/data/brands/kantoor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kantoor", - "brand_id": "kantoor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Lock-cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/kapi.json b/data/brands/kapi.json deleted file mode 100644 index 9c4f3e5..0000000 --- a/data/brands/kapi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kapi", - "brand_id": "kapi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hw00054" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/kapkam.json b/data/brands/kapkam.json deleted file mode 100644 index deec1e4..0000000 --- a/data/brands/kapkam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kapkam", - "brand_id": "kapkam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1335" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "spy" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/karbontech.json b/data/brands/karbontech.json deleted file mode 100644 index 5abe0a9..0000000 --- a/data/brands/karbontech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Karbontech", - "brand_id": "karbontech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KTDVR1600" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kare.json b/data/brands/kare.json deleted file mode 100644 index ead79dd..0000000 --- a/data/brands/kare.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Kare", - "brand_id": "kare", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CSST-DIT", - "N7205JV" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "CSST-DIT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "D3044" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "N7205JV", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "N7205JV", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/karel.json b/data/brands/karel.json deleted file mode 100644 index 1923717..0000000 --- a/data/brands/karel.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Karel", - "brand_id": "karel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CKB423-PM2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture[CHANNEL].jpg" - }, - { - "models": [ - "CKB423-PM2", - "ivs-4200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "wbxid136vrt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/karkam.json b/data/brands/karkam.json deleted file mode 100644 index 43b14bc..0000000 --- a/data/brands/karkam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Karkam", - "brand_id": "karkam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2430" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kasa.json b/data/brands/kasa.json deleted file mode 100644 index 1f73aa1..0000000 --- a/data/brands/kasa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kasa", - "brand_id": "kasa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "kc400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "kc410s" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/kasaba.json b/data/brands/kasaba.json deleted file mode 100644 index 96a981e..0000000 --- a/data/brands/kasaba.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kasaba", - "brand_id": "kasaba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TRX-20WiFi-PL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/kassaba.json b/data/brands/kassaba.json deleted file mode 100644 index 5e9a3f3..0000000 --- a/data/brands/kassaba.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kassaba", - "brand_id": "kassaba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TRX20WIFI-50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "TRX-ROBOT25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/katamso.json b/data/brands/katamso.json deleted file mode 100644 index 7f5380f..0000000 --- a/data/brands/katamso.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Katamso", - "brand_id": "katamso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/onvif1" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/katway.json b/data/brands/katway.json deleted file mode 100644 index 5f90dc5..0000000 --- a/data/brands/katway.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Katway", - "brand_id": "katway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3516C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264/sub" - }, - { - "models": [ - "3518C0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264/ch1/sub" - }, - { - "models": [ - "cam20-a-2", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/kavass.json b/data/brands/kavass.json deleted file mode 100644 index 85de40c..0000000 --- a/data/brands/kavass.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "brand": "Kavass", - "brand_id": "kavass", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "clg-020" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "CLG-020" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/cgi-bin/net_video.cgi?channel=0" - }, - { - "models": [ - "CLG-020" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "CLG-020", - "CLG-080" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?" - }, - { - "models": [ - "CLG-080", - "CLG-A211M13", - "CLG-A371M13", - "CLG-A611M1", - "KAVAS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "CLG-A212" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "CLG-A611M1", - "CLG-C1", - "Other", - "Other - JB" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "CLG-QY120WDEP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "KAVAS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other", - "Other?" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "SnapshotJPEG?Resolution=320x240" - } - ] -} \ No newline at end of file diff --git a/data/brands/kayodo.json b/data/brands/kayodo.json deleted file mode 100644 index 8a3e056..0000000 --- a/data/brands/kayodo.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Kayodo", - "brand_id": "kayodo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2Mp", - "KYD-IPD200M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/kbc.json b/data/brands/kbc.json deleted file mode 100644 index 4af1c58..0000000 --- a/data/brands/kbc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kbc", - "brand_id": "kbc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ENC-H-WA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "ENC-H-WA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/kboom.json b/data/brands/kboom.json deleted file mode 100644 index a90344c..0000000 --- a/data/brands/kboom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kboom", - "brand_id": "kboom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SN-IPC-HW11" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kbvision.json b/data/brands/kbvision.json deleted file mode 100644 index 8fba632..0000000 --- a/data/brands/kbvision.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Kbvision", - "brand_id": "kbvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR", - "KX - H13WN", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/kd.json b/data/brands/kd.json deleted file mode 100644 index b2962de..0000000 --- a/data/brands/kd.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kd", - "brand_id": "kd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "kd1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/kdm.json b/data/brands/kdm.json deleted file mode 100644 index 5348c6f..0000000 --- a/data/brands/kdm.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kdm", - "brand_id": "kdm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KDM-A103" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/kdt.json b/data/brands/kdt.json deleted file mode 100644 index e0e6b0f..0000000 --- a/data/brands/kdt.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kdt", - "brand_id": "kdt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Eacd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mode=real&idc=1&ids=1" - }, - { - "models": [ - "T10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/kedakom.json b/data/brands/kedakom.json deleted file mode 100644 index c8f3f09..0000000 --- a/data/brands/kedakom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kedakom", - "brand_id": "kedakom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/id=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/keebox.json b/data/brands/keebox.json deleted file mode 100644 index 89800c7..0000000 --- a/data/brands/keebox.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Keebox", - "brand_id": "keebox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1001", - "ICW1000", - "IPC1000W", - "IPC1000WI", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "IPC1000W", - "IPC1000WI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "IPC1000W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IPC1000WI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/keekoon.json b/data/brands/keekoon.json deleted file mode 100644 index 903a9a0..0000000 --- a/data/brands/keekoon.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "brand": "Keekoon", - "brand_id": "keekoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "002", - "K001", - "kk001", - "kk002", - "KK002_0001", - "KK002_0002", - "KK002_0003", - "KK002_TW_3_1", - "KK0020005", - "kk004", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 88, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "002", - "KK001", - "kk002", - "kk005", - "Other", - "Wi-Fi IP Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "002", - "KK001", - "KK002", - "kk004" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 88, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "k001", - "Keekoon 3", - "KK001", - "KK002", - "KK004", - "kk005", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - }, - { - "models": [ - "kk001", - "Other", - "WI-FI IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "kk001", - "KK002" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "kk002", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "kk002" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/keeper.json b/data/brands/keeper.json deleted file mode 100644 index af16a80..0000000 --- a/data/brands/keeper.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Keeper", - "brand_id": "keeper", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "kc-pc5120" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "KC-RX7110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "SV-Y2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/keeyo.json b/data/brands/keeyo.json deleted file mode 100644 index 70c2a9a..0000000 --- a/data/brands/keeyo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Keeyo", - "brand_id": "keeyo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "lv-ip50w-ii" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/keian.json b/data/brands/keian.json deleted file mode 100644 index b417185..0000000 --- a/data/brands/keian.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Keian", - "brand_id": "keian", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KVC60S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VC7816WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/kenik.json b/data/brands/kenik.json deleted file mode 100644 index 8bf73ca..0000000 --- a/data/brands/kenik.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Kenik", - "brand_id": "kenik", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1301t", - "2036T", - "2042T", - "GS-1301T", - "KG-1301T", - "KG-2030D", - "KG-2036T", - "KG-2122D", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "2036T", - "2052T", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "KG-230DP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mode=real&idc=1&ids=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/kenpro.json b/data/brands/kenpro.json deleted file mode 100644 index ba47b79..0000000 --- a/data/brands/kenpro.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Kenpro", - "brand_id": "kenpro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KP-IP801HI", - "KP-IP902HI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "KP-IP802HI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "KP-IP802HI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/kenton.json b/data/brands/kenton.json deleted file mode 100644 index baea24b..0000000 --- a/data/brands/kenton.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Kenton", - "brand_id": "kenton", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "gjc02", - "kep2pcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "gjc02" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kenvs.json b/data/brands/kenvs.json deleted file mode 100644 index 5cdb2c7..0000000 --- a/data/brands/kenvs.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Kenvs", - "brand_id": "kenvs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "GJ-6075P 1080p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GJ-6075P 1080p", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GJ-6075P 1080p", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "GJ-6075P 1080p" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kerui.json b/data/brands/kerui.json deleted file mode 100644 index 93a38a5..0000000 --- a/data/brands/kerui.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Kerui", - "brand_id": "kerui", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "bombillo", - "gk7102s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "CIPC-GQC09HE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "CIPC-GQC09HE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/keshini.json b/data/brands/keshini.json deleted file mode 100644 index 29dab3c..0000000 --- a/data/brands/keshini.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Keshini", - "brand_id": "keshini", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ksn-Ip237w" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/keuken.json b/data/brands/keuken.json deleted file mode 100644 index 774eecf..0000000 --- a/data/brands/keuken.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Keuken", - "brand_id": "keuken", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/keview.json b/data/brands/keview.json deleted file mode 100644 index 859bad3..0000000 --- a/data/brands/keview.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Keview", - "brand_id": "keview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2mp", - "5mp", - "8MP", - "H43", - "hs400b4-p", - "hs400l4", - "HS400L4-P", - "HS400Z6-P", - "HS800B4-F", - "HS800B4-P", - "hs800y3", - "IPC_NT98566_80N80PS-R_S38", - "kx800a36-p", - "Kx800D13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "8MP POE", - "hs400l4-p", - "HS800BP-4", - "HS800C2-P", - "KX500B4-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "hs-400c2-p", - "HS800C2-P", - "POE 8MP", - "unspec" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "HS800B-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HS800B-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/1" - }, - { - "models": [ - "HS800L4-P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/keye.json b/data/brands/keye.json deleted file mode 100644 index 4c59659..0000000 --- a/data/brands/keye.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Keye", - "brand_id": "keye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3.2.6", - "IIIII-407858-DAFFE", - "NNNN-003072-FCDFE", - "Other", - "UID-HHH-0287-13-EDBFD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "GGGG-062152-EFBED", - "NNNN-531960-EBAFF", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/keypad.json b/data/brands/keypad.json deleted file mode 100644 index adb6acc..0000000 --- a/data/brands/keypad.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Keypad", - "brand_id": "keypad", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DoorPhone" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/keyseen.json b/data/brands/keyseen.json deleted file mode 100644 index 5e6ab77..0000000 --- a/data/brands/keyseen.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Keyseen", - "brand_id": "keyseen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KT-CMOS-J-016" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/keytech-dvr.json b/data/brands/keytech-dvr.json deleted file mode 100644 index f90dd62..0000000 --- a/data/brands/keytech-dvr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Keytech Dvr", - "brand_id": "keytech-dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K13003" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kfly.json b/data/brands/kfly.json deleted file mode 100644 index 7d39c70..0000000 --- a/data/brands/kfly.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kfly", - "brand_id": "kfly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/kguard.json b/data/brands/kguard.json deleted file mode 100644 index d79860d..0000000 --- a/data/brands/kguard.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "brand": "Kguard", - "brand_id": "kguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "601", - "KG-SHA108 w/ Web Port", - "Other", - "QRC-601", - "QRT-10", - "QRT-501", - "QRT-502" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "BR421" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 555, - "url": "/img/video.asf" - }, - { - "models": [ - "ICB-200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "KG-SHA108 w/ Web Port", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "KG-SHA108 W/ WEB PORT", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "KG-SHA108 W/ WEB PORT", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "capture[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "hiQ.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/kiacong.json b/data/brands/kiacong.json deleted file mode 100644 index ca75cd0..0000000 --- a/data/brands/kiacong.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Kiacong", - "brand_id": "kiacong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SIP1018W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SIP1018W", - "SIP1603" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "SIP1602" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/kiina.json b/data/brands/kiina.json deleted file mode 100644 index c6800f0..0000000 --- a/data/brands/kiina.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kiina", - "brand_id": "kiina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kiirie.json b/data/brands/kiirie.json deleted file mode 100644 index dd1bb2c..0000000 --- a/data/brands/kiirie.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Kiirie", - "brand_id": "kiirie", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HYV3805A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "HYV3805A", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/kimpok.json b/data/brands/kimpok.json deleted file mode 100644 index b78e155..0000000 --- a/data/brands/kimpok.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kimpok", - "brand_id": "kimpok", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KP-366W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kina-kamera.json b/data/brands/kina-kamera.json deleted file mode 100644 index 45fb84e..0000000 --- a/data/brands/kina-kamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kina Kamera", - "brand_id": "kina-kamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/kindermeubel.json b/data/brands/kindermeubel.json deleted file mode 100644 index ea9fe60..0000000 --- a/data/brands/kindermeubel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kindermeubel", - "brand_id": "kindermeubel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CIP-39218AT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kindle.json b/data/brands/kindle.json deleted file mode 100644 index 42faf75..0000000 --- a/data/brands/kindle.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kindle", - "brand_id": "kindle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fire" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Fire 7 HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/king-special.json b/data/brands/king-special.json deleted file mode 100644 index 39fdd88..0000000 --- a/data/brands/king-special.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "King Special", - "brand_id": "king-special", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/kingcam.json b/data/brands/kingcam.json deleted file mode 100644 index 849fa9e..0000000 --- a/data/brands/kingcam.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Kingcam", - "brand_id": "kingcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "1080P", - "DS-F3", - "IP100", - "ip-cam 100", - "IPCAM-100", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "IPCAM-100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/kingcctv.json b/data/brands/kingcctv.json deleted file mode 100644 index 6cbbb65..0000000 --- a/data/brands/kingcctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kingcctv", - "brand_id": "kingcctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/kingkong.json b/data/brands/kingkong.json deleted file mode 100644 index c5072aa..0000000 --- a/data/brands/kingkong.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Kingkong", - "brand_id": "kingkong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HL101BFA-I436-P-H265", - "KK1", - "UL66-I236" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "KK1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kingmak.json b/data/brands/kingmak.json deleted file mode 100644 index affad83..0000000 --- a/data/brands/kingmak.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kingmak", - "brand_id": "kingmak", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "icam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kingnow.json b/data/brands/kingnow.json deleted file mode 100644 index 970b137..0000000 --- a/data/brands/kingnow.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kingnow", - "brand_id": "kingnow", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PT200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/kingstar.json b/data/brands/kingstar.json deleted file mode 100644 index 221f55e..0000000 --- a/data/brands/kingstar.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Kingstar", - "brand_id": "kingstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "WLA-01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/kinson.json b/data/brands/kinson.json deleted file mode 100644 index b62298c..0000000 --- a/data/brands/kinson.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Kinson", - "brand_id": "kinson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C720PWIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "C720PWIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "C720PWIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kiocong.json b/data/brands/kiocong.json deleted file mode 100644 index 8e5ab17..0000000 --- a/data/brands/kiocong.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Kiocong", - "brand_id": "kiocong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1601", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1602", - "1609" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/kip.json b/data/brands/kip.json deleted file mode 100644 index f0ab1f1..0000000 --- a/data/brands/kip.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Kip", - "brand_id": "kip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100hv20h", - "20HI-960P-FL-W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "KIP-200PT40N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kishgo.json b/data/brands/kishgo.json deleted file mode 100644 index d0b04c5..0000000 --- a/data/brands/kishgo.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Kishgo", - "brand_id": "kishgo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "dh46h 960p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "960", - "960P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kitcam.json b/data/brands/kitcam.json deleted file mode 100644 index 0e3c389..0000000 --- a/data/brands/kitcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kitcam", - "brand_id": "kitcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/kittyhok.json b/data/brands/kittyhok.json deleted file mode 100644 index 1a0f4ec..0000000 --- a/data/brands/kittyhok.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Kittyhok", - "brand_id": "kittyhok", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p HD PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.mp4" - }, - { - "models": [ - "1080p HD PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/h264" - }, - { - "models": [ - "PTZ IPcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "ptzwifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/kkmoon.json b/data/brands/kkmoon.json deleted file mode 100644 index c0ed8e4..0000000 --- a/data/brands/kkmoon.json +++ /dev/null @@ -1,525 +0,0 @@ -{ - "brand": "Kkmoon", - "brand_id": "kkmoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "1080P", - "1080p 2.0 MP PoE", - "1080P Wireless WIFI PTZ HD IP Camera", - "1234", - "130W", - "2.0 MP POE", - "2MP", - "720", - "720p", - "801", - "805", - "806", - "808", - "809", - "810", - "816", - "D77W", - "GGGG-329603-FEACE", - "H264", - "HD 720P", - "HD001", - "HD720", - "hr06", - "LS-F2", - "Original", - "Other", - "p2p", - "PorchSD13W", - "ptz 1080p", - "PTZ 1080P", - "s435", - "sd13w", - "SD13W", - "SD27W", - "sn-hsp-4006w13", - "SN-HSP-4006W13", - "sn-ipc", - "hw11", - "sn-ipc-hw11", - "SN-IPC-HW11", - "SW17454955", - "the ball", - "TP-C549T", - "tp-c801", - "TP-C810FD", - "TP-DVR124", - "TV-T0404-LM-XM", - "v1.1 (The Ball)", - "Wifi 720P HD Camera", - "WIFI 720P HD CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080", - "1080P 2.0 MP POE", - "1Mp", - "4 cam", - "720P", - "alex", - "dvr 1108", - "DVR 1108", - "H264", - "H264 4CH Hi3520D chip", - "HD1080", - "HD720-stv", - "HI3518", - "Other", - "TP-HI100", - "TP-Hi100BY", - "TP-hi100wk", - "TPHi100WK", - "TP-Hi200yy", - "TP-MS200IPL", - "TV-T0404-LM-XM", - "xf-9408nf-lm", - "XF-9416NF-LM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080", - "1080P", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "867W", - "B87W", - "DVR 1108", - "HI3518", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1080", - "1080P Wireless WIFI PTZ HD IP Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1108, - "url": "/snap.jpg?JpegCam=11" - }, - { - "models": [ - "1080P", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "130w", - "1HD", - "1mp", - "1MP", - "2MP", - "720", - "720P", - "801", - "803", - "805", - "805/1", - "806", - "808", - "809", - "809809", - "810", - "818", - "867W", - "887w", - "d77w", - "D77W", - "DVR 1108", - "FI8918W", - "H264", - "HD 720P", - "HD1080", - "HD720", - "HD720-stv", - "hr06", - "HR06", - "ip1", - "jolly", - "LS-C6", - "Oma", - "Other", - "P2P", - "PTZ 1080P", - "s435", - "s435-45", - "S435-us", - "S600-UK", - "s600-us", - "sd13w", - "SD13W", - "SD17W", - "sd27", - "sd27w", - "SD27W", - "SN-HSP-4006W13", - "SN-IPC-HW01", - "sw13", - "TP C549T", - "TP-C537T", - "TP-C810FD", - "UKN", - "v1.1 (The Ball)", - "ZZZZZ-123020-AFDEA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "130W", - "1MP", - "720", - "720P", - "803", - "806", - "809", - "810", - "B87W", - "C6FOSgZONOPOLO", - "d77w", - "H264", - "Other", - "PTZ 1080P", - "SD13W", - "sd27w", - "sn-hsp-4006w13", - "TP-C537T", - "tp-c810", - "tp-c810fd", - "TV-TO404-LM-XM", - "V1.1 (THE BALL)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "1080P", - "130W", - "1MP", - "720P", - "801", - "803", - "805", - "805/1", - "D77W", - "HD 960P", - "HD720-stv", - "HZDX-003923-DEEFF", - "OMA", - "Other", - "PTZ", - "PTZ 1080P", - "SD13W", - "tp-c810", - "tp-c810fd", - "tp-ms-poe-1", - "TV-TO404-LM-XM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "1080p 2.0 MP PoE", - "2.0 MP PoE", - "TV-TO404 LX-LM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "1HD", - "Other", - "TP-DVR124" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1108, - "url": "/live0.264" - }, - { - "models": [ - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "Kkmoon1HD", - "Other", - "TV-T0404-MLMX", - "TV-TO404-XL-XM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "TP-C121", - "XM-102-02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=4_stream=1.sdp" - }, - { - "models": [ - "1080P WIRELESS WIFI PTZ HD IP CAMERA", - "DVR1080-8", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=2&stream=1.sdp" - }, - { - "models": [ - "1HD", - "803", - "805", - "808", - "809", - "903", - "H264", - "HD1", - "HI3518", - "Kkmoon1HD", - "Other", - "P2P camera", - "thing", - "TP-C537T", - "TV-TO404-LM-XM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "2.0 MP POE", - "803", - "808" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "720P", - "H264", - "k9604-w", - "Other", - "P2P", - "PTZ 1080P", - "SD27W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "803", - "805", - "903", - "H264", - "Other", - "tp-ms200IPL", - "TP-MS400HPA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "803", - "HI3518", - "IPC-4006W10", - "Other", - "XF-VR108A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "806", - "PTZ" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "809", - "DVR 1108" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "8106", - "Other", - "tp c549t", - "TP-HI100iRD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DVR1080-8", - "HD1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=2&stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 553, - "url": "/stream0?" - }, - { - "models": [ - "Other", - "TP C549T", - "TP-JA960-3M", - "XF-VR108TA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "Other", - "XF-108TA", - "XF-VR108A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "p2p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "SKYIPCAM500W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "sn-hsp-4006w13" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "SN-IPC-HW01" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "TP-C121", - "XM-102-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=4_stream=0.sdp" - }, - { - "models": [ - "xf9608nf" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=80" - } - ] -} \ No newline at end of file diff --git a/data/brands/klikaanklikuit.json b/data/brands/klikaanklikuit.json deleted file mode 100644 index c08668c..0000000 --- a/data/brands/klikaanklikuit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Klikaanklikuit", - "brand_id": "klikaanklikuit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM-2500" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/klok.json b/data/brands/klok.json deleted file mode 100644 index 5218adf..0000000 --- a/data/brands/klok.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Klok", - "brand_id": "klok", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kmart.json b/data/brands/kmart.json deleted file mode 100644 index e0c2c82..0000000 --- a/data/brands/kmart.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kmart", - "brand_id": "kmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/kmoon.json b/data/brands/kmoon.json deleted file mode 100644 index 808e3a5..0000000 --- a/data/brands/kmoon.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Kmoon", - "brand_id": "kmoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100by" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "sd13w", - "stars" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "TP-C537T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "TV-T0404-LM-XM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/kmw.json b/data/brands/kmw.json deleted file mode 100644 index 291d54e..0000000 --- a/data/brands/kmw.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Kmw", - "brand_id": "kmw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SPES-01" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - }, - { - "models": [ - "SPES-01" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/second" - }, - { - "models": [ - "SPES-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/second" - } - ] -} \ No newline at end of file diff --git a/data/brands/knc.json b/data/brands/knc.json deleted file mode 100644 index 730ae25..0000000 --- a/data/brands/knc.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "brand": "Knc", - "brand_id": "knc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "230", - "HDi47", - "KTC230", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/jpeg.cgi" - }, - { - "models": [ - "HDBi230" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "HDi47", - "KNC-p3BR4XIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0" - }, - { - "models": [ - "KNC-p3TR3XIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "KTC230", - "pin" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264" - }, - { - "models": [ - "Other", - "p3LR3IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "p3TR3XIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/knewmart.json b/data/brands/knewmart.json deleted file mode 100644 index db97926..0000000 --- a/data/brands/knewmart.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "brand": "Knewmart", - "brand_id": "knewmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720", - "IPCAM01", - "knew", - "kr0022", - "KR0038", - "KR0041", - "KR0041-2", - "kr0043", - "KW0043", - "KW01B", - "KW02B", - "onvif 720p", - "ONVIF720HD IP CAMERA", - "Other", - "PNP ip", - "WXH-216766-BABBB", - "X SERIES IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Ip Kamera", - "KR0038", - "KR004", - "KR0043", - "KW02B", - "ONVIF720HD IP CAMERA", - "Other", - "PNP IP", - "pnp webcam", - "PNP1P", - "WXH-122168-FDCEF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "KR0041", - "KR0043", - "ONVIF720HD IP Camera", - "WXH-102908-BEADA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "kr0043" - ], - "type": "JPEG", - "protocol": "http", - "port": 8082, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "KW01B", - "KW02B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/knowyournanny.com.json b/data/brands/knowyournanny.com.json deleted file mode 100644 index 7c32cd3..0000000 --- a/data/brands/knowyournanny.com.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Knowyournanny.com", - "brand_id": "knowyournanny.com", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "black box" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/kobert.json b/data/brands/kobert.json deleted file mode 100644 index 3070849..0000000 --- a/data/brands/kobert.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kobert", - "brand_id": "kobert", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KG26" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/kobi.json b/data/brands/kobi.json deleted file mode 100644 index 425527e..0000000 --- a/data/brands/kobi.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Kobi", - "brand_id": "kobi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "easyIP", - "NVR EASY IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "k-32cl", - "k34cl", - "k35cl" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "k35cl" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kocom.json b/data/brands/kocom.json deleted file mode 100644 index 116293f..0000000 --- a/data/brands/kocom.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Kocom", - "brand_id": "kocom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cr351f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile/profile01" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/kodak.json b/data/brands/kodak.json deleted file mode 100644 index 00164d0..0000000 --- a/data/brands/kodak.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Kodak", - "brand_id": "kodak", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "201pl" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "201PL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "s101" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "s101" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "s101" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "s101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg?type=motion" - } - ] -} \ No newline at end of file diff --git a/data/brands/kodu.json b/data/brands/kodu.json deleted file mode 100644 index 87563da..0000000 --- a/data/brands/kodu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kodu", - "brand_id": "kodu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hoov" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/koepel.json b/data/brands/koepel.json deleted file mode 100644 index 65aa394..0000000 --- a/data/brands/koepel.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Koepel", - "brand_id": "koepel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/kogacam.json b/data/brands/kogacam.json deleted file mode 100644 index 41c1a1a..0000000 --- a/data/brands/kogacam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kogacam", - "brand_id": "kogacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NCM630W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/kogan.json b/data/brands/kogan.json deleted file mode 100644 index da731f3..0000000 --- a/data/brands/kogan.json +++ /dev/null @@ -1,301 +0,0 @@ -{ - "brand": "Kogan", - "brand_id": "kogan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "encoder", - "ENCODER", - "FI8904W", - "Icam", - "IPWIRELESS", - "kaip", - "KAIPC01BLKA", - "kaipco1blka", - "KAIPCO1BLKA", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "encoder", - "IPWIRELESS", - "KAIPC01BLKA", - "Other", - "THing" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "encoder", - "IPWireless", - "KAIPC01BLKA", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "encoder" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "encoder" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "FI8904W", - "KAIPC01BLKA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "HD IP Cam", - "KAIPCHDSLVA", - "PNP IP CAM", - "ZH-IXA15-WC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_0" - }, - { - "models": [ - "HD IP CAM", - "IP Cam PT", - "IPWIRELESS", - "KAIPC01BLKA", - "Other", - "pnp ip cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP Cam PT", - "KAIPC01BLKA", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPWireless", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "kaip", - "KAIPC01BLKA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "KAIPC01BLKA", - "Melbourne 2", - "Other", - "WIRELESS CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "KAIPC01BLKA", - "Other", - "Other_2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "KAIPC01BLKA", - "Other", - "PNP-IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "KAIPC01BLKA", - "kaipc01blkb", - "KAIPCO1BLKA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "KAIPC01BLKA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "KAIPC01BLKA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other", - "wireless cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PNP IP CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kohlen.json b/data/brands/kohlen.json deleted file mode 100644 index ed25c1d..0000000 --- a/data/brands/kohlen.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kohlen", - "brand_id": "kohlen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TV-CTZY9825A-GKA-2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "TV-CZTY9825A-GKA-2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/koicong.json b/data/brands/koicong.json deleted file mode 100644 index af4ecb6..0000000 --- a/data/brands/koicong.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Koicong", - "brand_id": "koicong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1601" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/komatsu.json b/data/brands/komatsu.json deleted file mode 100644 index 0316bc9..0000000 --- a/data/brands/komatsu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Komatsu", - "brand_id": "komatsu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BB-HCM580" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/kompernass.json b/data/brands/kompernass.json deleted file mode 100644 index d0ffe80..0000000 --- a/data/brands/kompernass.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Kompernass", - "brand_id": "kompernass", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IUK 5 A1", - "iuk 5A!" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IUK 5A1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/komplexfix.json b/data/brands/komplexfix.json deleted file mode 100644 index 91eddfc..0000000 --- a/data/brands/komplexfix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Komplexfix", - "brand_id": "komplexfix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/konan.json b/data/brands/konan.json deleted file mode 100644 index 3a62619..0000000 --- a/data/brands/konan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Konan", - "brand_id": "konan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/konarrk.json b/data/brands/konarrk.json deleted file mode 100644 index e642c1e..0000000 --- a/data/brands/konarrk.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Konarrk", - "brand_id": "konarrk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "x000S5ZBFJ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/konig.json b/data/brands/konig.json deleted file mode 100644 index 7eca10a..0000000 --- a/data/brands/konig.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "brand": "Konig", - "brand_id": "konig", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4CH digital video recoder" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "bm60", - "H264", - "iPCAM100w", - "kn-8m60", - "kn-bm 60", - "KN-BM40", - "sas-ipcam115", - "SAS-IPCAM116", - "SEC-CAMIP20" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "CMP-NWIPCAM20", - "COR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "cmp-nwipcam22", - "CMP-NWIPCAM31", - "H264", - "ip10", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CMP-NWIPCAM31" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "SEC-CAMIP20" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/konik.json b/data/brands/konik.json deleted file mode 100644 index 07a92eb..0000000 --- a/data/brands/konik.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Konik", - "brand_id": "konik", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GS-1301T", - "KG-2122D", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/konix.json b/data/brands/konix.json deleted file mode 100644 index 988afc6..0000000 --- a/data/brands/konix.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Konix", - "brand_id": "konix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "APM-J011-WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Tatu" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/konlen.json b/data/brands/konlen.json deleted file mode 100644 index e1a7b9c..0000000 --- a/data/brands/konlen.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Konlen", - "brand_id": "konlen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hd cloud", - "KL-X624GAW", - "X Series", - "Xseries" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "KLN-IP629" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "KL-X624GAW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/konnek-stein.json b/data/brands/konnek-stein.json deleted file mode 100644 index ea01cef..0000000 --- a/data/brands/konnek-stein.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Konnek Stein", - "brand_id": "konnek-stein", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "m23" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/koogeek.json b/data/brands/koogeek.json deleted file mode 100644 index 529a120..0000000 --- a/data/brands/koogeek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Koogeek", - "brand_id": "koogeek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "tv-6024h-2mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/koolertron.json b/data/brands/koolertron.json deleted file mode 100644 index a2e65fd..0000000 --- a/data/brands/koolertron.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Koolertron", - "brand_id": "koolertron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SP-SHEX21-SL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "PnP", - "SP-SHEX21-SL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SP-SHEX21-SL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SP-SHEX21-SL" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/koomooni.json b/data/brands/koomooni.json deleted file mode 100644 index 9b2e960..0000000 --- a/data/brands/koomooni.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Koomooni", - "brand_id": "koomooni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "etu" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/korang.json b/data/brands/korang.json deleted file mode 100644 index c683946..0000000 --- a/data/brands/korang.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Korang", - "brand_id": "korang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ka-dm02-w-1.3mp-32g" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/koti.json b/data/brands/koti.json deleted file mode 100644 index 122931d..0000000 --- a/data/brands/koti.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Koti", - "brand_id": "koti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/kowa.json b/data/brands/kowa.json deleted file mode 100644 index 6da892d..0000000 --- a/data/brands/kowa.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Kowa", - "brand_id": "kowa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KW-90IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "SDVR-611ZA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kpi.json b/data/brands/kpi.json deleted file mode 100644 index 3cbf30b..0000000 --- a/data/brands/kpi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Kpi", - "brand_id": "kpi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAMS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CAMS" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/kpp.json b/data/brands/kpp.json deleted file mode 100644 index 717e007..0000000 --- a/data/brands/kpp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Kpp", - "brand_id": "kpp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C24s" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/kraun.json b/data/brands/kraun.json deleted file mode 100644 index 5e4b62f..0000000 --- a/data/brands/kraun.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Kraun", - "brand_id": "kraun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Day and Night", - "kw.07", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "kw.07", - "mie640", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/krissview.json b/data/brands/krissview.json deleted file mode 100644 index 876fc03..0000000 --- a/data/brands/krissview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Krissview", - "brand_id": "krissview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/krypton.json b/data/brands/krypton.json deleted file mode 100644 index a389b2d..0000000 --- a/data/brands/krypton.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Krypton", - "brand_id": "krypton", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vr-sn3.0h" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ksvp.json b/data/brands/ksvp.json deleted file mode 100644 index 612cd5d..0000000 --- a/data/brands/ksvp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ksvp", - "brand_id": "ksvp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "China" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/kt-and-c.json b/data/brands/kt-and-c.json deleted file mode 100644 index 3ed4e9f..0000000 --- a/data/brands/kt-and-c.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Kt And C", - "brand_id": "kt-and-c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KNC-HDi47" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "KNC-p2DR28V12IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "KNC-p3BR4IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "KNC-p3BR4IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/kucam.json b/data/brands/kucam.json deleted file mode 100644 index 5cf3136..0000000 --- a/data/brands/kucam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Kucam", - "brand_id": "kucam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K201B", - "X Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/kyocera.json b/data/brands/kyocera.json deleted file mode 100644 index f5c8b9b..0000000 --- a/data/brands/kyocera.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "brand": "Kyocera", - "brand_id": "kyocera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c6725", - "event", - "hydro1", - "Phone", - "POS", - "rise", - "Wave" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/l-series.json b/data/brands/l-series.json deleted file mode 100644 index d75b021..0000000 --- a/data/brands/l-series.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "brand": "L Series", - "brand_id": "l-series", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam0758" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "CAM0758", - "CAM0760", - "L-610W", - "Other", - "V100", - "View-150278-NKFFU" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cam0759" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "cam0759" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "CAM0759" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "KY610W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Other", - "View-150278-NKFFU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other", - "sku" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/lager.json b/data/brands/lager.json deleted file mode 100644 index 8290ff9..0000000 --- a/data/brands/lager.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Lager", - "brand_id": "lager", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ka" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Camera=0&BandWidth=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lambda.json b/data/brands/lambda.json deleted file mode 100644 index 80f50b2..0000000 --- a/data/brands/lambda.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Lambda", - "brand_id": "lambda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "24DC8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "24DC8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/lampa.json b/data/brands/lampa.json deleted file mode 100644 index df5af4f..0000000 --- a/data/brands/lampa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lampa", - "brand_id": "lampa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/laser.json b/data/brands/laser.json deleted file mode 100644 index 770e1ed..0000000 --- a/data/brands/laser.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Laser", - "brand_id": "laser", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "NT-IPC360" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "NT-IPC360" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Smart Full HD Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lau-3.json b/data/brands/lau-3.json deleted file mode 100644 index 6c90bf4..0000000 --- a/data/brands/lau-3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lau 3", - "brand_id": "lau-3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VT-6200HV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/launch.json b/data/brands/launch.json deleted file mode 100644 index 2231361..0000000 --- a/data/brands/launch.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Launch", - "brand_id": "launch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LC5000", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "LC5000", - "lc5201b6", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "LC5000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/laview.json b/data/brands/laview.json deleted file mode 100644 index 92661bd..0000000 --- a/data/brands/laview.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "brand": "Laview", - "brand_id": "laview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ASFNVR", - "CS-CV206-C0-3B2WFR-LAV(C19052349)", - "H.264D1DVR", - "LV PW65382", - "LV-D2104CS", - "LV-D2108CS", - "LV-KN984P44A4-T1", - "LV-N9808C8E", - "LV-PB1340WC", - "LV-PBK80804C", - "LV-PD50208", - "LV-PDB1520F1(165401782)", - "LV-PWB2020-W", - "LV-PWB2524-W", - "LV-PWF812B-U", - "LV-T9304YHS", - "LV-T9708MHS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "CBP1334", - "CDP6034", - "CMIP3432", - "LV PW65382", - "LV-CBP1014", - "LV-CDP6014", - "LV-CDP6034", - "LV-CIP422X20-S", - "LV-N9808C8E", - "LV-PB3040WC", - "LV-PB3140WC", - "LV-PB9W", - "lv-pbk6180-vf", - "LV-PC902F2-w", - "LV-PC903F4-W", - "LV-PD50208", - "LV-PD51208C", - "LV-PD51402BC", - "LV-PWB2524-W", - "lv-pwf812-u", - "LV-PWR302", - "LV-WB933F4B", - "One", - "Other", - "pb3140", - "pb3140wc", - "PW65382" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "CBP-1334", - "LV-N9616D6E", - "LV-PWB2524-W", - "LV-PWB2624-W", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Doorbell", - "LV-PB9W", - "LV-PD50208", - "LV-PTK66802", - "LV-PWB2524-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264/ch01/main/av_stream" - }, - { - "models": [ - "DOORBELL", - "H.264D1DVR", - "LV-050208", - "LV-HB732F3T", - "LV-N9504B-W", - "LV-N9808C8E", - "LV-PB912F4C", - "LV-PB932F4", - "LV-PWB2020-W", - "LV-PWB2524-W", - "LV-PWF1", - "LV-PWF1-K v5.3.4", - "Other", - "PWB10-K" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "h.264d1dvr", - "LV-CBA2963B", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "LV=PB9W", - "LV-KN984P44A4-T1", - "LV-PWB2020-W", - "LV-PWB2524-W", - "lv-pwf1-k", - "LV-PWF812B-U", - "LV-PWF812-U", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - }, - { - "models": [ - "LV-CBP1014", - "LV-CDP6014", - "lv-pbk6180-vf", - "LV-PWB2524-W", - "LV-PWFL182U" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "LV-CBP1034", - "lv-pbk6180-vf" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "LV-CDP6014", - "LV-PB932F4", - "lv-pbk6180-vf" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "LV-N9808C8E", - "LV-T9304YHS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/streaming/channels/201" - }, - { - "models": [ - "LV-PB932F4", - "LV-PC902F2-W", - "Lv-pwf812-u", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "LV-PB932F4", - "LV-T9708MHS" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/201" - }, - { - "models": [ - "LV-PB9W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=0&subtype=00" - }, - { - "models": [ - "lv-pbk6180-vf", - "LV-PBM3940", - "LV-PC902F2-w", - "LV-PC902F2-W", - "LV-PW65382", - "LV-PWB2524-W", - "Lv-pwf812-u", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "LV-PWB2524-W", - "LV-PWR302", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "LV-PWB2524-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "LV-PWB2524-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "LV-PWD50202-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "LV-PWF1", - "LV-PWR12W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "LV-PWF1", - "LV-PWR12W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "LV-PWF1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "LV-PWF2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101/?transportmode=unicast.sdp" - }, - { - "models": [ - "LV-PWF812B-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "LV-PWL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "PD51208C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/lc-security.json b/data/brands/lc-security.json deleted file mode 100644 index cc009fc..0000000 --- a/data/brands/lc-security.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "brand": "Lc Security", - "brand_id": "lc-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "141", - "LC-350 IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "chujnia" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "IP350" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IP350" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "LC-256-IPPOE", - "LC-350 IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "LC-256-IPPOE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream2" - }, - { - "models": [ - "LC-350 IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "LC-350 IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "LC-350 IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "LC-359 IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/lc-systems.json b/data/brands/lc-systems.json deleted file mode 100644 index 0d98629..0000000 --- a/data/brands/lc-systems.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lc Systems", - "brand_id": "lc-systems", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Orange Pi Zero" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/leadcam.json b/data/brands/leadcam.json deleted file mode 100644 index 30b8fda..0000000 --- a/data/brands/leadcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Leadcam", - "brand_id": "leadcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/leadership.json b/data/brands/leadership.json deleted file mode 100644 index be90c8e..0000000 --- a/data/brands/leadership.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Leadership", - "brand_id": "leadership", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6149", - "Other", - "Raptor 6149" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "6149" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "6149" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/leadtek.json b/data/brands/leadtek.json deleted file mode 100644 index dae87d3..0000000 --- a/data/brands/leadtek.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "brand": "Leadtek", - "brand_id": "leadtek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8025", - "8025B", - "A-ADT-4HS2", - "ICAMERA 1000", - "ICAMERA-1000-ADT", - "RC8025B-ADT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "8025", - "8025B", - "ADT8025B", - "OC810-ADT", - "RC8021W-ADT", - "RC8025B", - "RC8025B-ADT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "8025B", - "ICAMERA", - "ICAMERA 1000", - "RC8025B-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "C101", - "VS-2001" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c351" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C351" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C512", - "C522", - "c541" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "ICAMERA 1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "ICAMERA-1000-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "Other", - "VS-2001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "RC8021W-ADT" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "RC8025B", - "RC8025B-ADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/lecoe.json b/data/brands/lecoe.json deleted file mode 100644 index 5d27c4a..0000000 --- a/data/brands/lecoe.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Lecoe", - "brand_id": "lecoe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DomeCam", - "W72S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ledvance.json b/data/brands/ledvance.json deleted file mode 100644 index 58f0bbc..0000000 --- a/data/brands/ledvance.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ledvance", - "brand_id": "ledvance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SMART+ Wifi Wall Camera Control", - "wifi smart +" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/leftek.json b/data/brands/leftek.json deleted file mode 100644 index ef8a23d..0000000 --- a/data/brands/leftek.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "brand": "Leftek", - "brand_id": "leftek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2mp", - "CA11", - "ca11-sc-i-poe-223", - "LF-CE11-SB-I-POE-223", - "Minicam", - "Other", - "S2018V1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "720P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CA11", - "CA11-SC-I-POE-223", - "LF-CE11-SB-1-POE-223", - "LF-CE11-SB-I-PODE-223", - "LF-CE11-SB-I-POE-223", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "ca11-sc-i-poe-223", - "F1-10I", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "F1-10I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/2.3gp" - }, - { - "models": [ - "ptz" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ptz" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "mpeg4/[CHANNEL]/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/legeek.json b/data/brands/legeek.json deleted file mode 100644 index 8f547f8..0000000 --- a/data/brands/legeek.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Legeek", - "brand_id": "legeek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bullet", - "C6F0SgZ3N0P6L2", - "Other", - "ZZZZ-024549-DCDBB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/legra.json b/data/brands/legra.json deleted file mode 100644 index 91d99cc..0000000 --- a/data/brands/legra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Legra", - "brand_id": "legra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - } - ] -} \ No newline at end of file diff --git a/data/brands/legrand.json b/data/brands/legrand.json deleted file mode 100644 index 644c39f..0000000 --- a/data/brands/legrand.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Legrand", - "brand_id": "legrand", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "430632" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "cm7000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10110, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/legrange.json b/data/brands/legrange.json deleted file mode 100644 index 127ec42..0000000 --- a/data/brands/legrange.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Legrange", - "brand_id": "legrange", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lenel.json b/data/brands/lenel.json deleted file mode 100644 index fb1317c..0000000 --- a/data/brands/lenel.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Lenel", - "brand_id": "lenel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CST-240", - "ict 230", - "ICT-220", - "ICT-230", - "ict2301", - "ICT-240" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg.jpg" - }, - { - "models": [ - "ICT-220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ICT-220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "ICT-220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "ICT-220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.mjpg" - }, - { - "models": [ - "ICT-220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "ICT-240" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg2.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/lenovo.json b/data/brands/lenovo.json deleted file mode 100644 index cc99690..0000000 --- a/data/brands/lenovo.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "brand": "Lenovo", - "brand_id": "lenovo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "132", - "720", - "Dome X5", - "JA-F10R-U", - "JA-F10T-U", - "Other", - "PTZ DOME LENOVO 100", - "X6T (Gimball)", - "XW1-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "2010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "6010", - "A360", - "A369i", - "ANDROID_WEBCAM", - "Other", - "Table 8", - "TEL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "7 Tab", - "a369i", - "a606", - "a850", - "Other", - "tel", - "zuk", - "Zuk" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "a7010a48" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Easy Cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "USB2.0 UVC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 7777, - "url": "/video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/lensoul.json b/data/brands/lensoul.json deleted file mode 100644 index 5104b4c..0000000 --- a/data/brands/lensoul.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lensoul", - "brand_id": "lensoul", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JD08610-Q1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/leocam.json b/data/brands/leocam.json deleted file mode 100644 index 3e713e7..0000000 --- a/data/brands/leocam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Leocam", - "brand_id": "leocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HOSAFE 1MD4P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/leopard-imaging-inc.json b/data/brands/leopard-imaging-inc.json deleted file mode 100644 index 69e0dc7..0000000 --- a/data/brands/leopard-imaging-inc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Leopard Imaging Inc", - "brand_id": "leopard-imaging-inc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/leopard-imaging.json b/data/brands/leopard-imaging.json deleted file mode 100644 index 520d616..0000000 --- a/data/brands/leopard-imaging.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Leopard Imaging", - "brand_id": "leopard-imaging", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Omnivision" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ov9712" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lerch.json b/data/brands/lerch.json deleted file mode 100644 index 2fadebe..0000000 --- a/data/brands/lerch.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lerch", - "brand_id": "lerch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/leshp.json b/data/brands/leshp.json deleted file mode 100644 index 09d9249..0000000 --- a/data/brands/leshp.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Leshp", - "brand_id": "leshp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "885228104", - "999179921", - "SN-IPC-5010W10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other", - "SN-IPC-5010W10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "SN-IPC-HW01201712" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "wf720p" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "X001JCKQ9T" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "X001JCKQ9T", - "X001JCKQ9T #2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/levelone.json b/data/brands/levelone.json deleted file mode 100644 index 2cedc18..0000000 --- a/data/brands/levelone.json +++ /dev/null @@ -1,793 +0,0 @@ -{ - "brand": "Levelone", - "brand_id": "levelone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "0010/0020", - "1091", - "fcs_0010", - "FCS-0020", - "FCS-0040", - "FCS-1030", - "FCS-3031", - "FSC-0040", - "WCS 0040", - "wcs-0010", - "WCS-6020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "0010/0020", - "0030", - "0031/1121/3061/5041", - "1010/2010", - "1131/1141/3071/3081/5051", - "FCS 4000", - "FCS-0010", - "FCS-0030", - "FCS-1020", - "FCS-1030", - "FCS-1040", - "FCS-1101", - "FCS-3000", - "FCS-3021", - "FCS-3031", - "FCS-5011", - "FCS-5030", - "Other", - "WCS-0040" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "0010/0020", - "0030", - "1010/2010", - "1091", - "1131/1141/3071/3081/5051", - "FCS 4000", - "FCS-0010", - "Fcs-0020", - "FCS-0030", - "FCS-0040", - "FCS-1020", - "FCS-1030", - "fcs-1040", - "FCS-3000", - "FCS-3031", - "FCS-3091", - "FSC-0040", - "Other", - "WCS 0040", - "WCS-1090" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "0010/0020", - "10_212", - "1010_2", - "1091", - "FCS-0010", - "FCS-0020", - "FCS-0040", - "fcs-1040", - "FCS-1091", - "FCS-1131", - "FCS-3051", - "Other", - "wcs-0010", - "WCS-2003" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "0030", - "5052", - "FCS-0031", - "FCS-1020", - "fcs-1122", - "FCS-5030", - "FCS-5041", - "fcs-6010", - "Other", - "Wcs 00500", - "WCS-0030", - "WCS-0050" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "0030", - "0031/1121/3061/5041", - "FCS-0050", - "Other", - "Wcs 00500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/media.cgi?action=getSnapshot" - }, - { - "models": [ - "0030", - "0031/1121/3061/5041", - "FCS-0030", - "FCS-0050", - "FCS-1121", - "FCS-3063", - "FCS-5041", - "FCS-6010", - "Other", - "Wcs 00500", - "WCS-0030", - "WCS-0050", - "ws050" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "channel2" - }, - { - "models": [ - "0031/1121/3061/5041", - "1131/1141/3071/3081/5051", - "5051", - "FCS-1131", - "FCS-5031", - "FCS-5051", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "0031/1121/3061/5041", - "FCS-0032", - "FCS-3021", - "FCS-5011", - "FCS-5030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "0031/1121/3061/5041", - "3061", - "FCS-0030", - "FCS-0031", - "FCS-1121", - "FCS-5041", - "FCS-5067", - "Other", - "WCS-0050" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "channel[CHANNEL]" - }, - { - "models": [ - "0051", - "fcs 1121", - "fcs-4203" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel1" - }, - { - "models": [ - "020", - "FCS-1091", - "FSC-0040", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1010", - "1010/2010", - "1030", - "fcs 1010", - "FCS 1060", - "Fcs 9064", - "FCS-1010", - "FCS1030", - "FCS-1040", - "FCS-1040-JPG", - "fcs-1050", - "FCS-1070", - "FCS-1081", - "FCS-1131", - "FCS-3000", - "FCS-4101", - "FCS-5030", - "fsc1010", - "IP61x2", - "Other", - "WCS", - "wcs 2040", - "wcs-2010", - "WCS-2030", - "wcs-2060", - "WSC-2030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "1010/2010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1081", - "FCS 4000", - "FCS-1101", - "fcs-4100", - "Min", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "1091", - "FCS-1030", - "FCS-1060", - "FCS-5011", - "FCS-5030", - "Other", - "WCS-0040", - "WCS-2030", - "WCS-2060" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "1131/1141/3071/3081/5051", - "5051", - "FCS-0071", - "FCS-1131", - "fcs-3073", - "FCS-3080", - "FCS-3081", - "FCS-5011", - "FCS-5051", - "FCS-5061", - "Other", - "WCS 0040", - "wcs-0010" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "3061", - "5051", - "fcs 3071", - "FCS-3081", - "FCS-5051", - "WCS-2030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "4101", - "FCS 3101", - "FCS-1060", - "FCS-4101", - "FCS-4301", - "FCS-4302", - "FCS5068", - "FCS-5093", - "FSC-4101", - "FSC-6020", - "wcs-6050" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.sdp" - }, - { - "models": [ - "4101", - "fcs-4020", - "FCS-5030" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video2.mjpg" - }, - { - "models": [ - "fcs- 0032", - "FCS 3065", - "FCS-0032", - "FCS-1152", - "FCS-3053", - "FCS-3054", - "FCS-4044", - "FCS-5056", - "FCS-5064" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "fcs 3061", - "FCS-0030", - "FCS-0050", - "FCS-1122", - "FCS-3052", - "fcs-5052", - "fcs-6010", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "FCS 3065", - "FCS 3101", - "FCS-3054", - "FCS-4044", - "FCS-5056" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-stream1" - }, - { - "models": [ - "FCS 4000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "FCS 4202", - "FCS-1041", - "FCS-4302", - "FCS-5041", - "FCS-5042", - "WCS-2060", - "WCS-6020", - "WCS-6050" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "FCS-0010", - "FCS-0020" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "access_code" - }, - { - "models": [ - "FCS-0030", - "FSC-1122", - "FSC-6010", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "FCS-0030", - "FCS-1020" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "FCS-0030", - "FCS-4051" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "FCS-0030", - "FCS-4302" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "FCS-0031", - "FCS-3063", - "FCS-5051", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "FCS-0032", - "FCS-3021", - "FCS-5030", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "FCS-0040", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "FCS-0051", - "FCS-3063" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "FCS-0051", - "FCS-5056" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif&event&video1" - }, - { - "models": [ - "FCS-0071", - "FCS-3091" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - }, - { - "models": [ - "FCS-0071", - "FCS-3091", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - }, - { - "models": [ - "FCS-1010", - "FCS-1030", - "FCS-1040", - "fcs-1040-jpg", - "Fcs-1050", - "fcs-1060", - "FCS-2030", - "FCS-3000", - "WCS 2040", - "WCS-0040", - "WCS-2010", - "WCS-2030", - "WCS-2060", - "WCS-2070", - "wsc2010", - "WSC2010" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "fcs-1040", - "FCS-5030", - "FCS-7111" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "FCS-1040", - "FCS-3000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "FCS-1081", - "FCS-1101", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "FCS-1135", - "FCS-3085" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "FCS-1153", - "FCS-3053", - "FCS-3054", - "FCS-5053" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream2" - }, - { - "models": [ - "FCS-3081" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "FCS-4051", - "NVC-810" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "FCS-4051", - "FSC-5060" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel0" - }, - { - "models": [ - "fcs-4100", - "fcs-4101", - "Other", - "WCS-6050" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "FCS-500x Camera Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IEIDVR?CH=[USERNAME]&CARD=0" - }, - { - "models": [ - "FCS-5030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "FCS-5058" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//Hauptstream" - }, - { - "models": [ - "FCS-5067", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream/bidirect/channel[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "loginfree.jpg" - }, - { - "models": [ - "Other", - "WCS-0040" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "wcs-2010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?cam=1&quality=3&size=2" - }, - { - "models": [ - "WCS2040" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg" - }, - { - "models": [ - "FCS-3084" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/levscam.json b/data/brands/levscam.json deleted file mode 100644 index ee3f5b7..0000000 --- a/data/brands/levscam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Levscam", - "brand_id": "levscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "551TF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/lexy.json b/data/brands/lexy.json deleted file mode 100644 index 1998cf6..0000000 --- a/data/brands/lexy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lexy", - "brand_id": "lexy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/lg-phone.json b/data/brands/lg-phone.json deleted file mode 100644 index 3deb47f..0000000 --- a/data/brands/lg-phone.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Lg Phone", - "brand_id": "lg-phone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "leon" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "LS620", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lg.json b/data/brands/lg.json deleted file mode 100644 index 10b692b..0000000 --- a/data/brands/lg.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "brand": "Lg", - "brand_id": "lg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4X", - "509", - "Apex", - "G2 Mini", - "LGCLL55", - "lp500", - "ls670", - "Nexus 4", - "Optimus", - "Optimus V", - "Other", - "P350", - "P509" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "7210R", - "LW130W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video1+audio1" - }, - { - "models": [ - "LDW2010-F1E858", - "lnb3100", - "LNDS5100", - "LNP3700T", - "LNV5100R", - "LW130W", - "LW342" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Master-0" - }, - { - "models": [ - "LND7210", - "LW130W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Slave-0" - }, - { - "models": [ - "LNP3700T" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ls670", - "Optimus", - "P350" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "LVW700", - "LVW701", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "LW130W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "lw332", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "camera.stm" - }, - { - "models": [ - "lw332" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live1.sdp" - }, - { - "models": [ - "Optimus" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Optimus", - "Other", - "P350", - "P970" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=[CHANNEL].JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other", - "SmartIP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/2?videoCodecType=H.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/libor.json b/data/brands/libor.json deleted file mode 100644 index f53e25b..0000000 --- a/data/brands/libor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Libor", - "brand_id": "libor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lidl.json b/data/brands/lidl.json deleted file mode 100644 index aa28417..0000000 --- a/data/brands/lidl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Lidl", - "brand_id": "lidl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iuk", - "IUK 5A1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IUK 5A1" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IUK 5A1" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lifecontrol.json b/data/brands/lifecontrol.json deleted file mode 100644 index 0b9ad14..0000000 --- a/data/brands/lifecontrol.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lifecontrol", - "brand_id": "lifecontrol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lifeshield.json b/data/brands/lifeshield.json deleted file mode 100644 index 6b5636e..0000000 --- a/data/brands/lifeshield.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Lifeshield", - "brand_id": "lifeshield", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "RC8221", - "rs221" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "RCM811LS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/lifetech.json b/data/brands/lifetech.json deleted file mode 100644 index 8207b32..0000000 --- a/data/brands/lifetech.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Lifetech", - "brand_id": "lifetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CC11-SC-I-POE-223" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "dd", - "MyLifeTech", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lifeview.json b/data/brands/lifeview.json deleted file mode 100644 index a10a523..0000000 --- a/data/brands/lifeview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lifeview", - "brand_id": "lifeview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Outside" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/light-in-the-box.json b/data/brands/light-in-the-box.json deleted file mode 100644 index d5609fd..0000000 --- a/data/brands/light-in-the-box.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Light-in-the-box", - "brand_id": "light-in-the-box", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lightcam.json b/data/brands/lightcam.json deleted file mode 100644 index 3000898..0000000 --- a/data/brands/lightcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lightcam", - "brand_id": "lightcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bulb camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lightdow.json b/data/brands/lightdow.json deleted file mode 100644 index 1f7c149..0000000 --- a/data/brands/lightdow.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lightdow", - "brand_id": "lightdow", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LD6000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - } - ] -} \ No newline at end of file diff --git a/data/brands/lightinthebox.json b/data/brands/lightinthebox.json deleted file mode 100644 index f5cbcb9..0000000 --- a/data/brands/lightinthebox.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lightinthebox", - "brand_id": "lightinthebox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Thuis" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lihai.json b/data/brands/lihai.json deleted file mode 100644 index 2a6469c..0000000 --- a/data/brands/lihai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lihai", - "brand_id": "lihai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/likean.json b/data/brands/likean.json deleted file mode 100644 index eedcbb2..0000000 --- a/data/brands/likean.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Likean", - "brand_id": "likean", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK-H234N", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/lilly.json b/data/brands/lilly.json deleted file mode 100644 index 2163497..0000000 --- a/data/brands/lilly.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Lilly", - "brand_id": "lilly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/limix.json b/data/brands/limix.json deleted file mode 100644 index 90f2844..0000000 --- a/data/brands/limix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Limix", - "brand_id": "limix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LID-30" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/lindata.json b/data/brands/lindata.json deleted file mode 100644 index 385515f..0000000 --- a/data/brands/lindata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lindata", - "brand_id": "lindata", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/lindy.json b/data/brands/lindy.json deleted file mode 100644 index 6bbfd52..0000000 --- a/data/brands/lindy.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Lindy", - "brand_id": "lindy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Network Camera", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/linemak.json b/data/brands/linemak.json deleted file mode 100644 index f4c7d75..0000000 --- a/data/brands/linemak.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Linemak", - "brand_id": "linemak", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LS-ND101C" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream.cgi?stream=MainStream&Audio=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/linia.json b/data/brands/linia.json deleted file mode 100644 index beef5cc..0000000 --- a/data/brands/linia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Linia", - "brand_id": "linia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "avtech459" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264/VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/link.json b/data/brands/link.json deleted file mode 100644 index c908bb9..0000000 --- a/data/brands/link.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Link", - "brand_id": "link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "326G", - "NC233W-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "NC128PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/linkcom.json b/data/brands/linkcom.json deleted file mode 100644 index 1a930e5..0000000 --- a/data/brands/linkcom.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Linkcom", - "brand_id": "linkcom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "doorvideo", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/linkit-security.json b/data/brands/linkit-security.json deleted file mode 100644 index 25998c0..0000000 --- a/data/brands/linkit-security.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Linkit Security", - "brand_id": "linkit-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-Viking" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "p2p ipcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/linkit.json b/data/brands/linkit.json deleted file mode 100644 index b6fd03e..0000000 --- a/data/brands/linkit.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Linkit", - "brand_id": "linkit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "90101", - "IP Wi-Fi" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/linkpro.json b/data/brands/linkpro.json deleted file mode 100644 index e51d848..0000000 --- a/data/brands/linkpro.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Linkpro", - "brand_id": "linkpro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IWC", - "iwc-606w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "IWC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IWC" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "IWC", - "IWC-G330", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/linksys.json b/data/brands/linksys.json deleted file mode 100644 index 8f5cd3f..0000000 --- a/data/brands/linksys.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "brand": "Linksys", - "brand_id": "linksys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "54G", - "54GCA", - "Other", - "PTZ", - "PVC2003", - "W54GC", - "WVC200", - "WVC210", - "WVC2300", - "WVC54GC", - "WVC54GCA", - "WVC80N", - "wvn80" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "54G", - "54GCA", - "Down", - "EVC54GCA", - "ILLO AIRE", - "OC810", - "Other", - "PVC2003", - "pvc2300", - "W54G", - "W54GC", - "wcv", - "WCV200", - "WSC 80N", - "WV210", - "wvc", - "WVC Series", - "WVC SERIES", - "WVC11b", - "WVC200", - "WVC210", - "WVC2300", - "WVC54G", - "WVC54GC", - "WVC54GCA", - "WVC54GCAmgp", - "WVC80N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "920", - "932L", - "Other", - "WVC200", - "WVC80N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "anc 808v", - "anc 80v", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "lca", - "LCAB03VLNOD", - "LCAD03FLN", - "LCAD03VLNOD", - "LCAM0336OD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "LCAB03VLNNOD", - "LCAB03VLNOD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "LCAB03VLNOD", - "LCAD03FLN", - "LCAD03VLNOD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "LCAB03VLNOD", - "LCAD03FLN", - "LCAD03VLNOD", - "LCAM0336OD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other", - "pvc2300", - "WVC Series", - "WVC200", - "WVC210", - "WVC2300", - "wvc54gca", - "WVC54GCA", - "wvc64n", - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other", - "pvc2300", - "WCV200", - "WCV80N", - "WSC 80N", - "WVC200", - "WVC54GC", - "WVC54GCA", - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "Other", - "W54G", - "wc210", - "WCV200", - "WVC", - "WVC SERIES", - "WVC200", - "WVC210", - "WVC54GC", - "WVC54GCA", - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other", - "PVC2300", - "W54G", - "WVC SERIES", - "WVC200", - "WVC210", - "WVC54GCA", - "WVC80N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Other", - "WCV80N", - "Wireless-G", - "WPC200", - "WVC200", - "WVC210", - "WVC54G", - "WVC54GCA", - "WVC80N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other", - "WCV80N", - "WVC Series", - "WVC210", - "WVC54GA", - "wvc54gca", - "WVC54GCA", - "WVC80N", - "WVCS4GCA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "PVC2003", - "pvc2300", - "WVC200", - "WVC210", - "WVC54GC", - "WVC54GCA", - "wvc80", - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "pvc2300" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "PVC2300", - "WSC 80N", - "WVC210", - "WVC2300", - "WVC54GCA", - "WVC80N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "SC3130", - "WVC Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "W54G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "WVC200", - "WVC80N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "WVC200", - "WVC54GC", - "WVC54GCA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "WVC200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.jpg" - }, - { - "models": [ - "WVC54G", - "WVC54GC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "WVC54GC", - "WVC80N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "WVC54GCA", - "WVC80N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.cgi" - }, - { - "models": [ - "WVC80N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/linovision.json b/data/brands/linovision.json deleted file mode 100644 index 2b50ba4..0000000 --- a/data/brands/linovision.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Linovision", - "brand_id": "linovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC422UW-10", - "IPC608UW-10", - "V7163F-EPT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/linq.json b/data/brands/linq.json deleted file mode 100644 index d843901..0000000 --- a/data/brands/linq.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Linq", - "brand_id": "linq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/linudix.json b/data/brands/linudix.json deleted file mode 100644 index aba4591..0000000 --- a/data/brands/linudix.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Linudix", - "brand_id": "linudix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "110", - "LWJ-330" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "112w", - "120w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "112w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "LWJ-330", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/nph-update_4ch.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/linux.json b/data/brands/linux.json deleted file mode 100644 index 6887d5a..0000000 --- a/data/brands/linux.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Linux", - "brand_id": "linux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MJPG-Streamer" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "motion" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/lionvis.json b/data/brands/lionvis.json deleted file mode 100644 index b09206a..0000000 --- a/data/brands/lionvis.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Lionvis", - "brand_id": "lionvis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "Leif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "LS-750C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 2001, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/lipetsk.json b/data/brands/lipetsk.json deleted file mode 100644 index b5220f8..0000000 --- a/data/brands/lipetsk.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lipetsk", - "brand_id": "lipetsk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/liquid.json b/data/brands/liquid.json deleted file mode 100644 index 1126ca4..0000000 --- a/data/brands/liquid.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Liquid", - "brand_id": "liquid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ego" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=appletvstream" - } - ] -} \ No newline at end of file diff --git a/data/brands/litetec.json b/data/brands/litetec.json deleted file mode 100644 index 4191ecd..0000000 --- a/data/brands/litetec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Litetec", - "brand_id": "litetec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LM IP924CK40p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/litmor.json b/data/brands/litmor.json deleted file mode 100644 index de644ef..0000000 --- a/data/brands/litmor.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Litmor", - "brand_id": "litmor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Battery", - "Battery2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/littleadd.json b/data/brands/littleadd.json deleted file mode 100644 index 8e29eda..0000000 --- a/data/brands/littleadd.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Littleadd", - "brand_id": "littleadd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LA-WL0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - } - ] -} \ No newline at end of file diff --git a/data/brands/live-reporter.json b/data/brands/live-reporter.json deleted file mode 100644 index de22523..0000000 --- a/data/brands/live-reporter.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Live-reporter", - "brand_id": "live-reporter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iphone" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/livecam.json b/data/brands/livecam.json deleted file mode 100644 index 3ac7b81..0000000 --- a/data/brands/livecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Livecam", - "brand_id": "livecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Q920" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/living.json b/data/brands/living.json deleted file mode 100644 index 9875a71..0000000 --- a/data/brands/living.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Living", - "brand_id": "living", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hw0046" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "N3011" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/lizvie.json b/data/brands/lizvie.json deleted file mode 100644 index cab2c96..0000000 --- a/data/brands/lizvie.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Lizvie", - "brand_id": "lizvie", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dock", - "GF-L300BASE", - "L500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "pb100", - "Radio Clock" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/lloyds.json b/data/brands/lloyds.json deleted file mode 100644 index fcb0711..0000000 --- a/data/brands/lloyds.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Lloyds", - "brand_id": "lloyds", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1107" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "LC-1110" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lmou.json b/data/brands/lmou.json deleted file mode 100644 index c11d075..0000000 --- a/data/brands/lmou.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lmou", - "brand_id": "lmou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-TA22CP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - } - ] -} \ No newline at end of file diff --git a/data/brands/lof-v.json b/data/brands/lof-v.json deleted file mode 100644 index a422c4e..0000000 --- a/data/brands/lof-v.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lof-v", - "brand_id": "lof-v", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8177" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/loftek.json b/data/brands/loftek.json deleted file mode 100644 index 112a680..0000000 --- a/data/brands/loftek.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "brand": "Loftek", - "brand_id": "loftek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2040", - "543", - "7200CSX2200WORKING", - "B Series", - "Beacon", - "CSX2200", - "CSX2200WORKING", - "CSX3200", - "CX 3200", - "CXS 2200", - "CXS 3200", - "Nexus 543", - "Other", - "SENTINEL", - "Sentinel D3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "2040", - "CSX2200", - "CSX2200WORKING", - "CXS 3200", - "Nexus 543", - "Other", - "Sendinel D1", - "Sentinel D1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "245", - "CXS 2200", - "CXS 3200", - "Other", - "SENTINEL D1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "245", - "Nexus 543", - "Other", - "Sendinel D1", - "Sentinel", - "Sentinel D1", - "Sentinel D2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "245", - "CSX2200", - "CXS 2200", - "CXS 3200", - "D3", - "Nexus 543", - "Nexus 543 custom", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "543" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "543", - "Nexus 543", - "Nexus 543 custom", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "abc", - "CSX2200", - "CSX3200", - "CXS 2200", - "CXS 3200", - "D2", - "Nexus 543", - "Nexus 543 custom", - "Other", - "OUTSIDE", - "Sendinel D1", - "Sentinel D1", - "Sentinel D2", - "Sentinel D3", - "Spector" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Aegis" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "CSX2200", - "CSX2200WORKING" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "CSX2200", - "cx2200", - "CXS 2200", - "Loftek2200", - "Nexus 543", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CSX2200", - "CXS 2200", - "CXS 3200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "CSX2200", - "CXS 3200", - "HDX 2640", - "Sentinel D3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CSX2200", - "NEXUS 543" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "CSX2200", - "Other", - "Sendinel D1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "CSX2200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CSX2200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "CSX2200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi" - }, - { - "models": [ - "CSX2200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "CSX3200", - "Sendinel D1", - "Sentinel-D1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cx 2200", - "CXS 2200", - "Nexus 543", - "Other", - "Sentinel D1", - "Sentinel D3", - "seraph", - "XYZ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "CXS 2200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "CXS 3200", - "SPECTOR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CXS 3200", - "Nexus 543", - "Nexus 543 Hi-Fi", - "Other", - "SENTINEL D1", - "SENTINEL D3" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HDX 2640" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Nexus 543", - "NEXUS 543 (Alley)", - "Nexus 543 custom", - "Other", - "Sendinel D1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Nexus 543", - "Nexus 543 custom", - "Sentinel D3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Nexus 543" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Nexus 543" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=Ru55ell%21&resolution=32&rate=0" - }, - { - "models": [ - "Nexus 543 custom" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "SENTINEL D1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - } - ] -} \ No newline at end of file diff --git a/data/brands/logan.json b/data/brands/logan.json deleted file mode 100644 index 353d905..0000000 --- a/data/brands/logan.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Logan", - "brand_id": "logan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LX4CB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=0&stream=0.sdp?real_stream" - }, - { - "models": [ - "n8504hh" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "n8504hh" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "n8504hh" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "N8704HH" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/logenex.json b/data/brands/logenex.json deleted file mode 100644 index ed82362..0000000 --- a/data/brands/logenex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Logenex", - "brand_id": "logenex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/logidebian.json b/data/brands/logidebian.json deleted file mode 100644 index 4c821a6..0000000 --- a/data/brands/logidebian.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Logidebian", - "brand_id": "logidebian", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/logilink.json b/data/brands/logilink.json deleted file mode 100644 index dd74b72..0000000 --- a/data/brands/logilink.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "brand": "Logilink", - "brand_id": "logilink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "WC0004A", - "WC0007", - "wc0030" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "WC0002", - "WC0004A", - "WC0041" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "Other", - "WC0007", - "WC0016", - "WC0022", - "WC0030W", - "WC0042", - "wc0043" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other", - "WC0010A", - "WC0016", - "WC0020", - "WC0022" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "Other", - "wc0030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "WC0030", - "WC0030A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "wc0002", - "WC0004A", - "WC0007", - "WC0030", - "WC0042", - "WC006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "WC0007" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "WC0007", - "WC0042" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "WC0009" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "WC0016" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "WC0016", - "WC0047", - "WC0048" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0" - }, - { - "models": [ - "WC0016" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264" - }, - { - "models": [ - "WC0022" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "live/h264_ulaw" - }, - { - "models": [ - "WC0030", - "WC0030A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WC0030A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "wc0030w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WC004", - "WC0040" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "wc0044", - "WC0049", - "WS0044" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "wc0044" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "wc0049" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/logisaf.json b/data/brands/logisaf.json deleted file mode 100644 index f061ccb..0000000 --- a/data/brands/logisaf.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Logisaf", - "brand_id": "logisaf", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X001DIOXV1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/logitech.json b/data/brands/logitech.json deleted file mode 100644 index a0989a0..0000000 --- a/data/brands/logitech.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "brand": "Logitech", - "brand_id": "logitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3D printer camera", - "9000", - "c270", - "c310", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "5050", - "c270", - "C310", - "C615", - "MCC950", - "Other", - "Quick Cam for notebooks", - "QuickCam E3500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "510", - "7000", - "922 Pro Stream", - "C170", - "c270", - "c505", - "C615", - "C920e", - "C9230C", - "hd720p", - "Webcam 120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/?action=stream" - }, - { - "models": [ - "525" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "525", - "720p", - "C170", - "c270", - "c310", - "HD Pro Webcam C900", - "Other", - "Quickcam Pro 4000", - "WEBCAM PRO 9000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "700", - "700e", - "700i", - "700i700i", - "700n", - "720p", - "750", - "750E", - "750i", - "Alert", - "ALERT", - "Alert 750e", - "Alert 750i", - "Alert Other", - "e750", - "logitech alert", - "Other", - "Webcam C920" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "HighResolutionVideo" - }, - { - "models": [ - "700", - "700e", - "750E", - "750i", - "Alert", - "ALERT 700i", - "Alert 750e", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "700N", - "9000", - "c270", - "C615", - "C920", - "orbit", - "Other", - "PRO 4000", - "Webcam Pro 9000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "720p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 83, - "url": "/?camid=2" - }, - { - "models": [ - "9000", - "930L", - "931L", - "932l", - "c270", - "C933-L", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "922 PRO STRE922AM", - "922pro", - "c390", - "C615", - "Quickcam E2500", - "V - UBC40", - "Webcam C920" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "930L", - "936L", - "DCS-5029L", - "dcs800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "936L", - "C933-L", - "v-u0016" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "936L", - "Other", - "WVC54GCA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Alert", - "c270", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image[CHANNEL].jpg" - }, - { - "models": [ - "Brio", - "Webcam C920" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "C170", - "C925e" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg" - }, - { - "models": [ - "c270" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "C270" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - }, - { - "models": [ - "C300h" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/pull" - }, - { - "models": [ - "C310" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jstream.cgi?chid=[CHANNEL]&cnt=0" - }, - { - "models": [ - "c316", - "Webcam C920" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "url": "/" - }, - { - "models": [ - "C550", - "csx1100", - "Other", - "QUICKCAM PRO 4000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C615", - "C920", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "C920" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "C920" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C920", - "Other", - "QUICKCAM PRO 4000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cam_1.jpg" - }, - { - "models": [ - "C920", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "csx1100" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "LAN-NCW150/S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NCW150/S", - "Other", - "PLC-128PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "orbit", - "Other", - "WEBCAM PRO 9000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=320x240&Quality=Motion" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other", - "WVC54GCA" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "P6000LH" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "video/flv.cgi" - }, - { - "models": [ - "quickcam zoom white", - "Webcam Pro 9000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Webcam C920" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?camid=1" - }, - { - "models": [ - "WEBCAM PRO 9000" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lokanta.json b/data/brands/lokanta.json deleted file mode 100644 index eb3bef2..0000000 --- a/data/brands/lokanta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lokanta", - "brand_id": "lokanta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lonestar.json b/data/brands/lonestar.json deleted file mode 100644 index a2de894..0000000 --- a/data/brands/lonestar.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Lonestar", - "brand_id": "lonestar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP IR Cam", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "jo-11-us", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/long-plus.json b/data/brands/long-plus.json deleted file mode 100644 index 0ae9fb1..0000000 --- a/data/brands/long-plus.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Long Plus", - "brand_id": "long-plus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BR40W3200T", - "IPC-DSW3200T", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/longdream.json b/data/brands/longdream.json deleted file mode 100644 index 05fcf5f..0000000 --- a/data/brands/longdream.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Longdream", - "brand_id": "longdream", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/longsafe.json b/data/brands/longsafe.json deleted file mode 100644 index 43c07fd..0000000 --- a/data/brands/longsafe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Longsafe", - "brand_id": "longsafe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LongSafe DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/longse.json b/data/brands/longse.json deleted file mode 100644 index 63baa93..0000000 --- a/data/brands/longse.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "brand": "Longse", - "brand_id": "longse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "105", - "2Mpx", - "LBH30SS500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "106", - "BMSDFG400W", - "LBF30S200", - "LBH30HSF200", - "LBH30S100W4", - "LBH30S400", - "LBH30SV500", - "lirdls100", - "LIRDNS200", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "112233", - "BMSDFG400W", - "CMSBFG200", - "CS-C60A200", - "Fixed 2MP", - "LBH24T200", - "LBH30FK500W", - "LBH30HFG200W", - "LIRDCS400", - "LIRDNTA200", - "LIRDT200", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "112233", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "1mp", - "2Mpx", - "LBH24A200", - "LICG24AD130S", - "LID40A200", - "LID90A300", - "LIRDGS200", - "LIRDNTA200", - "lizm40", - "LIZM40T100", - "LIZM40T200", - "Other", - "XVR2008D" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "BMSDF G400W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "BMSDFG400W", - "lbh30sv500", - "LBH30SV500", - "lhb30sv500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "BPSCFC4R-36PM", - "LBH30S100W4", - "LIRDCS130 ONVIF", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "FLI521Z-DYA5XJJ500", - "lbh30sv500", - "LBH30SV500", - "lbp60sf200", - "lirdnhtc200f", - "xvr2008d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "LBH30sv500", - "LHB30SV500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "LBH30SV500", - "LIRDCS400", - "Other", - "xvr2008d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "LHB30SV500", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "LIZMB20T200", - "LVWDB20T200", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/longshine.json b/data/brands/longshine.json deleted file mode 100644 index 530345e..0000000 --- a/data/brands/longshine.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Longshine", - "brand_id": "longshine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVN362", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/longteam.json b/data/brands/longteam.json deleted file mode 100644 index ebb0379..0000000 --- a/data/brands/longteam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Longteam", - "brand_id": "longteam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lonrock.json b/data/brands/lonrock.json deleted file mode 100644 index 83aefaa..0000000 --- a/data/brands/lonrock.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lonrock", - "brand_id": "lonrock", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD_Digital" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/lonse.json b/data/brands/lonse.json deleted file mode 100644 index e39c641..0000000 --- a/data/brands/lonse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lonse", - "brand_id": "lonse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/look.json b/data/brands/look.json deleted file mode 100644 index 25830ae..0000000 --- a/data/brands/look.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Look", - "brand_id": "look", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-D120" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/loosafe.json b/data/brands/loosafe.json deleted file mode 100644 index 3a5e21d..0000000 --- a/data/brands/loosafe.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "brand": "Loosafe", - "brand_id": "loosafe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20HS Pro", - "50HS Pro", - "80HS", - "A50", - "brary", - "C9F0SeZ0N0P0L0", - "DS-I250", - "HS60", - "LS C4", - "LS-C6", - "LS-F2", - "LS-F2(HX)", - "LS-F2-720P", - "LS-F2-T", - "ls-h6837wi", - "LS-R2-P", - "ls-sc4", - "ls-sc4-wi", - "LS-SC4-WI 720P", - "ls-v8", - "Other", - "P2S-N8-SG", - "RA50X10", - "wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "50HS", - "BRARY", - "C9F0SEZ0N0P0L0", - "IP66", - "LH-R6100", - "LS C4", - "LS-C6", - "LS-F2", - "LS-F2(HX)", - "ls-f2-720p", - "LS-F2-T", - "LS-IP36CM", - "LS-SC4-WI", - "Other", - "RA50X10", - "RA50X20", - "ROBOT", - "WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "80XM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "HS50", - "IP66", - "LS-C6-20", - "LS-F3", - "LS-SC4-WI 720P", - "Other", - "RA50X20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "HS60", - "IP66", - "LH-R6100", - "LS-R2600", - "RA50X10", - "zach" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IP66", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IP66", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IP66" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp?real_stream" - }, - { - "models": [ - "IP66", - "LS-IPK15", - "wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live0.264" - }, - { - "models": [ - "IPC", - "LS-F2", - "LS-QJ10 (VR)", - "LS-W-IPC4", - "WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "LS C4", - "LS-C6", - "LS-F2", - "LS-F2(HX)", - "LS-F2-T", - "LS-IP36CM", - "Other", - "WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "LS-C6", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - }, - { - "models": [ - "LS-IP36CM", - "WIFI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "LS-IP601", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "LS-IPC2_A" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "LS-QJ10", - "LS-QJ10 (VR)" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "LS-W-IPC1", - "LS-W-IPC4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lorensen-01.json b/data/brands/lorensen-01.json deleted file mode 100644 index cd68cb0..0000000 --- a/data/brands/lorensen-01.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lorensen-01", - "brand_id": "lorensen-01", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Anran AR-AP2GA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/lorex.json b/data/brands/lorex.json deleted file mode 100644 index 870879b..0000000 --- a/data/brands/lorex.json +++ /dev/null @@ -1,1113 +0,0 @@ -{ - "brand": "Lorex", - "brand_id": "lorex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2020", - "4321", - "8921", - "D841A8", - "DV700", - "DV7041", - "DV908", - "DVR", - "E581CBB-Z", - "E841CAB", - "E861AB", - "e861abb", - "e891ab", - "E892AB", - "LBN3143-C", - "LBN4321-C", - "lbv2251-c", - "LEV2750AB", - "LHV1000", - "LHV2008-DFS3", - "LHV2016", - "LHV21081TU4", - "lhv5100", - "LHV5108W", - "LIVE PING", - "LN10802-84W", - "LNB3141-C", - "LNB3143B", - "LNB3143-C", - "LNB3143R-C", - "LNB3163", - "LNB3163B", - "LNB3373B", - "LNB3373-c", - "LNB3373SB", - "LNB3373S-C", - "LNB35733B", - "lnb4163b", - "LNB4173b", - "LNB4173SB", - "LNB4321", - "lnb4321b", - "LNB4371-C", - "lnb4421", - "lnb4613b", - "LNB8005", - "LNB8005-C", - "LNB8111", - "LNB8111B", - "LNB8921", - "LNB8921-C", - "LND3152", - "LND3374SB", - "LNE3322B", - "LNE4172SB", - "LNE4322", - "lne4422s-c", - "LNE8950A", - "LNE8950AB", - "LNE8974A", - "LNE8974AB", - "LNR110", - "LNR400", - "lnr6108", - "LNR6826K", - "lnw16xf", - "LNX IP CAMS", - "LNZ32P12", - "LNZ32P1212X", - "LNZ32P-4", - "LNZ3522-C", - "LNZ44P12", - "LW3211", - "mcnb3153", - "MCNB3153B", - "MPX822VW", - "N243MW2", - "N841", - "NR8141", - "nr9082", - "Other", - "w232ca" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "2K Doorbell", - "B451AJD", - "B451AJDBC-F", - "B862AJD-E", - "E893AB", - "LHA4216LC", - "LNB4421", - "LNB8005-C", - "lnb8963", - "LNB8963B 4K 8MP 4X Optical Zoom IP Bullet Camera", - "LNB8973B", - "LNE3142R", - "LNE3142RB", - "LNE9292B", - "LNR6108", - "mcnb3143", - "W482CAD", - "W881AA", - "W891uad" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "321-C", - "lbn4321c", - "LBN4321-C", - "lnb 4321-C", - "LNB4321-C", - "LNB8111B", - "LNZ32p12", - "LNZ32P4", - "LNZ3522-C", - "NLBmpg", - "UNLISTED" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "3500", - "LHA2108LC-D", - "LHA4104", - "LHB926", - "lhwf1000", - "lkb343", - "LKB343C", - "LNK7216", - "Other", - "WireFree" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - }, - { - "models": [ - "35000", - "L4248D-4AA4-E", - "LHA2108LC-D", - "LHA4216LC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch07/0" - }, - { - "models": [ - "4321", - "DVR", - "LBN3143-C", - "LBN4321-C", - "LNB3143R-C", - "LNB-3143R-CP", - "LNB3321B", - "LNB3321-C", - "lnb8111", - "LNB8111B", - "lne3142", - "LNE3322B", - "LNE4322", - "LNZ32P1212X", - "LNZ32P-4", - "LNZ32P4B", - "LNZ3522-C", - "MCNB3153", - "MCNB3153B", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "4321", - "D241A8", - "d861a8", - "DV908", - "DVR", - "e861abb", - "e892ab", - "ea8", - "FLIR", - "HD DVR", - "LBN4321-C", - "ldn4750ab", - "LEV2750AB", - "LHV1000", - "LHV2016", - "LHV21081TU4", - "LKB343C", - "LNB3143B", - "lnb4321b", - "LNB8005", - "LNB8005-C", - "LNB8111B", - "lnb8921", - "lnb8973", - "LNB8973", - "LNB8973B", - "LNB8973-C", - "LNB9292b", - "LND3374SB", - "lnd4750", - "LNE4172SB", - "LNE4422S-C", - "LNE8000", - "LNE8950", - "LNE8950AB", - "lnwhd", - "LNZ32P12", - "LNZ32P4", - "NR814-N", - "Other", - "OTHER-SCAN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "8921", - "d861a8", - "DV908", - "DVR", - "E581CBB-Z", - "E861aBB", - "HD DVR", - "HD DVR d841", - "LBN4321-C", - "lbv2251-c", - "lhv", - "LHV1000", - "LHV5108W", - "LN10802-84W", - "LNB3143-C", - "LNB3143R-C", - "LNB-3143R-CP", - "LNB3163B", - "LNB3321B", - "LNB4321", - "LNB4321-C", - "LNB4421", - "LNB8005", - "LNB8005-C", - "LNB8111B", - "lnb8921", - "lnb8973", - "LNB8973B", - "LNB8973-C", - "LND3374SB", - "LND4750AB", - "LNE3322B", - "LNE4322", - "lne4422s-c", - "LNR114SP", - "LNR6108", - "lnw16xf", - "LNWZ533D3AFDAD3", - "LNWZ53557C32498", - "LNZ44P12B", - "LVH1000", - "MPX822VW", - "NLB111", - "Nr818", - "nr908x", - "Other", - "Other-Scan" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "9393", - "E841CA-E", - "E842CDB", - "HD DVR", - "LNB3143RB", - "LNB3163B", - "LNB4421B", - "LNB8105", - "lnb8963", - "LNZ44P4B", - "Other", - "W261AS", - "W462AQC-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "a261as-z", - "W261AS" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "B451AJD-F", - "MCND 2152" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "B862AJD-E", - "d861a8", - "LNB9252B", - "LNE9292B", - "LNZ32P4", - "LNZ32P4B", - "LNZ32P4-C", - "W261AS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "D1", - "D241A8", - "D841A6", - "LNB4173b", - "LNB4173SB", - "LNB4421", - "lnb8105x", - "LNB8105x-c", - "LNB8973B", - "LNE8950AB", - "LNR8105x", - "LNWCM22Y", - "LNWCX-C", - "LNWZ6A3DD2594F7", - "LNZ44P4B", - "LX1081-44ADR", - "Other", - "W282cad" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "D241A8", - "E895AB", - "E896DD", - "LHv0016S", - "lnb 8005-C", - "LNB3163B", - "LNB8005-C" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "D241A8", - "E892DD", - "HD DVR d841", - "lnb9292c" - ], - "type": "JPEG", - "protocol": "http", - "port": 7000, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "d861a8", - "LH070", - "LHA4104" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1;subtype:1" - }, - { - "models": [ - "d861a8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=8&subtype=1" - }, - { - "models": [ - "d861a8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=1" - }, - { - "models": [ - "DVR", - "LHB926", - "ln1100", - "LNE8950AB", - "LNR6108", - "LNR632", - "MPX", - "Other", - "Rea", - "ront" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "DVR", - "LHA4216LC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch09/0" - }, - { - "models": [ - "E841CAB" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "E893DD", - "LNB9252B", - "LND3374B", - "ND02", - "W281AAC-681F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "HD DVR", - "LHV1000", - "lmb", - "lnb8105x", - "lnb8973b", - "lnz", - "MCNB2151", - "MCNB2153" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IP1240", - "IPSC Series", - "L23WD", - "Lorex IP1240" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "IPSC Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "showimg_pda.cgi?cam=[CHANNEL]" - }, - { - "models": [ - "IPSC SERIES", - "L23WD", - "LN 3003", - "ln3003", - "LNE1001", - "LNE3003", - "LNX IP CAMS", - "LNZ4001", - "LOREX IP1240", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "IPSC SERIES", - "L23WD", - "LIVE PING", - "lnb3143", - "LNE1001", - "LNE3003", - "LNX IP CAMS", - "LNZ4001", - "LOREX IP1240", - "MCND2152", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "L23WD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "LBH926", - "LHB926", - "LHV2008", - "LHV2108", - "ln1100", - "LNZ32P4", - "LVH1000", - "Other-Scan" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "LBN8111B", - "LNB3143RB", - "lnb8111", - "LNB8111B", - "NLB1111-c" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "LBV2531S-C" - ], - "type": "JPEG", - "protocol": "http", - "port": 90, - "url": "/cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "LHA2108LC-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch02/0" - }, - { - "models": [ - "LHA2108LC-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch03/0" - }, - { - "models": [ - "LHA2108LC-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch04/0" - }, - { - "models": [ - "LHA2108LC-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch05/0" - }, - { - "models": [ - "LHA2108LC-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch06/0" - }, - { - "models": [ - "LHA2108LC-D", - "LHA4216LC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch08/0" - }, - { - "models": [ - "LHA4216LC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=12" - }, - { - "models": [ - "LHB926", - "LNB2153", - "MCNB2153", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "LHB926", - "LNB2153", - "LNB3143R-C", - "MCNB2152", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "lhv5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=11&subtype=1" - }, - { - "models": [ - "lhv5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=12&subtype=1" - }, - { - "models": [ - "lhv5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=13&subtype=1" - }, - { - "models": [ - "lhv5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=14&subtype=1" - }, - { - "models": [ - "lhv5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=15&subtype=1" - }, - { - "models": [ - "live ping", - "LNC-100", - "LNC104", - "LNC116", - "LNC-130", - "LNC204", - "LNC216", - "LNC226x", - "LNC230", - "LNC234", - "LNC254", - "LOREX IP1240", - "Lorex Ping", - "MCN2153", - "Other", - "v030409" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "live ping", - "LNC104", - "LNC116", - "LNC226X", - "lnc234", - "lnc254", - "LNx Ip Cams", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "live ping", - "LNC104", - "LNC116", - "lnc226", - "LNC226X", - "LNC226X(NEW)", - "lnc230", - "LNC234", - "LNC24", - "LOREX IP1240", - "mcnc100", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "live ping", - "LNC116", - "LNC130", - "Lorex LNC100", - "mcnc100", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "LN1001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "ln3003", - "LNB2153", - "LNB2184", - "LNE1001", - "LNE3003", - "LNZ4001", - "MCNB2153", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "LNB2153", - "LNC204", - "MCN2153", - "MCNB2152", - "MCNB2153", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "LNB3143", - "LNB3143RB", - "LNB3321B", - "LNZ32P4-C", - "LNZ3522B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=0&resolution=320x240" - }, - { - "models": [ - "LNB3143B", - "LNB3163B", - "lnb8111", - "LNB8111B", - "LNZ32P1212X", - "LNZ32P12SB", - "LNZ32P4", - "mcnb3153" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "LNB-3143R-CP", - "LNB8005-C", - "MXP" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "LNB3373SB" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=&p=" - }, - { - "models": [ - "LNB4421", - "lne4422s-c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46U3RyYXRmb3JkMjAyMQ==" - }, - { - "models": [ - "LNB8005-C", - "lnb9292b" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?2" - }, - { - "models": [ - "LNB8105" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=8&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "lnb8105x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&authbasic=[AUTH]" - }, - { - "models": [ - "LNB8111", - "LNB8111B", - "LNZ32P4-C", - "PE133F" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "LNB9232S", - "lnb9292b", - "LNB9393", - "NR916X", - "w282ca" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46Ymx1ZXByNTE2" - }, - { - "models": [ - "LNC204" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.mp4" - }, - { - "models": [ - "LNC226x", - "w282ca" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "LNE3003" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "LNE8950AB", - "LNE8964AB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46RXdhVmFu" - }, - { - "models": [ - "LNx Ip Cams" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "LNx Ip Cams" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage" - }, - { - "models": [ - "LNZ44P12B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1?subtype=0" - }, - { - "models": [ - "M5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor?channel=2&subtype=0" - }, - { - "models": [ - "MCNB2152" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - }, - { - "models": [ - "MCNB2153", - "MCND2152" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - }, - { - "models": [ - "R910AB" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=lorexBeatz1251%21%24" - }, - { - "models": [ - "TD861818D6-F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/GetData.cgi" - }, - { - "models": [ - "WS261AS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/loryta.json b/data/brands/loryta.json deleted file mode 100644 index 7d38300..0000000 --- a/data/brands/loryta.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Loryta", - "brand_id": "loryta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-B5442E-Z4E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "IPC-T2431T-AS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "ipc-t5442t-ze" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "IPC-T5442T-ZE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - } - ] -} \ No newline at end of file diff --git a/data/brands/lotus.json b/data/brands/lotus.json deleted file mode 100644 index a47b07f..0000000 --- a/data/brands/lotus.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Lotus", - "brand_id": "lotus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LT-C008" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif-stream2" - }, - { - "models": [ - "LT-C009" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/louance.json b/data/brands/louance.json deleted file mode 100644 index d25cbdf..0000000 --- a/data/brands/louance.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Louance", - "brand_id": "louance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/louwice.json b/data/brands/louwice.json deleted file mode 100644 index 21cd3a8..0000000 --- a/data/brands/louwice.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Louwice", - "brand_id": "louwice", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720", - "LWS-DS-5MP", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ice" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/loveday-smart-home.json b/data/brands/loveday-smart-home.json deleted file mode 100644 index 207ec73..0000000 --- a/data/brands/loveday-smart-home.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Loveday Smart Home", - "brand_id": "loveday-smart-home", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LD-P2P-2", - "LVD-166-H5A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/lowcam.json b/data/brands/lowcam.json deleted file mode 100644 index 066c6f5..0000000 --- a/data/brands/lowcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lowcam", - "brand_id": "lowcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FI8608" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/lowes-iris.json b/data/brands/lowes-iris.json deleted file mode 100644 index 823d30f..0000000 --- a/data/brands/lowes-iris.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Lowes Iris", - "brand_id": "lowes-iris", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0C830", - "c830", - "LWD-0280", - "OC821", - "RC8221", - "SERCOMM", - "WIRELESS IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "INDOOR", - "OC821", - "Other", - "RC-8221", - "SERCOMM", - "Wireless IP Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "INDOOR", - "INDOOR / OUTDOOR", - "LC8221", - "OC821", - "OC8221", - "RC8221", - "SERCOMM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "indoor / outdoor", - "OC821", - "RC8221", - "SERCOMM", - "WIRELESS IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "INDOOR / OUTDOOR", - "OC821", - "OC8221", - "RC2111", - "RC-8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "OC821", - "OC821D", - "OC8221", - "Other", - "RC-8221" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "oc821d" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/lowes.json b/data/brands/lowes.json deleted file mode 100644 index 8fa5fa3..0000000 --- a/data/brands/lowes.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Lowes", - "brand_id": "lowes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0C830", - "iris", - "VLC-WITHAUDIO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "iris" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "iris", - "VLC-withaudio" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - } - ] -} \ No newline at end of file diff --git a/data/brands/lox.json b/data/brands/lox.json deleted file mode 100644 index 12d44f6..0000000 --- a/data/brands/lox.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lox", - "brand_id": "lox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "p2p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/loxone.json b/data/brands/loxone.json deleted file mode 100644 index 607d9f5..0000000 --- a/data/brands/loxone.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Loxone", - "brand_id": "loxone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Intercom" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Intercom" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg?login=YWRtaW46YWRtaW4=" - } - ] -} \ No newline at end of file diff --git a/data/brands/lpr-hdcam.json b/data/brands/lpr-hdcam.json deleted file mode 100644 index 5f19269..0000000 --- a/data/brands/lpr-hdcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lpr-hdcam", - "brand_id": "lpr-hdcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BN-CW20CW/HIP200M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/lsc.json b/data/brands/lsc.json deleted file mode 100644 index 9f216bc..0000000 --- a/data/brands/lsc.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Lsc", - "brand_id": "lsc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "802" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Doorbell" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "Indoor smart camera", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - }, - { - "models": [ - "Indoor smart IP Camera 1080p" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/main" - }, - { - "models": [ - "Indoor WEB Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "outdoor ip cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0&onvif=0.sdp?real_st" - }, - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lseries.json b/data/brands/lseries.json deleted file mode 100644 index 826d59b..0000000 --- a/data/brands/lseries.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lseries", - "brand_id": "lseries", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAM0754" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lsvision.json b/data/brands/lsvision.json deleted file mode 100644 index 3c56412..0000000 --- a/data/brands/lsvision.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Lsvision", - "brand_id": "lsvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC", - "LS-PD1200C" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "LS-HD2200C-P", - "private" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "lsvison" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "LSVISON" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ltc.json b/data/brands/ltc.json deleted file mode 100644 index bcb7632..0000000 --- a/data/brands/ltc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ltc", - "brand_id": "ltc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3602" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ltek.json b/data/brands/ltek.json deleted file mode 100644 index b662a32..0000000 --- a/data/brands/ltek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ltek", - "brand_id": "ltek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LD40L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ltp.json b/data/brands/ltp.json deleted file mode 100644 index 7cd89d1..0000000 --- a/data/brands/ltp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ltp", - "brand_id": "ltp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/lts.json b/data/brands/lts.json deleted file mode 100644 index 2961f65..0000000 --- a/data/brands/lts.json +++ /dev/null @@ -1,439 +0,0 @@ -{ - "brand": "Lts", - "brand_id": "lts", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1048", - "3432", - "CIMP3042-28", - "CMIP 3122", - "CMIP3022-28", - "CMIP3032-28", - "CMIP3132-28", - "CMIP3432", - "CMIP3C42W-28M", - "CMIP7233-S", - "CMIP7342W-28M", - "CMIP7382NW-28M", - "CMIP7422-28M", - "CMIP7422-m", - "CMIP7422N-28M", - "CMIP7422W-M", - "CMIP7553W4-SZ8", - "CMIP7923WLPR-32R", - "CMIp8032", - "CMIP8212", - "cmip8342W-M", - "CMIP9142W", - "CMIP9532", - "CMIP9723-S", - "doorbell", - "LTCMIP8932-W", - "LTD8424T", - "Other", - "PTZIP204NW-X4IR", - "PTZIP512X20IR", - "Thermal", - "WH-CI5020-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "6800B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "7442", - "cmip7422w-28m" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "830", - "CIP830MV-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "830" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot_3gp.jpg" - }, - { - "models": [ - "830", - "CIP830MV-W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "b01jrqwjdi", - "CIMP3042-28", - "clouldIp", - "CMIP7223w-s", - "FFMPEG", - "ltsCMIP7562F-E", - "x-cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "CIMP3042-28", - "CMIP", - "cmip 3342w-28m", - "CMIP3953", - "CMIP3C42W-28CMIP3C42W-28MM", - "cmip7042-28", - "CMIP7442-28M", - "CMIP7442WB-28M", - "CMIP8232" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5554, - "url": "HighResolutionVideo" - }, - { - "models": [ - "CIMP3042-28", - "CMIP3132-28", - "CMIP7422-28M", - "CMIP7432-28M", - "CMIP8212", - "CMIP8232", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5554, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMIP", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "CMIP", - "CMIP3032-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "CMIP1142-28", - "CMIP7422W-M", - "DS-2CD2112-I", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "CMIP3042W-28", - "cmip7042-28", - "PTZIP762X20IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "CMIP3142NW-28S", - "CMIP3362W-28M", - "CMIP7422-28M", - "CMIP8032P", - "CMIP8342W-28M", - "PTZIP204WX4IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "CMIP3152-28S", - "CMIP7253-SZ", - "CMIP7422N-28M", - "CMIP7422W-M", - "CMIP8932-W", - "CMIP9743W-S", - "LTD8316T-FT", - "Other", - "PTZ", - "Telescope" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "CMIP3243", - "CMIP3412-28", - "CMIP8212", - "CMIP8232", - "CMIP9743W-S", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.h264" - }, - { - "models": [ - "CMIP3382NVW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.h264" - }, - { - "models": [ - "CMIP3412-28", - "CMIP8212" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "CMIP7043W-MZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//Streaming/Channels/1" - }, - { - "models": [ - "cmip7122", - "CMIP7382NW-28M", - "CMIP7422-m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "CMIP7432", - "CMIP7442-28M", - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "channel[CHANNEL]" - }, - { - "models": [ - "CMIP7432W-6M", - "CMIP7923LPR-20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "CMIP7553W4-SZ8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/103" - }, - { - "models": [ - "CMIP7553W4-SZ8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/301" - }, - { - "models": [ - "CMIP8032P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "CMIP8212" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "CMIP8222", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "3gpp" - }, - { - "models": [ - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "hiQ.sdp" - }, - { - "models": [ - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/ch1/sub/" - }, - { - "models": [ - "CMIP8232" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av0_[CHANNEL]" - }, - { - "models": [ - "CMIP8232", - "doorbell", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "LTD2294HM w/ Web Port" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "LXIP8542W-28MDA" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5554, - "url": "/Streaming/Unicast/channels/801" - } - ] -} \ No newline at end of file diff --git a/data/brands/ltv.json b/data/brands/ltv.json deleted file mode 100644 index 4e11c79..0000000 --- a/data/brands/ltv.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Ltv", - "brand_id": "ltv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CNM-310 40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "CNM-320 C1", - "LTV-1CNT40-F40", - "ltv-3tcnb20-f32-sb" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "LTV-ICDM2-623LH-V3-9", - "LTV-ICDM2-823-F2.1", - "LTV-ICDV-723-V3.3-12", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/lu.json b/data/brands/lu.json deleted file mode 100644 index 7bc5485..0000000 --- a/data/brands/lu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lu", - "brand_id": "lu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LUX" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/luatek.json b/data/brands/luatek.json deleted file mode 100644 index dfcff9d..0000000 --- a/data/brands/luatek.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Luatek", - "brand_id": "luatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LKW-1310", - "LKW-4220", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "LKW-4020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "LKW-5620" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lucem.json b/data/brands/lucem.json deleted file mode 100644 index 2da1e0e..0000000 --- a/data/brands/lucem.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Lucem", - "brand_id": "lucem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LIP-579VR(G)", - "n732" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - } - ] -} \ No newline at end of file diff --git a/data/brands/lucidphone.json b/data/brands/lucidphone.json deleted file mode 100644 index ee0a520..0000000 --- a/data/brands/lucidphone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lucidphone", - "brand_id": "lucidphone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/lucky-star.json b/data/brands/lucky-star.json deleted file mode 100644 index ad4f4b4..0000000 --- a/data/brands/lucky-star.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Lucky Star", - "brand_id": "lucky-star", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CLOUD IP CAMERA 720P", - "X Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch2" - }, - { - "models": [ - "CloudIP", - "CLOUDIP", - "LuckyStar720p", - "Other", - "small smart" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lukavi.json b/data/brands/lukavi.json deleted file mode 100644 index ac623ea..0000000 --- a/data/brands/lukavi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Lukavi", - "brand_id": "lukavi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "unkn" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "unkn" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lum-700-bul-iph-gr.json b/data/brands/lum-700-bul-iph-gr.json deleted file mode 100644 index 3255ea9..0000000 --- a/data/brands/lum-700-bul-iph-gr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lum-700-bul-iph-gr", - "brand_id": "lum-700-bul-iph-gr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/luma.json b/data/brands/luma.json deleted file mode 100644 index a961fe7..0000000 --- a/data/brands/luma.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "brand": "Luma", - "brand_id": "luma", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16Ch TVI", - "501", - "510", - "700-DOM-IPH WH", - "BUL-110", - "LUM-500-DOM-IP-WH", - "LUM-700-BUL-IPH-GR", - "nvr", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "500", - "501", - "8CH TVI", - "LUM-500-DVR-16CH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "500", - "510", - "700-DOM-IPH WH", - "LUM-500-TUR-IP-WH", - "NVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 65152, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "LUM-310-DOM-IP-BL", - "LUM-700-BUL-iPH-GR" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/lumenera.json b/data/brands/lumenera.json deleted file mode 100644 index 55abd3f..0000000 --- a/data/brands/lumenera.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Lumenera", - "brand_id": "lumenera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LC165E", - "LE275C", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-usr/nph-video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-usr/nph-image" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-usr/image" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/nph-video" - } - ] -} \ No newline at end of file diff --git a/data/brands/lumens.json b/data/brands/lumens.json deleted file mode 100644 index 56f9cbd..0000000 --- a/data/brands/lumens.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Lumens", - "brand_id": "lumens", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CL 510", - "Cl-510" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "VC-A50P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8557, - "url": "/h264" - }, - { - "models": [ - "VC-BC701P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/hevc" - } - ] -} \ No newline at end of file diff --git a/data/brands/lumia.json b/data/brands/lumia.json deleted file mode 100644 index fa82e09..0000000 --- a/data/brands/lumia.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Lumia", - "brand_id": "lumia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "430", - "635" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lumiere.json b/data/brands/lumiere.json deleted file mode 100644 index c762790..0000000 --- a/data/brands/lumiere.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Lumiere", - "brand_id": "lumiere", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EP-PD22W-HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "EP-PM40WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "EP-PM40WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "EP-PM40WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/luna.json b/data/brands/luna.json deleted file mode 100644 index b81e5e1..0000000 --- a/data/brands/luna.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Luna", - "brand_id": "luna", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "L-HFW4200EP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "L-HFW4200EP", - "L-KA-5203" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/luowice.json b/data/brands/luowice.json deleted file mode 100644 index 23801b7..0000000 --- a/data/brands/luowice.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "brand": "Luowice", - "brand_id": "luowice", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080 HD", - "1080P", - "960p", - "lws-r8-2mp", - "lws-y4-960p", - "LWS-Y4-960P", - "Other", - "V180" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080 HD", - "1080P", - "960", - "LWS-V 101-3mP", - "LWS-V110-3MP-LJ", - "LWS-Y4-1080P-GSUS2", - "LWS-Y4-960P", - "Other", - "PTZ", - "PTZ IP CAMERA", - "V180" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 81, - "url": "/12" - }, - { - "models": [ - "1080p", - "960P", - "lws-1080p-gsus", - "LWSD5", - "LWS-R8-2MP", - "Other", - "PTZ IP CAMERA", - "v180" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1080P", - "D5-5mp", - "IP 10X 2MP PTZ IP", - "lwsd5", - "LWS-DS-5MP", - "LWS-R8-2MP", - "LWS-V110-3MP-GSUK", - "Other", - "PTZ", - "PTZ IP Camera", - "PTZ IP CAMERA", - "Unten" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ds-100jaA", - "LUO" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "LWS-C6625JA", - "V180" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "PE9013-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "PE9013-W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/livestream/11?action=play&media=video_audio_data" - } - ] -} \ No newline at end of file diff --git a/data/brands/lupes-electronics.json b/data/brands/lupes-electronics.json deleted file mode 100644 index 4edd98d..0000000 --- a/data/brands/lupes-electronics.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lupes Electronics", - "brand_id": "lupes-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LE228" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/lupus.json b/data/brands/lupus.json deleted file mode 100644 index bbc6d8a..0000000 --- a/data/brands/lupus.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "brand": "Lupus", - "brand_id": "lupus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "228" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "LE 800+", - "LE800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "LE 932", - "LE923" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/GetImage.cgi" - }, - { - "models": [ - "LE180", - "LE970" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v1" - }, - { - "models": [ - "LE200", - "LE201" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "LE200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "LE200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "LE201" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "LE202", - "LE204" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "LE202" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "LE203", - "LE228" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=TWFpazpDYW0zTWFpazYq" - }, - { - "models": [ - "LE221", - "LE224" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "LE221" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "LE931", - "LE933", - "LE934", - "LE970", - "LE971", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - }, - { - "models": [ - "LE931", - "LE934", - "LE969", - "LE971", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "LE966" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "LE966" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/v2" - }, - { - "models": [ - "le969", - "LE970", - "LE971", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/luxon.json b/data/brands/luxon.json deleted file mode 100644 index 4daf66c..0000000 --- a/data/brands/luxon.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Luxon", - "brand_id": "luxon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ICS4-20v1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ICS4-20v1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "MIPD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/luxonvideo.json b/data/brands/luxonvideo.json deleted file mode 100644 index 795b17b..0000000 --- a/data/brands/luxonvideo.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Luxonvideo", - "brand_id": "luxonvideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user_defined" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/luxor.json b/data/brands/luxor.json deleted file mode 100644 index 283cfc9..0000000 --- a/data/brands/luxor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Luxor", - "brand_id": "luxor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "lx-515sh" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetImage.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/luxvision.json b/data/brands/luxvision.json deleted file mode 100644 index 6fe29f3..0000000 --- a/data/brands/luxvision.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Luxvision", - "brand_id": "luxvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch02/0" - }, - { - "models": [ - "DVR 2014" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=3_stream=0.sdp" - }, - { - "models": [ - "DVR6008T-EL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp" - }, - { - "models": [ - "FI-8602W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "HY-DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch05/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/lw.json b/data/brands/lw.json deleted file mode 100644 index 0d1863b..0000000 --- a/data/brands/lw.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Lw", - "brand_id": "lw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "lw-h264tf" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "lw-h264tf" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "lw-h264tf" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/lyd.json b/data/brands/lyd.json deleted file mode 100644 index 3ade655..0000000 --- a/data/brands/lyd.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Lyd", - "brand_id": "lyd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H1385H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IP-385H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/lylu.json b/data/brands/lylu.json deleted file mode 100644 index 797ba9d..0000000 --- a/data/brands/lylu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Lylu", - "brand_id": "lylu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Smart Sphere" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/lynstan.json b/data/brands/lynstan.json deleted file mode 100644 index c3e2db4..0000000 --- a/data/brands/lynstan.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Lynstan", - "brand_id": "lynstan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mabio.json b/data/brands/mabio.json deleted file mode 100644 index f4f45b7..0000000 --- a/data/brands/mabio.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mabio", - "brand_id": "mabio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P 450" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "P 450" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/mace.json b/data/brands/mace.json deleted file mode 100644 index 7eef3a1..0000000 --- a/data/brands/mace.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mace", - "brand_id": "mace", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EDR4011N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/mach.json b/data/brands/mach.json deleted file mode 100644 index e8530c3..0000000 --- a/data/brands/mach.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mach", - "brand_id": "mach", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/macrovision.json b/data/brands/macrovision.json deleted file mode 100644 index 9e954c1..0000000 --- a/data/brands/macrovision.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Macrovision", - "brand_id": "macrovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v380", - "v380pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/feed1.ffm" - } - ] -} \ No newline at end of file diff --git a/data/brands/magic-eye.json b/data/brands/magic-eye.json deleted file mode 100644 index f47ce1a..0000000 --- a/data/brands/magic-eye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Magic Eye", - "brand_id": "magic-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Digital" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/magic-vision-box-series.json b/data/brands/magic-vision-box-series.json deleted file mode 100644 index d67503b..0000000 --- a/data/brands/magic-vision-box-series.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Magic Vision Box Series", - "brand_id": "magic-vision-box-series", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MV-81031IRWPR-3D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/maginon.json b/data/brands/maginon.json deleted file mode 100644 index 68e8aa9..0000000 --- a/data/brands/maginon.json +++ /dev/null @@ -1,769 +0,0 @@ -{ - "brand": "Maginon", - "brand_id": "maginon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1 ac", - "100", - "100AC", - "10AC", - "1pc-10c", - "20C", - "40747", - "90577", - "ac10", - "F18910W", - "IIPC-1", - "IP SUPRA", - "ip1", - "IP-1", - "IP100", - "IP100AC", - "IP-20C", - "ip-ac10", - "IPC", - "ipc 10 ac", - "IPC 100", - "ipc 100ac", - "IPC 20C", - "ipc 3ac", - "IPC_1A", - "IPC-1", - "ipc-10", - "IPC-100 AC", - "IPC-100 HD", - "ipc100h", - "Ipc-10a", - "IPC-10AC", - "IPC1ATHUIS", - "IPC-2", - "ipc-20", - "ipc20c", - "IPC-20c", - "IPC-25 HDC", - "IPC-250", - "ipc-250 HDC", - "IPC-250HDC", - "ipc-26hdc", - "IPC-30FHD", - "IPC-3AC", - "IPC-40 C", - "Lokaal", - "Other", - "supra IPC", - "SUPRA IPC-10", - "SUPRA IPC-100AC", - "SUPRA IPC-10A", - "supra IPC-10AC", - "Supra IPC-1A", - "SUPRA IPC-20C", - "supra_3", - "SUPRACAM IPC100 AC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "100 AC", - "20C", - "ipc", - "IPC-20", - "IPC20C", - "SUPRA IPC-20C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "100 AC", - "10AC", - "IPC 10AC", - "IPC-100 HD", - "IPC-100AC", - "ipc-10ac", - "ipc-1a", - "IPC-1A test", - "ipc-20", - "ipc-30fhd", - "Other", - "SUPRA IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "100 AC", - "IPC", - "IPC 1A", - "IPC1", - "IPC-100 HD", - "IPC2", - "IPC-20C", - "IPC-25HDC", - "IPC-26 HDC", - "IPC-2a", - "supra ipc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "100 AC", - "IIPC-1", - "IPC 1", - "IPC-10 ac", - "IPC-100 AC", - "IPC-100ACw", - "IPC-10AC", - "IPC-1a", - "IPC1A", - "IPC-1A test", - "IPC2", - "IPC-20c", - "IPC-25 HDC", - "ipc-250hdc", - "IPC-26 HDC", - "IPCA", - "Other", - "SUPRA IPC-100AC", - "SUPRA IPC-1A", - "SUPRA IPC-20C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "100 AC", - "ipc 100ac" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100 AC", - "ipc 100ac", - "ipc-100ac" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100 AC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100 AC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "100 AC", - "IPC-20C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100AC", - "10AC", - "IP20C", - "IPC 100", - "IPC 10AC", - "IPC 2", - "IPC-1", - "IPC-100 AC", - "ipc-1a", - "IPC-20", - "IPC20C", - "IPC-25 HDC", - "Other", - "SUPRA IPC-100AC", - "SUPRA IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "100AC", - "IPC 100", - "IPC-100 HD", - "ipc100a", - "IPC-100AC", - "Other", - "Vision" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "100AC", - "IPC_1A", - "IPC-1", - "IPC-10", - "IPC-10 AC", - "IPC-250 HDC", - "SUPRA IPC-20C", - "supraIPC", - "w2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "10AC", - "20C", - "IP-20C", - "IPC", - "IPC 10AC-DS", - "IPC-1", - "IPC-100 AC", - "IPC-10AC", - "ipc1a", - "IPC-1A", - "IPC-20", - "IPC-20C", - "IPC-25 HDC", - "IPC-250 HDC", - "ipc-25hdc", - "Other", - "Supra IPC-20c", - "supracam ipc100 ac" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "10AC", - "1PC-3AC", - "213", - "IPC 20C", - "IPC-1", - "IPC-100 AC", - "IPC-10AC", - "ipc-1a", - "IPC1A", - "ipc-2", - "Other", - "Supra IPC-10AC", - "SUPRA IPC-20C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "10AC", - "90577", - "IIPC-1", - "ip ptz", - "IPC 1", - "ipc 2", - "ipc/10", - "IPC_1A", - "IPc-1", - "IPC-100 AC", - "ipc-10ac", - "IPC-10AC", - "ipc-1a", - "IPC-2", - "Other", - "Supra IPC-10A", - "Supra IPC-10AC", - "Supra IPC-1A", - "Supra IPC-20c" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1pc-1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "1pc-3ac", - "20C", - "90577", - "IIPC-1", - "ipc", - "IPC 1", - "ipc 10-a huis", - "IPC_1A", - "ipc_1a jr", - "ipc-1", - "IPC1", - "IPC-1 eric vlc", - "IPC-100 AC", - "IPC-100AC", - "IPC-10AC", - "IPC-1A test", - "ipc-1a_local", - "IPC1Athuis", - "IPC-2", - "ipc20c", - "IPC-20C", - "IPC-25 HDC", - "IPC-250 HDC", - "IPC-26 HDC", - "ipc-A-1", - "ipx 3ac", - "ispy1", - "medion", - "Miei", - "OtheIPC-1A", - "Other", - "Supra IPC-100AC", - "SUPRA IPC-100AC", - "supra ipc-10a", - "supra IPC-10AC", - "Supra IPC-1A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "20C", - "ipc 1a", - "IPC 20C", - "ipc1", - "IPC-1", - "ipc10", - "IPC-100AC", - "IPC-1A", - "ipc20", - "IPC-25 HDC", - "Other", - "Supra IPC-100AC", - "SUPRA IPC-20C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "20C", - "IP-20c", - "IPC 20C", - "IPC 20C2", - "IPC-1", - "IPC-2", - "IPC-20", - "Other", - "Supra IPC-20", - "SUPRA IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IIPC-1", - "ipc 20c", - "ipc(op)", - "ipc+", - "ipc1", - "IPC-1", - "IPC-100 AC", - "IPC-10AC", - "ipc-1A", - "IPC1A", - "ipc-2", - "IPC-20", - "IPC-20C", - "ipc-25hdc", - "Other", - "zol" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IIPC-1", - "IP SUPRA", - "IPC-20C", - "IPC-25 HDC", - "ipc-250 hdc", - "Other", - "Supra IPC-10AC", - "SUPRA IPC-20C", - "Supra IPC-40C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IP PTZ", - "IP SUPRA", - "IPC 100", - "IPC-1", - "IPC-100 AC", - "IPC-100AC!!", - "IPC1A", - "IPC-1o ac", - "IPC-2", - "IPC-20c", - "Other", - "SUPRA IPC-20C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP PTZ", - "IPC 1", - "ipc-1", - "SPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP SUPRA ERP", - "IPC 100", - "IPC-1", - "IPC-1A", - "IPC-1A test", - "ipc20c", - "IPC-20c", - "IPC-20C", - "IPC-25 HDC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP20C", - "IPC 1", - "IPC 20C", - "IPC_1A", - "ipc-100ac", - "IPC-100AC", - "ipc-20", - "ipc-20c", - "IPC20c", - "IPC-25 HDc", - "ipc-26hdc", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "IP20C", - "IPC-100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ipc", - "IPC 100", - "IPC-10 ac", - "IPC-100AC", - "IPC-10AC", - "IPC-20", - "ipc-250hdc", - "IPC25HDC", - "Other", - "Supra IPC-10AC", - "SUPRA IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC 1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1009, - "url": "/VIDEO.CGI" - }, - { - "models": [ - "ipc 100ac" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ipc 20c" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "ipc 3ac", - "IPC-1", - "ipc-1a", - "IPC-3AC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "ipc1", - "IPC-1", - "ipc-1a", - "IPC-2", - "IPC-25 HDC", - "SUPRA IPC-1A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "i-pc1", - "IPC-1", - "ipc-1a", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "IPC-1", - "IPC-2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPC-1", - "IPC-100AC", - "IPC-10AC", - "IPC-20C", - "SUPRA IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-1", - "IPC-100", - "IPC-100 HD", - "IPC-2", - "ipc-250", - "IPC-40 C", - "ipx 3ac" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPC-100 AC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "IPC-1a", - "IPC-26HDC", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "IPC-1A", - "Supra IPC-100AC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "IPC-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "ipc-20c" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?" - }, - { - "models": [ - "IPC-25 HDc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=64&rate=0" - }, - { - "models": [ - "IPC-25 HDc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "IPC-25 HDc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "IPC-40 C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "PTcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Security OD-2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/magnus.json b/data/brands/magnus.json deleted file mode 100644 index 880c7c8..0000000 --- a/data/brands/magnus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Magnus", - "brand_id": "magnus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/maizic.json b/data/brands/maizic.json deleted file mode 100644 index 711aaf4..0000000 --- a/data/brands/maizic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Maizic", - "brand_id": "maizic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/makecell.json b/data/brands/makecell.json deleted file mode 100644 index acfaf0c..0000000 --- a/data/brands/makecell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Makecell", - "brand_id": "makecell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K910L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/manhattan.json b/data/brands/manhattan.json deleted file mode 100644 index f0377f5..0000000 --- a/data/brands/manhattan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Manhattan", - "brand_id": "manhattan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/manse.json b/data/brands/manse.json deleted file mode 100644 index dd82568..0000000 --- a/data/brands/manse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Manse", - "brand_id": "manse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LIRDGA400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mant.json b/data/brands/mant.json deleted file mode 100644 index 3fa2116..0000000 --- a/data/brands/mant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mant", - "brand_id": "mant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/march-networks.json b/data/brands/march-networks.json deleted file mode 100644 index e743c6b..0000000 --- a/data/brands/march-networks.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "March Networks", - "brand_id": "march-networks", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "C3401A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "ME4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "megapx1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/1/h264/1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - }, - { - "models": [ - "SE2_Outdoor_IR_Dome_2", - "7-12mm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264/HD1080P" - } - ] -} \ No newline at end of file diff --git a/data/brands/marlboze.json b/data/brands/marlboze.json deleted file mode 100644 index c7fd40c..0000000 --- a/data/brands/marlboze.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Marlboze", - "brand_id": "marlboze", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P P2P IR-Cut" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "c-p11-50", - "M-P09", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/marmitek.json b/data/brands/marmitek.json deleted file mode 100644 index 95c0004..0000000 --- a/data/brands/marmitek.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "brand": "Marmitek", - "brand_id": "marmitek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Eye Anywhere 241", - "IP eye anywhere 241", - "IP RoboCam 21", - "robocam ip21", - "vivme" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "GM-8126" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GM-8126" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ip eye 21", - "IP EYE ANYWHERE", - "IP Eye AnyWhere 11", - "IP ROBOCAM 10/11/541/641", - "IP ROBOCAM 21", - "Other", - "RoboCam 21", - "Robocam 541" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "IP Eye Anywhere", - "IP eye anywhere 241", - "IP RoboCam 10/11/541/641", - "IP RoboCam 21", - "ipeye anywhere", - "Other", - "robocam 10", - "robocam 11", - "Robocam 21", - "robocam21" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "IP EYE ANYWHERE", - "IP EYE ANYWHERE 241", - "IP ROBOCAM 10/11/541/641", - "IP ROBOCAM 21", - "Other", - "robocam 21", - "Robocam 21", - "ROBOCAM 21", - "ROBOCAM 541" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "IP Eye AnyWhere 11" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/jpg/image.cgi" - }, - { - "models": [ - "IP eye anywhere 241", - "IP RoboCam 21", - "robocam ip21", - "robocam21" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "IP ROBOCAM 10/11/541/641", - "IP ROBOCAM 21", - "Other", - "robocam 21" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "IP RoboCam 21" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/VIDEO.CGI" - }, - { - "models": [ - "IP RoboCam 21" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/MJPEG.CGI" - }, - { - "models": [ - "IP RoboCam 21" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "IP RoboCam 8", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "IP RoboCam 8", - "Robocam 8" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "IP RoboCam 8" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/marquis.json b/data/brands/marquis.json deleted file mode 100644 index 10d12c6..0000000 --- a/data/brands/marquis.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Marquis", - "brand_id": "marquis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc-xd400", - "ipc-yt824", - "YMA42P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "ipc-yt60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "ipc-yt60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "IPC-YT60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "IPC-YT60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/marshall.json b/data/brands/marshall.json deleted file mode 100644 index d52636f..0000000 --- a/data/brands/marshall.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Marshall", - "brand_id": "marshall", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CV420-30X-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/hevc" - }, - { - "models": [ - "Encoder", - "VS-102", - "VS-102-HDI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other", - "VS-14", - "VS-572" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "3gpp" - } - ] -} \ No newline at end of file diff --git a/data/brands/masione.json b/data/brands/masione.json deleted file mode 100644 index ec7c255..0000000 --- a/data/brands/masione.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Masione", - "brand_id": "masione", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipcc-h03-960p-sd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ipcc-h03-960p-sd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "ipcc-h03-960p-sd" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/master.json b/data/brands/master.json deleted file mode 100644 index a49f433..0000000 --- a/data/brands/master.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Master", - "brand_id": "master", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MR15D", - "MR-15D-106", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/matchpoint.json b/data/brands/matchpoint.json deleted file mode 100644 index 69132cb..0000000 --- a/data/brands/matchpoint.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Matchpoint", - "brand_id": "matchpoint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR-1", - "DVR-CAM1", - "Zaandam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/matecam.json b/data/brands/matecam.json deleted file mode 100644 index 7505dfb..0000000 --- a/data/brands/matecam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Matecam", - "brand_id": "matecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/matrix.json b/data/brands/matrix.json deleted file mode 100644 index 7233078..0000000 --- a/data/brands/matrix.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Matrix", - "brand_id": "matrix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Argo Face" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg" - }, - { - "models": [ - "Satatya", - "SATATYA CIBR13FL40CW", - "SATATYA CIBR13FL60CW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Satatya" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/mjpeg" - }, - { - "models": [ - "SATATYA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "SATATYA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/mattex.json b/data/brands/mattex.json deleted file mode 100644 index 08ac37b..0000000 --- a/data/brands/mattex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mattex", - "brand_id": "mattex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mavell.json b/data/brands/mavell.json deleted file mode 100644 index a0df4bd..0000000 --- a/data/brands/mavell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mavell", - "brand_id": "mavell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/maximus.json b/data/brands/maximus.json deleted file mode 100644 index 82c51ee..0000000 --- a/data/brands/maximus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Maximus", - "brand_id": "maximus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8ch" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/maxpixel.json b/data/brands/maxpixel.json deleted file mode 100644 index 8c718d4..0000000 --- a/data/brands/maxpixel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Maxpixel", - "brand_id": "maxpixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/maxron.json b/data/brands/maxron.json deleted file mode 100644 index d333647..0000000 --- a/data/brands/maxron.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Maxron", - "brand_id": "maxron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Tokhmi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "TOKHMI", - "x12" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/maxvideo.json b/data/brands/maxvideo.json deleted file mode 100644 index 00cb578..0000000 --- a/data/brands/maxvideo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Maxvideo", - "brand_id": "maxvideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=appletvstream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/maxvision.json b/data/brands/maxvision.json deleted file mode 100644 index 7d2ed7c..0000000 --- a/data/brands/maxvision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Maxvision", - "brand_id": "maxvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LVWDB20S130" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "LVWDB20S130" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "MV-HCVR5108H-S2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/maxwest.json b/data/brands/maxwest.json deleted file mode 100644 index 00e9d43..0000000 --- a/data/brands/maxwest.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Maxwest", - "brand_id": "maxwest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "tab-9150" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/maxxone.json b/data/brands/maxxone.json deleted file mode 100644 index a65ddcc..0000000 --- a/data/brands/maxxone.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Maxxone", - "brand_id": "maxxone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/h264_stream" - }, - { - "models": [ - "m1p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "M1P-C3A40F-E-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video3" - } - ] -} \ No newline at end of file diff --git a/data/brands/maygion.json b/data/brands/maygion.json deleted file mode 100644 index ac56422..0000000 --- a/data/brands/maygion.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "brand": "Maygion", - "brand_id": "maygion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "black IP Camera V3", - "id002a", - "IP Camera V3", - "ip v3", - "IP607WX", - "Other", - "P2P H.264", - "V3", - "vs3.1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "black IP Camera V3", - "CAMARA OTHER", - "IP Camera V3", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "black IP Camera V3", - "id002a", - "IP Camera v3", - "IP Camera V3", - "Other", - "P2P H.264", - "q701" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "black IP Camera V3", - "ip-601", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "black IP Camera V3", - "IP Camera V3", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "black IP Camera V3", - "IP Camera V3", - "Other", - "V3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "black IP Camera V3", - "IP Camera V3", - "Other", - "OTHER2", - "V3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "black IP Camera V3", - "IP Camera V3", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "BLACK IP CAMERA V3", - "CAMARA OTHER", - "id002a", - "IP Camera V3", - "ip v3", - "Other", - "V3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "BLACK IP CAMERA V3", - "ID002A", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "BLACK IP CAMERA V3", - "IP Camera V3", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CAMARA Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264_1.sdp" - }, - { - "models": [ - "ID002A", - "IP Camera V3", - "V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP Camera V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP CAMERA V3", - "Other", - "V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ip v3", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other", - "P2P H.264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "P2P H.264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "rossm" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/mazi.json b/data/brands/mazi.json deleted file mode 100644 index 811611e..0000000 --- a/data/brands/mazi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mazi", - "brand_id": "mazi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HTVR-0410LT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "IWH-31IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/mbx.json b/data/brands/mbx.json deleted file mode 100644 index 84da2df..0000000 --- a/data/brands/mbx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mbx", - "brand_id": "mbx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mc-cam.json b/data/brands/mc-cam.json deleted file mode 100644 index 3d6fdc0..0000000 --- a/data/brands/mc-cam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mc-cam", - "brand_id": "mc-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FTT800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "FTT800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/mc-electronics.json b/data/brands/mc-electronics.json deleted file mode 100644 index fcd5d04..0000000 --- a/data/brands/mc-electronics.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Mc Electronics", - "brand_id": "mc-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CTIPC-245C", - "CTIPC-275C1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "HISI_001", - "HISI_002" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "HISI_001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "HISI_002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream1.asf" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/nph-update_4ch.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video1.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/mci.json b/data/brands/mci.json deleted file mode 100644 index 7cd8a00..0000000 --- a/data/brands/mci.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mci", - "brand_id": "mci", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "MCI281C6" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/mcl.json b/data/brands/mcl.json deleted file mode 100644 index 930f6c6..0000000 --- a/data/brands/mcl.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Mcl", - "brand_id": "mcl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "610", - "IP-CAMD610AW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "626W", - "IP-CAMD628EW", - "M-624W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "626W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ip615ew" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "IP-CAM615AEW", - "IP-CAM615AEW-74460" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8557, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mdi.json b/data/brands/mdi.json deleted file mode 100644 index 72cab0b..0000000 --- a/data/brands/mdi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mdi", - "brand_id": "mdi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MDI-2016" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/meco.json b/data/brands/meco.json deleted file mode 100644 index d850abc..0000000 --- a/data/brands/meco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Meco", - "brand_id": "meco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bell 5t" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Eleverde" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/medialink.json b/data/brands/medialink.json deleted file mode 100644 index f234c8b..0000000 --- a/data/brands/medialink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Medialink", - "brand_id": "medialink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/mediatech.json b/data/brands/mediatech.json deleted file mode 100644 index 6acb073..0000000 --- a/data/brands/mediatech.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Mediatech", - "brand_id": "mediatech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4059", - "4059-1", - "hd pro", - "MT 4097", - "MT40", - "mt405`", - "MT4051", - "MT4052", - "mt4059", - "MT4059", - "mt4098", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "4059", - "MT4051", - "MT4052" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "4059-1", - "MT40", - "mt4050" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "MT 4097", - "MT4052" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - }, - { - "models": [ - "MT4050", - "MT4051", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "MT4051", - "MT4052" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "MT4052" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/medion.json b/data/brands/medion.json deleted file mode 100644 index f5ac530..0000000 --- a/data/brands/medion.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "brand": "Medion", - "brand_id": "medion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "86970", - "IPCAME45AB4", - "MD86970", - "Other", - "P86019" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "86970", - "D86", - "IPC-1", - "IPC-10AC", - "IPC-20C", - "MD86970", - "MD96350", - "Other", - "P86019" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "86970", - "MD86970", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "86970", - "IPC-10AC", - "md 86970", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "IPC-1", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IPC-10AC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "IPC-20C", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPCAM068301", - "ipcam4516F", - "MD86970", - "Other", - "P89019" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "IPCC7210W" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "P86019 (MD 86970)" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/medisana.json b/data/brands/medisana.json deleted file mode 100644 index 0369995..0000000 --- a/data/brands/medisana.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "brand": "Medisana", - "brand_id": "medisana", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SmartBabyMonitor" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "Smart Baby Monitor" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "sbm", - "SmartBabyMonitor" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Smart Home Monitor", - "SmartBabyMonitor" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "SmartBabyMonitor" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "SmartBabyMonitor" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SmartBabyMonitor" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "SmartBabyMonitor" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "SmartBabyMonitor" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mega-pixel.json b/data/brands/mega-pixel.json deleted file mode 100644 index eb7856b..0000000 --- a/data/brands/mega-pixel.json +++ /dev/null @@ -1,433 +0,0 @@ -{ - "brand": "Mega-pixel", - "brand_id": "mega-pixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3", - "b21tw-16g", - "job", - "sv-b01poe-5mpl-a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "1.3", - "1.3 PTZ", - "200w", - "IPC-E2B5000", - "IPD-14T08", - "IPD-E17T08", - "IPD-E2A5Y04-BS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "1.3 PTZ", - "4s-B05W-720p", - "B987W", - "IP CAMREA", - "Other", - "ptz-sd05w", - "sd13w", - "sd17w", - "sp-v1802w", - "sp-v701w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1.3 PTZ", - "Other", - "SP-V1802W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "13emo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mjpeg" - }, - { - "models": [ - "1L/IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "1ps-912", - "1ps-912v", - "BKOFF", - "d77w", - "HI3507 RS7507H", - "ips 911s", - "ips-911", - "ips-912", - "ips-912v", - "Other", - "RS7507H", - "RS7518", - "SV-MIP102-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "200W", - "534H", - "Fence", - "IP CAMREA", - "IPD-E2A5Y04", - "NVS-DM36X", - "Other", - "sv-d02poe-1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "2d27w", - "AQ-IPR1623X", - "CM-3211", - "D77W", - "HR06", - "ip camrea", - "Other", - "p2p ipcam", - "SAV-P7465", - "SD13W", - "SD19S", - "SP-V1802W", - "sv-b01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "2mp", - "IPC_X040002PIAZ", - "IPD-D53Y07", - "IPD-E17T08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/h264major" - }, - { - "models": [ - "AM-c736-v", - "ips-911", - "Other", - "RS7507H", - "TMZ", - "tsv-hr03w", - "uplus" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "CM-3211", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "D73W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "D79w", - "IP CAMREA", - "Other", - "SD13W", - "SD19S", - "SP-V1802W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "d987w", - "Other", - "SP-V1802W", - "ZK1385800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "DEX2MPIR50" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "IP CAMREA", - "VR CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPc-631/T13", - "TV-536W/IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IPD-C34Y02-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4_1.sdp" - }, - { - "models": [ - "IPD-D53M02-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "IPD-L21C00-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "K1H3A/POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "Other", - "Z4S4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other", - "SD37W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/still.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF_1_a_unicast" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF_1_unicast" - }, - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "PTZ 30X ZOOM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4main" - }, - { - "models": [ - "SD19S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/megacam.json b/data/brands/megacam.json deleted file mode 100644 index bd0dfc8..0000000 --- a/data/brands/megacam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Megacam", - "brand_id": "megacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4220" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IPD-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/megapix.json b/data/brands/megapix.json deleted file mode 100644 index e17db2e..0000000 --- a/data/brands/megapix.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Megapix", - "brand_id": "megapix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DWC_PB2M4TIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile/profile01" - }, - { - "models": [ - "DWC_PB2M4TIR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/megavideo.json b/data/brands/megavideo.json deleted file mode 100644 index 306cf0f..0000000 --- a/data/brands/megavideo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Megavideo", - "brand_id": "megavideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5105DN" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/meiego.json b/data/brands/meiego.json deleted file mode 100644 index 8fc8584..0000000 --- a/data/brands/meiego.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Meiego", - "brand_id": "meiego", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-705mw" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/meisort.json b/data/brands/meisort.json deleted file mode 100644 index fac7f54..0000000 --- a/data/brands/meisort.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Meisort", - "brand_id": "meisort", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v11" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1EDBA8F05638533F788D8B5E71187399&0" - }, - { - "models": [ - "WQJ802B-FH-2-S", - "Y203s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/melchioni.json b/data/brands/melchioni.json deleted file mode 100644 index 838be27..0000000 --- a/data/brands/melchioni.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Melchioni", - "brand_id": "melchioni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pinhole" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/memtex.json b/data/brands/memtex.json deleted file mode 100644 index f773623..0000000 --- a/data/brands/memtex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Memtex", - "brand_id": "memtex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cv100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 53000, - "url": "/162C/cam0/vidaud" - } - ] -} \ No newline at end of file diff --git a/data/brands/menetec.json b/data/brands/menetec.json deleted file mode 100644 index 0d6956e..0000000 --- a/data/brands/menetec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Menetec", - "brand_id": "menetec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/meraki.json b/data/brands/meraki.json deleted file mode 100644 index d0740bb..0000000 --- a/data/brands/meraki.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "brand": "Meraki", - "brand_id": "meraki", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "13852285" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "MV12", - "MV12W", - "MV12WE", - "MV22", - "MV22x", - "MV32", - "MV63" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9000, - "url": "/live" - }, - { - "models": [ - "MV72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9000, - "url": "/LIVE" - } - ] -} \ No newline at end of file diff --git a/data/brands/mercury.json b/data/brands/mercury.json deleted file mode 100644 index 67b67af..0000000 --- a/data/brands/mercury.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Mercury", - "brand_id": "mercury", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CW007-199W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "cw014" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cw017-101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "cw017-101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "mi-cw007-199w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "mi-cw007-199w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "MI-CW007-199W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "MIPC4312(P)-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "MIPC4312(P)-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/merit-lilin.json b/data/brands/merit-lilin.json deleted file mode 100644 index 9d7a664..0000000 --- a/data/brands/merit-lilin.json +++ /dev/null @@ -1,470 +0,0 @@ -{ - "brand": "Merit Lilin", - "brand_id": "merit-lilin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MP Camera 1080p", - "2MP CAMERA 1080P", - "2MP Camera 1080p (port 80)", - "2MP Camera 2MP", - "2MP Camera 2MP (port 80)", - "3MP Camera 1080p", - "3MP Camera 1080p (port 80)", - "5MP Camera 1080p", - "5MP Camera 1080p (port 80)", - "7022", - "H.264", - "IPG1022ES", - "IPG1052", - "L series 2MP Camera 2MP", - "L series 2MP Camera 2MP (port 80)", - "LR7022", - "LR7022E4", - "LR7722EX", - "LR7722X", - "mr832", - "Other", - "ZR2322" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph2641080p" - }, - { - "models": [ - "2MP Camera 480p", - "2MP Camera 480p (port 80)", - "3MP Camera 480p", - "3MP Camera 480p (port 80)", - "5MP Camera 480p", - "5MP Camera 480p (port 80)", - "960H 480p", - "960H 480p (port 80)", - "IPS622 480p", - "IPS622 480p (port 80)", - "IPS722 480p", - "IPS722 480p (port 80)", - "L series 2MP Camera 480p", - "L series 2MP Camera 480p (port 80)", - "VS212 480p", - "VS212 480p (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph264480p" - }, - { - "models": [ - "2MP Camera 480p jpeg", - "2MP Camera 480p jpeg (port 80)", - "3MP Camera 480p jpeg", - "3MP Camera 480p jpeg (port 80)", - "5MP Camera 480p jpeg", - "5MP Camera 480p jpeg (port 80)", - "960H jpeg", - "960H jpeg (port 80)", - "IPS622 jpeg", - "IPS622 jpeg (port 80)", - "IPS722 jpeg", - "IPS722 jpeg (port 80)", - "L series 2MP Camera 480p jpeg", - "L series 2MP Camera 480p jpeg (port 80)", - "VS212 jpeg", - "VS212 jpeg (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtspjpeg480p" - }, - { - "models": [ - "2MP Camera 720p", - "2MP Camera 720p (port 80)", - "3MP Camera 720p", - "3MP Camera 720p (port 80)", - "5MP Camera 720p", - "5MP Camera 720p (port 80)", - "IPFASTDOME", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph264720p" - }, - { - "models": [ - "2MP Camera jpeg 720p", - "2MP Camera jpeg 720p (port 80)", - "3MP Camera jpeg 720p", - "3MP Camera jpeg 720p (port 80)", - "5MP Camera jpeg 720p", - "5MP Camera jpeg 720p (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtspjpeg720p" - }, - { - "models": [ - "2MP Camera jpeg cif", - "2MP Camera jpeg cif (port 80)", - "3MP Camera jpeg cif", - "3MP Camera jpeg cif (port 80)", - "5MP Camera jpeg cif", - "5MP Camera jpeg cif (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtspjpegcif" - }, - { - "models": [ - "3MP Camera 3MP", - "3MP Camera 3MP (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph2643m" - }, - { - "models": [ - "5522E", - "Dome", - "DVR3xx/NDR1xx", - "DVR5xx", - "IPG1022ES", - "IPR434", - "IPR6122", - "LR7022E4", - "LR7424", - "Other", - "SIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage[CHANNEL]" - }, - { - "models": [ - "5MP Camera 5MP", - "5MP Camera 5MP (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph2645m" - }, - { - "models": [ - "7022", - "D/N2mp", - "H.264", - "ipd552ex4.2n", - "IPR6122", - "ipr7334", - "LD2222", - "LR2122E4", - "LR2322EX.3.6", - "LR2522", - "LR6022", - "MR6342", - "mr832", - "Other", - "S210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph264480p" - }, - { - "models": [ - "960H", - "960H (port 80)", - "VS212", - "VS212 (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph264960h" - }, - { - "models": [ - "AHD DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "sub_[CHANNEL]" - }, - { - "models": [ - "AHD DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "main_[CHANNEL]" - }, - { - "models": [ - "DHD216" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/net_jpeg.cgi?ch=1" - }, - { - "models": [ - "DHD216" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "DVR204" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi?Video=[CHANNEL]" - }, - { - "models": [ - "DVR204" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "DVR204", - "H.264 D1 Camera", - "H.264 HD CAMERA", - "IPFASTDOME", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "DVR204", - "H.264 HD Camera", - "iMEGAPRO Camera", - "IPR320ESX", - "IPR434", - "IPR6122", - "IPS420", - "LD2222", - "LR7722EX", - "Other", - "P5R6352E2", - "ZR6122-IVS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap" - }, - { - "models": [ - "DVR308", - "H.264 HD Camera", - "iMEGAPRO Camera", - "LR7022E4", - "Other", - "P5R6352E2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage?camera=[CHANNEL]&fmt=vga" - }, - { - "models": [ - "H.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "H.264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "H.264 HD CAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "getimage" - }, - { - "models": [ - "Ipd2220es", - "IPR434", - "LD2222", - "LR832", - "Other", - "S210", - "ZMR8122X-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "IPFastDome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph264" - }, - { - "models": [ - "IPR712M4.3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641024p" - }, - { - "models": [ - "IPR712S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph264720p" - }, - { - "models": [ - "ipr7334", - "LR7022" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPS622 SXGA", - "IPS622 SXGA (port 80)", - "IPS722 SXGA", - "IPS722 SXGA (port 80)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "rtsph264sxga" - }, - { - "models": [ - "LR7022" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "LR7022E4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/getimage0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8085, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "rtsph264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "rtspjpeg" - }, - { - "models": [ - "PDR-400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - } - ] -} \ No newline at end of file diff --git a/data/brands/meriva.json b/data/brands/meriva.json deleted file mode 100644 index b5342db..0000000 --- a/data/brands/meriva.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Meriva", - "brand_id": "meriva", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MFD-400S4L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - }, - { - "models": [ - "MOB-400S3L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile2" - } - ] -} \ No newline at end of file diff --git a/data/brands/merk.json b/data/brands/merk.json deleted file mode 100644 index 67367b5..0000000 --- a/data/brands/merk.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Merk", - "brand_id": "merk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/merkury.json b/data/brands/merkury.json deleted file mode 100644 index 49ad996..0000000 --- a/data/brands/merkury.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Merkury", - "brand_id": "merkury", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cw001", - "cw017-101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Cw007" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "CW007", - "MIC-CW007-199W", - "MI-CW217", - "WiFiCam720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - }, - { - "models": [ - "MI-CW007-199W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "MI-CW020" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0" - }, - { - "models": [ - "mi-cw051" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/merlan.json b/data/brands/merlan.json deleted file mode 100644 index 837bd2a..0000000 --- a/data/brands/merlan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Merlan", - "brand_id": "merlan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xyx-ipc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/merlin.json b/data/brands/merlin.json deleted file mode 100644 index d4e2c4d..0000000 --- a/data/brands/merlin.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Merlin", - "brand_id": "merlin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP CAMERA Lite", - "Other", - "vstc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "WIFI CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Wifi Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/meshare.json b/data/brands/meshare.json deleted file mode 100644 index 567a889..0000000 --- a/data/brands/meshare.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Meshare", - "brand_id": "meshare", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/messoa.json b/data/brands/messoa.json deleted file mode 100644 index e8b5690..0000000 --- a/data/brands/messoa.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "brand": "Messoa", - "brand_id": "messoa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "120-HD5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "855PRO", - "875PRO", - "NCC800", - "NDF820", - "NDF821", - "NIC990" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "855PRO", - "875PRO", - "NCB855", - "NCR875", - "NDR890" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "855PRO", - "NCB855", - "NCC800", - "NDR891pro" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "875PRO", - "NCC800", - "NCR870", - "NDR891", - "NDR891PRO", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpegcif.cgi" - }, - { - "models": [ - "875PRO", - "NCR875" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "NCB855", - "NCR870", - "NCR875", - "NDF820", - "NDF831", - "NDR890", - "NDR891PRO", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/jpeg.cgi" - }, - { - "models": [ - "NCC700", - "NIC910HPRO", - "NIC930HPRO", - "NIC950HPRO" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "NCC800", - "NCR870", - "NDF821", - "NDR891", - "NDR891PRO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/jpegcif.cgi" - }, - { - "models": [ - "NCR870", - "NCR878", - "NDF831", - "NDR890-HP5", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi" - }, - { - "models": [ - "NCR870" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "NCR870" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/ipcam/mjpegcif.cgi" - }, - { - "models": [ - "NDF821" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264" - }, - { - "models": [ - "NDZ760" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NDZ860", - "NIC830", - "NIC835", - "NIC836" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "livestream" - }, - { - "models": [ - "NIC830", - "NIC836" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/metrocom.json b/data/brands/metrocom.json deleted file mode 100644 index d2664cc..0000000 --- a/data/brands/metrocom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Metrocom", - "brand_id": "metrocom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/metzler.json b/data/brands/metzler.json deleted file mode 100644 index 02fe117..0000000 --- a/data/brands/metzler.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Metzler", - "brand_id": "metzler", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VDM10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1_v" - } - ] -} \ No newline at end of file diff --git a/data/brands/meye.json b/data/brands/meye.json deleted file mode 100644 index 42ba5e3..0000000 --- a/data/brands/meye.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Meye", - "brand_id": "meye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "004231", - "Cam_213386" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "013632-AEAAF", - "171719", - "BBEBE", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/meyetech.json b/data/brands/meyetech.json deleted file mode 100644 index 048e60d..0000000 --- a/data/brands/meyetech.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "brand": "Meyetech", - "brand_id": "meyetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "095475-caeca", - "188091-EFBAE", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "095475-CAECA", - "188091-EFBAE", - "Other", - "WIRELESSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "095475-CAECA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "226740-BBBDE", - "235824-AADAA", - "WIRELESSCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other", - "WirelessCam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "Other", - "WirelessCam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "WirelessCam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "WIRELESSCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/mi-casa-verde.json b/data/brands/mi-casa-verde.json deleted file mode 100644 index a67e619..0000000 --- a/data/brands/mi-casa-verde.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Mi Casa Verde", - "brand_id": "mi-casa-verde", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - }, - { - "models": [ - "vistacam", - "VistaCamSD" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VISTACAM", - "VistaCamSD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "VistacamSD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mia.json b/data/brands/mia.json deleted file mode 100644 index c07fd6a..0000000 --- a/data/brands/mia.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mia", - "brand_id": "mia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/mibao.json b/data/brands/mibao.json deleted file mode 100644 index 942b40d..0000000 --- a/data/brands/mibao.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Mibao", - "brand_id": "mibao", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "d100", - "P450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "P 450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "p450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/01" - }, - { - "models": [ - "P450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "P450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "P450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/realmonitor" - }, - { - "models": [ - "P450" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "P450" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/micro-digital.json b/data/brands/micro-digital.json deleted file mode 100644 index 2ccba9f..0000000 --- a/data/brands/micro-digital.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Micro Digital", - "brand_id": "micro-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MDC-I4260", - "MDi8240F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0_0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fwstream.cgi?ServerId=0&AppKey=0x331287e3&CameraId=[CHANNEL]&PortId=0&PauseTime=1&FwCgiVer=0x0001" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/micro-view.json b/data/brands/micro-view.json deleted file mode 100644 index 75cc193..0000000 --- a/data/brands/micro-view.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Micro View", - "brand_id": "micro-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "I13B", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NVR16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/microdigital.json b/data/brands/microdigital.json deleted file mode 100644 index 996e14d..0000000 --- a/data/brands/microdigital.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Microdigital", - "brand_id": "microdigital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MDC-N7290TDN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Primary" - } - ] -} \ No newline at end of file diff --git a/data/brands/microlino.json b/data/brands/microlino.json deleted file mode 100644 index 289ddff..0000000 --- a/data/brands/microlino.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Microlino", - "brand_id": "microlino", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/micromax.json b/data/brands/micromax.json deleted file mode 100644 index cdaadf4..0000000 --- a/data/brands/micromax.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Micromax", - "brand_id": "micromax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "a350" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/micronet.json b/data/brands/micronet.json deleted file mode 100644 index 0a66f48..0000000 --- a/data/brands/micronet.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "brand": "Micronet", - "brand_id": "micronet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5522sw", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "HD720P", - "SP5584HTM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "huawau" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IPCAM 67", - "Other", - "sp5511", - "SP5531" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "SP5520k" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "SP5532SP/SW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.micgi" - }, - { - "models": [ - "Other", - "SP5532SP/SW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other", - "SP5520", - "SP55xxHTM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other", - "sp5511", - "SP5512W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other", - "SP5532SP/SW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "SP5512W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "SP5512W", - "sp5591htm", - "SP5591K", - "SP55xxHTM", - "SP5923" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "h264" - }, - { - "models": [ - "sp5519k", - "SP5563", - "sp5591a", - "SP5591K" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "SP5523W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "SP55xxHTM", - "SP5923" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264_2" - } - ] -} \ No newline at end of file diff --git a/data/brands/microseven.json b/data/brands/microseven.json deleted file mode 100644 index 76e9f31..0000000 --- a/data/brands/microseven.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "brand": "Microseven", - "brand_id": "microseven", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MYM71080i-A", - "MYM71080i-A-PTZ20XS", - "1.3 mega dome", - "1083", - "960p", - "C6F0SgZ3N0P0L0", - "M7877", - "M7B15", - "M7B37W", - "m7b4k--wpsaa", - "M7B4K-wpsaa", - "m7b57", - "M7B5MP-SWSAA", - "m7b77", - "M7B77-SWSAA", - "M7B77-WBPS", - "M7B77-WPS", - "M7B77-WPS HD", - "M7D4MP-PTZ4X-WPSAA", - "m7d5m", - "M7D77-POE", - "M7MY", - "M7-RD550PTWS-N", - "MD712-POE", - "MYM7", - "MYM7 bruce", - "MYM70108i", - "MYM71080i-A", - "MYM71080i-A-PTZ20X", - "MYM71080i-B", - "mym75mp", - "MYM7i", - "Other", - "swa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "1083d2000c7d", - "960p", - "M7 DVR", - "MYM7", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "550 TVL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot_ch0[CHANNEL].jpg" - }, - { - "models": [ - "East Side", - "M784K-wpsaa", - "M7B5MP-SWSAA", - "M7B77-WPSV2", - "M7D12", - "MY7", - "MYM7 1080-A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 31391, - "url": "/12" - }, - { - "models": [ - "M7 DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot_ch[CHANNEL].jpg" - }, - { - "models": [ - "M7 DVR", - "M7B37W", - "m7b77", - "M7B77-WPS", - "M7B77-WPS HD", - "M7D12-POE", - "m7d77-poe", - "M7MY", - "Mini", - "my7", - "MyM7 1080-A", - "MYM7I", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "M7b77", - "MYM7", - "MyM7 1080", - "MYM7 1080-A", - "MyM71080-A", - "MYM75MP-HX-VB22", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "M7D12-POE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "MYM7" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "MYM7" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Ym7" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/microsoft.json b/data/brands/microsoft.json deleted file mode 100644 index 42b7b68..0000000 --- a/data/brands/microsoft.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Microsoft", - "brand_id": "microsoft", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1381" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "1407", - "LIFECAM", - "lifecam hd-6000", - "livecam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "LifeCam HD-300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/?camid=2" - }, - { - "models": [ - "linekt" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/microview.json b/data/brands/microview.json deleted file mode 100644 index 7f70485..0000000 --- a/data/brands/microview.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Microview", - "brand_id": "microview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "i13d", - "I30VD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "I30C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/midas-link.json b/data/brands/midas-link.json deleted file mode 100644 index 7da26e7..0000000 --- a/data/brands/midas-link.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Midas-link", - "brand_id": "midas-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "203W", - "idk", - "ML-203W", - "ml-203w-g", - "ML-204DW", - "ml204dw-g", - "ML204DW-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "ML-214SD", - "MS-214SD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "MS-214SD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/midaslink.json b/data/brands/midaslink.json deleted file mode 100644 index 04060a5..0000000 --- a/data/brands/midaslink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Midaslink", - "brand_id": "midaslink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/midconer.json b/data/brands/midconer.json deleted file mode 100644 index 8606e3f..0000000 --- a/data/brands/midconer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Midconer", - "brand_id": "midconer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mid" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/mieke-ipcamera.json b/data/brands/mieke-ipcamera.json deleted file mode 100644 index 32b7d1d..0000000 --- a/data/brands/mieke-ipcamera.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Mieke Ipcamera", - "brand_id": "mieke-ipcamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 6554, - "url": "/11" - }, - { - "models": [ - "Tablet" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/milesight.json b/data/brands/milesight.json deleted file mode 100644 index b73d598..0000000 --- a/data/brands/milesight.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "brand": "Milesight", - "brand_id": "milesight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200", - "MS-c5372", - "PTZ BULLET" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "3MP mini Dome", - "Box", - "Bullet", - "Bullet Outdoor", - "C2672-P", - "C3366-FP", - "C3366-FPH", - "C3581-P", - "C3672", - "c3687", - "C8477", - "c-ms3672", - "Etuovi", - "MiniDoom", - "MS-2672C", - "ms-2681", - "MS-2972-FPB", - "MS-3366-FPH", - "MS-3567-FPN", - "ms-3672", - "MS3672", - "MS-3689-P", - "MS-C2163", - "MS-C2173", - "MS-C2191", - "MS-C2363", - "ms-c2681", - "MS-C2682", - "MS-C2961-EB", - "MS-C2961-EPB", - "MS-C2961-REB", - "MS-C2962-FIPB", - "MS-C2963-EB", - "MS-C2973-PB", - "MS-C3567-PN", - "MS-C3587-PA", - "MS-C3662", - "ms-c3672", - "MS-C4461-E(P)B", - "MS-C4462-FIPB", - "MS-C4473-PB", - "MS-C4482-PB", - "MS-C5361", - "MS-C5375-PD", - "MS-C8164-PD", - "MS-C8175-PD/BJ", - "MS-C8176-PA", - "NC2971", - "Other", - "Takaovi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/main" - }, - { - "models": [ - "3MP MINI DOME", - "BULLET", - "C2972", - "MS-C3577-PNA", - "MS-C3742-B", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "BULLET", - "BULLET CAMERA", - "BULLET OUTDOOR", - "bullet0", - "C2972", - "MS-C2173", - "Other", - "PTZ Bullet" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BULLET" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "BULLET", - "BULLET CAMERA", - "ms-c3582-pa", - "MS-C5361" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BULLET" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "SnapshotJPEG?Resolution=320x240" - }, - { - "models": [ - "Bullet Camera", - "C2982", - "MS-C2163", - "MS-C5361", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/sub" - }, - { - "models": [ - "BULLET CAMERA", - "BULLET OUTDOOR", - "MS-3366-FPH", - "ms-3672", - "MS-C2163", - "MS-C3263", - "MS-C3263-PN", - "MS-C3687", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "ms-c2682", - "ms-c3291pw", - "MS-C3366-FPN" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "MS-C2963-EB", - "MS-C2973-PB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "MS-C2972-FPB", - "MS-C2973-PB" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/ipcam/mjpeg.cgi?ch=0" - }, - { - "models": [ - "MS-C3263" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "MS-N1008-UPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch_101" - }, - { - "models": [ - "PRODEJNA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/milestone.json b/data/brands/milestone.json deleted file mode 100644 index b21604e..0000000 --- a/data/brands/milestone.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Milestone", - "brand_id": "milestone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MP-13101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch1-s1" - } - ] -} \ No newline at end of file diff --git a/data/brands/millennial.json b/data/brands/millennial.json deleted file mode 100644 index b588374..0000000 --- a/data/brands/millennial.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Millennial", - "brand_id": "millennial", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EYES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mingyoushi.json b/data/brands/mingyoushi.json deleted file mode 100644 index 7bbb5f6..0000000 --- a/data/brands/mingyoushi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mingyoushi", - "brand_id": "mingyoushi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S6203Y-WR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "S6203Y-WR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mini-hd-ir-speed-dome.json b/data/brands/mini-hd-ir-speed-dome.json deleted file mode 100644 index 5b972d7..0000000 --- a/data/brands/mini-hd-ir-speed-dome.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mini Hd Ir Speed Dome", - "brand_id": "mini-hd-ir-speed-dome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "THD54F20X" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/mini.json b/data/brands/mini.json deleted file mode 100644 index 4686136..0000000 --- a/data/brands/mini.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mini", - "brand_id": "mini", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/minicam.json b/data/brands/minicam.json deleted file mode 100644 index 805b598..0000000 --- a/data/brands/minicam.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Minicam", - "brand_id": "minicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A12", - "clone", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "IP-600" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Mini" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "MiniSpy" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/minking.json b/data/brands/minking.json deleted file mode 100644 index d5dbd69..0000000 --- a/data/brands/minking.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Minking", - "brand_id": "minking", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SIR75A", - "TC18", - "TC26" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.liv" - } - ] -} \ No newline at end of file diff --git a/data/brands/minnray.json b/data/brands/minnray.json deleted file mode 100644 index 4b3e3b9..0000000 --- a/data/brands/minnray.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Minnray", - "brand_id": "minnray", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SDI 30X", - "UV100", - "UV510A-12-ST" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/minolta.json b/data/brands/minolta.json deleted file mode 100644 index db18f99..0000000 --- a/data/brands/minolta.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Minolta", - "brand_id": "minolta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MD08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "MD08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "MD08" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/miosmart.json b/data/brands/miosmart.json deleted file mode 100644 index 6446f0c..0000000 --- a/data/brands/miosmart.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Miosmart", - "brand_id": "miosmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N526", - "VixCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/mipc.json b/data/brands/mipc.json deleted file mode 100644 index e666d2d..0000000 --- a/data/brands/mipc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mipc", - "brand_id": "mipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mpeg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/mipcam.json b/data/brands/mipcam.json deleted file mode 100644 index 7e53838..0000000 --- a/data/brands/mipcam.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Mipcam", - "brand_id": "mipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "366357", - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C6F0SgZ3N0P6L2", - "Y853Q2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "NKIP308-HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "NKIP308-HD" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "stream.av" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mips.json b/data/brands/mips.json deleted file mode 100644 index 61f6a9e..0000000 --- a/data/brands/mips.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "brand": "Mips", - "brand_id": "mips", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "media/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/misecu.json b/data/brands/misecu.json deleted file mode 100644 index 201ce72..0000000 --- a/data/brands/misecu.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Misecu", - "brand_id": "misecu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5mpx", - "ipc-bt511swtv-1.0", - "MISECU H.265 1080P PTZ IP Camera 4X Zoom", - "MI-XM-629EBP-AI-50WP", - "MI-XM-DM13EP-20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "720", - "720P", - "MISECU H.265 1080P PTZ IP CAMERA 4X ZOOM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "720p", - "815", - "BT652A-4G", - "IPC-BT511S", - "IPC-BT621A-2.0C", - "IPC-BT623-2.0", - "IPC-DM05", - "IPC-DM13E-2.0", - "IPV-BT511S-10", - "MISECU H.265 1080P PTZ IP Camera 4X Zoom", - "MI-XM-669BP-AI-80N", - "mi-xm-dm13ep-50", - "Other", - "pt817", - "R80X50-PQ", - "YN-IPC-BT606WV", - "YN-IPC-DM04" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "B06POE-5MP-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IPC-DM13EW-1.3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/mitec.json b/data/brands/mitec.json deleted file mode 100644 index 8ac7747..0000000 --- a/data/brands/mitec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mitec", - "brand_id": "mitec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/mitra-utama.json b/data/brands/mitra-utama.json deleted file mode 100644 index e579903..0000000 --- a/data/brands/mitra-utama.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mitra Utama", - "brand_id": "mitra-utama", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BLK N3304MV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream1.asf" - }, - { - "models": [ - "BLK N3304MV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/mivision.json b/data/brands/mivision.json deleted file mode 100644 index 48e320b..0000000 --- a/data/brands/mivision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mivision", - "brand_id": "mivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/mjpeg.json b/data/brands/mjpeg.json deleted file mode 100644 index 3020ee4..0000000 --- a/data/brands/mjpeg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mjpeg", - "brand_id": "mjpeg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/mjpg-streamer.json b/data/brands/mjpg-streamer.json deleted file mode 100644 index 67a5b19..0000000 --- a/data/brands/mjpg-streamer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Mjpg-streamer", - "brand_id": "mjpg-streamer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "PIZero" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/?action=stream" - }, - { - "models": [ - "RPI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/html/cam_pic_new.php" - } - ] -} \ No newline at end of file diff --git a/data/brands/mnet-dvr.json b/data/brands/mnet-dvr.json deleted file mode 100644 index 99997e2..0000000 --- a/data/brands/mnet-dvr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mnet Dvr", - "brand_id": "mnet-dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mnet-sd-pal.ts" - } - ] -} \ No newline at end of file diff --git a/data/brands/mobiwire.json b/data/brands/mobiwire.json deleted file mode 100644 index 62b2664..0000000 --- a/data/brands/mobiwire.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mobiwire", - "brand_id": "mobiwire", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/mobotix.json b/data/brands/mobotix.json deleted file mode 100644 index 1e3a808..0000000 --- a/data/brands/mobotix.json +++ /dev/null @@ -1,734 +0,0 @@ -{ - "brand": "Mobotix", - "brand_id": "mobotix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BO", - "C25", - "C25 D016-AUD", - "D-12", - "D-14", - "D15", - "D16", - "D-22M", - "D-24", - "D24M-Night", - "DM-25M", - "I25", - "M 12", - "M-10", - "M12D-SEC", - "M-15", - "M-15D", - "M16", - "M-22", - "m22d", - "M-24", - "M25", - "M26", - "M-Series", - "M-SERIES", - "Other", - "p25", - "Q22", - "Q-24", - "Q-25", - "Q25M", - "Q-Series", - "Q-SERIES", - "S16", - "t24", - "T24M-Sec-Night", - "T25", - "T25M", - "V25" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "control/faststream.jpg?stream=full" - }, - { - "models": [ - "Bullet", - "c16 b", - "D71", - "M 25", - "M12D-Sec", - "M-15D", - "M16", - "M73", - "MOBOTIX i26B-6D", - "Move", - "Mx-VH1A-12-IR-VA", - "One", - "Other", - "P71", - "Q26B-6D", - "Q71", - "S74" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=0" - }, - { - "models": [ - "c25", - "C25 D016-AUD", - "c26B-6D", - "D12", - "D-14", - "d14d", - "D24M", - "D25", - "DM-25M", - "DM-26", - "M10", - "M-10", - "M12", - "M12D-SEC", - "M-15", - "m15d", - "M-15D", - "M16", - "m-24", - "M24", - "M25", - "M73", - "MOB1", - "M-Series", - "M-SERIES", - "MX10", - "Mx-Q26B", - "Other", - "Q-24", - "Q24M", - "Q24m-Sec", - "Q24M-Sec", - "q25", - "Q-25", - "Q26B-6D", - "Q-Series", - "S14", - "S15", - "S-15", - "S16", - "S26", - "SUS", - "t24", - "T-24", - "T24M-Sec-Night", - "T25", - "T-25", - "V16 PLBN", - "V25" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "C25", - "C25-2", - "D-12", - "D-14", - "D15", - "D-22M", - "D-24", - "D25", - "i25", - "M-10", - "M-12", - "M12D-SEC", - "M-15", - "M-15D", - "M-22", - "m-24", - "M24", - "M25", - "M-Series", - "M-SERIES", - "Other", - "P25", - "p25-Night", - "Q-24", - "Q24M", - "Q-25", - "Q-Series", - "s-15", - "T-25", - "T25M" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "record/current.jpg?sync=-99" - }, - { - "models": [ - "C25 D016-AUD", - "m12", - "M-15", - "M-15D", - "M-22", - "M22M", - "M-24", - "M-Series", - "Other", - "Q-24", - "q25m", - "Q-Series", - "t25", - "T-25" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image.jpg?size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "C26", - "D12", - "D-14", - "D24", - "D24M-Night", - "i25", - "m 25", - "M10", - "m12", - "M12D-Sec", - "M15", - "M-15", - "M16", - "M-22", - "M24", - "M25", - "M26", - "M73", - "MOBOTIX i26B-6D", - "MQ24", - "One", - "Q24M", - "Q71", - "S16b ok!", - "t24", - "T-24", - "T24M-Sec-Night", - "T-25", - "T26", - "V25" - ], - "type": "MJPEG", - "protocol": "http", - "port": 9083, - "url": "/control/faststream.jpg?stream=full" - }, - { - "models": [ - "c26 B-D06", - "D12", - "M16", - "Move", - "sd1a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "c26B-6D", - "Q24M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=MxPEG&preview&previewsize=1280x960&quality=70&fps=24&camera=auto" - }, - { - "models": [ - "D12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "D-12", - "D-14", - "d-15", - "D15", - "D16", - "D-22M", - "D24", - "DM-26", - "M 25", - "M-12", - "M12D-Sec", - "M-15", - "M-22", - "M22M", - "M-24", - "M-Series", - "M-SERIES", - "Other", - "Q-22", - "Q-24", - "Q-25", - "Q-SERIES", - "S-15", - "T-24" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "record/current.jpg" - }, - { - "models": [ - "D-12", - "D22M-Sec", - "M-12", - "M-15", - "M-22", - "M25", - "Other", - "Q-22", - "Q-24", - "Q-Series", - "T-24" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image.jpg" - }, - { - "models": [ - "D-14", - "M24M", - "M25", - "Q-24", - "Q26" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/faststream.jpg?stream=full&fps=10.0" - }, - { - "models": [ - "D15", - "M12D-Sec", - "M1M", - "s16", - "T26", - "Unlisted" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/record/current.jpg" - }, - { - "models": [ - "D16", - "V25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0/mobotix.mjpeg" - }, - { - "models": [ - "D22", - "M 12", - "m12", - "s16" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/record/current.jpg?sync=-99" - }, - { - "models": [ - "D26", - "M26B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mobotix.h264" - }, - { - "models": [ - "i25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "M 12" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1&resolution=320x240" - }, - { - "models": [ - "m 25", - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=VGA-L" - }, - { - "models": [ - "M10", - "M16", - "Q24M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=24" - }, - { - "models": [ - "m12", - "M-22" - ], - "type": "JPEG", - "protocol": "http", - "port": 20001, - "url": "/cgi-bin/image.jpg?size=320x240" - }, - { - "models": [ - "M12D-Sec" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 20004, - "url": "/control/userimage.html" - }, - { - "models": [ - "M-15D", - "M72", - "MOBOTIX c26B-AU-6D", - "MOBOTIX i26B-6D", - "Q24M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/mobotix.h264" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=CIF" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=MEGA" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=VGA" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=CIF-R" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=CIF-L" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=VGA-R" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 8011, - "url": "/cgi-bin/image.jpg?imgprof=CIF-2" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 8011, - "url": "/cgi-bin/image.jpg?imgprof=CIF-1" - }, - { - "models": [ - "M-15D" - ], - "type": "JPEG", - "protocol": "http", - "port": 8011, - "url": "/control/event.jpg" - }, - { - "models": [ - "M-22", - "M-Series", - "Other", - "Q-SERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "faststream.jpg?stream=full&fps=0" - }, - { - "models": [ - "M25" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg" - }, - { - "models": [ - "M25", - "V25" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=full&preview&previewsize=640x480&quality=40&fps=20.0" - }, - { - "models": [ - "M25" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=full&preview&previewsize=800x600&quality=80&fps=30.0" - }, - { - "models": [ - "M72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream/profile0" - }, - { - "models": [ - "MOBOTIX c26B-6D", - "MOBOTIX i26B-6D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/stream3/mobotix.mjpeg" - }, - { - "models": [ - "MQ24", - "Q24M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8038, - "url": "/cgi-bin/guestimage.html" - }, - { - "models": [ - "M-Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetOneShot?image_size=[WIDTH]x[HEIGHT]&frame_count=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/vga.jpg" - }, - { - "models": [ - "Q24M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=0" - }, - { - "models": [ - "q24m-sec", - "q24m-secure" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=MxPEG&preview&previewsize=2048x1536&quality=100&fps=20&camera=auto" - }, - { - "models": [ - "Q26" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?display_mode=simple&size=3072x2048" - }, - { - "models": [ - "Q26" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?display_mode=simple&size=3072x2048&textdisplay=datetime&displayfontsize=24&rotate=180" - }, - { - "models": [ - "Q-Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "S-15" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "S16b" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/image.jpg?imgprof=CIF-B" - }, - { - "models": [ - "V25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1/mobotix.mjpeg" - }, - { - "models": [ - "V25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1/mobotix.mxg" - }, - { - "models": [ - "V25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0/mobotix.mxg" - } - ] -} \ No newline at end of file diff --git a/data/brands/mocam.json b/data/brands/mocam.json deleted file mode 100644 index 1104816..0000000 --- a/data/brands/mocam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mocam", - "brand_id": "mocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1214" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "hikvision" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/mocon.json b/data/brands/mocon.json deleted file mode 100644 index 5841f21..0000000 --- a/data/brands/mocon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mocon", - "brand_id": "mocon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E-Lock CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "E-LOCK CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/moja-ip.json b/data/brands/moja-ip.json deleted file mode 100644 index 81ad7d9..0000000 --- a/data/brands/moja-ip.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Moja Ip", - "brand_id": "moja-ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ddd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/moko.json b/data/brands/moko.json deleted file mode 100644 index 539e661..0000000 --- a/data/brands/moko.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Moko", - "brand_id": "moko", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "e10", - "NIP-61GE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "e152", - "NIP-61GE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/momentum.json b/data/brands/momentum.json deleted file mode 100644 index c07357d..0000000 --- a/data/brands/momentum.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "brand": "Momentum", - "brand_id": "momentum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2002", - "mocam", - "MOCAM", - "mocam01", - "MOCAM-01", - "mocam1", - "MO-CAm-720-01", - "Mocam-720-1", - "MOCAM-729-01", - "moc-cam01", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "2002", - "Mocam 01", - "MOCAM USB", - "mocam01", - "MOCAM-01", - "MOCAM1", - "MOCAM12", - "MOCAM3", - "Other", - "OtherBB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/videoMain" - }, - { - "models": [ - "2002", - "720P", - "moca-01", - "MOCAM 01", - "mocam1", - "MO-CAm-720-01" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720p", - "Cory", - "moca-01", - "Mocam 01", - "MO-CAM 01", - "mocam-01", - "MOCAM03", - "mocam1", - "MOCAM3", - "Mocam-720-1", - "mocam720p", - "MOCAN-01", - "moc-cam01", - "MOGA-001", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Aria Outdoor Floodlight Camera", - "MOCAM", - "mocam1", - "MOCAM1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "CheapCams", - "MOCA MP1", - "MOCAM", - "Mocam 01", - "MOCAM USB", - "mocam01", - "MOCAM-01", - "MOCAM-720-1", - "Other", - "SIG02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/H264/sub" - }, - { - "models": [ - "Cori", - "MO-CAM-720-01" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "moam", - "Mocam 01", - "MO-CAM 01", - "MOCAM 720-1", - "mocam-01", - "MOCAM1", - "mocam-720-2", - "Other", - "Thames" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "moam", - "mocam01", - "Mocam-1080.01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "MOCA MP1", - "Mocam 01", - "MO-CAM 01", - "MOCAM01", - "MOCAM-01", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "MO-CAM", - "MOCAM01", - "MOCAM1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "MO-CAM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "MOCAM 01", - "MOCAM01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "MOCAM 01", - "mocam-01", - "MOCAM1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "MOCAM 01", - "Mocam USB" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "MOCAM 01", - "MO-CAM 01", - "MOCAM USB", - "mocam01", - "MOCAM-01", - "mocam1", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "MO-CAM 01" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "MO-CAM 01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "MO-CAM 01", - "MOCAM USB", - "MOCAM1", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "mocam 720-1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "mocam 720-1", - "MOCAM-01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live.sdp" - }, - { - "models": [ - "mocam1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cam_1.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/monacor.json b/data/brands/monacor.json deleted file mode 100644 index 12516f0..0000000 --- a/data/brands/monacor.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Monacor", - "brand_id": "monacor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9000a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "DMR-180", - "DMR-524" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "DMR-180SET" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cam1.jpg" - }, - { - "models": [ - "DMR-524" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Camera=0&BandWidth=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - }, - { - "models": [ - "vwc-413 mega" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "VWS-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/monita-cctv.json b/data/brands/monita-cctv.json deleted file mode 100644 index f5b2dc7..0000000 --- a/data/brands/monita-cctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Monita Cctv", - "brand_id": "monita-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LPR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/channel=0;stream=0;user=[USERNAME];pass=[PASSWORD];" - } - ] -} \ No newline at end of file diff --git a/data/brands/monomat.json b/data/brands/monomat.json deleted file mode 100644 index f901b3d..0000000 --- a/data/brands/monomat.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Monomat", - "brand_id": "monomat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/monoprice.json b/data/brands/monoprice.json deleted file mode 100644 index b74a65b..0000000 --- a/data/brands/monoprice.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Monoprice", - "brand_id": "monoprice", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264 DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "H264 DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?img=ch[CHANNEL]" - }, - { - "models": [ - "NC303-MB", - "NC303-MD", - "Other", - "WHCI7452-M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/monsterip.json b/data/brands/monsterip.json deleted file mode 100644 index 9ca9399..0000000 --- a/data/brands/monsterip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Monsterip", - "brand_id": "monsterip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MCI 28106" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/morphxstar.json b/data/brands/morphxstar.json deleted file mode 100644 index 2d42e08..0000000 --- a/data/brands/morphxstar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Morphxstar", - "brand_id": "morphxstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TardisM4k" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/mosafe.json b/data/brands/mosafe.json deleted file mode 100644 index 21756f3..0000000 --- a/data/brands/mosafe.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mosafe", - "brand_id": "mosafe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "KC2M5301B-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/motion.json b/data/brands/motion.json deleted file mode 100644 index 981adb4..0000000 --- a/data/brands/motion.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Motion", - "brand_id": "motion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4.0", - "LogitechUSB", - "raspberrypi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/motioneye.json b/data/brands/motioneye.json deleted file mode 100644 index 9c0a2d2..0000000 --- a/data/brands/motioneye.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Motioneye", - "brand_id": "motioneye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - ".40", - "db1", - "model 1", - "motion", - "MotionEye 0.39", - "Other", - "Pi0", - "rpi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "0.42.1", - "espcam32", - "motion", - "MotionEye 0.39", - "MotionEYEOS", - "Other", - "Pi Zero", - "rpi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/" - }, - { - "models": [ - "espcam32" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/stream" - }, - { - "models": [ - "espcam32" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/81" - }, - { - "models": [ - "icloud" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8151, - "url": "/live/video/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/moto.json b/data/brands/moto.json deleted file mode 100644 index d8ca55a..0000000 --- a/data/brands/moto.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Moto", - "brand_id": "moto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "blink" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Handy" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8056, - "url": "/video?profile=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other", - "razr" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/motorola.json b/data/brands/motorola.json deleted file mode 100644 index 1e355db..0000000 --- a/data/brands/motorola.json +++ /dev/null @@ -1,700 +0,0 @@ -{ - "brand": "Motorola", - "brand_id": "motorola", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0085", - "AUTOFOCUS 73", - "CONNECT", - "FOCU85", - "focus", - "Focus 66 WiFi HD", - "Focus 73", - "Focus 73 HK", - "Focus 85", - "FOCUS_73", - "FOCUS_73DENNE", - "focus73", - "focus85-b", - "FOCUS85-B", - "Foucus 85", - "MBP85CONNECT", - "Other", - "SCOUT 73bbk" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "0085", - "Blink 1", - "blink1", - "BLINK1", - "focus", - "FOCUS 66", - "focus 86", - "Focus86-W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "1662", - "Autofocus 73", - "bad", - "BLINK", - "F66sb", - "F85", - "FCUS85", - "focu5665_blk2", - "focu85", - "focus", - "focus 0854", - "Focus 66", - "FOCUS 66", - "FOCUS 66 WIFI HD", - "Focus 66-B", - "FOCUS 66-B", - "FOCUS 66-B2", - "focus 66-s", - "Focus 85", - "FOCUS 85", - "FOCUS 86", - "Focus S66", - "Focus S73", - "FOCUS_73", - "fucus73", - "HD-0066113B20", - "Hubble", - "MBP 854", - "MBP85CONNECT", - "Mototrola Scout85", - "Other", - "SCOUT", - "SCOUT 73" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "1662", - "66-b", - "AUTOFOCUS 73", - "BABYMONITOR", - "CONNECT", - "fcus85", - "FCUS85", - "FOCU85", - "focu88", - "FOCUS", - "FOCUS 66", - "Focus 66 HD", - "FOCUS 66 WIFI HD", - "focus 66b", - "FOCUS 66-B2", - "FOCUS 66BBK", - "Focus 66-s2", - "Focus 73", - "FOCUS 73", - "Focus 85", - "Focus S66", - "FOCUS S66", - "Focus S73", - "focus_72", - "FOCUS_73", - "Focus66", - "FOCUS67", - "focus73", - "Focus85", - "FOCUS85-B", - "Foucs", - "Hubble", - "mbp85", - "MBP85", - "MBP-854", - "MBP855", - "MBP855CONNECT", - "motorola focus50-w", - "motorola mbp85", - "MOTOTROLA SCOUT85", - "Other", - "SCOUT 73" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "66-b", - "FOCUS-66" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi" - }, - { - "models": [ - "8492-PTZ", - "Ptz1" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Atrix", - "atrix hd", - "AttirxII", - "Droid", - "Droid 2", - "Droid RAZR HD", - "Droid RAZR MAXX", - "Droid X", - "Drooid Bionic", - "FOCUS 66-B2", - "G5 Plus", - "G6 Play", - "Moto E", - "Moto G", - "Moto G 4G", - "Moto X Pure Edition", - "Other", - "phne", - "Phone", - "Photon", - "Razor", - "Razr", - "Xoom", - "Xoom 2", - "XT-1028", - "xt1077", - "XT-300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Auto focas 85", - "AUTOFOCUS 73", - "FOCU85", - "focus", - "FOCUS 66", - "Focus 73", - "Focus 85", - "FOCUS 88", - "Focus S66", - "Focus S73", - "FOCUS85", - "MBP85CONNECT", - "scout", - "SCOUT 73" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "AUTOFOCUS 73", - "FOCUS73", - "MBP-854", - "Other", - "SCOUT 73" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "AUTOFOCUS 73", - "BLINK", - "FOCU85", - "FOCUS 66", - "Focus 73", - "Focus 85", - "Focus S66-B", - "FOCUS_73", - "fokus 73", - "fukus 73", - "Other", - "SCOUT 73", - "SCOUT 85" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "babymonitor", - "CONNECT", - "FOCUS 66", - "FOCUS 66bbk", - "FOCUS 73", - "FOCUS 85", - "FOCUS 86", - "Focus73", - "MBP85", - "MBP853CONNECT", - "MBP-854", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/video.cgi" - }, - { - "models": [ - "babymonitor", - "BLINK1", - "FOCUS 66", - "FOCUS 66-B2", - "FOCUS 73", - "Focus S66", - "FOCUS S66", - "FOCUS85", - "HD-0066113b20", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Blink", - "Blink1", - "Other", - "Scout" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=appletvstream" - }, - { - "models": [ - "Blink", - "blink 1", - "Blink 1", - "focus 86", - "FOCUS 88" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "BLINK", - "blink 1", - "BLINK1", - "FOCU85", - "SCOUT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "?action=snapshot" - }, - { - "models": [ - "BLINK", - "FOCUS 85", - "FOCUS_73DENNE", - "FOCUSs5", - "MBP853CONNECT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BLINK", - "CONNECT", - "focus", - "FOCUS 66", - "Focus 66-B2", - "Focus 66-s2", - "Focus 73", - "FOCUS 73", - "Focus 85", - "FOCUS_73DENNE", - "focus66", - "FOCUS85", - "MBP-854" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "blink85", - "FCUS85", - "FOCUS 85", - "Focus_73", - "FOCUS73", - "FUKUS 73", - "SCOUT 73", - "Scout 83", - "Scout 85" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion&camera=[CHANNEL]" - }, - { - "models": [ - "BLINK85", - "FOCUS", - "Focus 66", - "FOCUS 66", - "FOCUS 66 merob", - "FOCUS 66-B", - "FOCUS 73", - "focus66w", - "MBP-854" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "CONNECT", - "Focus 66", - "FOCUS 66-B", - "FOCUS 73", - "FUKUS 73", - "Other", - "SCOUT 73" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - }, - { - "models": [ - "CONNECT", - "defy xt", - "Droid", - "Droid RAZR MAXX", - "Eris", - "Other", - "razr", - "xt1080" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "DROID", - "Droid 3", - "droid mini", - "maxx", - "mobile", - "Other", - "x1097", - "xt907" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Droid 2Global", - "Droid 4", - "DROID RAZR HD", - "Droid X", - "Milestone 2", - "Moto G", - "MOTO g", - "Other", - "xt1077" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Droid RAZR HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8888, - "url": "/h264_ulaw.sdp" - }, - { - "models": [ - "Droid X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "Edge", - "G13", - "Moto G" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - }, - { - "models": [ - "Edge", - "G13" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/video?profile=0" - }, - { - "models": [ - "focus", - "FOCUS 66-B2", - "focus 66-s", - "Focus 73", - "Focus 85", - "fokus 73", - "fous 66", - "HUBBLE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "focus", - "FOCUS 85", - "MBP-854", - "Scout 73", - "SCOUT 85" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "focus", - "FOCUS 73", - "FOCUS 85", - "Other", - "Scout 73" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "focus", - "FOCUS 73" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "focus", - "FOCUS 73", - "SCOUT 73" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL]/video.cgi" - }, - { - "models": [ - "focus" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "focus 66" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Focus 66 HD", - "Focus 68", - "Focus 72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 6667, - "url": "/blinkhd" - }, - { - "models": [ - "Focus 66 WiFi HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "Focus 73", - "FOCUS 88", - "moto g(8) plus" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "FOCUS 85", - "FOCUS 86", - "Focus86-W", - "hubble", - "MBP853CONNECT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - }, - { - "models": [ - "FOCUS 85", - "FOCUS_73DENNE", - "FOKUS 73" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "FOCUS 88" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "focus_72" - ], - "type": "MJPEG", - "protocol": "http", - "port": 6667, - "url": "/blinkhd/" - }, - { - "models": [ - "g13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/h264_pcm.sdp" - }, - { - "models": [ - "MBP-854" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "MFV700BU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "Moto G 4G", - "Moto G6" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/videofeed" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?img=ch[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/motos.json b/data/brands/motos.json deleted file mode 100644 index a6b54e5..0000000 --- a/data/brands/motos.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Motos", - "brand_id": "motos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/motru.json b/data/brands/motru.json deleted file mode 100644 index 5742600..0000000 --- a/data/brands/motru.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Motru", - "brand_id": "motru", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pni" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/mov-cam.json b/data/brands/mov-cam.json deleted file mode 100644 index efe1aaf..0000000 --- a/data/brands/mov-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mov Cam", - "brand_id": "mov-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LINKSYS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/movo.json b/data/brands/movo.json deleted file mode 100644 index 922f05d..0000000 --- a/data/brands/movo.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Movo", - "brand_id": "movo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AT-201", - "NT-3000", - "nt400b" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/movols.json b/data/brands/movols.json deleted file mode 100644 index 440d201..0000000 --- a/data/brands/movols.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Movols", - "brand_id": "movols", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Solar Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/moxa.json b/data/brands/moxa.json deleted file mode 100644 index 438efca..0000000 --- a/data/brands/moxa.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Moxa", - "brand_id": "moxa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other", - "vport 351", - "VPort 36-2L", - "VPort 36-2L-3X-T" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "multicaststream" - }, - { - "models": [ - "VPort_36-1MP-T", - "VPort_P26A-1MP-T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/mpcam.json b/data/brands/mpcam.json deleted file mode 100644 index f443cc4..0000000 --- a/data/brands/mpcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mpcam", - "brand_id": "mpcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FSERIES" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mrsafe.json b/data/brands/mrsafe.json deleted file mode 100644 index 37feaaa..0000000 --- a/data/brands/mrsafe.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Mrsafe", - "brand_id": "mrsafe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "Other", - "PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live0.264" - }, - { - "models": [ - "PRO", - "PRO1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/2.3gp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ms-3000.json b/data/brands/ms-3000.json deleted file mode 100644 index 8cc5617..0000000 --- a/data/brands/ms-3000.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ms 3000", - "brand_id": "ms-3000", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/mscamera.json b/data/brands/mscamera.json deleted file mode 100644 index b8ab813..0000000 --- a/data/brands/mscamera.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Mscamera", - "brand_id": "mscamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AltoBeam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "AltoBeam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "AltoBeam Low Res" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/mstar.json b/data/brands/mstar.json deleted file mode 100644 index a1d6971..0000000 --- a/data/brands/mstar.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Mstar", - "brand_id": "mstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AM8000NC", - "mc500l_af" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "AM8000NC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/msv.json b/data/brands/msv.json deleted file mode 100644 index f58aaa0..0000000 --- a/data/brands/msv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Msv", - "brand_id": "msv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N6600" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/mtstar.json b/data/brands/mtstar.json deleted file mode 100644 index 51067cf..0000000 --- a/data/brands/mtstar.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Mtstar", - "brand_id": "mtstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AM8000N2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "ASRIH492-005-20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/mubview.json b/data/brands/mubview.json deleted file mode 100644 index 47dc093..0000000 --- a/data/brands/mubview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mubview", - "brand_id": "mubview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PK320 2k" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/multilaser.json b/data/brands/multilaser.json deleted file mode 100644 index 092dc92..0000000 --- a/data/brands/multilaser.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Multilaser", - "brand_id": "multilaser", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RE007" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - } - ] -} \ No newline at end of file diff --git a/data/brands/mustcam.json b/data/brands/mustcam.json deleted file mode 100644 index ea6ae58..0000000 --- a/data/brands/mustcam.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Mustcam", - "brand_id": "mustcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "807", - "816", - "818P", - "H-806P", - "H809P", - "IP-86", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - }, - { - "models": [ - "807P", - "H-808P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H-806P", - "H-808P", - "h821p", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "H-808P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H-808P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/mv-power.json b/data/brands/mv-power.json deleted file mode 100644 index 70dd339..0000000 --- a/data/brands/mv-power.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "brand": "Mv Power", - "brand_id": "mv-power", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7616HE", - "C7837WIP", - "Other", - "TV 7140HE", - "TV-7108he", - "tvcx7010" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "7616HE", - "Other", - "TV 7140HE", - "TV-7108HE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "7616HE", - "Other", - "TV-7108HE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "7616HE", - "house", - "Other", - "TK-D4C2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "mjpeg" - }, - { - "models": [ - "C7837WIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IPWebcam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "IPWEBCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/mvs.json b/data/brands/mvs.json deleted file mode 100644 index 96ceeff..0000000 --- a/data/brands/mvs.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Mvs", - "brand_id": "mvs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam01", - "CAM04", - "ipeye", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/mvteam.json b/data/brands/mvteam.json deleted file mode 100644 index 9a4c18f..0000000 --- a/data/brands/mvteam.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Mvteam", - "brand_id": "mvteam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2129", - "Nisarga" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/mwr.json b/data/brands/mwr.json deleted file mode 100644 index 98b22bc..0000000 --- a/data/brands/mwr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Mwr", - "brand_id": "mwr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C1223", - "MF822" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - }, - { - "models": [ - "C1223HW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/my-connex.json b/data/brands/my-connex.json deleted file mode 100644 index 0db1d29..0000000 --- a/data/brands/my-connex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "My Connex", - "brand_id": "my-connex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C2006" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/myeye.json b/data/brands/myeye.json deleted file mode 100644 index b93dc7c..0000000 --- a/data/brands/myeye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Myeye", - "brand_id": "myeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/myindoorcam.json b/data/brands/myindoorcam.json deleted file mode 100644 index 2a18a43..0000000 --- a/data/brands/myindoorcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Myindoorcam", - "brand_id": "myindoorcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ADC-V520IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1032, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/mymology.json b/data/brands/mymology.json deleted file mode 100644 index 13f766c..0000000 --- a/data/brands/mymology.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mymology", - "brand_id": "mymology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BC32001" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/mysmartvideo.json b/data/brands/mysmartvideo.json deleted file mode 100644 index 1e61c43..0000000 --- a/data/brands/mysmartvideo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mysmartvideo", - "brand_id": "mysmartvideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N6600" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/mytech.json b/data/brands/mytech.json deleted file mode 100644 index 171bd8a..0000000 --- a/data/brands/mytech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Mytech", - "brand_id": "mytech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/nadatel.json b/data/brands/nadatel.json deleted file mode 100644 index 14cf359..0000000 --- a/data/brands/nadatel.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Nadatel", - "brand_id": "nadatel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "camera 4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/" - }, - { - "models": [ - "ip1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0/Channel=0;Profile=0" - }, - { - "models": [ - "IP1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/namai.json b/data/brands/namai.json deleted file mode 100644 index 389b33d..0000000 --- a/data/brands/namai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Namai", - "brand_id": "namai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "t51924" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nanocam.json b/data/brands/nanocam.json deleted file mode 100644 index 327443a..0000000 --- a/data/brands/nanocam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Nanocam", - "brand_id": "nanocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xyz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "xyz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nanshiba.json b/data/brands/nanshiba.json deleted file mode 100644 index 28c8c8f..0000000 --- a/data/brands/nanshiba.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nanshiba", - "brand_id": "nanshiba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T1 Webcam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/napco-security.json b/data/brands/napco-security.json deleted file mode 100644 index 8e3634e..0000000 --- a/data/brands/napco-security.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Napco Security", - "brand_id": "napco-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iSee", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "iSee" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "iSee", - "ISEE" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "iSee Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/nari.json b/data/brands/nari.json deleted file mode 100644 index 488e9fb..0000000 --- a/data/brands/nari.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Nari", - "brand_id": "nari", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N2021" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "N2021" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nas.json b/data/brands/nas.json deleted file mode 100644 index 199dd36..0000000 --- a/data/brands/nas.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nas", - "brand_id": "nas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "metis 3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/nassicam.json b/data/brands/nassicam.json deleted file mode 100644 index f3e8b3e..0000000 --- a/data/brands/nassicam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Nassicam", - "brand_id": "nassicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "301f" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "WVC Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "WVC Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/naum-pro.json b/data/brands/naum-pro.json deleted file mode 100644 index 20a3800..0000000 --- a/data/brands/naum-pro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Naum Pro", - "brand_id": "naum-pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xmeye 220" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/nbvision.json b/data/brands/nbvision.json deleted file mode 100644 index 8072c07..0000000 --- a/data/brands/nbvision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Nbvision", - "brand_id": "nbvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DS-2CD3T10D-I3" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ncp.json b/data/brands/ncp.json deleted file mode 100644 index 9d99288..0000000 --- a/data/brands/ncp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ncp", - "brand_id": "ncp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2475e" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ncx.json b/data/brands/ncx.json deleted file mode 100644 index c2fb3b3..0000000 --- a/data/brands/ncx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ncx", - "brand_id": "ncx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aper" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/nedis.json b/data/brands/nedis.json deleted file mode 100644 index 2a14410..0000000 --- a/data/brands/nedis.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Nedis", - "brand_id": "nedis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1920x1080", - "NEDIS WIFICO11xxx", - "SmartLife Doorbell", - "WIFICI07CBK", - "WIFICO20CWT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "IPCMO10CWT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "NEDIS WIFICO11xxx", - "WIFICO11xxx", - "WIFICO20CWT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "WIFICO11CWT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "WIFICO40CBK" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/neewer.json b/data/brands/neewer.json deleted file mode 100644 index e248dcd..0000000 --- a/data/brands/neewer.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "brand": "Neewer", - "brand_id": "neewer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "l series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "L Series", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "L Series", - "Other", - "v-100", - "V-100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "m series", - "OO-5QWMD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "MSeries" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "OO-5QWMD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other", - "V-100", - "V-200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other", - "V-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "V-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "v100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "V-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "V-100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/neo-coolcam.json b/data/brands/neo-coolcam.json deleted file mode 100644 index b1bdaa3..0000000 --- a/data/brands/neo-coolcam.json +++ /dev/null @@ -1,541 +0,0 @@ -{ - "brand": "Neo Coolcam", - "brand_id": "neo-coolcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16CH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "197", - "COOLCAM", - "COOLCAM HBAAP", - "Coolcam HBP", - "COOLCAM HBP", - "HBP", - "NEO", - "NIP", - "NIP 06", - "NIP 21", - "NIP-12", - "NIP-20", - "NIP-31H", - "NIP-36", - "NIP-51FX", - "nip-61(GE)", - "NIP-61GE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "coolcam", - "COOLCAM", - "E-LOCK", - "NC603P", - "NIP-02", - "nip-06", - "NIP-12", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "coolcam", - "neo", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "coolcam", - "IP-20", - "NEO", - "nip-02", - "NIP-02", - "NIP-55", - "NIP-550VX", - "p2p", - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "coolcam", - "Coolcam HBP", - "NIP", - "NIP 06", - "NIP 20", - "NIP-02", - "NIP-02(OAM)", - "NIPJEAN2", - "Other", - "P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi" - }, - { - "models": [ - "coolcam", - "Nip-53", - "Other", - "P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Coolcam", - "NIP-09", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "COOLCAM", - "COOLCAM HBP", - "IP-20", - "NIP 06", - "NIP-02", - "NIP-227316-CACCC", - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "COOLCAM", - "E-Lock", - "E-LOCK", - "NIP-02", - "NIP-06", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "COOLCAM", - "COOLCAM HBP", - "COOLCAM nip22", - "COOLCAM NIP-22", - "NEO", - "NIP", - "NIP-061GE", - "NIP-06NEW", - "NIP-25", - "NIP-28", - "NIP-28 (FX)", - "NIP-31", - "nip-51fx", - "NIP-55", - "nip-55ge", - "nip-56fx", - "NIP-61GE", - "NP20", - "Other", - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "COOLCAM", - "NIP-02", - "NIP-02BGPW3A2", - "NIP-06", - "NIP-09", - "NIP-31", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "COOLCAM", - "nip-12", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "COOLCAM", - "neo", - "NIP-02(OAM)", - "NIP-06", - "NIP-102428-DFBEF", - "NIP-H20(OZX)", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "COOLCAM", - "neo", - "NIP-02", - "NIP-02(OAO)", - "NIP-03(OAM)", - "NIP-06", - "NIP-160238-AADDB", - "NIP-O2 (OAO)", - "Other", - "p2p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "COOLCAM HBP", - "NIP-12", - "NIP-12(OAM)", - "NIP-130876-ADAEB", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "COOLCAM HBP", - "NIP 180x", - "NIP 20", - "NIP JEAN", - "NIP-02(OAM)", - "NIP-066777-BWESL", - "NIP-102428-DFBEF", - "NIP-161397-AADBF", - "NIP-MJPEG", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Low Res", - "NIP-09", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "NC603P", - "NIP-02BGPW3A2", - "NIP-06", - "NIP-09", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "neo" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "NIP 06", - "NIP-06new", - "NIP-213979-DBAFA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "NIP 06", - "NIP-31H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av1" - }, - { - "models": [ - "NIP 20", - "NIP-12", - "NIP-55", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "NIP-02", - "NIP-02(OAM)", - "NIP-02BGPW3A2", - "NIP-06", - "NIP-09", - "nip-11", - "NIP-12", - "NIP-26", - "NIP-31", - "NIP-61GE", - "OBJ-007260-LYLDU", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "NIP-02BGPW3A2", - "NIP-09", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "NIP-02BGPW3A2", - "NIP-09", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "nip-06", - "NIP-09", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "nip-06" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-06", - "NIP-09", - "NIP-36", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "NIP-06", - "OBJ-007260-LYLDU", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-09", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-09" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mobile/channel[CHANNEL].jpg" - }, - { - "models": [ - "NIP-09", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "NIP-09", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "NIP-09" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NIP-09" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "NIP-09" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "nip-11", - "nip-20", - "NIP-55", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP-12(OAM)", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "NIP-55" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/neos.json b/data/brands/neos.json deleted file mode 100644 index bbd8083..0000000 --- a/data/brands/neos.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Neos", - "brand_id": "neos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Smartcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/unicast" - } - ] -} \ No newline at end of file diff --git a/data/brands/neostar.json b/data/brands/neostar.json deleted file mode 100644 index 4bcbedc..0000000 --- a/data/brands/neostar.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Neostar", - "brand_id": "neostar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NTI-D3006IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "NTI-D3012IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "NTI-D3015IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/neposmart.json b/data/brands/neposmart.json deleted file mode 100644 index 5b260d1..0000000 --- a/data/brands/neposmart.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Neposmart", - "brand_id": "neposmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "333", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ness.json b/data/brands/ness.json deleted file mode 100644 index dfc760f..0000000 --- a/data/brands/ness.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Ness", - "brand_id": "ness", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NIP-200", - "NIP-300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "NIP-300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nesuniq.json b/data/brands/nesuniq.json deleted file mode 100644 index 44205b9..0000000 --- a/data/brands/nesuniq.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nesuniq", - "brand_id": "nesuniq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc-p18fb" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/net-generation.json b/data/brands/net-generation.json deleted file mode 100644 index 97c9ff3..0000000 --- a/data/brands/net-generation.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Net Generation", - "brand_id": "net-generation", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM25110", - "N25110" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/netcam.json b/data/brands/netcam.json deleted file mode 100644 index 0cc6c0a..0000000 --- a/data/brands/netcam.json +++ /dev/null @@ -1,367 +0,0 @@ -{ - "brand": "Netcam", - "brand_id": "netcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360", - "720", - "720 HD IP cam", - "777", - "960", - "960P", - "b02w.723", - "BQ-NO6W", - "buyee", - "C2103W", - "C2104W", - "cam3", - "cam360", - "camspot3.3", - "china", - "chinese 1", - "CoolCam", - "cvi212", - "cxvxcv", - "dsfsadf", - "Dual-HD", - "GFVision", - "GoAhead", - "h264", - "Hiseeu", - "HSL-078517-XVJKY", - "HSL-232245-CWXES", - "HW00026-1", - "HW0036", - "i9811", - "i9831", - "icam 606", - "in LSB 327", - "inclick", - "Ip robot", - "ip65", - "ipc100", - "IPC360", - "iSee", - "isvp", - "Keyvay", - "L41CB", - "MW5080W", - "NCL610W", - "net360", - "Netcam360", - "nfi", - "ntv", - "NVT", - "onvif", - "Other", - "Ouvis", - "Ouvis Veezon VZ1", - "overmax", - "P2P", - "Phong Khach", - "QVU", - "qwe", - "qwew", - "right side", - "Robot", - "Robot_Z", - "S6211Y-WR", - "scricam", - "Secureeyes", - "secureye", - "Secureyes", - "Secureyes 1", - "Secureyes 2", - "SIEPEM", - "SkyGenius", - "SkyView", - "Some", - "SunEyes", - "SunEyes SS", - "SunLuxy720", - "sunny", - "Terasse", - "ts-620", - "Turcom", - "Unk", - "VEEZON", - "VZ1", - "VZ2", - "wans", - "wanscam", - "wanscam0004", - "wcam-043811-yxzuh", - "web", - "webvision", - "wet", - "wifi", - "WIFI CAM", - "wificam", - "xblitz", - "XLT-004829-YFBJV", - "xosy", - "z21", - "zen cam", - "Zoneway" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "360", - "CHINA", - "netcam ip", - "NETCAM360", - "NVT of NETCAM", - "Other", - "Ouvis", - "SUNLUXY720", - "WANSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5080", - "700", - "960P", - "CHINA", - "HSL-172296-JJGJW", - "Other", - "ouvis", - "Ouvis VZ1", - "p2p", - "ptz", - "qweqweqw", - "rere", - "RW-720S", - "Secureyes", - "Skygenius", - "SunLuxy", - "veskys", - "VZ1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "CAM360", - "Dual-HD", - "HSL-232245-CWXES", - "nas1", - "Other", - "OUVIS VEEZON VZ1", - "WANSCAM0004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CHINA" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "COOLCAM", - "Other", - "WANSCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "HI3518", - "one", - "Other", - "POE1080P", - "PT-161-D100W/DF4-W-S", - "PT-163", - "PT-163-D100W4-P", - "SN-IPC-HW20", - "WANSCAM", - "WANSCAM0004" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "HI3518", - "IPC360", - "nc335pw", - "nc335pw-HD-1080p", - "NETCAM360", - "Other", - "WANSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HSL-232245-CWXES", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPC360", - "nc223w-ir", - "WANSCAM0004" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPC360", - "Other", - "SCRICAM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "Netcam IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "Other", - "WANSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other", - "PT-163", - "PT163S", - "PT-163S-D100W/DF2-W", - "SIEPEM", - "SUNEYES", - "WANSCAM", - "WANSCAM0004" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "OUVIS VEEZON VZ1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "WANSVIEW1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch1" - }, - { - "models": [ - "WANSVIEW1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "XBLITZ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/netcat.json b/data/brands/netcat.json deleted file mode 100644 index 8849a2a..0000000 --- a/data/brands/netcat.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Netcat", - "brand_id": "netcat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "1080p CCTV", - "C01H4W2", - "C09H4W4", - "Other", - "POE1080p", - "PT-152", - "pt-163-d100w4-w", - "PT-163-S200W4-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1080P", - "1080P CCTV", - "C01H1W2", - "C01H42", - "c02h1w4", - "C02H4P2", - "C04H4W4", - "c09h1p4", - "PT-152", - "PT-163-S100W4-P", - "PT-163-S200W4-W", - "PT-163-S200W4-W-S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "652", - "653" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "D11X34", - "Other", - "P01X2LP4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "name" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/netcomm.json b/data/brands/netcomm.json deleted file mode 100644 index 9bd4a96..0000000 --- a/data/brands/netcomm.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Netcomm", - "brand_id": "netcomm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NS370W", - "NS-380W", - "W70" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/netis.json b/data/brands/netis.json deleted file mode 100644 index 4fe9498..0000000 --- a/data/brands/netis.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Netis", - "brand_id": "netis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "634" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=3&u=[USERNAME]&p=" - }, - { - "models": [ - "K9508-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/snapshot.cgi?chn=3&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/netiscom.json b/data/brands/netiscom.json deleted file mode 100644 index 8654c61..0000000 --- a/data/brands/netiscom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Netiscom", - "brand_id": "netiscom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nc100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/netmedia.json b/data/brands/netmedia.json deleted file mode 100644 index 367ace1..0000000 --- a/data/brands/netmedia.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Netmedia", - "brand_id": "netmedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iViewHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "iViewHD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?CAPTURE=YES&STREAM=1&COMMAND=" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/netsurveillance-dvr-h.264-network-video-recorder.json b/data/brands/netsurveillance-dvr-h.264-network-video-recorder.json deleted file mode 100644 index e66a9a6..0000000 --- a/data/brands/netsurveillance-dvr-h.264-network-video-recorder.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "brand": "Netsurveillance Dvr H.264 Network Video Recorder", - "brand_id": "netsurveillance-dvr-h.264-network-video-recorder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "1080" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080", - "756", - "Other", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "1080", - "H264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "11111", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp" - }, - { - "models": [ - "11111", - "CHINA H264", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "h264" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "live?camera=[CHANNEL]&fps=5&quality=75&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/nettoly.json b/data/brands/nettoly.json deleted file mode 100644 index 74bff13..0000000 --- a/data/brands/nettoly.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "brand": "Nettoly", - "brand_id": "nettoly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "157840-BBADD", - "Gara", - "IPCAM 720p", - "IPCAM 720P", - "J07", - "Other", - "X0027K6DCL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "J07" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/netvideo.json b/data/brands/netvideo.json deleted file mode 100644 index 2c1a270..0000000 --- a/data/brands/netvideo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Netvideo", - "brand_id": "netvideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/netview.json b/data/brands/netview.json deleted file mode 100644 index f49a0d5..0000000 --- a/data/brands/netview.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Netview", - "brand_id": "netview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B Series", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "H Series", - "NC 9800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "H SERIES", - "nc9800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NC 9800" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/netvision.json b/data/brands/netvision.json deleted file mode 100644 index 36e4c5d..0000000 --- a/data/brands/netvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Netvision", - "brand_id": "netvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NV743" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/netvue.json b/data/brands/netvue.json deleted file mode 100644 index 29275b0..0000000 --- a/data/brands/netvue.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Netvue", - "brand_id": "netvue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Vigil" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/netware.json b/data/brands/netware.json deleted file mode 100644 index 8c35f36..0000000 --- a/data/brands/netware.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Netware", - "brand_id": "netware", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/netwave.json b/data/brands/netwave.json deleted file mode 100644 index e33b733..0000000 --- a/data/brands/netwave.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "brand": "Netwave", - "brand_id": "netwave", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "003F0000063", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "003F0000063", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "APM-J011-WS", - "NETWAVE IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "APM-J011-WS" - ], - "type": "VLC", - "protocol": "http", - "port": 81, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "coolcam", - "Other", - "SIP-V150" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "easycam", - "n287", - "netwave ip", - "Other", - "Waterproof IP Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/network-digital-video.json b/data/brands/network-digital-video.json deleted file mode 100644 index f4b0e7b..0000000 --- a/data/brands/network-digital-video.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Network Digital Video", - "brand_id": "network-digital-video", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HDIPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HDIPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8000, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/network-video-recorder.json b/data/brands/network-video-recorder.json deleted file mode 100644 index 5d567d1..0000000 --- a/data/brands/network-video-recorder.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Network Video Recorder", - "brand_id": "network-video-recorder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/neufusion.json b/data/brands/neufusion.json deleted file mode 100644 index 925f5a8..0000000 --- a/data/brands/neufusion.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Neufusion", - "brand_id": "neufusion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "230W", - "ncs-330w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "330W", - "ncs-330w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/neugent.json b/data/brands/neugent.json deleted file mode 100644 index 20883a9..0000000 --- a/data/brands/neugent.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Neugent", - "brand_id": "neugent", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LP mjpeg DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream_jpeg.cgi?channel=[CHANNEL]&fps=1&multipart=1" - }, - { - "models": [ - "LPjpegDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/grabJPEG?06678" - }, - { - "models": [ - "LPmjpegDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream_jpeg.cgi?channel=[CHANNEL]&fps=1&multipart=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/neutron.json b/data/brands/neutron.json deleted file mode 100644 index 8b3d5f7..0000000 --- a/data/brands/neutron.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "brand": "Neutron", - "brand_id": "neutron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1955", - "211", - "212", - "giris", - "IPC222ER-F36", - "ipc541e", - "onwifi", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=6&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "iCamera", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "ICAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IPC222ER-F36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video3" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nevalley.json b/data/brands/nevalley.json deleted file mode 100644 index 82a2587..0000000 --- a/data/brands/nevalley.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nevalley", - "brand_id": "nevalley", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "China" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nevenoe.json b/data/brands/nevenoe.json deleted file mode 100644 index c198d74..0000000 --- a/data/brands/nevenoe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nevenoe", - "brand_id": "nevenoe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/neview.json b/data/brands/neview.json deleted file mode 100644 index f7da50a..0000000 --- a/data/brands/neview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Neview", - "brand_id": "neview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CHD-B1pv2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/newvision.json b/data/brands/newvision.json deleted file mode 100644 index 59cd14c..0000000 --- a/data/brands/newvision.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Newvision", - "brand_id": "newvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DC522", - "DC525", - "egocio", - "NW0027", - "Other", - "RC522" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "DC525" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexcom.json b/data/brands/nexcom.json deleted file mode 100644 index 54e7ed4..0000000 --- a/data/brands/nexcom.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "brand": "Nexcom", - "brand_id": "nexcom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "231F", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "2560" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "2MP-Box", - "3MP-Mobile", - "nex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/stream1" - }, - { - "models": [ - "543" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "LG-Android", - "One", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "NGMP0.3MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "S-CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexgadget.json b/data/brands/nexgadget.json deleted file mode 100644 index 9526d25..0000000 --- a/data/brands/nexgadget.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Nexgadget", - "brand_id": "nexgadget", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720", - "720p", - "E300", - "IPCAM 720", - "IPCAM 720 #3", - "Other", - "shed camera", - "X Series IP Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "C7823WIP", - "c7824W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "ICAM-629GB-W Nuovo", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexht.json b/data/brands/nexht.json deleted file mode 100644 index d15bb79..0000000 --- a/data/brands/nexht.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Nexht", - "brand_id": "nexht", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "86336" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "86336" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexsmart.json b/data/brands/nexsmart.json deleted file mode 100644 index b4c78ed..0000000 --- a/data/brands/nexsmart.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Nexsmart", - "brand_id": "nexsmart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Nr01", - "Other", - "View" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/nextech.json b/data/brands/nextech.json deleted file mode 100644 index e97281a..0000000 --- a/data/brands/nextech.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Nextech", - "brand_id": "nextech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "1080P", - "QC-3856" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexus-cctv.json b/data/brands/nexus-cctv.json deleted file mode 100644 index 3052e59..0000000 --- a/data/brands/nexus-cctv.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "brand": "Nexus Cctv", - "brand_id": "nexus-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "211VP", - "CAM2", - "NIP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "115VP", - "115vw", - "115VW", - "219DB", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "115vw", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "115VW", - "235FW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "152FW", - "2004PD", - "235FW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "188", - "235FW", - "B50VP", - "NEXUSCCTV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "213VW" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "231f", - "N-view" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "235", - "235FW", - "NEXUSCCTV", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - }, - { - "models": [ - "dome", - "NEXUSCCTV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Neu" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "NEXUSCCTV", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "NIP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "NIP2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpegcif.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexus.json b/data/brands/nexus.json deleted file mode 100644 index 448a953..0000000 --- a/data/brands/nexus.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "brand": "Nexus", - "brand_id": "nexus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "115vw", - "2004PD", - "3516D", - "alt", - "Other", - "WIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "235", - "501fw", - "IP-D50VP", - "N-VIEW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "360fw" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "501fw" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Nexus 5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/nexxt-solution.json b/data/brands/nexxt-solution.json deleted file mode 100644 index a899f6b..0000000 --- a/data/brands/nexxt-solution.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "brand": "Nexxt Solution", - "brand_id": "nexxt-solution", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "nexxt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/401" - }, - { - "models": [ - "nexxt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/501" - }, - { - "models": [ - "nexxt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/601" - }, - { - "models": [ - "nexxt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "Other", - "Xpy 320", - "XPY 320", - "Xpy 350", - "Xpy 50", - "Xpy 500", - "Xpy 520", - "XPY300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "xp320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "xp320" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Xpy 500", - "Xpy 520" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Xpy 500" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Xpy 500", - "Xpy 510" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Xpy 500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Xpy 520" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Xpy 520", - "xpy 530", - "Xpy 530" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "xpy 530" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Xpy 530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "xpy1200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "xpy300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/neye.json b/data/brands/neye.json deleted file mode 100644 index 044ad15..0000000 --- a/data/brands/neye.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Neye", - "brand_id": "neye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ABQ-6600G", - "Neye3c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/11" - }, - { - "models": [ - "Neye3c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/80" - } - ] -} \ No newline at end of file diff --git a/data/brands/neye3c.json b/data/brands/neye3c.json deleted file mode 100644 index 3a10035..0000000 --- a/data/brands/neye3c.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Neye3c", - "brand_id": "neye3c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Xmate" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ngm.json b/data/brands/ngm.json deleted file mode 100644 index 3e45b88..0000000 --- a/data/brands/ngm.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ngm", - "brand_id": "ngm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ngteco.json b/data/brands/ngteco.json deleted file mode 100644 index 23e25de..0000000 --- a/data/brands/ngteco.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ngteco", - "brand_id": "ngteco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NG-C4320A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/niante.json b/data/brands/niante.json deleted file mode 100644 index 8c18817..0000000 --- a/data/brands/niante.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Niante", - "brand_id": "niante", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X SERIES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/niceborn.json b/data/brands/niceborn.json deleted file mode 100644 index 6210e10..0000000 --- a/data/brands/niceborn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Niceborn", - "brand_id": "niceborn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BabyMonitor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/streamtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nicecam.json b/data/brands/nicecam.json deleted file mode 100644 index 04fe52c..0000000 --- a/data/brands/nicecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nicecam", - "brand_id": "nicecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080LVD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/niceview.json b/data/brands/niceview.json deleted file mode 100644 index 7071e56..0000000 --- a/data/brands/niceview.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Niceview", - "brand_id": "niceview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080L", - "1080WL-4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ipiha", - "nicecam420wl", - "NICECAM420WL", - "Talli 2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "NICECAM420WL" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/night-owl.json b/data/brands/night-owl.json deleted file mode 100644 index a3028e3..0000000 --- a/data/brands/night-owl.json +++ /dev/null @@ -1,398 +0,0 @@ -{ - "brand": "Night Owl", - "brand_id": "night-owl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "0v600-365-kd", - "3 m", - "54285708", - "CAM1", - "CAM2", - "cam-wnvr29-in", - "CAM-WNVR29-IN", - "CAM-WNVR2P-IN", - "cam-wnvr2p-ou", - "CAM-WNVR2P-OU", - "cam-wnvr2p-ou_20170811", - "cl-a10-841", - "Door Bell", - "Doorbell", - "Other", - "ov600", - "WCM-C20SD--BU-JUN", - "wcm-sd2pou-bu-v2", - "WD2CLM", - "WG4", - "WINR2P-OU", - "Wnec47", - "wnr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "2.W", - "CAM-WNVR2P-OU", - "DVR-BTD2-8-v2", - "DVR-THD30B", - "NIGHTOWL2", - "WNIP2 CAM2", - "WNIP-2LTA-BS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1_1.264" - }, - { - "models": [ - "2.W", - "CAM-WNVR2P-IN", - "DVR-THD30B", - "Other", - "WMVR-WNIP2", - "WNIP2 CAM3", - "WNIP-2LTA-BS", - "WNVR-WNIP2-V2-CN4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch2_1.264" - }, - { - "models": [ - "2.W", - "CAM-WNVR2P-IN", - "DVR-THD30B", - "main", - "WMVR-WNIP2", - "WNIP2 CAM3", - "WNIP-2LTA-BS", - "WNVR-BTWN8-v2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch3_1.264" - }, - { - "models": [ - "2.W", - "CAM-2", - "CAM-4", - "CAM-WNR2P-0U", - "CAM-WNR2P-OU", - "CAM-WNVR2P-OU", - "Other", - "WNR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "54285708", - "CAM-WNR2P-0U", - "CAM-WNR2P-OU", - "CAM-WNVR2P-OU", - "CAM-WNVR2P-OU_20170811", - "Other", - "wcm-c20sd-bu-jun", - "WDB-20", - "WEBCAM", - "WG4", - "WINR2P-OU", - "wnr2p-ou" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "54285708", - "CAM-WNR2P-0U", - "cam-wnr2p-ou", - "DoorBell", - "DVR-THD30B", - "Other", - "scotty", - "wcm-sd2pouv2", - "WG4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "54285708", - "CAM1", - "cam-wnr2p-0u", - "CAM-WNR2P-OU", - "CAM-WNVR2P-IN", - "CAM-WNVR2P-OU", - "Other", - "WCM-SD2POUv2", - "WDB-20", - "WNR2P-OU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "CAM-1", - "CAM-2", - "CAM-WNR2P-0U", - "CAM-WNR2P-OU", - "cam-wnvr2p-in", - "CAM-WNVR2P-IN", - "DVR-THD30B", - "NIGHTOWL", - "NIGHTOWL2", - "Other", - "WCM-PWNVR20W-BU-JUN", - "WG4", - "WINR2P-OU", - "wnr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "cam-ippt-hdw", - "cam-wnvr2p-ou_20170811", - "WCM-D2POUv2", - "WCM-SD2POU-BU-V2-JUN" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "CAM-IPPT-HDW", - "CAM-WNIP2LWA", - "DOORBELL", - "DVR-VDP2-8", - "WCM-SD2POU-BU-V2", - "WM-CAM-WNP2LBU", - "WMVR-WNIP2", - "WNIP2 (CAM1)", - "WNIP2 CAM3", - "WNIP-2LTA-BS", - "WNIP-2LTA-BS-U", - "WNIP-2LTAW-BS-U", - "WNIP8", - "WNIP-8LTA-BS-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.264" - }, - { - "models": [ - "CAM-WNVR2P-IN", - "Other", - "WCM-SD2POU-BU-V2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=2" - }, - { - "models": [ - "CAM-WNVR2P-OU_20170811", - "DVR-THD30B", - "IP-8LTA-B-V2", - "IP-BLTA-B-V2", - "QM-CAM-WNP2LBU", - "WNIP2-CM", - "WNIP-2LTA-BS-U", - "WNIP-2LTAW-BS-U", - "WNIP-8LTA-BS-U", - "wnp8lbu" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "FTD-4" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=5&stream=1" - }, - { - "models": [ - "FTD-4" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=3&stream=1" - }, - { - "models": [ - "NIGHTOWL" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "Other", - "WCM-PWNVR20W-BU-JUN" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "wcm-c20sd-bu-jun", - "WCM-C20W-BU" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "WCM-SD2P-OU V2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=jeremy.jarrad%40gmail.com&pwd=[PASSWORD]&strm=2" - }, - { - "models": [ - "WM-CAM-WAWNP2L", - "WNIP-TLTA-BS-U" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "WNVR-20B-4" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "BTD2", - "CAM2", - "DVR-FTD4-8", - "DVR-THD30B", - "FTD4", - "Other", - "WM-CAM-WAWNP2L", - "wmvr-wnip2", - "WNIP2-CM", - "WNIP-2lta-bs" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/301" - } - ] -} \ No newline at end of file diff --git a/data/brands/nighteye.json b/data/brands/nighteye.json deleted file mode 100644 index 73a5238..0000000 --- a/data/brands/nighteye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nighteye", - "brand_id": "nighteye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SIP-E03-200STA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nightwatcher.json b/data/brands/nightwatcher.json deleted file mode 100644 index da99b45..0000000 --- a/data/brands/nightwatcher.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Nightwatcher", - "brand_id": "nightwatcher", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nw750" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "nw750", - "NW750" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nihon.json b/data/brands/nihon.json deleted file mode 100644 index eaf8c18..0000000 --- a/data/brands/nihon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Nihon", - "brand_id": "nihon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wnipt40n" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - }, - { - "models": [ - "WNIPT40N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nikodem.json b/data/brands/nikodem.json deleted file mode 100644 index 11eecea..0000000 --- a/data/brands/nikodem.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nikodem", - "brand_id": "nikodem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "axp" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nilox.json b/data/brands/nilox.json deleted file mode 100644 index a3ac275..0000000 --- a/data/brands/nilox.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Nilox", - "brand_id": "nilox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16NX2601FI002", - "16NX2644PT001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "16NX2644PT001", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "16NX2644PT001", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "16NX2644PT001", - "Netwideye100", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/nimbus.json b/data/brands/nimbus.json deleted file mode 100644 index 5d508d8..0000000 --- a/data/brands/nimbus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nimbus", - "brand_id": "nimbus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nip.json b/data/brands/nip.json deleted file mode 100644 index 71fa3b6..0000000 --- a/data/brands/nip.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "brand": "Nip", - "brand_id": "nip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "024", - "NIP-14", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "NIP-004500-KMTLU" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP-004500-KMTLU", - "NIP-14" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-004500-KMTLU", - "NIP-014145-KMSLE", - "NIP-078219-AAAAE", - "NIP-094324-EEBCB", - "NIP-122960-AECFC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-075007-UPHTF" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "NIP-106597-CEADA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "NIP-11BGPW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-11BGPW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nishimon.json b/data/brands/nishimon.json deleted file mode 100644 index 59e66fd..0000000 --- a/data/brands/nishimon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nishimon", - "brand_id": "nishimon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BB-HCM580" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/nisuta.json b/data/brands/nisuta.json deleted file mode 100644 index 2734e21..0000000 --- a/data/brands/nisuta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nisuta", - "brand_id": "nisuta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nitedevil.json b/data/brands/nitedevil.json deleted file mode 100644 index d460a8a..0000000 --- a/data/brands/nitedevil.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nitedevil", - "brand_id": "nitedevil", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "24c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1240, - "url": "/ch01/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/niutek.json b/data/brands/niutek.json deleted file mode 100644 index 8053d04..0000000 --- a/data/brands/niutek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Niutek", - "brand_id": "niutek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "niutek 4.0d" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/niv.json b/data/brands/niv.json deleted file mode 100644 index a7b5a4a..0000000 --- a/data/brands/niv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Niv", - "brand_id": "niv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "White" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nivian.json b/data/brands/nivian.json deleted file mode 100644 index be08187..0000000 --- a/data/brands/nivian.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Nivian", - "brand_id": "nivian", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2ow" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "IP_CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "KIT413W", - "NV-IPCU116A-2W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "KIT413W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "nvs-ipc-os2b" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel0" - }, - { - "models": [ - "nvs-ipc-os2b" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 5543, - "url": "/live/channel1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nixzen.json b/data/brands/nixzen.json deleted file mode 100644 index a71d59e..0000000 --- a/data/brands/nixzen.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Nixzen", - "brand_id": "nixzen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "150H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "h803", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nlc-cam.json b/data/brands/nlc-cam.json deleted file mode 100644 index b63da13..0000000 --- a/data/brands/nlc-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nlc Cam", - "brand_id": "nlc-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/nobelic.json b/data/brands/nobelic.json deleted file mode 100644 index c28aa09..0000000 --- a/data/brands/nobelic.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Nobelic", - "brand_id": "nobelic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2421f-msd" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "nblc-1210f-wmsd/p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Video" - }, - { - "models": [ - "nblc-1210f-wmsd/p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "NBLC-2421F-MSD" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "NBLC-2431F-ASD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/nobitech.json b/data/brands/nobitech.json deleted file mode 100644 index 972908d..0000000 --- a/data/brands/nobitech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Nobitech", - "brand_id": "nobitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WS-Q5A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "WS-Q5A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/nokia.json b/data/brands/nokia.json deleted file mode 100644 index 2f21982..0000000 --- a/data/brands/nokia.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Nokia", - "brand_id": "nokia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/video?submenu=mjpg" - }, - { - "models": [ - "7.2", - "850" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Lumia 635" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Lumia 930" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/noname-chinese.json b/data/brands/noname-chinese.json deleted file mode 100644 index 98718c5..0000000 --- a/data/brands/noname-chinese.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "brand": "Noname Chinese", - "brand_id": "noname-chinese", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "530W-A10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "chinese" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "DN-16024" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "NH060-3B2020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/none.json b/data/brands/none.json deleted file mode 100644 index 6ec084b..0000000 --- a/data/brands/none.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "None", - "brand_id": "none", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/nonwee.json b/data/brands/nonwee.json deleted file mode 100644 index f022726..0000000 --- a/data/brands/nonwee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nonwee", - "brand_id": "nonwee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SoZ3N0PdL2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/nooie-360.json b/data/brands/nooie-360.json deleted file mode 100644 index 896d63b..0000000 --- a/data/brands/nooie-360.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nooie 360", - "brand_id": "nooie-360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC100B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/norden.json b/data/brands/norden.json deleted file mode 100644 index cec7525..0000000 --- a/data/brands/norden.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Norden", - "brand_id": "norden", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Eyenor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/norelco.json b/data/brands/norelco.json deleted file mode 100644 index 476a4c6..0000000 --- a/data/brands/norelco.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Norelco", - "brand_id": "norelco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SC-303-XD", - "SC-304-XB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/northern.json b/data/brands/northern.json deleted file mode 100644 index 752c046..0000000 --- a/data/brands/northern.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Northern", - "brand_id": "northern", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/snl/live/1/1" - }, - { - "models": [ - "IP4", - "NTH-IP3W", - "nth-ip4w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/northq.json b/data/brands/northq.json deleted file mode 100644 index ac9f9c1..0000000 --- a/data/brands/northq.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Northq", - "brand_id": "northq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9600", - "NQ-9006", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "NQ-9006", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "NQ-9006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "NQ-9006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NQ-9006", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/novate.json b/data/brands/novate.json deleted file mode 100644 index ec78afc..0000000 --- a/data/brands/novate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Novate", - "brand_id": "novate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TS898sH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/novell.json b/data/brands/novell.json deleted file mode 100644 index e68e745..0000000 --- a/data/brands/novell.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Novell", - "brand_id": "novell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/novicam.json b/data/brands/novicam.json deleted file mode 100644 index 9deeff2..0000000 --- a/data/brands/novicam.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Novicam", - "brand_id": "novicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "133", - "N12W", - "n22w", - "nc29wp", - "nc30", - "novicam n22w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "basic", - "basic 30", - "Basic30", - "NC13WP", - "NC24FP", - "PRO 22", - "pro 225" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "FR1208", - "NC49WP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/novodio.json b/data/brands/novodio.json deleted file mode 100644 index d3147de..0000000 --- a/data/brands/novodio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Novodio", - "brand_id": "novodio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "smartCam HD+" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/novomoskow.json b/data/brands/novomoskow.json deleted file mode 100644 index ecc8c19..0000000 --- a/data/brands/novomoskow.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Novomoskow", - "brand_id": "novomoskow", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/novus.json b/data/brands/novus.json deleted file mode 100644 index 032bbd0..0000000 --- a/data/brands/novus.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Novus", - "brand_id": "novus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1 mpx", - "2400", - "NVIP-3DN3012V/IR-1P", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "321", - "7000", - "7020SD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "7000", - "nvip-1dn3000h", - "NVIP-3DN3012V/IR-1P", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Nasza", - "NVIP-TDN5401C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "NVIP-2C2011D-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/h264" - }, - { - "models": [ - "NVIP-2C2011D-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "NVIP-2H-6401", - "NVIP-2H-6502M/F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "NVIP-6401F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile2" - }, - { - "models": [ - "NVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264?ch=1&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/nram.json b/data/brands/nram.json deleted file mode 100644 index ccf5a6c..0000000 --- a/data/brands/nram.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Nram", - "brand_id": "nram", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR-VD123-POE", - "UK-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ntse.json b/data/brands/ntse.json deleted file mode 100644 index b6b89ff..0000000 --- a/data/brands/ntse.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ntse", - "brand_id": "ntse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/nufebs.json b/data/brands/nufebs.json deleted file mode 100644 index e3b4d84..0000000 --- a/data/brands/nufebs.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Nufebs", - "brand_id": "nufebs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c-20", - "C20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "C20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "TV-GKXMC-C20-4MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nutri-vision.json b/data/brands/nutri-vision.json deleted file mode 100644 index 3d74d95..0000000 --- a/data/brands/nutri-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nutri Vision", - "brand_id": "nutri-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Petoneer" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nuvico.json b/data/brands/nuvico.json deleted file mode 100644 index c584e54..0000000 --- a/data/brands/nuvico.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Nuvico", - "brand_id": "nuvico", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg.cgi?refresh=0&channel=[CHANNEL]&id=[USERNAME]&pass=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]&oldbrowser=1" - }, - { - "models": [ - "EasyNet DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "getjpeg.cgi?[USERNAME]&ch[CHANNEL]" - }, - { - "models": [ - "EVL-400N" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "monitor.cgi?Channel=[CHANNEL]&Audio=0000&Live=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/nv-mbw.json b/data/brands/nv-mbw.json deleted file mode 100644 index b720b65..0000000 --- a/data/brands/nv-mbw.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nv-mbw", - "brand_id": "nv-mbw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NV-MBW-PI802-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/nvr.json b/data/brands/nvr.json deleted file mode 100644 index 071f72a..0000000 --- a/data/brands/nvr.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "brand": "Nvr", - "brand_id": "nvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360", - "ht56", - "K92H", - "K93H", - "k9601w", - "k9604", - "K9604-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "8 Channel", - "dahua", - "IPC", - "Other", - "SMART", - "Snapvision", - "Some" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "C160407-P03", - "cv-nhk04m-w", - "cv-nhk04-w", - "Elotec K9604-W", - "H.264 WIRELESS P2P NVR", - "Home", - "K8204-W", - "K8208-W", - "K9604-W", - "K9608-W", - "L024", - "NVR-7504P-P4", - "Other", - "Othermy cam", - "vsd", - "WNV14" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EXIN-L024", - "L024" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "HT10", - "k29h", - "K92H", - "K93H", - "k9601w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "k8208-w", - "K9604-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "K9604-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "LENOVO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "LENOVO", - "xemey" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nvsip.json b/data/brands/nvsip.json deleted file mode 100644 index b52dc4b..0000000 --- a/data/brands/nvsip.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "brand": "Nvsip", - "brand_id": "nvsip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C6F0SoZ3N0PdL2", - "H210", - "nvsip-ipc", - "SY-500P-SG4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "HI3518", - "nvsip-ipc", - "Other", - "R11", - "SY-500P-SG4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "ipc", - "nvsip-ipc", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8854, - "url": "/live0.264?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8854, - "url": "/live2.264?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8854, - "url": "/live4.264?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8854, - "url": "/live6.264?user=[USERNAME]&passwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nvt.json b/data/brands/nvt.json deleted file mode 100644 index 73a8823..0000000 --- a/data/brands/nvt.json +++ /dev/null @@ -1,483 +0,0 @@ -{ - "brand": "Nvt", - "brand_id": "nvt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "014", - "015", - "021", - "024", - "107", - "108", - "A3-X20RJ US", - "ABQ-A1", - "BNP-201", - "carcam", - "iCSee", - "ip572b", - "onfiv", - "Other", - "TechEge_XM-IP511SWTV-20", - "XM530 R80X50-PQ 8M", - "XM530_R50X20-PQ_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=1.sdp" - }, - { - "models": [ - "0173f6393fb22423", - "100m", - "102", - "102-Ulaz", - "1080", - "1080p", - "1080pHD", - "121", - "16032B", - "1882", - "212", - "2600", - "264", - "2MP", - "2mpDome", - "3024pb-120h1", - "555", - "5m-1", - "6024mw-ip202", - "6024PB-IP201", - "703ERC-T", - "7340", - "9048mw-I202", - "9204", - "ABQ-A1", - "ABQ-A8", - "Anbe 48 IR LED", - "ankke", - "Anran", - "APP", - "ar-24nr-wifi", - "AZISHN", - "Back Yard", - "baliecam", - "BC6-5MP-WFX", - "BES-6004MW", - "Besde", - "besder", - "Beseder", - "blas", - "BTEC", - "buiten 3", - "buiten 4", - "buiten1", - "buiten2", - "BulbCAM", - "bullet", - "CAM-08", - "cam1", - "CAM1", - "CameraRUA", - "CAMO!", - "CAMO1", - "Camoldalt", - "can line1", - "cbncgnb", - "CCTV", - "CEFCC", - "china", - "China", - "CMS", - "DEATTI", - "dvr", - "Egunooye", - "escam", - "ESCAM BRICK", - "escamqf500", - "Esquina", - "ezviz", - "F Pourch East", - "G-LENZ Security", - "H264", - "Haivision", - "HBD12-P", - "hc612", - "HD MEGAPIXIL", - "heanworld", - "HiSp1080", - "HiSpeed1080", - "hmp88B10", - "holtje", - "homemake", - "HP-55A20PE", - "HS1080", - "iCSee", - "ICSee", - "ICSEE", - "intelbras", - "ip camears zimol", - "IP-1000", - "IP66", - "IPC XIB 3 V 1.1", - "juch", - "K5-7110-F", - "kop", - "lato2", - "leaving", - "Liiketunnistin", - "LionVise", - "loosafe", - "lp cam", - "ltids-62drc-s", - "Magazijn", - "Misc poe Camera", - "Misecur", - "Model S", - "moja", - "Motoros", - "NCIP9", - "ONVIF Definition", - "Other", - "Outside", - "partizan_Hi", - "Pea Shooter", - "pod", - "Poort", - "PST-IPC102CP", - "ptz", - "R80x20", - "R80X20-PQ", - "RC50H20", - "S39", - "sabrina", - "SC10IP", - "sg-5036", - "SMAR", - "smart", - "SP-014", - "sunba. me", - "sunba601", - "Sunluxy", - "Talos", - "Tantos", - "Techage \\", - "TECHE", - "Techege", - "Techview", - "top", - "TOP-201", - "TOP-308", - "Topcam1080p", - "TVPSii", - "unitoptek", - "uparta", - "USA-A1", - "USGDK7088HGPw", - "V4.02", - "vesta", - "Vesta5222v", - "VIP3230", - "W530-N100", - "wi-fi", - "Win 9373 IP", - "XM530_R80X20-PQ_8M", - "XM530_R80XD30-PQ_8M", - "xyz", - "ysy-3023i-1", - "YVV365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "121212", - "236", - "39737", - "507", - "50H40PL", - "53X13_SWL", - "720", - "720pa", - "720pb", - "a aszx", - "AB-1", - "Abkalbe", - "ABQ-A1", - "Anran", - "B and W", - "baixa resol", - "baliecamer", - "BESDER", - "Button", - "china", - "China Cam", - "dff", - "Eghunooye", - "Fuluva", - "Game", - "G-LENZ SECURITY", - "H264", - "HBD12-P", - "heanworld", - "HEANWORLD", - "HI-2425-POI", - "homey", - "ICSEE", - "ip cam lo res", - "IP-005", - "jeremy", - "Liege", - "loosafe", - "LX-50H40PL", - "min", - "neto", - "NoName", - "NVTdunno", - "Other", - "partizan", - "Pavilhao N", - "QF003", - "R80", - "R80x20 low res", - "Rafiq2", - "sg-5036", - "sisview", - "unitoptek", - "V100", - "WiFi IP", - "XM530_50X30", - "XM530_R80X20-PQ_8M", - "Yes" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "720p", - "MISECU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "8872", - "gw78", - "proyek" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mode=real&idc=1&ids=1" - }, - { - "models": [ - "ANKKE", - "ICSEE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "China", - "ICSee", - "ICSEE", - "misecu", - "Other", - "WS-TR2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp" - }, - { - "models": [ - "China" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streamtype=0" - }, - { - "models": [ - "F001", - "ICSEE", - "Other", - "XM530_50X50-WG_8M", - "XM530_R50X20-PQ_8M", - "XM530_R80X50-PQ_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "ICSEE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "ICSEE", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "JA-A1K", - "jooan f4", - "lenovo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "onwif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other", - "POE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream/0:1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8899, - "url": "/cam/realmonitor" - }, - { - "models": [ - "poe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1&protocol=unicast&onvif=0.sdp" - }, - { - "models": [ - "ta-xm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0&protocol=unicast.sdp" - }, - { - "models": [ - "XM530 (China)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "XM530 R80X50-PQ 8M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "XM530_R50X20-PQ_8M" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/nwp.json b/data/brands/nwp.json deleted file mode 100644 index 06cc24a..0000000 --- a/data/brands/nwp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Nwp", - "brand_id": "nwp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.0mp" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/nwsvr.json b/data/brands/nwsvr.json deleted file mode 100644 index 2597d4a..0000000 --- a/data/brands/nwsvr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Nwsvr", - "brand_id": "nwsvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002jroc", - "B Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/obs.json b/data/brands/obs.json deleted file mode 100644 index db8865b..0000000 --- a/data/brands/obs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Obs", - "brand_id": "obs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OBS Stream" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1937, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/oceantools.json b/data/brands/oceantools.json deleted file mode 100644 index 3fab5e4..0000000 --- a/data/brands/oceantools.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Oceantools", - "brand_id": "oceantools", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C3-10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/oco.json b/data/brands/oco.json deleted file mode 100644 index 6de3dde..0000000 --- a/data/brands/oco.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Oco", - "brand_id": "oco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Pro Dome V2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/octopi.json b/data/brands/octopi.json deleted file mode 100644 index 1913286..0000000 --- a/data/brands/octopi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Octopi", - "brand_id": "octopi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C920" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "//webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/octoprint.json b/data/brands/octoprint.json deleted file mode 100644 index fd8522f..0000000 --- a/data/brands/octoprint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Octoprint", - "brand_id": "octoprint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "Pi3", - "Pi4", - "RP4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ocular.json b/data/brands/ocular.json deleted file mode 100644 index 563d72d..0000000 --- a/data/brands/ocular.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ocular", - "brand_id": "ocular", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/oculus.json b/data/brands/oculus.json deleted file mode 100644 index 073deef..0000000 --- a/data/brands/oculus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Oculus", - "brand_id": "oculus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVIP2MVDFW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/odesys.json b/data/brands/odesys.json deleted file mode 100644 index 7a6dfc2..0000000 --- a/data/brands/odesys.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Odesys", - "brand_id": "odesys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OS-M200B", - "OS-M201IR", - "OS-M300DNV" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "OS-M201IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "media/media.amp" - }, - { - "models": [ - "OS-M201IR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/oem.json b/data/brands/oem.json deleted file mode 100644 index 3b6694d..0000000 --- a/data/brands/oem.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Oem", - "brand_id": "oem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IP_CAM", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Xseries" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/oemcameras.json b/data/brands/oemcameras.json deleted file mode 100644 index 690dc9a..0000000 --- a/data/brands/oemcameras.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "brand": "Oemcameras", - "brand_id": "oemcameras", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EDU", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "N1000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/off.json b/data/brands/off.json deleted file mode 100644 index e4e9b89..0000000 --- a/data/brands/off.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Off", - "brand_id": "off", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/office-one.json b/data/brands/office-one.json deleted file mode 100644 index e1af705..0000000 --- a/data/brands/office-one.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "brand": "Office One", - "brand_id": "office-one", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM-I11123BK", - "IP-900", - "Other", - "P-910", - "SC-10IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CM-I11123BK", - "ip-900", - "IP-900", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "CM-I11123BK", - "DL-10IP", - "IP-900", - "Other", - "SC-10IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DL-10IP", - "ip900", - "IP-900", - "IPC", - "Other", - "SC-10IP", - "SC-10IP (SETUP)", - "SC-10P", - "SCJ-10IP", - "SP-10IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "ip900", - "IP-900", - "Other", - "SC-10IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IP900" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-900", - "IP-900-KMART" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "IP-900", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-900", - "IP-900-KMART", - "IP-99", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "IP-900", - "IP-900-KMART", - "SC-101P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "IP-900", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "IP-99", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Office" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "SC-101P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "HighResolutionVideo" - }, - { - "models": [ - "SC-10IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SCP10IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "SP-10IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/officeone.json b/data/brands/officeone.json deleted file mode 100644 index b3d54ed..0000000 --- a/data/brands/officeone.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Officeone", - "brand_id": "officeone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC 10", - "SC10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "SC10IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ohwoai.json b/data/brands/ohwoai.json deleted file mode 100644 index f0226da..0000000 --- a/data/brands/ohwoai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ohwoai", - "brand_id": "ohwoai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ultra HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/oltec.json b/data/brands/oltec.json deleted file mode 100644 index 8d2e0f0..0000000 --- a/data/brands/oltec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Oltec", - "brand_id": "oltec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc-456" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IPC-VR-362" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/olympia.json b/data/brands/olympia.json deleted file mode 100644 index c79708d..0000000 --- a/data/brands/olympia.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Olympia", - "brand_id": "olympia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC 720P", - "ic600", - "OC 1280 P", - "OC800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IP 600" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/omega-power.json b/data/brands/omega-power.json deleted file mode 100644 index 24dfff5..0000000 --- a/data/brands/omega-power.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Omega Power", - "brand_id": "omega-power", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Omega-16" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/omega.json b/data/brands/omega.json deleted file mode 100644 index 575e53d..0000000 --- a/data/brands/omega.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Omega", - "brand_id": "omega", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "51P22-6P", - "PTZ-21P4-3P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/omenex.json b/data/brands/omenex.json deleted file mode 100644 index 81d3fe2..0000000 --- a/data/brands/omenex.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Omenex", - "brand_id": "omenex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ATHOME", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/omni.json b/data/brands/omni.json deleted file mode 100644 index 7c5d4a3..0000000 --- a/data/brands/omni.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Omni", - "brand_id": "omni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KNC-p3LR4IR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "KNC-p3LR4IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/omnibase.json b/data/brands/omnibase.json deleted file mode 100644 index 8c677ba..0000000 --- a/data/brands/omnibase.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Omnibase", - "brand_id": "omnibase", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "minidome4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/omniview.json b/data/brands/omniview.json deleted file mode 100644 index bb3e4b5..0000000 --- a/data/brands/omniview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Omniview", - "brand_id": "omniview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/omnivision.json b/data/brands/omnivision.json deleted file mode 100644 index 2a71a55..0000000 --- a/data/brands/omnivision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Omnivision", - "brand_id": "omnivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OV2640" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/stream" - }, - { - "models": [ - "OV5647" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/omny.json b/data/brands/omny.json deleted file mode 100644 index 6f3610b..0000000 --- a/data/brands/omny.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Omny", - "brand_id": "omny", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "606M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "606M PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "606M PRO", - "A55" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "606M PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "miniDome13M12V", - "miniptz2t-2db", - "OMNY-miniDome13M12V", - "ViBe2V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/omp.json b/data/brands/omp.json deleted file mode 100644 index 4769330..0000000 --- a/data/brands/omp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Omp", - "brand_id": "omp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SN-IPC-7042CSW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/oncam-grandeye.json b/data/brands/oncam-grandeye.json deleted file mode 100644 index 54d6463..0000000 --- a/data/brands/oncam-grandeye.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Oncam Grandeye", - "brand_id": "oncam-grandeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EvoMini", - "grandeye", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Grandeye", - "GRANDEYE", - "ip360", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "GRANDEYE", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/onepixel.json b/data/brands/onepixel.json deleted file mode 100644 index e775818..0000000 --- a/data/brands/onepixel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Onepixel", - "brand_id": "onepixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OPXP-5371" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/oneteck.json b/data/brands/oneteck.json deleted file mode 100644 index 51f1996..0000000 --- a/data/brands/oneteck.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Oneteck", - "brand_id": "oneteck", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DM-23220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video2.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream.cgi?stream=MainStream&Audio=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/oniv.json b/data/brands/oniv.json deleted file mode 100644 index ce56ce3..0000000 --- a/data/brands/oniv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Oniv", - "brand_id": "oniv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/onix-usa.json b/data/brands/onix-usa.json deleted file mode 100644 index 28570f8..0000000 --- a/data/brands/onix-usa.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Onix Usa", - "brand_id": "onix-usa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-827/2811", - "IP-827DN/2811" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam0_0" - }, - { - "models": [ - "IPD-3MIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "IPD-3MIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "IPD-3MIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/onvey.json b/data/brands/onvey.json deleted file mode 100644 index 0162110..0000000 --- a/data/brands/onvey.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Onvey", - "brand_id": "onvey", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DGF565" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "f344", - "ght675" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "GF567" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/onvif.json b/data/brands/onvif.json deleted file mode 100644 index 0e98394..0000000 --- a/data/brands/onvif.json +++ /dev/null @@ -1,425 +0,0 @@ -{ - "brand": "Onvif", - "brand_id": "onvif", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001111", - "23344", - "380", - "3805P", - "3851", - "4312B", - "49336059", - "57ii", - "asecam", - "Cotier_TV631W-ip", - "d53m02", - "DONPHIA", - "Euronet", - "GRANSTREAM", - "GW5050IP", - "IP03-J", - "ipc6200", - "IPD-E2A5L18-BS", - "m2-p488", - "Main", - "NAUM", - "NAUM2", - "NAUM3", - "ONVIF CAMERA", - "ONVIF_IPNC", - "Other", - "patton", - "POE-661B", - "PROFILE S", - "PROVISION ISR", - "SC3V-1", - "techma", - "TH32E-ONVIF", - "TH38M-ONVIF-P2P", - "V380", - "v380 pro", - "V380-Q10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "342", - "5MPtopsee", - "5MPTOPSEE", - "960p", - "960Pchina spot 2019", - "d53m02", - "diamond", - "gw security 5mg", - "gwsecurity 5mb", - "IF52W93", - "ipc6200", - "IPC-F20M", - "IPD-D53L02-BS", - "IPD-E2A5L18-BS", - "JH720e1", - "LBH30SE200W4", - "lsvision", - "model 2000", - "ONVIF_IPNC", - "Other", - "rhbr", - "Secureye", - "westmile", - "zsvdr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "5MPTOPSEE", - "Other", - "VNcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "9411", - "DomeCam", - "DONPHIA", - "eyeonet4k", - "Other", - "PROVISION ISR", - "Sibell IP", - "Techson S1Pro52030IM", - "TeleEye", - "tvt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "admin", - "Other", - "Profile S", - "PTZ", - "SC3V-1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "AK-HD54F245", - "gate 1", - "granstream", - "MC400L", - "NDR-405-P-BGZ20", - "oma", - "ONVIF_IPNC", - "Other", - "PTXDome1", - "PTZ", - "S3VC", - "sc3v", - "SV-B06POE-1080P-A", - "V380", - "v380 pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0" - }, - { - "models": [ - "DOMECAM", - "IF52W93", - "IPC", - "Other", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0" - }, - { - "models": [ - "DOMECAM", - "IPC-model", - "ONVIF CAMERA", - "Other", - "Other_onvif", - "profile s", - "PTZ", - "S3VC", - "SC3V-1", - "shenzeh", - "VESKYS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ec107-x15", - "Model S", - "Other", - "v380", - "V380", - "V380 PRO" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "IF52W93", - "IPC-HDBW4431R-ZS", - "IPHD", - "Other", - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Ipc", - "V380 PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - }, - { - "models": [ - "ipc2122", - "V380-Q10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IPG-7920PHM-AI/T7H", - "Other", - "QD900", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/0/MAIN" - }, - { - "models": [ - "JH720E1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "MBDZ-30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "MC400L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "NLISTED", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "ONVIF Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Other", - "TH38M-ONVIF-P2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "profile s", - "PTZ", - "PTZ1", - "V380 PRO", - "YN-AJ8079R-POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/stream1" - }, - { - "models": [ - "Shenzhen Jiaxinjie Technology Co. Ltd", - "V380", - "V380 PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "TH38M-ONVIF-P2P", - "VESKYS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "UNLISTED", - "V380", - "Veskys" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_1" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "v380 pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "v380 pro", - "XY WIFI CAM OD4MMV380 PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "Weird" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/onwote.json b/data/brands/onwote.json deleted file mode 100644 index 56298be..0000000 --- a/data/brands/onwote.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "brand": "Onwote", - "brand_id": "onwote", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4K Bullet", - "h800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0" - }, - { - "models": [ - "5 MP POE IP Camera", - "5 MP POE Security Camera", - "5MP", - "NULL", - "Other", - "PoE 5 MP Camera", - "YC-9204K", - "YC-920AHZ37" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/h264_stream" - }, - { - "models": [ - "5MP POE", - "YC-9204K", - "ym800n-n" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/h264.sdp" - }, - { - "models": [ - "5MP POE", - "IP Cameras", - "K9604-w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "onw" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 30050, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "onw" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 30050, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PA3010" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "pa3013-w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/oossxx.json b/data/brands/oossxx.json deleted file mode 100644 index 240a4a9..0000000 --- a/data/brands/oossxx.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "brand": "Oossxx", - "brand_id": "oossxx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "5033SW", - "960", - "hd nvr", - "HD NVR", - "K8208-W", - "k9608", - "K9608-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "5033SW", - "960", - "HD NVR", - "K8208-W", - "k9608", - "k9608-2w", - "K9608-2W", - "K9608-Home", - "K9608-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "5323-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "HD IPCAM", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.264" - }, - { - "models": [ - "Home", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "K8208-W", - "k9608-2w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/sp.cgi?chn=1&quality=2500&rate=2500&u=[USERNAME]&p" - }, - { - "models": [ - "k9608", - "k9608-2w" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=8&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "OSX-CAW10808" - ], - "type": "JPEG", - "protocol": "http", - "port": 443, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/sp.cgi?chn=0&quality=2500&rate=2500&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/sp.cgi?chn=0&quality=1&rate=15&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/opax.json b/data/brands/opax.json deleted file mode 100644 index e82722b..0000000 --- a/data/brands/opax.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Opax", - "brand_id": "opax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AC-704" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "AC-704" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "AC-704" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/openeye.json b/data/brands/openeye.json deleted file mode 100644 index 12f077b..0000000 --- a/data/brands/openeye.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Openeye", - "brand_id": "openeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM-610", - "CM-710", - "CM-715A", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - } - ] -} \ No newline at end of file diff --git a/data/brands/openipc.json b/data/brands/openipc.json deleted file mode 100644 index 95e9a26..0000000 --- a/data/brands/openipc.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "brand": "OpenIPC", - "brand_id": "openipc", - "last_updated": "2025-11-11", - "source": "openipc.org", - "website": "https://openipc.org", - "entries": [ - { - "models": [ - "MAJESTIC STREAMER", - "Generic", - "Majestic", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "Main stream (video0) - Majestic streamer default" - }, - { - "models": [ - "MAJESTIC STREAMER", - "Generic", - "Majestic", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1", - "notes": "Sub stream (video1) - Majestic streamer" - }, - { - "models": [ - "HISILICON", - "Hi3516EV200", - "Hi3516EV300", - "Hi3516CV500", - "Hi3516DV300", - "Hi3518EV200", - "Hi3518EV300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "HiSilicon SoC main stream" - }, - { - "models": [ - "HISILICON", - "Hi3516EV200", - "Hi3516EV300", - "Hi3516CV500", - "Hi3516DV300", - "Hi3518EV200", - "Hi3518EV300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1", - "notes": "HiSilicon SoC sub stream" - }, - { - "models": [ - "GOKE", - "GK7205V200", - "GK7205V300", - "GK7605V100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "Goke SoC main stream" - }, - { - "models": [ - "GOKE", - "GK7205V200", - "GK7205V300", - "GK7605V100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1", - "notes": "Goke SoC sub stream" - }, - { - "models": [ - "INGENIC", - "T31", - "T30", - "T20", - "T10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "Ingenic SoC main stream" - }, - { - "models": [ - "INGENIC", - "T31", - "T30", - "T20", - "T10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1", - "notes": "Ingenic SoC sub stream" - }, - { - "models": [ - "SIGMASTAR", - "SSC325", - "SSC335", - "SSC337", - "SSC338Q" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "SigmaStar SoC main stream" - }, - { - "models": [ - "SIGMASTAR", - "SSC325", - "SSC335", - "SSC337", - "SSC338Q" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1", - "notes": "SigmaStar SoC sub stream" - }, - { - "models": [ - "NOVATEK", - "NT98562", - "NT98566" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "Novatek SoC main stream" - }, - { - "models": [ - "XIONGMAI", - "XM530", - "XM550" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "XiongMai SoC main stream" - }, - { - "models": [ - "AMBARELLA", - "S2L", - "S3L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=0", - "notes": "Ambarella SoC main stream" - }, - { - "models": [ - "Generic", - "Majestic", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg", - "notes": "JPEG snapshot" - }, - { - "models": [ - "Generic", - "Majestic", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.html", - "notes": "MJPEG stream" - }, - { - "models": [ - "Generic", - "Majestic", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mp4", - "notes": "Fragmented MP4 video" - }, - { - "models": [ - "Generic", - "Majestic", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/audio.opus", - "notes": "Opus audio stream" - }, - { - "models": [ - "Generic", - "Majestic", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/audio.mp3", - "notes": "MP3 audio stream" - }, - { - "models": [ - "Generic", - "Majestic", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/audio.m4a", - "notes": "AAC audio stream" - } - ] -} diff --git a/data/brands/openmiko.json b/data/brands/openmiko.json deleted file mode 100644 index d85f439..0000000 --- a/data/brands/openmiko.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "OpenMiko", - "brand_id": "openmiko", - "last_updated": "2025-11-11", - "source": "github.com/openmiko/openmiko", - "website": "https://github.com/openmiko/openmiko", - "entries": [ - { - "models": [ - "WYZE CAM V2", - "WyzeCam V2", - "Wyze V2", - "WYZEC1-JZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/video3_unicast", - "notes": "WyzeCam V2 with OpenMiko firmware - NON-STANDARD PORT 8554" - }, - { - "models": [ - "XIAOMI XIAOFANG 1S", - "Xiaofang 1S", - "XiaoFang 1S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/video3_unicast", - "notes": "Xiaomi Xiaofang 1S with OpenMiko - NON-STANDARD PORT 8554" - }, - { - "models": [ - "ISMARTALARM SPOT+", - "iSmartAlarm Spot+", - "Spot+" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/video3_unicast", - "notes": "iSmartAlarm Spot+ with OpenMiko - NON-STANDARD PORT 8554" - }, - { - "models": [ - "INGENIC T20", - "Generic T20", - "T20 based", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/video3_unicast", - "notes": "Generic Ingenic T20 based cameras - NON-STANDARD PORT 8554" - } - ] -} diff --git a/data/brands/openwrt.json b/data/brands/openwrt.json deleted file mode 100644 index d63c069..0000000 --- a/data/brands/openwrt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Openwrt", - "brand_id": "openwrt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mjpeg_streamer" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 28080, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/opexia.json b/data/brands/opexia.json deleted file mode 100644 index 3507c21..0000000 --- a/data/brands/opexia.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Opexia", - "brand_id": "opexia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CPSx", - "opc", - "op-cs01" - ], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "OPCS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "OPCS" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "OP-MS01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/optica-video.json b/data/brands/optica-video.json deleted file mode 100644 index a68beae..0000000 --- a/data/brands/optica-video.json +++ /dev/null @@ -1,204 +0,0 @@ -{ - "brand": "Optica Video", - "brand_id": "optica-video", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "07PTZ", - "FC-5511W", - "FI-9821W", - "Other", - "piha2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "07PTZ", - "B-202", - "D-104", - "D-282", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "B-204M", - "D-104", - "D-282", - "DOME", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "D-104", - "D122", - "D204M", - "DV-104", - "DV204M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "Dome", - "O7-PTZ", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "videoMain" - }, - { - "models": [ - "F-C8513PZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI-8903W", - "FI-8918W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "FI-8903W", - "FI-8918W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI-8903W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "FI-8903W", - "FI-8908W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "FI-8904W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "O7-PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/videoMain" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/opticam.json b/data/brands/opticam.json deleted file mode 100644 index cae020f..0000000 --- a/data/brands/opticam.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "brand": "Opticam", - "brand_id": "opticam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "07ptz", - "C_1", - "DB HD", - "i2 HD", - "i4 v2", - "lapiha", - "O3 V2", - "O3_V2", - "O3v2", - "O4 MINI HD", - "O4 POE", - "O6 PoE", - "O6S", - "O7 DOME", - "O7 v2", - "O7ptz", - "Olohuone", - "OPTICAM HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "CC04-IP2MV3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0_0" - }, - { - "models": [ - "i4 v2", - "i4_db_v2", - "i6 DB", - "O3_V2", - "O4 MINI HD", - "O4 PoE", - "O7 DOME", - "O7PTZ", - "OLOHUONE", - "Opticam HD", - "Opticam_O3_V2", - "PTZ07" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "i6 DB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "O4 Mini", - "O4 mini HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoSub" - }, - { - "models": [ - "Odotustila", - "W9803FI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "OLOHUONE" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/optics.json b/data/brands/optics.json deleted file mode 100644 index 791db56..0000000 --- a/data/brands/optics.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Optics", - "brand_id": "optics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PT12X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/optima.json b/data/brands/optima.json deleted file mode 100644 index 638c4e3..0000000 --- a/data/brands/optima.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Optima", - "brand_id": "optima", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANC-800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "ANC-800" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/optimus.json b/data/brands/optimus.json deleted file mode 100644 index d855369..0000000 --- a/data/brands/optimus.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Optimus", - "brand_id": "optimus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AHDR-2008NE", - "IP-E042.1(3.6)PX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "AHDR-2008NE" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?" - }, - { - "models": [ - "AHDR-2008NE", - "IP-E021", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "IP-092.1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/optio.json b/data/brands/optio.json deleted file mode 100644 index 0c41d88..0000000 --- a/data/brands/optio.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Optio", - "brand_id": "optio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "4MP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/optiview.json b/data/brands/optiview.json deleted file mode 100644 index 0a12d1e..0000000 --- a/data/brands/optiview.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Optiview", - "brand_id": "optiview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP3Maib", - "LT600CD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IP3Maib" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "IP4MIAB-28-SDA" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/optivision.json b/data/brands/optivision.json deleted file mode 100644 index 8a07035..0000000 --- a/data/brands/optivision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Optivision", - "brand_id": "optivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVRMINIH4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ivop.get?action=live&THREAD_ID=" - }, - { - "models": [ - "OV Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "OV Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/3" - } - ] -} \ No newline at end of file diff --git a/data/brands/optris.json b/data/brands/optris.json deleted file mode 100644 index 5c088c2..0000000 --- a/data/brands/optris.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Optris", - "brand_id": "optris", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Xi 410" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/orbit.json b/data/brands/orbit.json deleted file mode 100644 index 6b5eb04..0000000 --- a/data/brands/orbit.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Orbit", - "brand_id": "orbit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "AJ-C0LA-C128" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AJ-C0LA-C128" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "B-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "OT-VNI41" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ordro.json b/data/brands/ordro.json deleted file mode 100644 index a38d0ed..0000000 --- a/data/brands/ordro.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Ordro", - "brand_id": "ordro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HDV-Z20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HDV-Z20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_stream" - }, - { - "models": [ - "HDV-Z20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/orient.json b/data/brands/orient.json deleted file mode 100644 index f1774d3..0000000 --- a/data/brands/orient.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "brand": "Orient", - "brand_id": "orient", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-200-MH3BP", - "IP-34", - "IP-76-MH3VP", - "IP-940", - "ip-950" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "ip-31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video" - }, - { - "models": [ - "IP-31-IH2A", - "IP-504" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "IP-31-IH2A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "ip-33-sh24bp" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "ip-33-sh24bp", - "IP-940" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ip-34", - "IP-76-MH3VP", - "IP-950" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "IP-365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "IP951" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg" - }, - { - "models": [ - "NCL-01N-720p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/orion.json b/data/brands/orion.json deleted file mode 100644 index e3a6fc3..0000000 --- a/data/brands/orion.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Orion", - "brand_id": "orion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "224" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "950" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "C310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "ip-33" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "OR-490", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - }, - { - "models": [ - "SC-200" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam4/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/orite.json b/data/brands/orite.json deleted file mode 100644 index b9ca26d..0000000 --- a/data/brands/orite.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Orite", - "brand_id": "orite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "301", - "IP-301" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "IC-301", - "Orite TP300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "IP300", - "IP-301", - "PT-300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "IP-301" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "MW-bisi", - "NW-100N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "PT-300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - } - ] -} \ No newline at end of file diff --git a/data/brands/orllo.json b/data/brands/orllo.json deleted file mode 100644 index 3fd1039..0000000 --- a/data/brands/orllo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Orllo", - "brand_id": "orllo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GOODCAM Z1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/orosaurus.json b/data/brands/orosaurus.json deleted file mode 100644 index 1e6e991..0000000 --- a/data/brands/orosaurus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Orosaurus", - "brand_id": "orosaurus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ-12" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/orvibo.json b/data/brands/orvibo.json deleted file mode 100644 index 31790aa..0000000 --- a/data/brands/orvibo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Orvibo", - "brand_id": "orvibo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SC10W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/oswoo.json b/data/brands/oswoo.json deleted file mode 100644 index ef2ec3a..0000000 --- a/data/brands/oswoo.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Oswoo", - "brand_id": "oswoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "801", - "HR06-E TH", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TV-AL0801-LM-XM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/301" - } - ] -} \ No newline at end of file diff --git a/data/brands/other.json b/data/brands/other.json deleted file mode 100644 index 0982739..0000000 --- a/data/brands/other.json +++ /dev/null @@ -1,1352 +0,0 @@ -{ - "brand": "Other", - "brand_id": "other", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "[p[", - "NVE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/601" - }, - { - "models": [ - "[p[", - "Ezviz C8PF", - "GW500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "001A18E0632C", - "adc-v521ir", - "anran", - "BE2028", - "china", - "fi18919", - "GoDrive", - "iCsee", - "ID002A", - "Outdoor Mini Speed Dome Camera", - "sven ic-720", - "techmade", - "Venus", - "VG13081HIPC", - "VG360", - "WF-100PCX" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8110, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "002fnlk", - "2130", - "2M Box Camera", - "33-S", - "ai08", - "auto focus", - "boh?", - "C-110", - "C6F0SfZ3N0P6L2", - "c721IP-2", - "Click", - "corsee", - "ctronics", - "F19851P", - "Hootoo: hs003", - "intex IT-309WC", - "IP5M-D", - "M2C", - "Netsee", - "Other", - "Out", - "tmezon ptz dome", - "UMS", - "uuuu-197863-glybh", - "W-NVR", - "Zmodo wifi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8090, - "url": "/?action=stream" - }, - { - "models": [ - "1.3mp", - "D_2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "100", - "Brand", - "IP Web 1", - "Other", - "Other PTZ", - "SAP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "1020", - "1114", - "1234", - "13582288", - "320", - "380", - "7033-N", - "822a", - "8812T-WF", - "A16-EU", - "A8B", - "ABQ-A8", - "active cam", - "alexton", - "ASTMY31-POE_1.78MM", - "ASZA-B11B-CAM-W-30X-3.0MP", - "BirdCam", - "Blue 2", - "boavizion", - "BOLVISION", - "BU-E580", - "bullet", - "C210 SALON", - "c310", - "C6F0SgZ0N0P6L0", - "CS-C6C", - "DI350IP5S28", - "ds-2cd111", - "DS-2CD6365G0E-S/RC", - "EVCAM", - "ezviz", - "f3110", - "geovision", - "GTs", - "HAIZ", - "hd", - "HDWIFICAM PRO", - "Hero", - "HIB-2302a", - "HiKam S6", - "Hink Vision", - "hipc", - "HiQ-2120wp", - "honeywell", - "HQ-MP1340T-IR", - "HW22M102M", - "HX-TR2383F2", - "i71BD", - "IC-01H3", - "ICSEE", - "IF26W", - "igeek", - "IGEEK", - "iget", - "ip unv ipc-d112-pf28", - "IP256", - "ipc", - "IPC2252-FNB-SIR50-Z2812-P", - "IPW-6MP-INT-P-IR", - "LF4810", - "lkb353a", - "local 1.2", - "loosafe ls-dz20", - "LS-Q11", - "MackVision", - "Minicam", - "n/a", - "N1010", - "Norden", - "Ocam M3+", - "ONVIF", - "Other", - "OT-VNI39", - "ov2640", - "overmax", - "P3S-8MP-EU", - "Parking", - "PTZIP204WX4IR", - "PVZ5_1", - "PVZ5_RTST", - "QC-ZN007", - "RG-IP02", - "Ronin", - "Skynet", - "Smart IP Camera", - "SSAE-438465-ADDDB", - "ssdcam", - "ST-NVR-H1608", - "Sunqar", - "swann", - "T8864D", - "Tado C200", - "tc60", - "TC-C32QN", - "tdx", - "TECAGO", - "TT77", - "TTT", - "Wanscam", - "wifi smart", - "Winiston", - "Wistino CCTV 5MP WiFi Outdoor Camera", - "xm530", - "YCP", - "yoosee", - "yoosee smart camera", - "Yosee" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "1234545", - "123456", - "cam2", - "j1200", - "LHH1ZL5ACF1ZR43W45CJ", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1028, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "123456" - ], - "type": "JPEG", - "protocol": "http", - "port": 1028, - "url": "/snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "13582288", - "450", - "A2i", - "Balticum", - "bericam", - "BU-E580", - "China", - "D05POE-5MP", - "DCS-6501", - "DS-2CD2045FWD-I", - "DS-2DE5220IW-AE", - "Einfahrt", - "hib-2302a", - "Hnkvision", - "HX-2PT1", - "ip-cam", - "IPCAM-100", - "IPC-T250-M", - "mod1x", - "mv16288443", - "Netvideo", - "NORDEN", - "NVR-8825/4K", - "OPHWD-16US", - "orient ip-31-ih2a", - "Other", - "plv", - "Sovmiku", - "ssdcam", - "ST-NVR-1608", - "T8864D", - "Tado C200", - "Technomate", - "Udecer5MPx", - "Winiston", - "Wistino CCTV 5MP WiFi Outdoor Camera", - "xm 530", - "XM-PT629EBP-AI-50G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "1D76", - "3c7aaa6b0454", - "amz-hd41-3", - "DCS-4712E", - "Doorbell J7", - "F51-3MP", - "HDWifiCam Pro", - "IP-65", - "LENOVO", - "merkury mi cw217-101ww", - "Other", - "poe cam 200", - "ptz-2504x-l2", - "QC012", - "reolink rcl842", - "usb" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "2015", - "China Cam", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "213", - "360", - "CHINA CAM", - "ONVIF", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2366", - "8526", - "BR421", - "C-110", - "C3-0W-H3-D1-111512179548", - "c47", - "C721IP", - "C903IP.2", - "caa", - "camlytics is crap", - "cip", - "dahua vto 2202", - "Denver: SCH 150", - "GWIPC-32034008", - "homewizard", - "HP 1080p", - "IP5M-1179E", - "JOOAN", - "JW-AP1910S", - "luatek", - "M Series", - "Nest Cam", - "Other", - "QC 10 1080P", - "Qihan", - "ST-NVR-H1608", - "Vr03", - "Wyze Cam V3 RTSP Docker", - "Wyze V3 RTSP" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "33-S", - "825" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=0.JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "360", - "ALL-IN-ONE", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3gx", - "a90", - "iCamera2000", - "RC8110", - "s6203y-wr", - "Toucan" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "450", - "Cam1", - "ip66", - "nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "50X20-SWBG", - "cs-cv206", - "DS-100", - "ds-2cd1743g0-iz", - "DS-I214", - "Eyenor", - "Ezviz C1C", - "Grandstream", - "H364DVR", - "hike", - "HiQ-2120wp", - "hiseeu", - "hjk", - "HK-IPCAM-HI", - "HM311", - "LLOYDS", - "Other", - "p10s", - "SN-IPC-HW13", - "solar", - "SP017", - "TC70", - "Trendnet TV320PI", - "Umbrella x218", - "V380E", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "57291998", - "alltronics", - "AXX LIRDBASSF5", - "Balticum", - "DS-2CD2045FWD-I", - "DS-2CD2085FWD-I", - "DS-2DE4A425IW-DE", - "gok", - "GTs1", - "HiKam S6", - "IH10-a", - "ihome-glaz-m", - "ip-m4210w 10ir", - "ipw", - "IWR-IP2M2170WE7", - "M3356PMIR-S", - "Other", - "P10s", - "pb4", - "r2100", - "Skynet", - "st-181", - "ST-S2541Lite", - "topcony", - "V380Pro", - "Wistino CCTV 5MP WiFi Outdoor Camera", - "XVI EI2010CI-IR", - "zijkant" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "5mp WIFI Camera", - "CHINA CAM", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "6000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/profile2/media.smp" - }, - { - "models": [ - "810a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h264Preview_01_sub" - }, - { - "models": [ - "810a", - "TUYA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h265Preview_01_main" - }, - { - "models": [ - "a90", - "ADC-VC826", - "C2M", - "C6F0SfZ3N0P6L2", - "Dahua", - "deck1", - "EG-CIPEXT001", - "energeeks", - "f300", - "foxicam", - "Hikvision", - "j1200", - "JA-F10R-4-U", - "nvr", - "rlc-812a", - "TR-200Z2", - "ULar", - "Vimtag" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "ABQ-A8", - "jhh", - "Maxon X3 Mini", - "Other", - "Pocophone", - "SSDCAM", - "ST-316-2M-AI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "advision" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg" - }, - { - "models": [ - "All-in-one", - "Brand", - "Bseries", - "Other", - "Raspberry Pi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "All-in-one", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "All-in-one", - "CHINA CAM", - "IP Web 1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "All-in-one", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "All-in-one", - "IP Web 1", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AMC06512", - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Avermedia DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mobile/channel[CHANNEL].jpg" - }, - { - "models": [ - "avz", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/main" - }, - { - "models": [ - "AWC03F", - "iCamera2", - "Other", - "Tapo: C320WS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Axia-VD1", - "dtk-b1080p04-2mp", - "HK-IPCAM-HI", - "Over", - "PZT-2504X-12", - "wifi pt camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "bericam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "Brand", - "BRAND", - "Other", - "PTZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "BRAND", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "bvml", - "china", - "cmr19", - "GWIPC-17202082", - "Onvif", - "ONVIF", - "Other", - "Tado C200", - "V380", - "VTA-83730", - "Winiston", - "Wistino", - "XM530_R80XD50-PQ_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "C200E" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 554, - "url": "/bcs/channel0_main.bcs?token=[TOKEN]&channel=0&stream=0" - }, - { - "models": [ - "C6F0SgZ3N0PcL2", - "J2000 HDIP2Dp20PA", - "tra-svr-6108-4an" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "C8001DN2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Camius" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - }, - { - "models": [ - "CGSN-019304-KZKNB", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "China", - "EC80-Y13", - "elegate", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "China" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "clg-020", - "zennox" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMIP7442W-28M", - "Elbex EXIP-4320/BIR (201F)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "cmr818s" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "CS-34304A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/VIDEO.CGI" - }, - { - "models": [ - "CS-34304A", - "DSL-5000L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=0" - }, - { - "models": [ - "D_2", - "hgnw", - "ngixz", - "R-MQ60-JA20" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "Dahua N22AL12", - "lorex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "Dahua N22AL12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "DCS-932L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "deck", - "Galayou Y4", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "DENVER", - "QC20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam2/mpeg4" - }, - { - "models": [ - "DH-IPC-HFW1230SP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46MzIyMzExNjEzMVNoYXl0YW4=" - }, - { - "models": [ - "D-Link: DCS-2330L" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/video/mjpg.cgi" - }, - { - "models": [ - "DT385-I", - "Ezviz db1", - "hsdb2a", - "ipc", - "IPCAM-100", - "Other", - "PTZ Bulb", - "Sovmiku", - "ZetPro-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "DWC-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/user/videostream.cgi" - }, - { - "models": [ - "ec101-x15", - "ptz", - "viroyj" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "elegate", - "HES328-TD-2.8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "eocamara" - ], - "type": "MJPEG", - "protocol": "http", - "port": 100, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "es-ipbo626", - "ipc365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_0" - }, - { - "models": [ - "ezviz c6tc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.264" - }, - { - "models": [ - "F3110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.pro1" - }, - { - "models": [ - "F9900ep", - "Foscam", - "Foscam FI9826", - "norden" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "FD8134", - "IB8369" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "G3 PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s0" - }, - { - "models": [ - "Galayou Y4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch1" - }, - { - "models": [ - "GDBW4321EE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "geen" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/1/image.jpg" - }, - { - "models": [ - "geree" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=3&subtype=0" - }, - { - "models": [ - "GV-TDR2700", - "va0076_M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "GW8536-MIC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ip0/1/" - }, - { - "models": [ - "H264", - "TWG" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "H6-Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "HD-IPC", - "norden" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/onvif-stream2" - }, - { - "models": [ - "hikvision" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/8/cff0e9638e8b1682:123456/main" - }, - { - "models": [ - "Hisseu HB613-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1" - }, - { - "models": [ - "HK-IPCAM-HI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "Honor", - "Wileyfox" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video" - }, - { - "models": [ - "hsdb2a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "ICVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/hiQ.sdp" - }, - { - "models": [ - "ImgHip" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "infinix" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/shot.jpg" - }, - { - "models": [ - "IP2M841B", - "sx801" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "IP5M-T1179E", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "IP5M-T1179E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/mpeg4/0/media.amp" - }, - { - "models": [ - "IP-65", - "SWANN" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "ip66-el3mp ir 50", - "ip66-EL3MP IR50", - "Other", - "RTSP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "IPC2124LB-SF28KM-G", - "LTAIA-47EAL", - "Moja-WiFI-Robot", - "Other", - "OUTDOOR MINI SPEED DOME CAMERA", - "p17", - "S855F/5520PHR-AI/WH", - "Sovmiku", - "Sunqar", - "Tecsar", - "VX-3P28-MD-IA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "IPC3614LR3_PF28-D", - "IPCX-SCB405IP-V10-P", - "onvif", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "IPC-E1C2000", - "IPD-D41M02", - "P10s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "IPC-HW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "M2C", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam4/mpeg4" - }, - { - "models": [ - "Misecu: MI-615AW-20", - "Mtt", - "Other", - "P05-7-C", - "poe cam 200 cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mp4" - }, - { - "models": [ - "NP104-IR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/otima.json b/data/brands/otima.json deleted file mode 100644 index b121bb9..0000000 --- a/data/brands/otima.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Otima", - "brand_id": "otima", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANC-800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "ANC-800V", - "ANC-808 G", - "ANC-808 V", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/otto.json b/data/brands/otto.json deleted file mode 100644 index ea86376..0000000 --- a/data/brands/otto.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Otto", - "brand_id": "otto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4eye" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - } - ] -} \ No newline at end of file diff --git a/data/brands/oude-camera.json b/data/brands/oude-camera.json deleted file mode 100644 index 5b44693..0000000 --- a/data/brands/oude-camera.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Oude Camera", - "brand_id": "oude-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AHD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "AHD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/oukitel.json b/data/brands/oukitel.json deleted file mode 100644 index b7b7c8d..0000000 --- a/data/brands/oukitel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Oukitel", - "brand_id": "oukitel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Webcam Pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video?1920x1080" - } - ] -} \ No newline at end of file diff --git a/data/brands/outdoor-mini-speed-dome-cmera.json b/data/brands/outdoor-mini-speed-dome-cmera.json deleted file mode 100644 index 6f89d73..0000000 --- a/data/brands/outdoor-mini-speed-dome-cmera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Outdoor Mini Speed Dome Cmera", - "brand_id": "outdoor-mini-speed-dome-cmera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cc-p11-68enc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ouvis.json b/data/brands/ouvis.json deleted file mode 100644 index 16feed1..0000000 --- a/data/brands/ouvis.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "brand": "Ouvis", - "brand_id": "ouvis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet Cam", - "C2HD", - "VZ1", - "z21" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "C2HD", - "Z21" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "OUVIS VEEZON VZ1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "OUVIS VEEZON VZ1", - "VZ1", - "ZV1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "v5 Smart Home" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "veezon", - "VZ1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "VEEZON" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/overcap.json b/data/brands/overcap.json deleted file mode 100644 index 437325d..0000000 --- a/data/brands/overcap.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Overcap", - "brand_id": "overcap", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VSI-C809" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/overmax.json b/data/brands/overmax.json deleted file mode 100644 index 2316e44..0000000 --- a/data/brands/overmax.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "brand": "Overmax", - "brand_id": "overmax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3.1", - "camspot", - "CAMSPOT 3.1", - "CAMSPOT 3.3", - "camspot 4.1", - "Camspot3.1 krbk" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "3.1", - "Camspot 3.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "3.3", - "Camspot 3.1", - "CAMSPOT 3.1", - "CAMSPOT 3.2", - "CAMSPOT 3.3", - "CamSpot 4.1", - "HSL150819GSTFR", - "VSTB185436GVHEP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "3.3", - "Camspot 3.3", - "CAMSPOT 3.3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "4", - "2", - "4.2", - "4.4", - "4.5", - "4.6", - "camspot", - "Camspot 3.0", - "CAMSPOT 3.1", - "Camspot 3.2", - "CAMSPOT 3.3", - "CAMSPOT 3.5", - "CAMSPOT 4.2", - "camspot 4.3", - "Camspot 4.4", - "CAMSPOT 4.4", - "camspot 4.5", - "camspot 4.7", - "camspot4.4", - "CamspotView", - "Camview", - "CAMVIEW 3.1", - "CamView 4.0", - "Garaz", - "HSL150819GSTFR", - "Other", - "OV-Camspot", - "overmax 4.5", - "quickspot", - "spotcam 4.4", - "VIEW-1113464-GPTUL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "4.2", - "4.8", - "Camspot 4.2", - "CAMSPOT 4.5", - "CAMSPOT 4.8", - "Camview 4.2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "4.8", - "Camspot", - "CAMSPOT 4.3", - "CAMSPOT 4.5", - "Camspot 4.8", - "Other", - "spotcam 4.8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CAMSPOT 3.1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "CAMSPOT 3.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "CAMSPOT 3.1" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Camspot 3.2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif2" - }, - { - "models": [ - "CAMSPOT 4.2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "camspot 4.7 one" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/overseer.json b/data/brands/overseer.json deleted file mode 100644 index 5ba30fb..0000000 --- a/data/brands/overseer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Overseer", - "brand_id": "overseer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S3VC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ovislink.json b/data/brands/ovislink.json deleted file mode 100644 index 7363de6..0000000 --- a/data/brands/ovislink.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "brand": "Ovislink", - "brand_id": "ovislink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-200PHD-24", - "OC-600/800", - "Other", - "WL5400CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "IP-200PHD-24", - "propia" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "OC-600/800", - "OC-800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "OC-600/800", - "OC-800", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "OC-700" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "OC-700" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/imagep/picture.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/owl.json b/data/brands/owl.json deleted file mode 100644 index 7992aed..0000000 --- a/data/brands/owl.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Owl", - "brand_id": "owl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "932l" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/owlcam.json b/data/brands/owlcam.json deleted file mode 100644 index b3381f2..0000000 --- a/data/brands/owlcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Owlcam", - "brand_id": "owlcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CP-6M201W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CP-6M201W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/owlcat.json b/data/brands/owlcat.json deleted file mode 100644 index 53fd138..0000000 --- a/data/brands/owlcat.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Owlcat", - "brand_id": "owlcat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B87W-POE", - "D77W-WH", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/owluck.json b/data/brands/owluck.json deleted file mode 100644 index 32afb6f..0000000 --- a/data/brands/owluck.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Owluck", - "brand_id": "owluck", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CloudCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/owlvision.json b/data/brands/owlvision.json deleted file mode 100644 index ccb4db0..0000000 --- a/data/brands/owlvision.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Owlvision", - "brand_id": "owlvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10x960p", - "NR10X-130H", - "NR10X-200H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/owsoo.json b/data/brands/owsoo.json deleted file mode 100644 index 80e7f15..0000000 --- a/data/brands/owsoo.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Owsoo", - "brand_id": "owsoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "S1227" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "801", - "TP-C801FD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "801" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P2Pcam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "s800" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "syh02-n" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/ozero.json b/data/brands/ozero.json deleted file mode 100644 index efa29a7..0000000 --- a/data/brands/ozero.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ozero", - "brand_id": "ozero", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC-B20", - "NC-D10P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/p-link.json b/data/brands/p-link.json deleted file mode 100644 index 57e153a..0000000 --- a/data/brands/p-link.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "P-link", - "brand_id": "p-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TL-SC3130" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/p2p.json b/data/brands/p2p.json deleted file mode 100644 index b55394a..0000000 --- a/data/brands/p2p.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "brand": "P2p", - "brand_id": "p2p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cameranetwork", - "dbpower", - "HD024P", - "NETWORK CAMERA", - "P2P IP CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ec76-u15", - "IP/NETWORK CAMERA", - "NETWORK CAMERA", - "Other", - "P2P IP", - "p2p ip came", - "WXH-094175-DAFAA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "FJM-Y1", - "P2P IP CAMERA", - "WIFICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "H.264 AHDVR", - "NETWORK CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "H.264 AHDVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "IP/Network Camera", - "Other", - "P2P IP", - "p2pcamera", - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IP/NETWORK CAMERA", - "NETWORK CAMERA", - "p2p ip camera", - "seriesx", - "x series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "ip602iw", - "P2P IP", - "P2P IP CAMERA", - "P2PCAMERA", - "PPCN522683TKSDM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NP2P1", - "P2P IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "SERIESX", - "v100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SERIESX", - "wificam", - "WIFICAMm" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "P2P IP camera", - "SERIESX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "P2PCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "x8900" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/p6lite.json b/data/brands/p6lite.json deleted file mode 100644 index 7a84706..0000000 --- a/data/brands/p6lite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "P6lite", - "brand_id": "p6lite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/pace.json b/data/brands/pace.json deleted file mode 100644 index e7caf26..0000000 --- a/data/brands/pace.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Pace", - "brand_id": "pace", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pacidal.json b/data/brands/pacidal.json deleted file mode 100644 index 0c86a0b..0000000 --- a/data/brands/pacidal.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pacidal", - "brand_id": "pacidal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NBL306" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/pacom.json b/data/brands/pacom.json deleted file mode 100644 index d9f79d9..0000000 --- a/data/brands/pacom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pacom", - "brand_id": "pacom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/paisan.json b/data/brands/paisan.json deleted file mode 100644 index 9fd2957..0000000 --- a/data/brands/paisan.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Paisan", - "brand_id": "paisan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "PS-012N1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PS-012N1" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "PS-012N1", - "PS-7012N1Ak" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/palmvid.json b/data/brands/palmvid.json deleted file mode 100644 index b755522..0000000 --- a/data/brands/palmvid.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Palmvid", - "brand_id": "palmvid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/palus-f.json b/data/brands/palus-f.json deleted file mode 100644 index 27b7a54..0000000 --- a/data/brands/palus-f.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Palus-f", - "brand_id": "palus-f", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/pana.json b/data/brands/pana.json deleted file mode 100644 index 62082bc..0000000 --- a/data/brands/pana.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Pana", - "brand_id": "pana", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/panasonic.json b/data/brands/panasonic.json deleted file mode 100644 index 20fede9..0000000 --- a/data/brands/panasonic.json +++ /dev/null @@ -1,2307 +0,0 @@ -{ - "brand": "Panasonic", - "brand_id": "panasonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "019", - "AW-HE2", - "AW-HE60H", - "BB-SW175A", - "DMC-60", - "SF438", - "WV396", - "WV-NS202A", - "WV-S1531L", - "wv-s1536", - "WV-S6110", - "wv-sw158", - "wv-sw396", - "WV-SW598" - ], - "type": "MJPEG", - "protocol": "http", - "port": 16082, - "url": "/cgi-bin/mjpeg?stream=0" - }, - { - "models": [ - "104", - "105", - "122", - "135", - "164", - "165", - "222", - "311", - "311AL", - "332", - "334", - "335", - "338", - "384", - "458", - "502s", - "509", - "631", - "82*MJ3BR5JZz", - "bb hcm531", - "BL-C111A", - "BL-VP101", - "BL-VP104", - "BL-VP104W", - "BL-VT164", - "BL-VT164W", - "cam2", - "DG-SC385", - "DG-SF135", - "DG-SF334", - "DG-SF335", - "DG-SP509", - "DG-SW314", - "external", - "K-EF234L01", - "KELAS 1", - "KELAS 2", - "KELAS 3", - "Lobby", - "OnVif", - "Other", - "Otherr", - "Panasonic_WV-SFN310", - "Pan-onviv", - "SC384", - "SF135", - "SF-335", - "SF538", - "SP105", - "SP306", - "SP-509", - "SPN-531", - "spw6ll", - "ST-165", - "SW-155", - "SW155_2.4", - "SW316L", - "sw395", - "SW395", - "VP104", - "VT164W", - "VW SF346", - "WJ-GXE100", - "WJ-NV200", - "WV-2B131M", - "WV-335", - "WV-384", - "WV-NP502", - "WV-NW502", - "WV-NW502S", - "WV-S1510", - "WV-S153LT", - "WV-SB131M", - "WV-SC384", - "WV-SC385", - "WV-SC386", - "WV-SC588", - "WV-SF135", - "WV-SF135(640*480)", - "WV-SF135(High)", - "wv-sf135e", - "WV-SF332", - "WV-SF336", - "WV-SF346", - "WV-SF438", - "WV-SF538", - "WV-SFR310", - "WV-SFR531", - "WV-SP105", - "WV-SP305", - "WV-SP306", - "WV-SP509", - "WV-SPN310V", - "WV-SPN531", - "WV-SPV781L", - "WV-SPW532L", - "WV-SPW611L", - "WV-SPW631LT", - "WV-ST165", - "WV-SW155", - "WV-SW174W", - "WV-SW175", - "WV-SW316", - "WV-SW316L", - "WV-SW352", - "WV-SW355", - "WV-SW355E", - "WV-SW395", - "WV-SW396", - "WV-SW396A", - "WV-SW458", - "WV-SW458E", - "WV-SW558", - "WV-SW559", - "WV-SW59", - "WV-SW598" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/MediaInput" - }, - { - "models": [ - "104" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "104", - "311A", - "331", - "511", - "BB HCE481", - "BB SERIES", - "BB-HCM110", - "BB-HCM311", - "BB-HCM311A", - "BB-HCM331A", - "BB-HCM371A", - "BB-HCM381A", - "BB-HCM511", - "bb--HCM511A", - "BB-HCM511A", - "BB-HCM511CE", - "BB-hcm515", - "BB-hcm515a", - "bb-hcm527", - "BB-HCM527A", - "BB-HCM527CE", - "BB-HCM531", - "BB-HCM531A", - "BB-HCM547", - "BB-HCM580", - "BB-HCM580A", - "BB-HCM581", - "BB-HCM581A", - "BB-HCM705", - "BB-HCM735", - "BB-HCM735A", - "BC-C101", - "BL-111", - "BL-140E", - "BL-160", - "BL-210", - "BL-C1", - "BL-C10", - "BL-C101", - "BL-C101A", - "BL-C101C", - "BL-C101CE", - "BL-C10A", - "bl-c10e", - "BL-C110A", - "BL-C111", - "BL-C111A", - "BL-C121", - "BL-C121A", - "BL-C130A", - "BL-C131", - "BL-C131A", - "BL-C140", - "BL-C140A", - "BL-C1A", - "BL-C1CE", - "BL-C20", - "BL-C20E", - "BL-C210", - "BL-C210a", - "BL-C210A", - "bl-c210AOther", - "BL-C230", - "blc230a", - "BL-C230A", - "BL-C30", - "BL-C30A", - "BL-VP101", - "CHM515A", - "CHM581a", - "CL101", - "Cocina", - "KX-HCM1", - "KX-HCM110A", - "NFD West", - "Other", - "pl-c210ce", - "sf336" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "SnapShotJPEG?Resolution=320x240&Quality=Motion" - }, - { - "models": [ - "104", - "105", - "311", - "331", - "3511", - "Auto", - "AW-HE130", - "BB HCM110", - "BB Series", - "BB_HCM705", - "BB-381", - "BB-HC403E", - "BB-HCM311", - "BB-HCM331", - "BB-HCM511", - "BB-HCM511A", - "BB-HCM515", - "BB-HCM527", - "BB-HCM527A", - "BB-HCM527CE", - "BB-HCM531", - "BB-HCM531A", - "BB-HCM531CE", - "BB-HCM580", - "BB-HCM580A", - "BB-HCM581", - "BB-HCM581A", - "BB-HCM581CE", - "BB-HCM715A", - "BB-HMC511", - "bb-sc384b", - "BB-ST165A", - "BB-SW175A", - "BC-C101", - "BC-C104", - "BC-l30", - "BL- C11", - "BL-111", - "BL-131", - "BL-C10", - "BL-C101", - "BL-C101CE", - "BL-C10A", - "BL-C110A", - "BLC111", - "BL-C111", - "BL-C111A", - "BL-C121", - "BL-C121A", - "BL-C131", - "BL-C131A", - "BL-C131CE", - "BL-C140A", - "BL-C160", - "BL-C1A", - "BL-C1A Series", - "BL-C20", - "bl-c210", - "BL-C210", - "BL-C230", - "BL-C230A", - "BL-C30", - "BL-C30A", - "BL-V101", - "BL-VP101", - "BL-VP104", - "BL-VP104W", - "BL-VT164", - "C131", - "C230A", - "GXE500", - "Hcm527aaHM581a", - "HCM581", - "KX-HCM110A", - "KX-HCM170", - "KX-HCM230", - "KX-HCM280A", - "KX-HXM170", - "nv200", - "Other", - "SC384", - "SC-385", - "SF132", - "SF332", - "SFN481", - "SP302", - "SPN-531", - "ST-165", - "SW-155", - "SW155_2.4", - "SW395", - "vw-sw352", - "w395", - "WJ-NT304", - "wv385", - "WV-NF284", - "WV-NP240/G", - "WV-NP244", - "WV-NS202", - "WV-NS202A", - "WV-NW484", - "wv-nw502", - "WV-NW964", - "WV-S1531L", - "WV-S2531L", - "WV-SC385", - "WV-SC385-PTZ", - "WV-SF*", - "wv-sf135", - "WV-SF135E", - "WV-SF332", - "WV-SF346", - "WV-SF346E", - "WV-SP105", - "WV-SP302", - "WV-SP305", - "WV-SP306", - "WV-SPN310", - "WV-SPN311", - "WV-SPN311A", - "WV-ST165", - "WV-SW174W", - "WV-SW175", - "WV-SW395" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "SnapshotJPEG?Resolution=320x240" - }, - { - "models": [ - "104", - "511", - "BB Series", - "BB-HCM547", - "BB-HCM735", - "BL-C131A", - "BL-C210", - "BL-C210A", - "CL210", - "DG-SC385", - "DG-SF135", - "Other", - "PAN-ONVIV", - "SF135", - "SW-155", - "WV-NM100GOOD", - "WV-NP1004", - "WV-NP244", - "WV-NP304", - "WV-NP502", - "WV-NS202", - "WV-NS202A", - "WV-NS954", - "WV-NW964", - "WV-SC385", - "WV-SF*", - "WV-SF539", - "WV-SP305", - "WV-ST162", - "WV-SW155", - "WV-SW175", - "WV-SW316", - "WV-SW355", - "wv-sw396" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "SnapshotJPEG" - }, - { - "models": [ - "104", - "311", - "384", - "AW-HE130", - "AW-HE2", - "aw-he20ke", - "aw-he40", - "AW-HE42", - "AW-UE70", - "AW-UE70W", - "BB-SC364", - "BB-SW175A", - "BL-VP101", - "BL-VP104", - "DG-NS202A", - "DG-SF539", - "Other", - "South", - "SW-155", - "WJ-GXE100", - "WQV-V2530L1", - "WV-2530L1", - "WV-NF284", - "WV-NP244", - "WV-NW502S", - "WV-S1531L", - "WV-S6110", - "WV-S6130", - "WV-S6131", - "WV-SC384", - "WV-SC385", - "WV-SC385-PTZ", - "WV-SF135(640*480)", - "WV-SF305", - "wv-sf332", - "WV-SF538", - "WV-SF559", - "WV-SFN311", - "WV-SFV631L", - "WV-SP102", - "WV-SP105", - "WV-SP302", - "WV-SP305", - "WV-SP509", - "WV-SPW532L", - "WV-ST165", - "WV-SW152", - "WV-sw174w", - "WV-SW396", - "WV-SW558", - "WV-V2530L1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg?stream=[CHANNEL]" - }, - { - "models": [ - "105", - "AW 150 4k PTZ", - "AW-70", - "AW-HE130", - "AW-HE2", - "AW-HE60", - "AW-HE60S", - "AW-RP50", - "AW-UE-70", - "AW-UE70W", - "BB-HCM705A", - "BL-C230A", - "BL-VP101", - "BL-VT164", - "BL-VT164P", - "BL-VT164W", - "GXE500", - "NF302E", - "Np240", - "NT304", - "Other", - "SC384", - "sw155", - "SW-155", - "VCC-HD", - "VT-164", - "WJ-GXE500", - "WJ-NT304", - "wv395", - "WV-NF302", - "WV-NM100", - "WV-NM100GOOD", - "WV-NP1000", - "WV-NP240", - "WV-NP244", - "WV-NP-472b", - "WV-NS202A", - "WV-NS324", - "WV-NW474", - "WV-NW484", - "WV-NW484S", - "WV-NW502S", - "WV-NW960", - "WV-S15311L", - "WV-S1531L", - "WV-SC385", - "WV-SF*", - "WV-SF135(640*480)", - "WV-SF138", - "WV-SF336-D", - "WV-SF346", - "WV-SFN310", - "WV-SFN631", - "WV-SP105", - "WV-SP305", - "WV-SP306", - "WV-SPN310", - "WV-SPW532L", - "WV-SW155", - "WV-SW175", - "WV-SW458" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/camera?ch=[CHANNEL]&resolution=" - }, - { - "models": [ - "105", - "12345", - "NN-SW165A", - "ns202", - "Other", - "SP105", - "VW-SW175", - "VW-SW395", - "WV-NM100", - "WV-NP1000", - "WV-NP240", - "WV-NP240/G", - "WV-NP244", - "WV-NS202A", - "WV-NS324", - "WV-NW484", - "WV-NW484S", - "WV-S3131L", - "WV-SC588", - "WV-SF135", - "WV-SF135(HIGH)", - "WV-SF335", - "WV-SF336", - "WV-SF346", - "WV-SF438", - "WV-SFN110", - "WV-SFR631L", - "WV-SP105", - "WV-SP302", - "WV-SP306", - "WV-SW395", - "WV-SW559" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpeg?connect=start&vmdinfo=none&UID=9&ch=[CHANNEL]&resolution=" - }, - { - "models": [ - "105", - "164", - "1WV-SC384", - "332", - "504", - "509", - "AW-HE60", - "AW-HE60S", - "BACK", - "BB-HCM705", - "BB-HCM735", - "BB-ST162", - "BL-210", - "BL-C210", - "BL-C210A", - "BL-C230", - "BL-C230A", - "BL-V101", - "BL-VP101", - "BL-VP104", - "BL-VP104W", - "BL-VT164", - "BL-VT164W", - "DG-P304", - "DG-SC385", - "DG-SF135", - "DG-SF335", - "EIGHT", - "GX500", - "K-EW214L", - "kx-dt521x", - "N502", - "Other", - "S2250L", - "SC384", - "SF438", - "SFN-531", - "sfr310", - "SP105", - "SP306", - "SW-105", - "VLC RTSP", - "vl-cd235", - "VLVL-", - "VP104", - "VW-SW", - "WJ-GXE100", - "WJ-GXE500", - "WJ-GXE500-2", - "WV-335", - "WV385", - "WV-NP304", - "WV-NP502", - "WV-NW502", - "WV-NW502S", - "WV-S2550l", - "WV-S3131", - "WV-SC384", - "WV-SC385", - "WV-SC385-PTZ", - "WV-SC386", - "WV-SF*", - "WV-SF132", - "WV-SF135", - "WV-SF135(HIGH)", - "WV-SF138", - "WV-Sf332", - "WV-SF335", - "WV-SF336", - "WV-SF346", - "WV-SF348", - "WV-SF438", - "WV-SF538", - "WV-Sf548", - "WV-SFN311", - "WV-SFN311A", - "WV-SFN531", - "WV-SFN631", - "WV-SFR310", - "WV-SFV631LT", - "WV-SFV781L", - "WV-SNF480", - "WV-SP102", - "WV-SP105", - "WV-SP105E", - "WV-SP306", - "WV-SPN310", - "WV-SPN311A", - "WV-SPN531", - "WV-SPN631", - "WV-SPV781L", - "WV-SST165", - "WV-ST162", - "WV-ST165", - "WV-SW115", - "WV-SW155", - "WV-SW158", - "WV-SW172", - "WV-SW174w", - "WV-SW174W", - "WV-SW175", - "WV-SW316L", - "WV-SW332", - "WV-SW352", - "WV-SW355", - "WV-SW355 H264", - "WV-SW395", - "WV-SW396", - "WV-SW396E", - "WV-SW397", - "WV-SW458", - "WV-SW558", - "WV-SW559", - "WV-SW596A", - "WV-SW598", - "WV-VC30", - "WV-X6531", - "WX-SW396A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/h264" - }, - { - "models": [ - "105", - "335", - "960", - "AW-70UE", - "AW-HE130", - "AW-HE40", - "AW-HE40S", - "AW-HE60", - "AW-RP50", - "AWU-2022", - "AW-UE70", - "AW-UE70W", - "BB Series", - "BB SERIES", - "BB-HCM531A", - "BB-HCM547", - "BB-HCM705", - "BB-HCM715CE", - "BL-C10A", - "BL-C111A", - "BL-C131A", - "BL-C1A", - "BL-C210", - "BL-C210A", - "BL-C230", - "BL-C30", - "BL-C30A", - "BL-VP101", - "BL-VP101U", - "BL-VT164", - "DG-SC385", - "DG-SF132", - "DG-SF135", - "DG-SP102", - "EVRC INSIDE VIEW", - "GXE500", - "HPL", - "NF302", - "NF-WV302", - "NP-WV472E", - "NW470", - "Other", - "SF132", - "sp306", - "spW532L", - "SW-155", - "SW316", - "VW-SW", - "VW-SW395", - "WJ-GXE500", - "WJ-HD220", - "WJ-ND400", - "WV-NF284", - "WV-NF302", - "WV-NM100", - "WV-NP1000", - "WV-NP1004", - "WV-NP240", - "WV-NP244", - "WV-NP320", - "WV-NP472", - "WV-NP472b", - "wv-np472e", - "WV-NS202", - "WV-NS202A", - "WV-NS324", - "WV-NW470", - "WV-NW474", - "WV-NW484", - "WV-NW502S", - "wv-nw964", - "WV-NW964", - "WV-S1131", - "WV-S15311L", - "wv-S2531l", - "WV-SC385", - "WV-SF*", - "WV-SF135", - "WV-SF138", - "WV-SF332", - "WV-SF335", - "WV-SF336", - "WV-SF342", - "WV-SF346", - "WV-SF438", - "WV-SF439", - "wv-sfn110", - "WV-SFR631L", - "WV-SFV481", - "WV-SFV631L", - "WV-SFV781L", - "WV-SP102", - "WV-SP105", - "WV-SP105E", - "WV-SP302", - "WV-SP306", - "WV-SP335", - "WV-SPN531", - "WV-SPN631", - "WV-SPW611L", - "WV-ST162", - "WV-SW155", - "WV-SW158", - "WV-SW175", - "WV-SW316L", - "WV-SW352", - "WV-SW355", - "WV-SW395", - "WV-SW395E", - "WV-SW396", - "WV-SW396A", - "WV-SW559" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/camera" - }, - { - "models": [ - "105", - "AW-HE2", - "AW-HE40", - "AW-HE60", - "BB-ST162", - "BL-VP101", - "Other", - "SC-385", - "SW316", - "WV-NF284", - "WV-NP244", - "WV-NP502", - "WV-NS202A", - "WV-s3131", - "WV-SC384", - "WV-SC386", - "WV-SF135(HIGH)", - "WV-SF346", - "WV-SP105E", - "WV-SP302", - "WV-SP302-OK", - "WV-SW155", - "wv-sw158", - "WV-SW316", - "WV-SW355", - "WV-SW395E", - "WV-SW396E", - "WV-X4741" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg?session_id=[CHANNEL]&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "1234", - "131A", - "BB HCM110", - "BB SERIES", - "BB_HCM705", - "BB-HCM311", - "BB-HCM331", - "BB-HCM331a", - "BB-HCM371", - "BB-HCM371A", - "BB-HCM381A", - "BB-HCM403A", - "BB-HCM511", - "BB-HCM511a", - "BB--HCM511A", - "BB-HCM511CE", - "BB-HCM515A", - "BB-HCM515CE", - "BB-HCM527", - "BB-HCM527A", - "BB-HCM527A1", - "BB-HCM531", - "BB-HCM531Ak", - "BB-HCM531Akeating", - "BB-HCM531CE", - "BB-HCM547", - "BB-HCM547A", - "BB-HCM580", - "BB-HCM580A", - "BB-HCM581", - "BB-HCM581A", - "BB-HCM701", - "BB-HCM701CE", - "BB-HCM705A", - "BB-HCM735", - "BB-HCN735", - "BB-HMC511", - "BB-SC384B", - "BB-ST162", - "BB-SW172", - "BB-SW175", - "BC-C101", - "BL- C111", - "BL-131", - "BL-160", - "bl-1c", - "BL-C!A", - "BL-C1", - "BL-C10", - "BL-C101", - "BL-C101A", - "BL-C10A", - "BLC-10C", - "BL-C111A", - "BL-C121", - "BL-C121A", - "BL-C131", - "BL-C131A", - "BL-C140", - "BL-C140A", - "BL-C160", - "BL-C161", - "BL-C1A", - "BL-C1A Series", - "BL-C1CE", - "BL-C20", - "BL-C210", - "BL-C210a", - "BL-C210A", - "BL-C230", - "BL-C230A", - "BL-C30", - "BL-C30A", - "BL-V101", - "BL-VP101", - "BL-VP104W", - "BL-VT164", - "C10", - "C101", - "CM-260", - "DG-SF438", - "HCM511CE", - "HCM8", - "KX-HCM10", - "KX-HCM110A", - "KX-HCM130", - "KX-HCM230", - "KX-HCM270", - "KX-HCM280A", - "Other", - "Panasonic BB Series", - "PANASONIC_WV-SFN110", - "SC-385", - "SF332", - "SP-102", - "ST-165", - "SW316", - "VL-CM210", - "VP104", - "WV-384", - "wv6sf538", - "WV-NF284", - "wv-nf302", - "WV-NP240", - "WV-NP240/G", - "WV-NP244", - "WV-NP304", - "WV-NP502", - "WV-NS202", - "WV-NS202A", - "WV-NS954", - "WV-NW484", - "WV-NW502", - "WV-NW502S", - "WV-S2531L", - "WV-S3131L", - "WV-S6110", - "WV-S8530N", - "WV-SC384", - "wv-sc385", - "WV-SC385", - "WV-SC385-PTZ", - "wv-sf135", - "WV-SF138", - "WV-SF284", - "WV-SF335", - "WV-SF346", - "WV-SFV310", - "WV-SNF480", - "WV-SP105", - "wv-sp335", - "wv-sp509", - "WV-SPV781L", - "WV-ST165", - "WV-SW155", - "WV-SW316", - "WV-SW355", - "WV-SW355 H264", - "WV-SW395", - "WV-SW395 HD test", - "WV-SW396", - "WV-SW396A", - "WV-SW558", - "WV-SW598", - "WV-VC30", - "WV-X6531" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "164", - "BB Series", - "BB-HCM547", - "BL-C210A", - "BL-C230", - "BL-C230A", - "BL-C30", - "BL-VP101", - "BL-VT164", - "DG-SC385", - "Other", - "ST-165", - "SW316", - "WV-NF302", - "WV-NP1004", - "WV-NP240/G", - "WV-NP244", - "WV-NP304", - "WV-NS202", - "WV-NW502S", - "WV-NW964", - "WV-SC385", - "WV-SF336", - "WV-SF346", - "WV-SFN311", - "WV-SP305", - "WV-SP508", - "WV-SPW611L", - "WV-ST162", - "WV-ST165", - "WV-SW316", - "WV-SW395", - "WV-U1142" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg" - }, - { - "models": [ - "311A", - "311AL", - "BB Series", - "BB-HC403E", - "BB-HCM311", - "BB-HCM311A", - "BB-HCM331", - "BB-HCM515A", - "BB-HCM531A", - "BB-HCM547A", - "BB-HCM581A", - "BB-HCM705", - "BB-HCM735", - "BB-HMC735", - "BL-C1", - "BL-C10", - "BL-C101", - "BL-C101A", - "BL-C101CE", - "BL-C10A", - "BL-C111", - "BL-C131", - "BL-C131A", - "BL-C140A", - "BL-C210", - "BL-C30", - "BL-C30A", - "BL-VT164", - "C230", - "DG-SF135", - "HCS310", - "KX Legacy", - "KX-HCM110A", - "Other", - "SF135", - "VP-104", - "WV-NP244", - "WV-NS202", - "WV-NW484", - "wv-nw502s", - "WV-NW502S", - "WV-S3131L", - "wv-sc385", - "WV-SF284", - "WV-SF336", - "WV-SW172", - "WV-SW332" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=320x240&Quality=Motion" - }, - { - "models": [ - "511", - "BB HCE481", - "BB SERIES", - "BB-381", - "BB-HCM311", - "BB-HCM311A", - "BB-HCM331", - "BB-HCM371", - "BB-hcm371a", - "BB-HCM381A", - "BB-HCM403A", - "BB-HCM527A", - "BB-HCM531A", - "BB-HCM547", - "BB-HCM581A", - "BB-HCM581CE", - "BL- C111", - "bl.c1", - "BL-111", - "BL-140E", - "BL-160", - "BL-210", - "BL-C1", - "BL-C10", - "BL-C101", - "BL-C10A", - "BL-C111A", - "BL-C121", - "BL-C131A", - "BL-C140A", - "BL-C1A", - "BL-C1A WM", - "BL-C20", - "BL-C210", - "BLC210a", - "BL-C230", - "BL-C30", - "BL-C30A", - "BL-VP101", - "BL-VP104w", - "BL-VT164", - "C131", - "DG-SC385", - "KX-HCM10", - "Other", - "WJ-HD220", - "WJ-HD500", - "WJ-NV200", - "wv-nf284", - "WV-NP244", - "WV-NS202", - "WV-NW484", - "WV-NW484S", - "WV-NW964", - "WV-SC384", - "WV-SC385", - "WV-SF*", - "WV-SFN110", - "WV-SP105", - "WV-SP302", - "WV-SP306", - "WV-SW332" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=320x240&Quality=Standard" - }, - { - "models": [ - "5331", - "BB-HCM110", - "BB-HCM311", - "BB-hcm371a", - "BB-HCM515", - "bb-hcm527", - "BB-HCM527A", - "BB-HCM580", - "BB-HCM580A", - "BB-HCM581", - "BB-HCM581A", - "BB-HCM735", - "BB-HCM735A", - "BB-HCM735CE", - "BB-SW175", - "BB-SW-175A", - "BC-L10", - "BL121A", - "BL-C1", - "BL-C10", - "BL-C101", - "BL-C101A", - "BL-C10A", - "BL-C121", - "BL-C121A", - "BL-C131", - "Bl-C210", - "BL-C230A", - "BL-HCM", - "CM260", - "HCM-KX170", - "OG-SERIES", - "VL-C11", - "VL-CM260", - "WV296", - "WV396", - "wv-nf284", - "WV-NS202", - "WV-NW484", - "wv-nw502s", - "WV-S4150", - "WV-U2132L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "AW-", - "AW-HE2", - "DG-SF334", - "DG-SF335", - "wv-sw396" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/camera?ch=0&resolution=" - }, - { - "models": [ - "aw -h1", - "AW-HE2", - "AW-HE60", - "AW-RP50", - "AW-UE70", - "AWUV-70WE", - "BB SERIES", - "BB-HCM705A", - "HE2", - "PW-CP480", - "SF-335", - "SNC-EM602R", - "SW316", - "WJ-HD500", - "WV-335", - "WV-CP480", - "WV-NM100", - "WV-NM100GOOD", - "WV-NP240", - "WV-NP240/G", - "WV-NP244", - "WV-NS202A", - "WV-NW474", - "WV-NW484", - "WV-S3511L", - "WV-SF335", - "WV-SF336", - "WV-SF342", - "WV-SF438", - "WV-SF549", - "WV-SFN110", - "WV-SFV631LT", - "WV-SP305", - "WV-ST165", - "WV-SW155", - "WV-SW458" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/camera?UID=[USERNAME]" - }, - { - "models": [ - "AW HE40HWEJ", - "DG-SF135" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg?stream=1" - }, - { - "models": [ - "AW-HE", - "AW-HE2", - "DG-SC385", - "wv-sc385" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg?session_id=1&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "AW-HE130", - "AW-HE40", - "AW-HE60", - "BB-HCM511A", - "BB-HCM531AKEATING", - "BB-ST162", - "BL-VP101", - "HE60", - "Other", - "ps306", - "SFN-531", - "SP105", - "sw155", - "SW598", - "VCC-HD", - "WV-NF284", - "WV-NP304", - "WV-NW484", - "WV-SC384", - "WV-SC385", - "WV-SF138", - "WV-SF346", - "WV-SP105", - "WV-SPc611L", - "wv-spn311a", - "WV-SPW611L", - "WV-SW155", - "WV-SW175", - "WV-SW396", - "WV-SW596A", - "WV-SW598" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg" - }, - { - "models": [ - "AW-HE130", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "aw-he40", - "WV-NS324" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/camera?UID=[USERNAME]" - }, - { - "models": [ - "aw-he40", - "AW-HE40S" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/live/index.html" - }, - { - "models": [ - "aw-he40", - "wv-nf284", - "WV-NP244", - "WV-NW484", - "wv-s1536", - "WV-SF138" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg" - }, - { - "models": [ - "AW-UE20", - "WV-SPN310AV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/h264/stream_1" - }, - { - "models": [ - "AW-UE20WE", - "ue4" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot/view0.jpg" - }, - { - "models": [ - "AW-UE4WG", - "BB-HCM735A", - "bl-c210", - "BL-C210a", - "DG-SF135", - "WV-335", - "WV-S2136L", - "WV-SFV311", - "WV-SFV531", - "wv-sp509", - "WV-SPN310AV", - "WV-SPN631", - "WV-SW155", - "WV-SW352", - "WV-SW355", - "wv-sw396", - "WV-VC30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/h264" - }, - { - "models": [ - "BB HCM110", - "BB-HCM515", - "BB-HCM735", - "BB-HCM735A", - "BB-SW175", - "BL-C30", - "BL-C30A", - "C31" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 7979, - "url": "/nphMotionJpeg?Resolution=320x240&Quality=Standard" - }, - { - "models": [ - "BB Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "BB SERIES", - "BB-HCM531A", - "BB-HCM547", - "BL-C10A", - "BL-C111", - "BL-C111A", - "BL-C131A", - "BL-C1A", - "BL-C30", - "BL-C30A", - "DG-SC385", - "Other", - "WJ-HD220", - "WJ-HD500", - "WJ-HD88", - "WJ-ND400", - "WV-NM100", - "WV-NP240", - "WV-NP244", - "WV-NS202", - "WV-NW484", - "WV-NW502S", - "WV-SC385", - "WV-SF*", - "WV-SF284", - "WV-SP306" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpeg" - }, - { - "models": [ - "BB SERIES", - "BB-HCM531A", - "BB-HCM547", - "BB-HCM701", - "BB-HMC735", - "BL-C10A", - "BL-C111", - "BL-C111A", - "BL-C131A", - "BL-C140A", - "BL-C1A", - "BL-C210A", - "BL-C230", - "BL-C30", - "BL-C30A", - "DG-SC385", - "Other", - "VL-CM210", - "WV-NW484", - "WV-NW502S", - "WV-SC385", - "WV-SF*" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/nphContinuousServerPush" - }, - { - "models": [ - "BB-HCM311", - "bb-hcm527", - "BB-SW175", - "BL-C101A", - "BL-C140A", - "VL-C11", - "WV-NS954" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/nphMotionJpeg?Resolution=320x240&Quality=Motion" - }, - { - "models": [ - "BB-HCM331", - "BL-C101A", - "BL-C10A", - "BL-C121", - "IP300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "BB-HCM511", - "BB-HCM735", - "BB-HCM735A", - "BB-SW175", - "BL-C140", - "DG-SF335", - "WV-NS954", - "WV-S6530" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/SnapshotJPEG?Resolution=320x240" - }, - { - "models": [ - "BB-HCM531A", - "BL-C10A", - "BL-C111A", - "BL-C131A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "nphMpeg4/g726-640x48" - }, - { - "models": [ - "BB-HCM701", - "BB-HCM705", - "BB-HCM735", - "BL-C210", - "BL-C210A", - "BL-C230", - "BL-C230-1", - "BL-C230A", - "BL-C30A", - "Other", - "VW-SW395", - "WV-NP1004", - "WV-NP240", - "WV-NP240/G", - "WV-NP244", - "WV-NS202A", - "WV-NS954", - "WV-NW484S", - "WV-NW502S", - "WV-SC385", - "WV-SF335", - "WV-SW355" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "BB-HCM701" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/SnapshotJPEG" - }, - { - "models": [ - "BB-HCM705", - "BB-SW175", - "SC382", - "WX-SW396A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 50060, - "url": "/nphMotionJpeg" - }, - { - "models": [ - "BB-HCM735", - "WV-SF448", - "WV-SPN310AV" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/h264/stream_2" - }, - { - "models": [ - "BB-HCM735" - ], - "type": "MJPEG", - "protocol": "http", - "port": 50001, - "url": "/CgiStart?page=Single&Direction=&Resolution=640x480&Quality=Clarity&Size=STD&PresetOperation=Move&Data=0&Frame2=PanTilt&Type=&Language=1&PanTiltMin=0&RPeriod=65534&Sound=Enable&Mode=H264&SendMethod=1&View=Normal&license=OK" - }, - { - "models": [ - "BB-HCM735A", - "BL-C101", - "BL-C10A", - "BL-C30", - "HCM524" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "/SnapShotJPEG?Resolution=320x240&Quality=Motion" - }, - { - "models": [ - "BB-SW175", - "sfv130", - "WV-SW396A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/MediaInput?profile=1_def_profile6" - }, - { - "models": [ - "BL-C101" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/1/video.mjpg?Axis-Orig-Sw=true" - }, - { - "models": [ - "BL-C101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/0/h264/1" - }, - { - "models": [ - "BL-C101", - "wv-nf284" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "BL-C10A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "BL-C111A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "BL-C111A", - "BL-C30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "BL-C111A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg?type=motion" - }, - { - "models": [ - "BL-C121A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/CgiStart?page=Single&Language=0" - }, - { - "models": [ - "BL-C131" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BL-C131A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BL-C1A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "BL-C230" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BL-C230A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 5000, - "url": "/cgi-bin/nphContinuousServerPush" - }, - { - "models": [ - "BL-C30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "CgiStart?page=Single&Resolution=640x480&Quality=Standard&Language=0" - }, - { - "models": [ - "BL-C30A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "liveimg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "DVR", - "Other", - "VCC SERIES", - "VDC SERIES", - "VDC SERİES" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "DVR", - "EW104", - "K_EF234L03E", - "K-EF103L06", - "K-EF104L06", - "K-EF114L03", - "K-EF114L06", - "k-ef134l", - "K-EF134L", - "K-EF235L01E", - "K-EW114L03", - "K-EW114L03E", - "K-EW134", - "K-EW134L", - "K-EW214L", - "K-EW214L01E", - "K-NL316K", - "Other", - "PI-SFW103L", - "PI-SPW203L", - "Pl-SFW303L" - ], - "type": "JPEG", - "protocol": "http", - "port": 8000, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "EW107", - "K-EF134L", - "K-EF234L01", - "K-EW114L06", - "K-EW214L01E", - "Other", - "PI-SFW103L", - "pl-spw103l", - "WV-NP240/G", - "WV-NS202" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "FYI", - "WC-vcc100", - "WV-SW152" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/jpeg?connect=start&vmdinfo=none&UID=9&ch=1&resolution=" - }, - { - "models": [ - "HDR-101" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "K_EF234L03E", - "K-EF103L06", - "K-EF114L03", - "K-EF114L06", - "K-EP106l03", - "K-EW114L06", - "K-EW214L01E", - "K-EW215L01E", - "Other", - "PI3L03C6_G02478" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "k104", - "K-EP104W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 63063, - "url": "/cam/realmonitor" - }, - { - "models": [ - "K123L", - "K-EF104L06", - "K-ef134L", - "K-EP104LWE", - "K-EW114L03E", - "K-EW114L06", - "K-EW134L", - "Other", - "pi-spw303l" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "k-ef134l" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=0&resolution=320x240" - }, - { - "models": [ - "K-EF134L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1&resolution=1280x720" - }, - { - "models": [ - "K-EP104LWE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif" - }, - { - "models": [ - "K-NL308K", - "Other", - "PI-HPN206CL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "KX-NTV160", - "N-VT160" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "ntv160" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 554, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other", - "WV-NM100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "Other", - "WV-NP240" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "SANYO HD2100P", - "SANYO HD3300P", - "VCC SERIES", - "VCC SERİES", - "VCC-9574n", - "VCC-p9574n", - "VDC SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "liveimg.cgi" - }, - { - "models": [ - "Other", - "VCC SERİES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "liveimg.cgi?serverpush=1" - }, - { - "models": [ - "Other", - "SANYO HD2100P", - "Sanyo HD3300P", - "SANYO HD3300P", - "VCC Series", - "VCC SERİES", - "VCC-HD", - "VCC-HD2300P", - "VCC-hd3300p", - "VCC-hd3500p", - "VCC-HD4600", - "VDC Series", - "VDC-HD3100P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - }, - { - "models": [ - "Other", - "PI-SFW401DL", - "PS-SFW401DL", - "Shinrai" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Panasonic BB Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 50002, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "VCC Series", - "VCC SERİES", - "VDC Series", - "VDC-HD3300P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "liveimg.cgi?serverpush=1&jpeg=1&stream=[CHANNEL]" - }, - { - "models": [ - "VR 360" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "WJ-HD220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "view/camera.cgi?UID=[USERNAME]&CH=[CHANNEL]" - }, - { - "models": [ - "WJ-ND400", - "WJ-NV200", - "WJ-NV300", - "WV-SFV631L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/checkimage.cgi?UID=[USERNAME]&CAM=[CHANNEL]" - }, - { - "models": [ - "wv 30", - "WV-SF135(High)", - "WV-U2532L" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/jpeg?connect=start&vmdinfo=none&UID=9&ch=0&resolution=" - }, - { - "models": [ - "wv-cp244ex" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/wappaint?camera_no=1&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "WV-NF284", - "WV-NP240", - "WV-NP240/G", - "WV-NS202" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "WV-NM100", - "WV-NP240" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/cameraid?UID=" - }, - { - "models": [ - "WV-NP240/G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "WV-NP244", - "WV-SC384" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "WV-NS202A", - "WV-NS954" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/camera" - }, - { - "models": [ - "WV-NW1531", - "WV-NW1531L", - "WV-S1531L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/src/mediainput/stream_1" - }, - { - "models": [ - "WV-NW1531", - "WV-NW1531L", - "WV-S1531L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/src/mediainput/stream_3" - }, - { - "models": [ - "WV-NW484", - "WV-SPN631", - "WV-SW316" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "wv-s1536" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg?session_id=0&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "wv-S2236LA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg?session_id=4&buffer=0&prio=high&frame=4" - }, - { - "models": [ - "WV-X2271L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/MediaInput?profile=def_profile1" - }, - { - "models": [ - "WV-X2271L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/MediaInput?profile=def_profile2" - } - ] -} \ No newline at end of file diff --git a/data/brands/panatek.json b/data/brands/panatek.json deleted file mode 100644 index 8c68c62..0000000 --- a/data/brands/panatek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Panatek", - "brand_id": "panatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pangolin.json b/data/brands/pangolin.json deleted file mode 100644 index a733aa4..0000000 --- a/data/brands/pangolin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pangolin", - "brand_id": "pangolin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T7815WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/panoeagle.json b/data/brands/panoeagle.json deleted file mode 100644 index 9e9411a..0000000 --- a/data/brands/panoeagle.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Panoeagle", - "brand_id": "panoeagle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4818X-IS", - "PG2357C", - "pg2385i", - "PTZ-4620IZT2", - "ptz-4818-iz", - "ptz4833" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "pg2385i" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "ptz-2504" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264?username=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/panomera.json b/data/brands/panomera.json deleted file mode 100644 index 13ee45f..0000000 --- a/data/brands/panomera.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Panomera", - "brand_id": "panomera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3D-VR-AHD3" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "Panomera S4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/encoder1" - } - ] -} \ No newline at end of file diff --git a/data/brands/panoob.json b/data/brands/panoob.json deleted file mode 100644 index fb08bb8..0000000 --- a/data/brands/panoob.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Panoob", - "brand_id": "panoob", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PB65-4MDL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "PD93A3-5M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "PD94BA2-4M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/panorama.json b/data/brands/panorama.json deleted file mode 100644 index 85c98b6..0000000 --- a/data/brands/panorama.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Panorama", - "brand_id": "panorama", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Vr Cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/panoramic.json b/data/brands/panoramic.json deleted file mode 100644 index 27a9258..0000000 --- a/data/brands/panoramic.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Panoramic", - "brand_id": "panoramic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "330vr", - "VR CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "cip-37186" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VR Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/panoraxy.json b/data/brands/panoraxy.json deleted file mode 100644 index 834e718..0000000 --- a/data/brands/panoraxy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Panoraxy", - "brand_id": "panoraxy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bf-bk01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "L100Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/pantech.json b/data/brands/pantech.json deleted file mode 100644 index 89466cd..0000000 --- a/data/brands/pantech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pantech", - "brand_id": "pantech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Flex" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/parolo.json b/data/brands/parolo.json deleted file mode 100644 index 323ce3c..0000000 --- a/data/brands/parolo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Parolo", - "brand_id": "parolo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/partizan.json b/data/brands/partizan.json deleted file mode 100644 index 210a9ed..0000000 --- a/data/brands/partizan.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Partizan", - "brand_id": "partizan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Cloud Robot" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "IPH-2SP-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPO-2SP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IPO-5SP_4K_1.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/2" - }, - { - "models": [ - "IPO-5SP_4K_1.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/pasillo.json b/data/brands/pasillo.json deleted file mode 100644 index c5cbe08..0000000 --- a/data/brands/pasillo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pasillo", - "brand_id": "pasillo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/patronum.json b/data/brands/patronum.json deleted file mode 100644 index fe57c91..0000000 --- a/data/brands/patronum.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Patronum", - "brand_id": "patronum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pr-d30ipwt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/pci.json b/data/brands/pci.json deleted file mode 100644 index 2102bcb..0000000 --- a/data/brands/pci.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Pci", - "brand_id": "pci", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS-TX05FM" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "CS-TX05FM" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/pco.json b/data/brands/pco.json deleted file mode 100644 index 3a8c13a..0000000 --- a/data/brands/pco.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pco", - "brand_id": "pco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/pcs.json b/data/brands/pcs.json deleted file mode 100644 index b94530d..0000000 --- a/data/brands/pcs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pcs", - "brand_id": "pcs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pcview.json b/data/brands/pcview.json deleted file mode 100644 index 6e5531b..0000000 --- a/data/brands/pcview.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Pcview", - "brand_id": "pcview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/peak.json b/data/brands/peak.json deleted file mode 100644 index ffef306..0000000 --- a/data/brands/peak.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Peak", - "brand_id": "peak", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "47885FPPK/BEU" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pearl.json b/data/brands/pearl.json deleted file mode 100644 index 3f9bc14..0000000 --- a/data/brands/pearl.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Pearl", - "brand_id": "pearl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3615", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pecan.json b/data/brands/pecan.json deleted file mode 100644 index 43a8fa6..0000000 --- a/data/brands/pecan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pecan", - "brand_id": "pecan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "lpd120" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/pecham.json b/data/brands/pecham.json deleted file mode 100644 index dfd9b1e..0000000 --- a/data/brands/pecham.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pecham", - "brand_id": "pecham", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/pegatah.json b/data/brands/pegatah.json deleted file mode 100644 index 01cfa70..0000000 --- a/data/brands/pegatah.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pegatah", - "brand_id": "pegatah", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCKF002" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/pelco-sarix.json b/data/brands/pelco-sarix.json deleted file mode 100644 index 80e7fda..0000000 --- a/data/brands/pelco-sarix.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "brand": "Pelco Sarix", - "brand_id": "pelco-sarix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5220", - "B6 PSGE", - "d5118", - "elcome", - "ES5230", - "IBE322-1R", - "IBP110-er", - "id10", - "IJP221-1IS", - "IL-10", - "IM-10", - "IM10C10", - "IM-10C10ADDWXR1", - "IM-10DN101E", - "IME", - "IME219-AEFTGV5", - "IME322", - "imm270", - "IM-P11101", - "IMP221-1RS", - "IMP319-1E", - "IMP-321", - "IM-S0C10", - "IM-S0LW", - "IX-E20DN", - "IX-P11", - "IXS0C", - "Other", - "pelco", - "Sarix", - "Sarix ID", - "SARIX ID", - "SARIX PRO", - "SARIX PRO2", - "SARIXIP", - "Tim" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "D5118", - "IDE20DN", - "IJP121-1IS", - "IJP221-1IS", - "im10c10", - "IMP319-1E", - "IX-10", - "IX-E20DN", - "Other", - "Sarix", - "SARIX ID", - "SARIX IMS0", - "SARIX PRO", - "SARIXIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "IBP110-er", - "id10", - "SARIX PRO2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "IBP121-1I", - "imp121-1is", - "IMP319-1E", - "IM-S0C10", - "IX-P11", - "SARIX PRO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/pull" - }, - { - "models": [ - "id10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "IL-10", - "IM-10DN101E", - "IM-S0C10", - "IX-E20DN", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "IME219-AEFTGV5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg.fcgi?mode=real&si=[USERNAME]&mon=1&ch=[CHANNEL]&width=[WIDTH]&height=[HEIGHT]&quality=7&fps=0" - }, - { - "models": [ - "Sarix Enhanced" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/pelco.json b/data/brands/pelco.json deleted file mode 100644 index c81d767..0000000 --- a/data/brands/pelco.json +++ /dev/null @@ -1,439 +0,0 @@ -{ - "brand": "Pelco", - "brand_id": "pelco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cms1", - "D5118", - "D5220", - "D5230", - "D6230", - "D6230L", - "ID10C", - "IM-10C101", - "IM10DN10-1E", - "IM10DN10-1N", - "IM-10DN101V", - "IM10DN10-IV", - "IM10LW10-1E", - "IME119", - "IMM12018", - "IMM12027-1EP", - "IMP1100", - "IMP121A-1IS-T81505624", - "IM-P519", - "IMS-0C10", - "IMS0DN10-1E", - "IPX11", - "IX-10", - "IX-30C", - "IX-30DN", - "IX-DN30", - "IX-E10LW-ADDNRX0", - "IX-E20DN", - "IXE20DN-PO-AAQHXC0", - "IX-P30DN", - "IX-P31", - "IXS0C", - "MS0C10-1V", - "Other", - "S5118", - "SARIX", - "Sarix ID", - "SARIX IMS0", - "SARİX IMS0", - "SARIX PRO", - "Sarix Pro2", - "SarixIP", - "Spectra Enhanced", - "Spectra IV", - "SPECTRA IV", - "Spectra Pro", - "TXB-N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "d3200", - "D5118", - "D5230ADFRZ28", - "D6230L", - "D7230L", - "ES5230", - "harf West", - "IBE329-1R", - "IBP221", - "ID10C", - "IDE20DN", - "IM-10C101", - "IM-10C10ACQTL38", - "IM-10C10AD9603", - "IM-10DN101E", - "IM10DN10-1V", - "IM-10LW10", - "IM10LW10-1E", - "IME119", - "IME219", - "IME219-AEFTGV5", - "IME3", - "IME319", - "IMM12018", - "IMM12027-1EP", - "IMM12036", - "IM-P11101", - "IM-P11101E", - "IMP1110-1-T4", - "IMP121A-1IS-T81505624", - "IMP221-1ES", - "IMP221A-1IS", - "IMP231-1ERS", - "IMP319-1-T41303953", - "IMP321-1RS-T82504427", - "IM-P519", - "IP-110", - "IP-CAMERA-IBP219-ER-T32501860", - "IX-10", - "IX20", - "IX-30C", - "IX-30DN", - "IX-DN30", - "IXE10DN", - "IX-E10LW-ADDNRX0", - "IXE20DN-PO-AAQHXC0", - "IXE51", - "IX-P11", - "IX-P31", - "IXP51", - "IX-P51DN", - "IX-P52DN", - "IXS0DN", - "Loft", - "Net5404T", - "Optera", - "Other", - "P1220-FWH1", - "RCI WA Special", - "S7230L", - "S7240L", - "Sarix", - "SARIX ENHANCED", - "Sarix ID", - "Sarix IMP1110-1E", - "Sarix IMS0", - "SARİX IMS0", - "Sarix Pro", - "SARIX PRO2", - "SarixIP", - "School", - "Spectra IV", - "SPECTRA PRO", - "TXB-N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "d5118", - "Spectra", - "SPECTRA PRO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "D7230L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8088, - "url": "/" - }, - { - "models": [ - "ec101-b3y2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Ensight Sarix", - "IMM12027-1EP", - "IMM12036", - "IM-P11101", - "IM-P11101E", - "IMP231-1ERS", - "IP-Camera-IBP219-ER-T32501860", - "IP-Camera-IBP521-1I-T61500014", - "Other", - "P1220-FWH1", - "SARIX ID" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "evo-05lid", - "EVO-05NCD", - "evo-5", - "Grandeye", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "[CHANNEL]/video.cgi" - }, - { - "models": [ - "IDE10DN", - "IM-10DN101E", - "IP-110", - "IX-E20DN", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "IM-10C101", - "IME219-AEFTGV5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg.fcgi?mode=real&si=[USERNAME]&mon=1&ch=[CHANNEL]&width=[WIDTH]&height=[HEIGHT]&quality=7&fps=0" - }, - { - "models": [ - "IM10DN10-1V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "IMM12027-1EP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "IMM12036", - "ixe32", - "Net5404T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - }, - { - "models": [ - "IMP221-1ES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/sstream1" - }, - { - "models": [ - "IMS10", - "IWP121-1ES" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpeg" - }, - { - "models": [ - "ip mini", - "IP-110", - "Pelco Spectra", - "Spectra", - "spectra enhanced", - "Spectra IV", - "spectraIV-ip" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/jpegControl.php?frameRate=10" - }, - { - "models": [ - "IP-CAMERA-IBP219-ER-T32501860", - "SarixIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - }, - { - "models": [ - "IS90-CHV9X", - "Net_Old", - "Net300Tsmall", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IS90-CHV9X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "IX-E20DN", - "IX-P21", - "IX-P30DN", - "IXP51", - "Other", - "sarix", - "SARIXIP", - "Spectra IV" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/pull" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "vid.cgi?id=[USERNAME]&doc=[PASSWORD]&nc=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Sarix Enhanced" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "Sarix IMS0", - "SARİX IMS0" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg?id=[CHANNEL]" - }, - { - "models": [ - "Spectra IV IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetOneShot?image_size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Spectra IV IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetOneShot?image_size=[WIDTH]x[HEIGHT]&frame_count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/pelconet.json b/data/brands/pelconet.json deleted file mode 100644 index 6ce149c..0000000 --- a/data/brands/pelconet.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Pelconet", - "brand_id": "pelconet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "w/ Spectra" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/pembroke.json b/data/brands/pembroke.json deleted file mode 100644 index 4df3440..0000000 --- a/data/brands/pembroke.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Pembroke", - "brand_id": "pembroke", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PLANETICA-2200", - "PLANETICA-4500V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - } - ] -} \ No newline at end of file diff --git a/data/brands/peoplefu.json b/data/brands/peoplefu.json deleted file mode 100644 index f43ef15..0000000 --- a/data/brands/peoplefu.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Peoplefu", - "brand_id": "peoplefu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FU 1010-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IPC-674", - "IPCAM3", - "IPCAM5", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/periscope-app.json b/data/brands/periscope-app.json deleted file mode 100644 index 602a560..0000000 --- a/data/brands/periscope-app.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "brand": "Periscope App", - "brand_id": "periscope-app", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/petawise.json b/data/brands/petawise.json deleted file mode 100644 index bcf6bb6..0000000 --- a/data/brands/petawise.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Petawise", - "brand_id": "petawise", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PW424F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/petiszobaja.json b/data/brands/petiszobaja.json deleted file mode 100644 index ef7b82f..0000000 --- a/data/brands/petiszobaja.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Petiszobaja", - "brand_id": "petiszobaja", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Huawei" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/pheenet.json b/data/brands/pheenet.json deleted file mode 100644 index 901b0bc..0000000 --- a/data/brands/pheenet.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "brand": "Pheenet", - "brand_id": "pheenet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "Mcas-100", - "MCAS100", - "Mcas300", - "MCAS-400PT", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "151", - "153", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "MCAS-400PT", - "MCAS-400PTG" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - } - ] -} \ No newline at end of file diff --git a/data/brands/philco.json b/data/brands/philco.json deleted file mode 100644 index fc008e3..0000000 --- a/data/brands/philco.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Philco", - "brand_id": "philco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "W3860" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/philips.json b/data/brands/philips.json deleted file mode 100644 index 5437224..0000000 --- a/data/brands/philips.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Philips", - "brand_id": "philips", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "SPC1300NC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/phobe-micro-ink.json b/data/brands/phobe-micro-ink.json deleted file mode 100644 index 3a8f913..0000000 --- a/data/brands/phobe-micro-ink.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Phobe Micro Ink", - "brand_id": "phobe-micro-ink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cam_1.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/phonescam.json b/data/brands/phonescam.json deleted file mode 100644 index 34c1cc1..0000000 --- a/data/brands/phonescam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Phonescam", - "brand_id": "phonescam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BRICK QD300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "H264-IPCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/photonisvip.json b/data/brands/photonisvip.json deleted file mode 100644 index ef2b705..0000000 --- a/data/brands/photonisvip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Photonisvip", - "brand_id": "photonisvip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OurCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/videoinput_1:0/h264_1/onvif.stm" - } - ] -} \ No newline at end of file diff --git a/data/brands/phylink.json b/data/brands/phylink.json deleted file mode 100644 index 5dbab9b..0000000 --- a/data/brands/phylink.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Phylink", - "brand_id": "phylink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "233w", - "325PW", - "hd720", - "Other", - "pc233s", - "Phylink Cube HD1028", - "plc 325w", - "PLC-129PW", - "PLC-233W", - "plc-325pw", - "plc-335", - "PLC-335PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Bullet HD", - "HD PLC-223W", - "Other", - "PLC-128PW", - "PLC-132PW", - "PLC-233W", - "PLC-335PW", - "plc-335spw", - "PLC-336PW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "hd plc-223w", - "plc-233w", - "PLC-325PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/phytech.json b/data/brands/phytech.json deleted file mode 100644 index 52466f1..0000000 --- a/data/brands/phytech.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Phytech", - "brand_id": "phytech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "PLC-128PW", - "PLC-129PW", - "PLC-325 PW", - "PLC-335PW", - "PLC-336PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "plc-128w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/picotech.json b/data/brands/picotech.json deleted file mode 100644 index bb3a323..0000000 --- a/data/brands/picotech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Picotech", - "brand_id": "picotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PC - 680IRPW" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/piczel.json b/data/brands/piczel.json deleted file mode 100644 index c6ebc40..0000000 --- a/data/brands/piczel.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Piczel", - "brand_id": "piczel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3500/3505" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pilot.json b/data/brands/pilot.json deleted file mode 100644 index 83a709d..0000000 --- a/data/brands/pilot.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Pilot", - "brand_id": "pilot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IGUARD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/pimfg.json b/data/brands/pimfg.json deleted file mode 100644 index d8d4723..0000000 --- a/data/brands/pimfg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pimfg", - "brand_id": "pimfg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR-MP-4s-500g" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pinetron.json b/data/brands/pinetron.json deleted file mode 100644 index dea2e87..0000000 --- a/data/brands/pinetron.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Pinetron", - "brand_id": "pinetron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IZ22", - "PDR-XM DVR", - "PNC-IZ22" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "monitor.cgi?Channel=[CHANNEL]&Audio=0000&Live=1" - }, - { - "models": [ - "PNC-IX1083P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pinnacle.json b/data/brands/pinnacle.json deleted file mode 100644 index 190fb89..0000000 --- a/data/brands/pinnacle.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pinnacle", - "brand_id": "pinnacle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "phs-4516u" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/pintu.json b/data/brands/pintu.json deleted file mode 100644 index 9a543c7..0000000 --- a/data/brands/pintu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pintu", - "brand_id": "pintu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCD DOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/pipc.json b/data/brands/pipc.json deleted file mode 100644 index f946d0d..0000000 --- a/data/brands/pipc.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Pipc", - "brand_id": "pipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "480wf" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "480wf" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "480wf 1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pipcam.json b/data/brands/pipcam.json deleted file mode 100644 index 3314b37..0000000 --- a/data/brands/pipcam.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Pipcam", - "brand_id": "pipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3128", - "366357", - "432" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "3425", - "584" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "HD17" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD17" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "pipcam5" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/piper.json b/data/brands/piper.json deleted file mode 100644 index 053416c..0000000 --- a/data/brands/piper.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Piper", - "brand_id": "piper", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Classic" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/img/video.sav" - } - ] -} \ No newline at end of file diff --git a/data/brands/pir.json b/data/brands/pir.json deleted file mode 100644 index 76385a8..0000000 --- a/data/brands/pir.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Pir", - "brand_id": "pir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WF-450" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "WF-450" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pisocosina.json b/data/brands/pisocosina.json deleted file mode 100644 index 45d9730..0000000 --- a/data/brands/pisocosina.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pisocosina", - "brand_id": "pisocosina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/pixart.json b/data/brands/pixart.json deleted file mode 100644 index 291d9ad..0000000 --- a/data/brands/pixart.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pixart", - "brand_id": "pixart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/pixeye.json b/data/brands/pixeye.json deleted file mode 100644 index dd4a0b1..0000000 --- a/data/brands/pixeye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pixeye", - "brand_id": "pixeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ck 868" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/pixmy.json b/data/brands/pixmy.json deleted file mode 100644 index 92dcbaa..0000000 --- a/data/brands/pixmy.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Pixmy", - "brand_id": "pixmy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Shenzhen spy camera 1080", - "spy camera 1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1452d3fe69e9ddfb3023db6d76f2a75f_1" - }, - { - "models": [ - "spy cam 1080 shenzhen camera", - "spy camera 1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1452d3fe69e9ddfb3023db6d76f2a75f_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/pixord.json b/data/brands/pixord.json deleted file mode 100644 index f87dd20..0000000 --- a/data/brands/pixord.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "brand": "Pixord", - "brand_id": "pixord", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100 Series", - "120", - "200 Series", - "201P", - "205p", - "Lennart P465", - "Other", - "P120", - "p400", - "P-400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images1full" - }, - { - "models": [ - "100 SERIES", - "Other", - "P-400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "video.h264" - }, - { - "models": [ - "200", - "200 SERIES", - "201P", - "205p", - "261", - "4000 Server Series", - "Other", - "p4000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage?camera=[CHANNEL]&fmt=full" - }, - { - "models": [ - "4000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "4000", - "4000 Server Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images[CHANNEL]sif" - }, - { - "models": [ - "4000", - "Other", - "P-1401 Video Server", - "P-400", - "P-400-2", - "P405", - "P-415M", - "P423" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "4000 Server Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images[CHANNEL]full" - }, - { - "models": [ - "423_LESV", - "P405" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "636", - "Other", - "p606", - "pl621", - "pl621e" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v01" - }, - { - "models": [ - "ND6914E", - "NL621", - "Other", - "P600E", - "pl621" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - }, - { - "models": [ - "Other", - "P-400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "getimage" - }, - { - "models": [ - "Other", - "P405" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Getimage.cgi" - }, - { - "models": [ - "Other", - "P600", - "P600E", - "pb670e", - "pd-614", - "pl621", - "pl621e" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - }, - { - "models": [ - "P-1401 Video Server" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "track[CHANNEL]" - }, - { - "models": [ - "p400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "p400", - "P405", - "p463" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "P-400", - "p412", - "P423" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "P-400" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "P405" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/pixpo.json b/data/brands/pixpo.json deleted file mode 100644 index 450e7dc..0000000 --- a/data/brands/pixpo.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Pixpo", - "brand_id": "pixpo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1Z074A2A0301627785", - "PIX006428BFYZY", - "PIX009491MLJYM", - "PIX009495HURFE", - "PIX010584DFACE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "PIX006428BFYZY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PIX006428BFYZY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PIX006428BFYZY" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "PIX006428BFYZY" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/pixus.json b/data/brands/pixus.json deleted file mode 100644 index 9e05b53..0000000 --- a/data/brands/pixus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pixus", - "brand_id": "pixus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PXD-IWN2E1 RF" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8008, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/pizdets.json b/data/brands/pizdets.json deleted file mode 100644 index 6791a5b..0000000 --- a/data/brands/pizdets.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pizdets", - "brand_id": "pizdets", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "196" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/pizero.json b/data/brands/pizero.json deleted file mode 100644 index 1276274..0000000 --- a/data/brands/pizero.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Pizero", - "brand_id": "pizero", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/plac.json b/data/brands/plac.json deleted file mode 100644 index c2a8396..0000000 --- a/data/brands/plac.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Plac", - "brand_id": "plac", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/plaisio.json b/data/brands/plaisio.json deleted file mode 100644 index 9750cca..0000000 --- a/data/brands/plaisio.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Plaisio", - "brand_id": "plaisio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP CAMERA111" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ipcam02", - "Other", - "TURBOX" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "TURBOX" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "TURBOX-25hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/planet.json b/data/brands/planet.json deleted file mode 100644 index 78477b4..0000000 --- a/data/brands/planet.json +++ /dev/null @@ -1,747 +0,0 @@ -{ - "brand": "Planet", - "brand_id": "planet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101", - "107", - "ICA-107", - "ICA-108", - "ICA-108W", - "ICA-150 MPEG4", - "ICA-350", - "ICA-HM100", - "ICA-HM132/136/316", - "ICA-HM230", - "IVS-H125", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "107", - "ICA-108", - "ICA-108W", - "ica-4200v", - "ICA-510", - "ICA-5250V", - "ICA-M220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "107", - "IC-107", - "ICA-107", - "ICA-108w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "1080p", - "bullet", - "dome", - "ICA 3250", - "ica hm-130", - "ICA-4500v", - "ICA-HM350", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stander/livestream/0/1" - }, - { - "models": [ - "1080p", - "3250", - "admin", - "ICA-3150", - "ICA-3250", - "ica-4250" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stander/livestream/0/0" - }, - { - "models": [ - "210", - "H-625", - "H-652", - "HM-126", - "HM-131", - "ICA HM351", - "ICA-1200", - "ICA-150", - "ICA-210", - "ICA-651", - "ICA-HC652", - "ICA-HM 312", - "ICA-HM100", - "ICA-HM126", - "ICA-HM132", - "ICA-HM132/136/316", - "ICA-HM136", - "ICA-HM210", - "ICA-HM620", - "ICA-HM718", - "IVS-H125", - "IVS-H125p", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "211", - "H-652", - "HM-126", - "HM-351", - "ICA-100C", - "ICA-108", - "ICA-108W", - "ICA-1200", - "ICA-150 MPEG4", - "ICA-210", - "ICA-2200", - "ICA-500", - "ICA-510", - "ICA-HM100", - "ICA-HM101", - "ICA-HM120", - "ICA-HM130", - "ICA-HM132", - "ICA-HM132/136/316", - "ICA-HM230", - "ICA-HM620", - "ICA-M220", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "h264" - }, - { - "models": [ - "500", - "ICA", - "ICA 300", - "ICA-500", - "ICA-500-MAG", - "ica-500-pa", - "ica-5ICA-500-PA00", - "ICA-HM100", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "550", - "ICA-HM", - "ICA-HM132", - "ICA-HM132/136/316", - "IVS-H125", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "v2" - }, - { - "models": [ - "BC-5010", - "HM-227W", - "ICA", - "ICA-107", - "ICA-108", - "ICA-2200", - "ICA-700", - "ICA-E5550V", - "ICA-HM101", - "ICA-HM132/136/316", - "ICA-HM230", - "ICA-HM317", - "ICA-HM350", - "ICA-M227", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "CS-32C65E", - "ICA-100C", - "ics100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "hm.130", - "ICA-100C", - "ICA-108", - "ICA-108W", - "ICA-210", - "ICA-500", - "ICA-HM100", - "ICA-HM120", - "ICA-HM132/136/316", - "ICA-HM230", - "ICA-M220", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "HM-1126", - "ICA-HM120", - "ICA-HM125", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/admin/snapshot.cgi" - }, - { - "models": [ - "hm-126", - "HM610", - "ICA-108W", - "ICA-210", - "ICA-220-nr1", - "ICA-4200V", - "ICA-530", - "ICA-8350", - "ICA-HM126", - "ICA-HM312", - "IVS-H125", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "HM-126" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp?videocodec=h264&resolution=640x480" - }, - { - "models": [ - "HM-126", - "ICA 3350", - "ICA-107", - "ICA-2200", - "ICA-510", - "ICA-530n", - "ICA-5350V", - "ICA-8350", - "ICA-HM126", - "ICA-W1200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "HM-126", - "hm-131", - "HM-131", - "hm-31", - "ICA", - "ica-hm126", - "Other", - "PLANET ICA-H652" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "HM-131", - "HM-316w", - "HM-316W", - "ICA-5250", - "ICA-HM136" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/" - }, - { - "models": [ - "HM-132", - "ICA-302", - "ICA-500", - "ICA-HM132", - "ICA-HM132/136/316", - "ICA-HM136", - "ICA-MS8350", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=2" - }, - { - "models": [ - "HM-227W", - "ICA-HM132/136/316", - "ICA-HM317" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ICA", - "ICA-108", - "ICA-120", - "ICA-510", - "ICA-5350v", - "ICA-8350", - "ICA-HM 312", - "ICA-M4320P", - "nevim1", - "nevim2", - "Other", - "Planet ICA-H652" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.cgi" - }, - { - "models": [ - "ica 550w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ICA100", - "ica-110", - "ICA-210W", - "ICA300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "ica100c" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "ICA-100C", - "ICA-108", - "ICA-HM100", - "ICA-HM101", - "ICA-HM132/136/316", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/video.jpg" - }, - { - "models": [ - "ICA-100C", - "ICA-100pe", - "ICA-110", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "ICA-100C", - "ICA-108", - "ICA-108W", - "ICA--750", - "ICA-750-PA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "ICA-100C", - "ICA-108W", - "ICA-HM100", - "ICA-HM100W", - "ICA-HM230", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ICA-106", - "ICA-150 MPEG4", - "ICA-510", - "ICA-550", - "ICA-700", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "ICA-107", - "ica-108", - "ICA-510", - "ICA-700", - "ICA-HC652" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "ICA-107", - "ICA-107P", - "ica-107w", - "ICA-108p", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "ICA-108", - "ICA-HM100", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "ICA-108", - "ICA-210", - "ICA-HM100", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "ICA-108", - "ICA-108W", - "ICA-HM100", - "ICA-HM230", - "IVS-H125", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ICA-110", - "ICA-110W", - "ICA-210", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "ICA-150", - "ICA-550", - "ICA-700", - "ICA-HM101", - "ICA-HM132/136/316" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "ica3350V", - "IVS-H125P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ICA-4480" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "ICA-500", - "ica-500-pa", - "ICA-HM100", - "ICA-HM101" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "ica-500-pa" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/Jpeg/CamImg.jpg" - }, - { - "models": [ - "ICA-510", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "ICA-510" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "ICA-510", - "ICA-5350V", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "ICA-HM100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "ICA-HM120" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "media/media.amp" - }, - { - "models": [ - "ICA-HM132", - "ICA-HM132/136/316", - "ICA-HM718", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "ICA-HM132/136/316", - "ICA-M220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "ICA-HM132/136/316", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/ch1/sub/" - }, - { - "models": [ - "ICA-HM-220W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "ICA-M220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "ICA-W8100", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live1.sdp" - }, - { - "models": [ - "IVS-H125" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ipcam.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmp/snap.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/planex.json b/data/brands/planex.json deleted file mode 100644 index 96298cc..0000000 --- a/data/brands/planex.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "brand": "Planex", - "brand_id": "planex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS-QP50F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "CS-TX02F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "CS-TX04", - "CS-W05N", - "CS-W06N", - "CS-W50FHD", - "CS-W60HD", - "CS-W70HD", - "CS-W72FHD", - "CS-W95HD", - "CS-WMV04", - "CS-WMV0402", - "CS-WMV04N", - "CS-wmv04n2", - "dcs-930l", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "CS-W04G", - "CS-W06N", - "CS-W95HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "CS-W04G", - "CS-W05N", - "CS-WMV04", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "CS-W04G", - "CS-WMV04", - "CS-WMV043G-NV", - "CS-WMV04N", - "CS-wmv04n2", - "CS-WV4N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "CS-W05N" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/1/image.jpg" - }, - { - "models": [ - "CS-W06N", - "CS-W60HD", - "CS-W60N", - "CS-W72FHD", - "CS-W80HD", - "CS-W95HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CS-W06N", - "CS-W80FHD", - "CS-W95HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "CS-W50FHD", - "CS-W72FHD", - "CS-W80FHD", - "CS-W95HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=1" - }, - { - "models": [ - "CS-W70HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "CS-W72FHD", - "CS-W80FHD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "CS-W72FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/strm1" - }, - { - "models": [ - "CS-W80FHD", - "CS-W80HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "CS-W80HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "CS-W80HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream" - }, - { - "models": [ - "CS-WMV02", - "CS-WMV02G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "CS-WMV02", - "CS-WMV02G", - "CS-WMV04" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "CS-WMV04" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "CS-WMV04N2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "CS-WV4N", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "PLANEX IPCAM264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/plantron.json b/data/brands/plantron.json deleted file mode 100644 index 971654f..0000000 --- a/data/brands/plantron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Plantron", - "brand_id": "plantron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "143ZP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/platinum.json b/data/brands/platinum.json deleted file mode 100644 index 5436043..0000000 --- a/data/brands/platinum.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "brand": "Platinum", - "brand_id": "platinum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CMIP7422-M", - "CMIP8042-28", - "CMIP8322W-M", - "CM-PI-2MP-DH", - "IPC-2M2023", - "LV-CTP4134", - "PTZIP212X20-C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/plc.json b/data/brands/plc.json deleted file mode 100644 index 845c6cf..0000000 --- a/data/brands/plc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Plc", - "brand_id": "plc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CS-TX04F" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/plenty.json b/data/brands/plenty.json deleted file mode 100644 index eac85a6..0000000 --- a/data/brands/plenty.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "brand": "Plenty", - "brand_id": "plenty", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c50 pro", - "C50-PRO", - "IP-J03", - "IP-J03-KS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP-J03", - "IP-J03-KS", - "IP-J03-WS", - "IP-J05-WS", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IP-J03", - "IP-J03-KS", - "IP-J03-WS", - "IP-T03-KS", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP-J03" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP-J03-KS", - "IP-J03-WS", - "IP-J05-WS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-J03-WS", - "J03" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IP-J03-WS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/plexonics.json b/data/brands/plexonics.json deleted file mode 100644 index 37a6f11..0000000 --- a/data/brands/plexonics.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Plexonics", - "brand_id": "plexonics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AMTKAN2573D-A4F4AAO", - "PL 7573" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/plustek.json b/data/brands/plustek.json deleted file mode 100644 index 503bb81..0000000 --- a/data/brands/plustek.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Plustek", - "brand_id": "plustek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "P1000", - "P1100", - "SLIM 240 NVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - }, - { - "models": [ - "P1000", - "P2000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video?Acc=[USERNAME]?Pwd=[PASSWORD]?webcamPWD=UserCookie00000" - }, - { - "models": [ - "P1000", - "P2000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/Stream?Video?Acc=[USERNAME]?Pwd=[PASSWORD]?webcamPWD=UserCookie00000" - }, - { - "models": [ - "Slim 240 NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/plv.json b/data/brands/plv.json deleted file mode 100644 index 2f4f421..0000000 --- a/data/brands/plv.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Plv", - "brand_id": "plv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome", - "NC402CZE", - "NC416ME", - "NC801AW", - "nc811bde", - "NC-813RW", - "PLV01", - "PLV02", - "PLV837", - "PLV-NC318W", - "PLV-NC402CZE", - "PLV-NC416ME", - "PLV-NC713RW", - "PLV-NC811KE", - "PLV-NC813W", - "PLV-NC816ME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DOME", - "NC713RW", - "PLV-NC713RW", - "RC720AW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "K9604-W", - "NC611W", - "PLV NC611W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "NC611W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/view.html" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "PLV-NC713RW" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/pni.json b/data/brands/pni.json deleted file mode 100644 index 9400c00..0000000 --- a/data/brands/pni.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "brand": "Pni", - "brand_id": "pni", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000 Linii" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "1000 Linii" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "541W", - "720", - "IP541W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "541W", - "anaview", - "IP541W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "541W", - "651" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "541W", - "641", - "IP541W", - "IP641W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "631w", - "631W", - "IP31", - "IP32" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "650", - "651", - "IP451W", - "IP651W", - "IP751W", - "IP941W", - "IP951W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "801" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "941w", - "IP941W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP125 5MP", - "IP31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IP12MP", - "IP1MP", - "IP20MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "IP20MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IP451W", - "IP541W", - "IP941W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP541W", - "IP641W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "IP720p" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "IP720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP720P", - "IP941W", - "IP951W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP720P-1", - "IP941W", - "IP951W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IP941W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IP941W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "IP941W", - "IP951W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP951W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "PNI IP240" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/pnp.json b/data/brands/pnp.json deleted file mode 100644 index 9372b4a..0000000 --- a/data/brands/pnp.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Pnp", - "brand_id": "pnp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVYE-I391" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "HW0043", - "p2p", - "WHX-145132-dfdbb" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP WIRELESS", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IP WIRELESS", - "JWEV-207091-AEBCA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/pnzeo.json b/data/brands/pnzeo.json deleted file mode 100644 index 7be1856..0000000 --- a/data/brands/pnzeo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pnzeo", - "brand_id": "pnzeo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pnzeo w2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/podofo.json b/data/brands/podofo.json deleted file mode 100644 index cbf28b7..0000000 --- a/data/brands/podofo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Podofo", - "brand_id": "podofo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SH4AMPOD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/poe.json b/data/brands/poe.json deleted file mode 100644 index 23f7aa3..0000000 --- a/data/brands/poe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Poe", - "brand_id": "poe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ptz" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/polaris-usa.json b/data/brands/polaris-usa.json deleted file mode 100644 index 0f95ef0..0000000 --- a/data/brands/polaris-usa.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Polaris-usa", - "brand_id": "polaris-usa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MP-IP-BT" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "2MP-IP-BT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/polarity.json b/data/brands/polarity.json deleted file mode 100644 index fec7000..0000000 --- a/data/brands/polarity.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Polarity", - "brand_id": "polarity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OC810" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/polaroid.json b/data/brands/polaroid.json deleted file mode 100644 index 0162568..0000000 --- a/data/brands/polaroid.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "brand": "Polaroid", - "brand_id": "polaroid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2.6", - "IP-100", - "IP-200B", - "IP-200W", - "IP-302", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "201B", - "IP-101", - "IP-302", - "IP351", - "Other", - "POLIP201W", - "POLIP351S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "300", - "300B", - "350", - "IP-200B", - "IP-200W", - "IP-300", - "IP-300B", - "IP300W", - "IP-302", - "IP-350", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "300", - "351s", - "IP-300", - "IP-810RW", - "POLIP201W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "300", - "IP-101", - "IP201W", - "POLIP351S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 152, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "351S", - "IP-100", - "IP-101W", - "IP200", - "IP-200B", - "IP-201B", - "IP-350", - "IP-351S", - "IP-360S", - "IP-810W", - "IP-810WZ", - "Other", - "P351S", - "POLIP101W", - "POLIP201B", - "POLIP201W", - "POLIP351S", - "POLIP35i5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "b300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "ip 300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IP-100", - "IP-200B", - "IP-300", - "IP-300W", - "IP-302", - "IP302B", - "IP350", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ip-200w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "IP-200W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "IP-300", - "IP-302", - "IP-302W", - "IP-350" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "POLI201W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "POLI201W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "tablet" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "www" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/policetech.json b/data/brands/policetech.json deleted file mode 100644 index 5899061..0000000 --- a/data/brands/policetech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Policetech", - "brand_id": "policetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/pollo.json b/data/brands/pollo.json deleted file mode 100644 index 7e593b5..0000000 --- a/data/brands/pollo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pollo", - "brand_id": "pollo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PC4M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/poly.json b/data/brands/poly.json deleted file mode 100644 index fa02f47..0000000 --- a/data/brands/poly.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Poly", - "brand_id": "poly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/polycom.json b/data/brands/polycom.json deleted file mode 100644 index 2a3e05b..0000000 --- a/data/brands/polycom.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Polycom", - "brand_id": "polycom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "viewstationex" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PN20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "pvs-14xx" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SP 128", - "VFX", - "View Station EX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/polyvision.json b/data/brands/polyvision.json deleted file mode 100644 index 7566da1..0000000 --- a/data/brands/polyvision.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Polyvision", - "brand_id": "polyvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-IP5ZWNF28PF", - "PVC-IP2Y-D1F2.8P", - "PVC-IP2Y-DV5PA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - }, - { - "models": [ - "Other", - "PD20-M2-B3", - "PD-3.6", - "PDL", - "PDL-IP2-V13P v.5.4.9", - "PDM-IP1", - "PN-IP2-B3.6", - "PNM-IP2-V12", - "PVC-IP2M", - "PVC-IP2M-DF2.8PA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "PVC-IP2Y-D1F2.8P", - "PVC-IP2Y-DV5PA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/popp.json b/data/brands/popp.json deleted file mode 100644 index 370fe91..0000000 --- a/data/brands/popp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Popp", - "brand_id": "popp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Home" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/010129123.112borsti" - } - ] -} \ No newline at end of file diff --git a/data/brands/porta.json b/data/brands/porta.json deleted file mode 100644 index b06223d..0000000 --- a/data/brands/porta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Porta", - "brand_id": "porta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hyd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/positivo.json b/data/brands/positivo.json deleted file mode 100644 index 5efb0c8..0000000 --- a/data/brands/positivo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Positivo", - "brand_id": "positivo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Camera BOT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/posonic.json b/data/brands/posonic.json deleted file mode 100644 index 8a73c71..0000000 --- a/data/brands/posonic.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Posonic", - "brand_id": "posonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3MP", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/powerbizt.json b/data/brands/powerbizt.json deleted file mode 100644 index 0e8eb11..0000000 --- a/data/brands/powerbizt.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Powerbizt", - "brand_id": "powerbizt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-Pro 52030", - "Other", - "SPRO-5103IM", - "TCIP T-Typ2020x", - "TCIPE-Pro53030 IRMDN" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other", - "TCIP-LPro213WDRMDN" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/powerextra.json b/data/brands/powerextra.json deleted file mode 100644 index 2148b81..0000000 --- a/data/brands/powerextra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Powerextra", - "brand_id": "powerextra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/powerlead.json b/data/brands/powerlead.json deleted file mode 100644 index 7b7d3ca..0000000 --- a/data/brands/powerlead.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Powerlead", - "brand_id": "powerlead", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Caue PC012" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PC012" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/powerpack.json b/data/brands/powerpack.json deleted file mode 100644 index 2b549ec..0000000 --- a/data/brands/powerpack.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Powerpack", - "brand_id": "powerpack", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "202" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/prada.json b/data/brands/prada.json deleted file mode 100644 index 6e5674c..0000000 --- a/data/brands/prada.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Prada", - "brand_id": "prada", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PC-NVD-325R" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - } - ] -} \ No newline at end of file diff --git a/data/brands/praxis.json b/data/brands/praxis.json deleted file mode 100644 index 4bdf372..0000000 --- a/data/brands/praxis.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "brand": "Praxis", - "brand_id": "praxis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1013", - "M3047-P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "1343", - "5914", - "AXIS M7010", - "Q6034-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp" - }, - { - "models": [ - "213 PTZ", - "P3301" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "213 PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "216fd" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "240Q" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "240Q" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "3025", - "AXIS M7010", - "mkv" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "P1344-E", - "P3214-V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp?videocodec=h264&resolution=640x480" - }, - { - "models": [ - "P3214", - "ptz 5914", - "Q6042-E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "P3215-VE NETWORK CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "P3224-VE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif-media/media.amp" - }, - { - "models": [ - "PB-7145IP 2.8-12" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/predator.json b/data/brands/predator.json deleted file mode 100644 index f49217b..0000000 --- a/data/brands/predator.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Predator", - "brand_id": "predator", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ_1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264main" - } - ] -} \ No newline at end of file diff --git a/data/brands/premier.json b/data/brands/premier.json deleted file mode 100644 index 56259b5..0000000 --- a/data/brands/premier.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Premier", - "brand_id": "premier", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Outdoor Camera", - "Outdoor Surveilance" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/premiumblue.json b/data/brands/premiumblue.json deleted file mode 100644 index a444281..0000000 --- a/data/brands/premiumblue.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Premiumblue", - "brand_id": "premiumblue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "PIPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "pipc-011" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "pipc-011" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0" - }, - { - "models": [ - "pipc-011" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/prestel.json b/data/brands/prestel.json deleted file mode 100644 index 430bfd0..0000000 --- a/data/brands/prestel.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Prestel", - "brand_id": "prestel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "420ip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "HD-PTZ8IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/prikim.json b/data/brands/prikim.json deleted file mode 100644 index 16db58a..0000000 --- a/data/brands/prikim.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Prikim", - "brand_id": "prikim", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BDs Dome" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/prime.json b/data/brands/prime.json deleted file mode 100644 index 4983719..0000000 --- a/data/brands/prime.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Prime", - "brand_id": "prime", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264/multicast" - } - ] -} \ No newline at end of file diff --git a/data/brands/pripaso.json b/data/brands/pripaso.json deleted file mode 100644 index 060bb88..0000000 --- a/data/brands/pripaso.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pripaso", - "brand_id": "pripaso", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MPT01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/pristenek.json b/data/brands/pristenek.json deleted file mode 100644 index 5761611..0000000 --- a/data/brands/pristenek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Pristenek", - "brand_id": "pristenek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EX-S06WM-3W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/pritech.json b/data/brands/pritech.json deleted file mode 100644 index c9c067b..0000000 --- a/data/brands/pritech.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Pritech", - "brand_id": "pritech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "541w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "541w", - "JW0005" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "541w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/privileg.json b/data/brands/privileg.json deleted file mode 100644 index f73a1a6..0000000 --- a/data/brands/privileg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Privileg", - "brand_id": "privileg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/proba.json b/data/brands/proba.json deleted file mode 100644 index 675c3de..0000000 --- a/data/brands/proba.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Proba", - "brand_id": "proba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mazi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/probe-digital.json b/data/brands/probe-digital.json deleted file mode 100644 index a8235a9..0000000 --- a/data/brands/probe-digital.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Probe Digital", - "brand_id": "probe-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTI-H2100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/procam.json b/data/brands/procam.json deleted file mode 100644 index ddb4cd7..0000000 --- a/data/brands/procam.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Procam", - "brand_id": "procam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC300", - "NC400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "NC360" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "PC-S/A795H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/ch2" - }, - { - "models": [ - "PC-S/A795H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/ch3" - } - ] -} \ No newline at end of file diff --git a/data/brands/procctv.json b/data/brands/procctv.json deleted file mode 100644 index 949bbc3..0000000 --- a/data/brands/procctv.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "brand": "Procctv", - "brand_id": "procctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CamView H Series", - "CamView P Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "CamView H Series", - "CamView J Series", - "Pet\\'zView" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "CamView J Series", - "Pet\\'zView" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "CamView P Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpegStreamer.cgi" - }, - { - "models": [ - "H5523w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "H5523w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/produttore-ignoto-%23!.json b/data/brands/produttore-ignoto-%23!.json deleted file mode 100644 index a892c4e..0000000 --- a/data/brands/produttore-ignoto-%23!.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Produttore Ignoto #!", - "brand_id": "produttore-ignoto-%23!", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Wireless interno" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/proelite.json b/data/brands/proelite.json deleted file mode 100644 index 4df7f5f..0000000 --- a/data/brands/proelite.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Proelite", - "brand_id": "proelite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP01A", - "Ip01ax", - "ProElite POD04" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP01A", - "IP01AX", - "Other", - "pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/proimage.json b/data/brands/proimage.json deleted file mode 100644 index 54d7764..0000000 --- a/data/brands/proimage.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Proimage", - "brand_id": "proimage", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PROI0704" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/prok-electronics.json b/data/brands/prok-electronics.json deleted file mode 100644 index 38ab7db..0000000 --- a/data/brands/prok-electronics.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Prok Electronics", - "brand_id": "prok-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVCIP", - "CVIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "CVCIP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "CVCIP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/prolab-security.json b/data/brands/prolab-security.json deleted file mode 100644 index 697011f..0000000 --- a/data/brands/prolab-security.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Prolab Security", - "brand_id": "prolab-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/video0" - } - ] -} \ No newline at end of file diff --git a/data/brands/proline-uk.json b/data/brands/proline-uk.json deleted file mode 100644 index ebbb923..0000000 --- a/data/brands/proline-uk.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Proline Uk", - "brand_id": "proline-uk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H210" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "IP-HD101B", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/proline.json b/data/brands/proline.json deleted file mode 100644 index 50adad1..0000000 --- a/data/brands/proline.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Proline", - "brand_id": "proline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PR-ID2234FCX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/prolink.json b/data/brands/prolink.json deleted file mode 100644 index 3497f1d..0000000 --- a/data/brands/prolink.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Prolink", - "brand_id": "prolink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "PIC-1003", - "PIC-1003WP", - "PIC-1006WN", - "PIC1006WN-HD", - "PIC-1010WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other", - "PIC-1003WP", - "PIC1006WN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PIC-1003", - "PIC-1003WP", - "PIC1006WN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/prolook.json b/data/brands/prolook.json deleted file mode 100644 index 54a87ea..0000000 --- a/data/brands/prolook.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Prolook", - "brand_id": "prolook", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "arka" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "arka" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/prolynx.json b/data/brands/prolynx.json deleted file mode 100644 index 84621a6..0000000 --- a/data/brands/prolynx.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Prolynx", - "brand_id": "prolynx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PL", - "PL-4NBC35" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "pl-wc0521", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/promax-usa.json b/data/brands/promax-usa.json deleted file mode 100644 index f742567..0000000 --- a/data/brands/promax-usa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Promax Usa", - "brand_id": "promax-usa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NV-1600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/promelit.json b/data/brands/promelit.json deleted file mode 100644 index 581e78a..0000000 --- a/data/brands/promelit.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Promelit", - "brand_id": "promelit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MP20" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Sentry H-230" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "SENTRY H-230" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/pronext.json b/data/brands/pronext.json deleted file mode 100644 index 7ae2369..0000000 --- a/data/brands/pronext.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Pronext", - "brand_id": "pronext", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Anibal" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "mp30w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/proscan.json b/data/brands/proscan.json deleted file mode 100644 index aa70536..0000000 --- a/data/brands/proscan.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Proscan", - "brand_id": "proscan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "plt1052" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "PLT1052" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "sys" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/provecam.json b/data/brands/provecam.json deleted file mode 100644 index bc23894..0000000 --- a/data/brands/provecam.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Provecam", - "brand_id": "provecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ip2521" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP2521" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "IP2521" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "IP2521" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IP2521" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/provideo.json b/data/brands/provideo.json deleted file mode 100644 index b354f82..0000000 --- a/data/brands/provideo.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Provideo", - "brand_id": "provideo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "prva" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/g711v1" - }, - { - "models": [ - "SD-65/75XMP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "SD-65/75XMP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v2" - } - ] -} \ No newline at end of file diff --git a/data/brands/proview.json b/data/brands/proview.json deleted file mode 100644 index 60889b4..0000000 --- a/data/brands/proview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Proview", - "brand_id": "proview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SM-PR5036" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=admin_password=[PASSWORD]_channel=0_stream=0&onvif=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/provision.json b/data/brands/provision.json deleted file mode 100644 index a252aba..0000000 --- a/data/brands/provision.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "brand": "Provision", - "brand_id": "provision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360", - "dai-310iph04", - "DAI-390PA36", - "DAI-480IPE28", - "DI-330IPS36", - "DI-340IPE-28", - "DI-390IPS36", - "DS-2CD1131-I", - "I2-320IPSN-28", - "I3-330IPSVF", - "I3-380IP04", - "I5PT-390IPX4-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "717", - "F-717", - "PT-737", - "wp-717" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "717", - "F-717", - "F-737", - "ISR", - "PT-737", - "PT-838", - "WP-711", - "WP-717P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "717", - "F-717", - "isr", - "Other", - "pt-737", - "PT-737", - "pt-737e" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "737", - "PT-737" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "737" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "DI-350IP5S28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "DI-390IPS36", - "I5PT-390IPX10 / +" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile3" - }, - { - "models": [ - "F-717", - "PT-737" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "i5pt-390ipx10-p", - "ISR", - "pt-373", - "PT-737", - "PT-737E", - "PT-838", - "PTP-838", - "PV-WP-717" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "PT-737" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "PT-838" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10080, - "url": "/" - }, - { - "models": [ - "wp-717" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 911, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/provisual.json b/data/brands/provisual.json deleted file mode 100644 index 8c7fec1..0000000 --- a/data/brands/provisual.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Provisual", - "brand_id": "provisual", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DH Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "DH SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ps-link.json b/data/brands/ps-link.json deleted file mode 100644 index 0a12c8b..0000000 --- a/data/brands/ps-link.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Ps-link", - "brand_id": "ps-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GBK50T", - "IP105P", - "NT20220526001", - "Other", - "PS-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/psi-robot.json b/data/brands/psi-robot.json deleted file mode 100644 index e1b581e..0000000 --- a/data/brands/psi-robot.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Psi Robot", - "brand_id": "psi-robot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "456", - "Psi", - "PSI Robot 2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/psp.json b/data/brands/psp.json deleted file mode 100644 index dc14395..0000000 --- a/data/brands/psp.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Psp", - "brand_id": "psp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SN-IPC-4036SW-US" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/psy-link.json b/data/brands/psy-link.json deleted file mode 100644 index 21a3e93..0000000 --- a/data/brands/psy-link.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Psy-link", - "brand_id": "psy-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "128-SPW", - "PLC-128SPW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "xme20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ptcl.json b/data/brands/ptcl.json deleted file mode 100644 index 2f046f0..0000000 --- a/data/brands/ptcl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ptcl", - "brand_id": "ptcl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/ptz05.json b/data/brands/ptz05.json deleted file mode 100644 index b214d07..0000000 --- a/data/brands/ptz05.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ptz05", - "brand_id": "ptz05", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/ptzoptics.json b/data/brands/ptzoptics.json deleted file mode 100644 index dc511d0..0000000 --- a/data/brands/ptzoptics.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "brand": "Ptzoptics", - "brand_id": "ptzoptics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "12X", - "20X-SDI Gen2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "12X-SDI", - "Zcam20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "20X-SDI Gen2", - "30x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "20X-SDI/NDI (PoE)" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "20x-USB", - "PT12X-SDI-GY-G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "30x" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "Box Cam", - "PT20X-SDI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "cc11-sc-i-poe-505" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "PT20X-SDI", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/stream0" - } - ] -} \ No newline at end of file diff --git a/data/brands/pumatronix.json b/data/brands/pumatronix.json deleted file mode 100644 index 9add960..0000000 --- a/data/brands/pumatronix.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Pumatronix", - "brand_id": "pumatronix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ITSCAM401", - "itscam401 lm84" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/pyle.json b/data/brands/pyle.json deleted file mode 100644 index f5e26d7..0000000 --- a/data/brands/pyle.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "brand": "Pyle", - "brand_id": "pyle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam5", - "HD22", - "Other", - "Pipcam12", - "PIPCAM15", - "pipcam25", - "pipcam5" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "D-Link", - "phcm", - "phcm29" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "HD 17", - "HD22", - "HD46", - "HD47", - "MINE", - "Other", - "pipcam 8", - "pipcam65", - "PIPCAMHD17" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD22", - "pip15", - "PIPCAM15", - "PIPCAM25", - "PIPCAM5" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other", - "pipcam" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PIPCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PIPCAMHD17", - "pipcamhd47" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/q-nest.json b/data/brands/q-nest.json deleted file mode 100644 index 713abaf..0000000 --- a/data/brands/q-nest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Q-nest", - "brand_id": "q-nest", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "qn-100s" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "QN-100S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QN-130M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/q-see.json b/data/brands/q-see.json deleted file mode 100644 index b4dc28f..0000000 --- a/data/brands/q-see.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "brand": "Q-see", - "brand_id": "q-see", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "300", - "QC826" - ], - "type": "JPEG", - "protocol": "http", - "port": 85, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "308", - "395", - "8004b", - "8004B", - "958", - "DVR", - "DVR W/ WEB PORT", - "Other", - "QC-308", - "QC-588", - "QC-918B", - "QCN-7001b", - "QCN-7005b", - "QCN-8004B", - "QCN8030D", - "QCN8033B", - "QCN8068B", - "QCN8068D", - "QCW3MP1B", - "QS-9016" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "308", - "DVR", - "DVR w/ Web Port", - "ONVIF", - "Other", - "QC-804", - "QC-804-Channel2", - "QC-804-CHANNEL2", - "QC-804-Channel3", - "QCW2MPSL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "308", - "DVR w/ Web Port", - "Other", - "QC-804-CHANNEL4", - "QCN-8023B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "3MP bullet", - "8002b", - "8004b", - "8012B", - "bullet", - "BULLET", - "DVR w/ Web Port", - "ONVIF", - "Other", - "QC-308", - "QC-40108", - "QC-588", - "QC-7005B", - "QC-804", - "QC-858", - "qcn", - "QCN-7001b", - "QCN-7001B", - "QCN7002D", - "QCN-7005B", - "QCN-8001D", - "QCN-8004B", - "qcn8007b", - "qcn8009d", - "QCN-8012", - "QCN-8012B", - "QCN-8014Z", - "QCN-8023B", - "QCN8025Z", - "QCN-8912B", - "QNC7001B", - "QNC8004B", - "QT5140-4A6-1", - "SD-40212" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "3MP BULLET", - "814", - "BULLET", - "QC-304", - "QC-858" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "3MP BULLET", - "80018D", - "8004", - "8026B", - "8030D", - "Other", - "Other 2", - "QCN-7001b", - "QCN-7005b", - "QCN7005B", - "qcn8033b", - "QTN-8017b", - "QTN-8017B", - "QTN-8019B", - "QTN-8022b", - "QTN-8022D", - "QTN-8040D", - "SD-40212" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "8002", - "Other", - "QCN-7001b", - "QCN-7001B", - "QCN7002D" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "8004", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "8004B", - "Other", - "qc8116", - "QCN-70005b", - "QCN-70005B", - "QCN-8004B", - "QCN8030D", - "QCN8033B" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "8017B", - "C022136GMCIQM", - "QCA8050B", - "QTH81" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "8026B", - "QCN8026B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "8026B", - "8033b", - "QCM-8039D", - "QCN-8009D", - "QCN-8014Z", - "QCN8026b", - "QCN8068B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "8Ch DVR" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "8Ch DVR" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "960H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=8&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "C022136GMCIQM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/PSIA/Streaming/channels/0?videoCodecType=H.264" - }, - { - "models": [ - "C022136GMCIQM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "Car_Fr", - "DVR", - "DVR w/ Web Port", - "DVR W/ WEB PORT", - "NVR", - "ONVIF", - "Other", - "QC304", - "QCN8090B", - "QCN8099B", - "QCW2MP", - "QCW2MPSL", - "qcw3mp16f", - "QCW3MP16F", - "QCW3MP1B", - "QCW4K1MCB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "DVR w/ Web Port", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "DVR w/ Web Port", - "Other", - "QS-408-411" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "ONVIF", - "Other", - "QTN8031B", - "QTN8037BC", - "QTN-8041B", - "QTN8059B-N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/stream_[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg?type=motion" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_unicast_firststream" - }, - { - "models": [ - "Other", - "QCN-7001b" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "Other", - "QCN-7001b" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 85, - "url": "/cgi-bin/snapshot.cgi?3" - }, - { - "models": [ - "QC-304", - "QCN-8028D", - "QCW3MP1B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "QC826" - ], - "type": "JPEG", - "protocol": "http", - "port": 85, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "QC9016" - ], - "type": "JPEG", - "protocol": "http", - "port": 85, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "qcn7006b" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "QCN-8014Z" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "QCN8068B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "QCW2MPSL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authBasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/q-sys.json b/data/brands/q-sys.json deleted file mode 100644 index 100fb53..0000000 --- a/data/brands/q-sys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Q-sys", - "brand_id": "q-sys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/q6-wifi-smart-camera.json b/data/brands/q6-wifi-smart-camera.json deleted file mode 100644 index a0367e1..0000000 --- a/data/brands/q6-wifi-smart-camera.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Q6 Wifi Smart Camera", - "brand_id": "q6-wifi-smart-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "51127207", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_01" - }, - { - "models": [ - "V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/qavi.json b/data/brands/qavi.json deleted file mode 100644 index 07ffd88..0000000 --- a/data/brands/qavi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qavi", - "brand_id": "qavi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/qbus.json b/data/brands/qbus.json deleted file mode 100644 index 35b0a50..0000000 --- a/data/brands/qbus.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Qbus", - "brand_id": "qbus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FASTTEL", - "FT600" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/qcam.json b/data/brands/qcam.json deleted file mode 100644 index 41c289d..0000000 --- a/data/brands/qcam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Qcam", - "brand_id": "qcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "448" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IP2M822E", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "IP2M822E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/qcamera.json b/data/brands/qcamera.json deleted file mode 100644 index db76dd5..0000000 --- a/data/brands/qcamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qcamera", - "brand_id": "qcamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/qeye.json b/data/brands/qeye.json deleted file mode 100644 index 871a24a..0000000 --- a/data/brands/qeye.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Qeye", - "brand_id": "qeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QE-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QE-100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/qgs.json b/data/brands/qgs.json deleted file mode 100644 index 12bc082..0000000 --- a/data/brands/qgs.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Qgs", - "brand_id": "qgs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC031" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "KN-IPC8401A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/qian-yao.json b/data/brands/qian-yao.json deleted file mode 100644 index 38f1f0a..0000000 --- a/data/brands/qian-yao.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qian Yao", - "brand_id": "qian-yao", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QDVR041701P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/qihan.json b/data/brands/qihan.json deleted file mode 100644 index a4d2630..0000000 --- a/data/brands/qihan.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Qihan", - "brand_id": "qihan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "356", - "QH-NV534DS-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp_live/ch0_1" - }, - { - "models": [ - "ccd 104", - "Other", - "QH-IP130LL-WDR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "Other", - "QH-NV534DS-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp_live/ch0_0" - }, - { - "models": [ - "Other", - "rp104" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "QCY-62401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_stream" - }, - { - "models": [ - "QH-ND103AN1-WISM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/qiozdio.json b/data/brands/qiozdio.json deleted file mode 100644 index 72fb46e..0000000 --- a/data/brands/qiozdio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qiozdio", - "brand_id": "qiozdio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD 1080p WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/qnap.json b/data/brands/qnap.json deleted file mode 100644 index 47d3997..0000000 --- a/data/brands/qnap.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "brand": "Qnap", - "brand_id": "qnap", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ics1013" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "ICS-1013" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "ICS-1013" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "ICS-1013", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "VioStor 4012" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi?ch=[CHANNEL]&stream_id=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/qoltec.json b/data/brands/qoltec.json deleted file mode 100644 index 551d817..0000000 --- a/data/brands/qoltec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qoltec", - "brand_id": "qoltec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "50227" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/qtech.json b/data/brands/qtech.json deleted file mode 100644 index 4386850..0000000 --- a/data/brands/qtech.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Qtech", - "brand_id": "qtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "27C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "QVC-IPC-401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264?ch=1&subtype=0" - }, - { - "models": [ - "QVC-IPC-401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264?ch=1&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/quadrant-technology.json b/data/brands/quadrant-technology.json deleted file mode 100644 index a3df363..0000000 --- a/data/brands/quadrant-technology.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Quadrant Technology", - "brand_id": "quadrant-technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "qcp-a356" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "qcp-a356" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/app/camera.html" - }, - { - "models": [ - "qcp-a356" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/app/events.html?partnerId=iSecurityPlus" - }, - { - "models": [ - "qcp-a356" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/app/camera.html?partnerId=iSecurityPlus" - } - ] -} \ No newline at end of file diff --git a/data/brands/qualcomm-incorporated.json b/data/brands/qualcomm-incorporated.json deleted file mode 100644 index 6657989..0000000 --- a/data/brands/qualcomm-incorporated.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Qualcomm Incorporated", - "brand_id": "qualcomm-incorporated", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR81" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ESCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IP3M952E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1030, - "url": "/h264Preview_01_sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/quanmin.json b/data/brands/quanmin.json deleted file mode 100644 index d18785d..0000000 --- a/data/brands/quanmin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Quanmin", - "brand_id": "quanmin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "53H20AF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/qube.json b/data/brands/qube.json deleted file mode 100644 index fe757f9..0000000 --- a/data/brands/qube.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Qube", - "brand_id": "qube", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H.264", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "H.264", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Ip Dome", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/qubo.json b/data/brands/qubo.json deleted file mode 100644 index 79134bd..0000000 --- a/data/brands/qubo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qubo", - "brand_id": "qubo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HCIO1A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/queback.json b/data/brands/queback.json deleted file mode 100644 index aeced82..0000000 --- a/data/brands/queback.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Queback", - "brand_id": "queback", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/questek.json b/data/brands/questek.json deleted file mode 100644 index 36abe65..0000000 --- a/data/brands/questek.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "brand": "Questek", - "brand_id": "questek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "905", - "906", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "905" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "905" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "906", - "QTX 9373" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "908" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "9373", - "9373AIP", - "QTX 9373", - "QTX 9373 IP", - "QTX-9373AIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "W920" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Win 9373", - "Win 9373 IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/qvis.json b/data/brands/qvis.json deleted file mode 100644 index 1c18ad6..0000000 --- a/data/brands/qvis.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "brand": "Qvis", - "brand_id": "qvis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4MP Bullet" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "4MP Bullet", - "Bullet", - "eye 4mp", - "EYE4", - "Eye-4HD", - "HDIPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "AMB-EYE 1.3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif" - }, - { - "models": [ - "AMB-EYE3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=0" - }, - { - "models": [ - "amb-vanir3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "amb-vanir3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "EYE 4MP", - "mb 5mp fw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/qwe.json b/data/brands/qwe.json deleted file mode 100644 index 511772f..0000000 --- a/data/brands/qwe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Qwe", - "brand_id": "qwe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "qweqe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/r-tech.json b/data/brands/r-tech.json deleted file mode 100644 index b985ffd..0000000 --- a/data/brands/r-tech.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "R-tech", - "brand_id": "r-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1220-MHP5JLI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1220-MHP5JLI", - "CA-IP-BV101-W V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "1220-MHP5JLI", - "CA-IP-BV101-W V2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CA-IP-BV101-W V2", - "Other", - "TR House" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "CA-IP-BV101-W V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "CA-IP-BV101-W V2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "CA-IP-BV101-W V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rabbitstorm.json b/data/brands/rabbitstorm.json deleted file mode 100644 index 4af0730..0000000 --- a/data/brands/rabbitstorm.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rabbitstorm", - "brand_id": "rabbitstorm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T3ML042-MX-1833" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/rainbow.json b/data/brands/rainbow.json deleted file mode 100644 index d7512d5..0000000 --- a/data/brands/rainbow.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Rainbow", - "brand_id": "rainbow", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPM14" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "IPV1V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "IPV1V3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ralink.json b/data/brands/ralink.json deleted file mode 100644 index 09a0d64..0000000 --- a/data/brands/ralink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ralink", - "brand_id": "ralink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "l series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/raspberry-pi.json b/data/brands/raspberry-pi.json deleted file mode 100644 index 81d746f..0000000 --- a/data/brands/raspberry-pi.json +++ /dev/null @@ -1,373 +0,0 @@ -{ - "brand": "Raspberry Pi", - "brand_id": "raspberry-pi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "+3 B", - "3B+", - "Mini", - "motion eye", - "MOTION EYE", - "MotionEyeOS", - "PI CAMERA V2", - "Zero W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "+3B", - "MotionCam", - "MotionEyeOS", - "PI 3 B", - "PiCam", - "Webcam", - "Zero W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1st", - "3 B+", - "RaspberryCam", - "Zero W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8000, - "url": "/stream.mjpg" - }, - { - "models": [ - "3 B v 1.2", - "3B+", - "ActionCamMuegge", - "ActionCamStechl", - "Fishcam", - "MOTIOeye", - "Motion", - "motion eye", - "MotionEyeOS", - "NoIR v2", - "PI 3 B", - "PI CAMERA V2", - "Pi NoIR Camera V2", - "Pi Zero", - "PiCam", - "PiZero", - "Rev 1.3", - "v02", - "Zero", - "Zero W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8186, - "url": "/" - }, - { - "models": [ - "3b+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cam_pic_new.php?" - }, - { - "models": [ - "3B+", - "MotionEye", - "MotionEyeDiscovery", - "NOIR", - "octoprint", - "PI CAMERA V2", - "zero", - "Zero W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "4 B", - "Model 3B+", - "MOTIOeye", - "MOTION", - "MOTION EYE", - "MotionCam", - "MotionEye", - "MotionEyeOS", - "MOTIONEYE-Server1", - "PI 3 B", - "PI NOIR CAMERA V2", - "PiZero", - "RaspberryCam", - "RPi Foundation", - "Webcam", - "ZERO", - "Zero W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "B200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "CSIv2", - "Other", - "PI CAMERA V2", - "PI NOIR CAMERA V2", - "RPI2-1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "GearHead", - "Mini", - "motion eye", - "MotionEye", - "NoIR", - "Other", - "PI 3 B", - "PI CAMERA V2", - "PiCam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Motion", - "motion eye", - "MotionEyeOS", - "NoIR", - "Pi NoIR Camera V2", - "Pi4", - "PiCam", - "PiZero", - "RaspberryCam", - "Webcam", - "Zero", - "Zero W", - "zero w noir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/stream" - }, - { - "models": [ - "Motion", - "MOTIONPIE", - "Other", - "Pi NoIR Camera V2", - "PI NOIR CAMERA V2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Motion", - "MotionEyeOS", - "PiCam", - "raspberrypi:", - "Webcam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "MOTION", - "Other", - "RPI2-1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "h264" - }, - { - "models": [ - "MOTION EYE", - "MotionEyeOS", - "Other", - "RPI 3 FishEye", - "Zero", - "ZERO W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NoIR", - "Pi NoIR Camera V2", - "PiZero", - "Zero W", - "zero w noir" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/h264" - }, - { - "models": [ - "Other", - "RPi-Cam-Control" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/html/cam_pic_new.php?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fullsize.jpg?camera=[CHANNEL]&clock=on&motion=0" - }, - { - "models": [ - "PI 3 B", - "Zero" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "PI 3 B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "PI 3 B", - "PI CAMERA V2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/cgi-bin/fullsize.jpg?camera=0&clock=on&motion=0" - }, - { - "models": [ - "PI 3 B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8081, - "url": "/video" - }, - { - "models": [ - "RA-26BIP2A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "RPI2-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Zero" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/stream_simple.html" - }, - { - "models": [ - "Zero W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8555, - "url": "/unicast" - }, - { - "models": [ - "Zero W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Zero WH" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/raster.json b/data/brands/raster.json deleted file mode 100644 index 26d4e94..0000000 --- a/data/brands/raster.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Raster", - "brand_id": "raster", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4200", - "RS-SDI20420LP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "4200", - "ip-4200 df", - "ip-4200hi", - "RS-ip4200hi" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "media/media.amp" - }, - { - "models": [ - "4200", - "ip-4200df" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "ip-4200df" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "ip-4200hi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "RS-130SH3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ratingsecu.json b/data/brands/ratingsecu.json deleted file mode 100644 index 5790d9f..0000000 --- a/data/brands/ratingsecu.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Ratingsecu", - "brand_id": "ratingsecu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "R-H534N" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "R-N400A5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/raycam.json b/data/brands/raycam.json deleted file mode 100644 index 5d96147..0000000 --- a/data/brands/raycam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Raycam", - "brand_id": "raycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720 X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "L100P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/rayline.json b/data/brands/rayline.json deleted file mode 100644 index c671250..0000000 --- a/data/brands/rayline.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Rayline", - "brand_id": "rayline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RIP08" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "RIP8" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/raylios.json b/data/brands/raylios.json deleted file mode 100644 index 6f5454b..0000000 --- a/data/brands/raylios.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Raylios", - "brand_id": "raylios", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "K2-100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/raynic.json b/data/brands/raynic.json deleted file mode 100644 index 3be7516..0000000 --- a/data/brands/raynic.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Raynic", - "brand_id": "raynic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Raycam X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "RayCam X1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "Raycam X3", - "Raynic X3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/raysharp.json b/data/brands/raysharp.json deleted file mode 100644 index ee890c3..0000000 --- a/data/brands/raysharp.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "brand": "Raysharp", - "brand_id": "raysharp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "960" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "960", - "MSK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch00/1" - }, - { - "models": [ - "B-RS-D214HR-NS", - "Megalith Ultra Thermal 5million", - "Other", - "rs-ch581h", - "UPC 193175419309" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1/0" - }, - { - "models": [ - "H264 DVR w/ Web Port", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "RVH DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "RX100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/rca.json b/data/brands/rca.json deleted file mode 100644 index 5a0d0a3..0000000 --- a/data/brands/rca.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Rca", - "brand_id": "rca", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HSDB2A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "HSDB2A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/rds.json b/data/brands/rds.json deleted file mode 100644 index fb4beda..0000000 --- a/data/brands/rds.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rds", - "brand_id": "rds", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP3120" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/real-hd.json b/data/brands/real-hd.json deleted file mode 100644 index 251082d..0000000 --- a/data/brands/real-hd.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Real Hd", - "brand_id": "real-hd", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-5BL28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC-Y6BL28A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "IPC-YPTZ-6MP3Z", - "PG-PTZ-3601-LZ", - "PTZ-3601-IZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/realink.json b/data/brands/realink.json deleted file mode 100644 index f156eda..0000000 --- a/data/brands/realink.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Realink", - "brand_id": "realink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "CX410", - "Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/realm.json b/data/brands/realm.json deleted file mode 100644 index eb3ab90..0000000 --- a/data/brands/realm.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Realm", - "brand_id": "realm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC128PW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/realtek.json b/data/brands/realtek.json deleted file mode 100644 index 73195a3..0000000 --- a/data/brands/realtek.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Realtek", - "brand_id": "realtek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PCI GBE Family", - "PCIe GBE Family" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/redleaf-security.json b/data/brands/redleaf-security.json deleted file mode 100644 index 6273ae3..0000000 --- a/data/brands/redleaf-security.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Redleaf Security", - "brand_id": "redleaf-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DF-2011", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "DF-2013", - "LC-BF2422" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "media/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/redline.json b/data/brands/redline.json deleted file mode 100644 index 448b931..0000000 --- a/data/brands/redline.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Redline", - "brand_id": "redline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3008" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/redragon.json b/data/brands/redragon.json deleted file mode 100644 index 5b3ec36..0000000 --- a/data/brands/redragon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Redragon", - "brand_id": "redragon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fobos" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/webcam/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/redrock.json b/data/brands/redrock.json deleted file mode 100644 index 8b8fb87..0000000 --- a/data/brands/redrock.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Redrock", - "brand_id": "redrock", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPHS615HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/redvision.json b/data/brands/redvision.json deleted file mode 100644 index ebd09cc..0000000 --- a/data/brands/redvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Redvision", - "brand_id": "redvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RVX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/reel-tech.json b/data/brands/reel-tech.json deleted file mode 100644 index 170af76..0000000 --- a/data/brands/reel-tech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Reel Tech", - "brand_id": "reel-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "realtech" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "RT-732-200H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/reidubo.json b/data/brands/reidubo.json deleted file mode 100644 index 3e6954d..0000000 --- a/data/brands/reidubo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Reidubo", - "brand_id": "reidubo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Y21" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_nTBCS_channel=1_stream=0&onvif=0.sdp?real_st" - } - ] -} \ No newline at end of file diff --git a/data/brands/reigy.json b/data/brands/reigy.json deleted file mode 100644 index 4f3d3cb..0000000 --- a/data/brands/reigy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Reigy", - "brand_id": "reigy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3Mp Tipo: 5323-W-Q" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/relicam.json b/data/brands/relicam.json deleted file mode 100644 index 69f1fa4..0000000 --- a/data/brands/relicam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Relicam", - "brand_id": "relicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "icam i908w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IW20WV12-1", - "RC-IW20WV12-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "RC-ID10WF3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/remo.json b/data/brands/remo.json deleted file mode 100644 index d1276f6..0000000 --- a/data/brands/remo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Remo", - "brand_id": "remo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/reobiux.json b/data/brands/reobiux.json deleted file mode 100644 index c4538f9..0000000 --- a/data/brands/reobiux.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "brand": "Reobiux", - "brand_id": "reobiux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A9QH", - "A33H-1P", - "B0CSYYZZj6", - "dual lens", - "K8Q", - "X6C-WEQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/reolink.json b/data/brands/reolink.json deleted file mode 100644 index be9e40a..0000000 --- a/data/brands/reolink.json +++ /dev/null @@ -1,1453 +0,0 @@ -{ - "brand": "Reolink", - "brand_id": "reolink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E1 Pro", - "110", - "410", - "410S", - "410W", - "420", - "510AW", - "510WA", - "511w", - "520", - "522", - "810A", - "811A", - "820a", - "822a", - "A822", - "ALL", - "Argus", - "Argus PT", - "B400", - "B500", - "B800", - "B820A", - "C1 PRO", - "c1pro", - "C1-Pro", - "C2 Pro", - "C2-Pro", - "CX810", - "D104", - "D800", - "Doorbell", - "Doorbell PoE", - "Duo", - "Duo (CAM 1)", - "Duo 2", - "Duo 2 POE", - "Duo 2 Security Light", - "Duo 2 Wifi", - "Duo 2 WiFi", - "duo 3", - "Duo 3 PoE", - "Duo Floodlight PoE", - "Duo PoE", - "E1 outdoor", - "E1 Outdoor SE", - "E1 pro", - "e1 pro PTZ", - "E1 pro sub", - "E1 Zomm", - "E1 Zoom", - "Ei Pro", - "FE-P", - "FE-W", - "Gar", - "Inside", - "Lumix Pro", - "Mijdrecht Reolink", - "nord", - "Other", - "P344", - "P850", - "POE", - "RC-840a", - "rcl-1240a", - "RCL-410", - "RCL-410-5MP", - "rcl-420", - "RCL-510WA", - "rcl-511", - "RCL-520", - "rcl-522", - "RCL-540A", - "RCL-810A", - "RCL-811A", - "RCL-823A", - "REOLINK C2", - "Reolink Duo 3 PoE", - "Reolink RCL-410", - "REOLINK RLC-423", - "Reolink Video Doorbell PoE", - "Reolink Video Doorbell WiFi", - "reolink: rlc-410-5mp", - "Reolink-820a", - "RLC", - "rlc 410w", - "RLC 482a", - "rlc 510", - "RLC 520", - "RLC 830A", - "RLC 842", - "RLC-1210a", - "RLC-1220A", - "RLC-1224A", - "RLC-1240a", - "RLC-410", - "rlc-410-5mp", - "RLC-410-5MP", - "RLC-410W", - "RLC-410WS", - "RLC-411", - "RLC-411WS", - "RLC-420", - "rlc-420-5mp", - "RLC-420-5MP-V2", - "RLC-422", - "RLC-423", - "RLC-423WS", - "RLC-510A", - "RLC-510AW", - "RLC-510WA", - "RLC-511", - "RLC-511W", - "RLC-520", - "RLC-520-5mp", - "rlc-520a", - "RLC-522", - "RLC-523WA", - "RLC-542WA", - "RLC-810", - "rlc-810a", - "rlc-810c", - "RLC-811A", - "RLC-812A", - "RLC-81MA", - "rlc-820a", - "rlc822a", - "RLC-822A", - "RLC-832A", - "RLC-833A", - "RLC840A", - "RLC-843A", - "RLN8-410", - "rls-410s", - "RTC-410", - "RWC-511", - "Trackmix POE", - "TrackMix WiFi", - "Video Doorbell PoE", - "Video Doorbell Wifi", - "w511", - "Wifi Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_sub" - }, - { - "models": [ - "E1 Pro", - "1010", - "1080p", - "1240A", - "250", - "3816M", - "410W", - "420", - "430", - "4k Dual-Lense", - "510", - "510A", - "510aw", - "510w", - "511W", - "511WA", - "520", - "522", - "523WA", - "540", - "5mp", - "810A", - "811a", - "81Ma", - "820A", - "8224", - "822a", - "823", - "823A", - "842-A", - "A1 Pro", - "A822", - "ALL", - "Argus", - "Argus 2", - "B1200", - "B400", - "B500", - "C1 Pro", - "C1-Pro", - "c2 pro", - "C2 PRO", - "C2-pro", - "C310", - "CX410", - "CX810", - "D340P", - "D340W", - "D400", - "D4K23", - "D4K30", - "DB_566128M5MP_P", - "Doorbell", - "Doorbell PoE", - "Doorbell WiFi", - "dual", - "Dual Lens", - "Duo", - "Duo (CAM 1)", - "Duo (CAM 2)", - "Duo 2", - "Duo 2 POE", - "Duo 3 PoE", - "Duo Floodlight PoE", - "Duo Poe", - "Duo WiFi", - "Duo2 Wifi", - "E1 Outdoor", - "E1 Outdoor POE", - "E1 Outdoor SE", - "E1 Outdoor SE PoE", - "E1 pro", - "E1 Pro", - "E1 Pro Outdoor", - "e1 pro PTZ", - "E1 Zomm", - "e1 zoom", - "E1Zoom", - "E330", - "FE-p", - "FloodLight", - "FP-E", - "F-W", - "inrit", - "Inside 2", - "IPC", - "Lumus", - "Mijdrecht Reolink", - "NVR", - "Other", - "Outdoor E1", - "P320", - "P324", - "P730", - "PoE", - "R1 Outdoor", - "R510", - "RCL410", - "RCL-410-5MP", - "rcl-410w", - "RCL-411W", - "rcl-420", - "RCL-510", - "RCL-510A", - "rcl-510wa", - "rcl-511", - "RCL-511WA", - "RCL-520", - "RCL-810A", - "RCL-811A", - "RCL-811WA", - "RCL-81MA", - "RCL-820A", - "RCL-823A", - "Reolink 520", - "Reolink Argus Eco", - "Reolink Duo 3 PoE", - "Reolink RCL-410", - "reolink: rlc-410-5mp", - "Reolink:833A", - "reolinkrlc-410w", - "RL-810A", - "rlc 410w", - "RLC 420", - "RLC 422W", - "rlc 510", - "RLC 510A", - "RLC 520", - "RLC 810A", - "RLC 842", - "RLC-%10WA", - "RLC-1212a", - "RLC-1220A", - "RLC-1224A", - "rlc-1240a", - "rlc-210w", - "RLC-243", - "RLC-410", - "RLC-410 (rtsp)", - "RLC-410-5MP", - "RLC-410W", - "RLC-420", - "rlc-420-5mp", - "RLC-420-5MP-V2", - "RLC-422W", - "RLC-423WS", - "rlc-432ws", - "RLC-510A with substream", - "RLC-510WA", - "RLC-511", - "RLC-511W", - "RLC-511WA", - "RLC-520", - "RLC-520-5mp", - "RLC-520A", - "rlc-522", - "RLC-542WA", - "RLC-810", - "rlc-810a", - "RLC-810WA", - "RLC-811A", - "RLC-812A", - "RLC-81MA", - "RLC-81PA", - "rlc-820a", - "RLC-8232S", - "RLC-823A", - "RLC-830A", - "RLC-832A", - "RLC-833A", - "RLC-833A 2", - "RLC840A", - "RLC-840A", - "RLC-840WA", - "RLC-842A", - "RLK8-410B", - "RLN16-410", - "rln36", - "RLN36-410", - "RLN8-410", - "Roaming Camera", - "rst-520", - "RTC-410", - "rtl-1224a", - "RTL-510WA", - "T1 Pro", - "TrackMix", - "Trackmix POE", - "TrackMix PoE", - "TrackMix WiFi", - "Trackmix-PoE", - "Video Doorbell", - "Video Doorbell PoE", - "Video Doorbell Wifi", - "Video Doorbell WiFi", - "VLC-410", - "Wifi Doorbell", - "Wifi Doorbell 5mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "1080P", - "810A", - "822a", - "C2 Pro", - "C810", - "CX810", - "D340P", - "Doorbell", - "Doorbell WiFi", - "Duo 2 PoE", - "DUO PTZ WiFi", - "duo wifi", - "E1 pro", - "E1 Pro Outdoor", - "e1 pro PTZ", - "E1Zoom", - "FE-W", - "F-W", - "IPC_529SD78MP", - "Other", - "P320", - "P430", - "rcl-511", - "RCL-520", - "Reolink Duo 3 PoE", - "Reolink Video Doorbell WiFi", - "reolink: rlc-410-5mp", - "rlc 410w", - "RLC 423", - "RLC 482A", - "RLC 510-WA", - "RLC-1224A", - "RLC-1240a", - "rlc-410-5mp", - "RLC-423", - "RLC-510A", - "RLC-520-5mp", - "RLC-520A", - "rlc-522", - "RLC-810A", - "RLC-811", - "RLC-811A", - "RLC-81PA", - "RLC-82", - "rlc-820a", - "rlc-822a", - "RLC-823a", - "RLC-830A", - "RLC-840a", - "RLC-842A", - "Smart Video Doorbell", - "Trackmix POE", - "TrackMix WiFi", - "Trackmix-PoE", - "Video Doorbell", - "Video Doorbell PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "410", - "810a", - "811A", - "E1 OUTDOOR", - "E1 Zoom", - "RLC 510-WA", - "RLC-1224A", - "RLC-510A", - "RLC-510A WITH SUBSTREAM", - "RLC-511", - "RLC-811", - "RLC-842A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/api.cgi?cmd=Snap&channel=0&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "410", - "E1 Zoom", - "Other", - "RLC-423", - "RLC-510A" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_ext.bcs?channel=0&stream=2&user=[USERNAME]&password=[PASSWORD]%20-map%200%20-an%20-dn%20-flags%20-global_header" - }, - { - "models": [ - "410", - "B820A", - "Duo", - "FE-P", - "RCL-810A", - "RLC-81MA", - "Trackmix POE", - "TrackMix Wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_02_main" - }, - { - "models": [ - "410", - "C1 Pro", - "D340P", - "DUO POE 2", - "E1 pro", - "RCL-511W", - "RCL-520", - "RCL-810A", - "Reolink 411", - "reolink: rlc-410-5mp", - "rlc-410-5mp", - "RLC-510A", - "RLC-520", - "RLC-520-5mp", - "rlc-810a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/12" - }, - { - "models": [ - "410", - "420", - "510A", - "510WA", - "810A", - "All", - "C1", - "C1 Pro", - "C2", - "c2 pro", - "DB_566128M5MP_P", - "Doorbell PoE", - "E1 pro", - "E1 zoom", - "HIl", - "LivingRoom", - "Other", - "P320", - "PTZ", - "RC410", - "Rcl 410", - "RCL-410", - "rcl-420", - "RCL-520", - "RCL-810A", - "Reolink RCL-410", - "reolink: rlc-410-5mp", - "rlc 411s", - "rlc 420", - "RLC-410", - "RLC-410-5MP", - "RLC-410S", - "RLC-410W", - "RLC-410WS", - "RLC-411", - "RLC-411S", - "rlc-411ws", - "RLC-411WS", - "RLC-420", - "rlc-420-5mp", - "RLC-422", - "rlc-422w", - "rlc423", - "RLC-423", - "RLC-423WS", - "RLC-510A", - "RLC-510A with substream", - "RLC-510WA", - "RLC-511", - "RLC-511W", - "RLC-520", - "RLC-520-5mp", - "rlc-520a", - "rlc-522", - "rlc-810a", - "RLC-WS423WS", - "RLN8-410", - "rls-410", - "RWC-511", - "Video Doorbell PoE", - "Video Doorbell Wifi", - "W410S" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_main.bcs?token=[TOKEN]&channel=0&stream=0" - }, - { - "models": [ - "410", - "Argus Eco", - "Duo 2 PoE", - "E1 Outdoor", - "E1 Pro", - "e1 pro PTZ", - "NVR", - "RC410", - "RCL-410", - "RCL-810A", - "reolink: rlc-410-5mp", - "rlc 410w", - "rlc-410-5mp", - "rlc-411ws", - "RLC-423", - "RLC-510A", - "RLC-511", - "RLC-520", - "RLC-520-5mp", - "rlc-522", - "rlc-810a", - "RLN16-410", - "Trackmix POE", - "Video Doorbell Wifi" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_sub.bcs?token=[TOKEN]&channel=0&stream=1" - }, - { - "models": [ - "411", - "b510", - "B820A", - "dvr", - "RLN36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_04_main" - }, - { - "models": [ - "4K 8MP PTZ", - "690", - "810A", - "833A", - "B800", - "Carport", - "CX410", - "CX410W", - "D340P", - "duo 2 POE", - "Duo 2 POE", - "duo 2v poe", - "E1 OUTDOOR", - "E1Zoom", - "FE-P", - "RCL-810A", - "RCL-81PA", - "Reolink Video Doorbell WiFi", - "RLC-1210A", - "RLC-1224A", - "RLC520", - "rlc-520a", - "RLC-523WA", - "RLC-810A", - "RLC-81MA", - "RLC-833A", - "RLN8-410", - "TrackMix PoE", - "TrackMix Wired LTE", - "Video Doorbell PoE", - "Video Doorbell WiFi" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_sub.bcs?channel=0&stream=0&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "4K 8MP PTZ", - "810A", - "820a", - "Balcone 2RCL-811WA", - "Doorbell", - "Duo WiFi", - "E340", - "RCL-812A", - "Reolink Video Doorbell PoE", - "RLC-1210A", - "rlc-410-5mp", - "RLC-510WA", - "RTL-830A", - "TrackMix PoE", - "Trackmix-PoE", - "Video Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h264Preview_01_sub" - }, - { - "models": [ - "510A", - "CX810", - "Lumis", - "RCL-510wa", - "RLC 510A", - "RLC 510-WA", - "RLC-510wa", - "RLC-520A" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "5MP PTZ", - "D340P", - "Doorbell PoE", - "Duo", - "Duo 3 PoE", - "E1 pro", - "e1 pro PTZ", - "e1 zoom", - "RCL-410-5MP", - "Reolink Video Doorbell PoE", - "RLC 520a", - "RLC-1220A", - "rlc-410-5mp", - "rlc-411ws", - "RLC-420", - "RLC-510A", - "rlc-520a", - "RLC-81MA", - "RLC-820A", - "RLC-823S1W", - "RLC-830A", - "RLC-840A", - "RLC-840WA", - "RLN36", - "Video Doorbell PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h264Preview_01_main" - }, - { - "models": [ - "800", - "810A", - "811A", - "822", - "Carport", - "D340P", - "Duo 2 Wifi", - "Duo 2 WiFi", - "E1 Outdoor", - "E1 Outdoor CX", - "E1 Outdoor Pro", - "E1 Outdoor SE PoE", - "E1 Zoom", - "E3 Pro", - "EI Outdoor", - "FE-P", - "IPC", - "P437", - "RCL-810A", - "RCL-812A", - "RLC 842", - "RLC-1210A", - "RLC-1224A", - "RLC-420", - "RLC-811A", - "RLC-81MA", - "RLC-81PA", - "RLC-820A", - "RLC-8232S", - "RLC-823A", - "RLC-830A", - "RLC-833A", - "rrr", - "RTL-830A", - "Tra", - "Trackmix POE", - "TrackMix WiFi", - "Traxmix POE", - "Video Doorbell PoE", - "Video Doorbell WiFi", - "wlc-823a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h265Preview_01_main" - }, - { - "models": [ - "810A", - "Argus3E", - "CX410", - "Lumus Pro", - "rlc 410w", - "RLC-811A", - "z1 zoom" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_sub.bcs?channel=1&stream=0&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "810A", - "RCL-810A", - "RLC-420 4MP", - "rlc-810a", - "TrackMix PoE", - "Video Doorbell WiFi" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_sub.bcs?channel=0&stream=1&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "811A", - "843a", - "D4K30", - "Doorbell PoE", - "Duo 2", - "E1 Outdoor", - "RCL-810A", - "RCL-820A", - "RLC 510A", - "RLC-1210a", - "RLC-1224A", - "rlc-810a", - "RLC-811A", - "RLC-820A", - "RLC-822A", - "Trackmix-PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265Preview_01_main" - }, - { - "models": [ - "822A", - "E1 Zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Main_08_sub" - }, - { - "models": [ - "822A", - "E1 Zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_08_sub" - }, - { - "models": [ - "ARGUS 2" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "argus eco", - "Argus PT 2K", - "e1 zoom" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=0.JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "Argus pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?" - }, - { - "models": [ - "Argus Pro", - "c100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Argus Pro", - "E1 Zoom" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "Argus Track", - "RLC-410W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "B800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Salon/mainstream" - }, - { - "models": [ - "B800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h264Preview_04_main" - }, - { - "models": [ - "B820A", - "D800", - "Duo", - "duo wifi", - "E320", - "RCL-810A", - "Trackmix POE", - "TrackMix WiFi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_02_sub" - }, - { - "models": [ - "B820A", - "RCL-810A", - "RLN36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_03_main" - }, - { - "models": [ - "B820A", - "E320", - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_03_sub" - }, - { - "models": [ - "B820A", - "dvr", - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_04_sub" - }, - { - "models": [ - "C1-Pro", - "DUO POE 2", - "RLC-810A", - "rlc-822a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "CX410", - "E1 Outdoor", - "e1 zoom", - "RLC-511", - "RLC-511W", - "RLC-520", - "rlc-520a", - "TrackMix PoE", - "Video Doorbell PoE", - "Video Doorbell WiFi" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_main.bcs?channel=0&stream=0&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "CX810", - "Doorbell PoE", - "P324", - "P820A", - "RLC-510A", - "Trackmix", - "TrackMix PoE", - "traxmax", - "Video Doorbell WiFi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Preview_01_main" - }, - { - "models": [ - "CX810", - "D360p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "D4K30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_sup" - }, - { - "models": [ - "E1 pro", - "e1 zoom", - "RLC-1224A", - "RLC-820A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265Preview_01_sub" - }, - { - "models": [ - "e1 zoom", - "RLC-520" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoSub" - }, - { - "models": [ - "E1 Zoom", - "rlc-820a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "E1 Zoom", - "RCL-810A", - "RLC 842" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//h265Preview_01_sub" - }, - { - "models": [ - "E1 Zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/e1/subStream" - }, - { - "models": [ - "E1 Zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/e1/mainStream" - }, - { - "models": [ - "FP-E", - "Reolink Duo (CAM 1)", - "Reolink Video Doorbell WiFi", - "rlc-410-5mp", - "rlc-810a", - "Video Doorbell PoE" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_main.bcs?token=[TOKEN]&channel=0&stream=0&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Lumus" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/flv?port=1935&app=bcs&stream=channel1_main.bcs&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Lumus" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/flv?port=1935&app=bcs&stream=channel3_main.bcs&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Lumus(neolink Hack)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/livingroom/mainStream" - }, - { - "models": [ - "Lumus(neolink Hack)", - "Lumus(neolink)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/CarPort/mainStream" - }, - { - "models": [ - "rc510" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "rcl-410w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "rcl-410w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "rcl-420", - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_05_main" - }, - { - "models": [ - "rcl-420", - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_05_sub" - }, - { - "models": [ - "rcl-522" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_sub.bcs?token=[TOKEN]&channel=0&stream=0" - }, - { - "models": [ - "rcl-522", - "RLC-510A with substream" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_main.bcs?token=[TOKEN]&channel=0&stream=1" - }, - { - "models": [ - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_09_sub" - }, - { - "models": [ - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_main.bcs&channel=0&stream=0" - }, - { - "models": [ - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_06_sub" - }, - { - "models": [ - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_07_sub" - }, - { - "models": [ - "RCL-810A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_07_main" - }, - { - "models": [ - "RCL-810A", - "RLC 830A", - "RLC-510A", - "RLC-823A", - "RLC-842A", - "Video Doorbell Wifi" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel0_ext.bcs?channel=0&stream=2&user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Reolink Duo (CAM 2)", - "RLC-410" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 1935, - "url": "/bcs/channel1_main.bcs?token=[TOKEN]&channel=0&stream=1" - }, - { - "models": [ - "RLC 843" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - }, - { - "models": [ - "RLC-1212a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s0" - }, - { - "models": [ - "RLC-1220A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "RLC-410", - "rlc-410-5mp" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/flv?port=1935&app=bcs&stream=channel0_main.bcs&token=[TOKEN]" - }, - { - "models": [ - "RLC-410" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/:554/h264Preview_01_main" - }, - { - "models": [ - "RLC-410-5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "RLC-420-5MP-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/dome/subStream" - }, - { - "models": [ - "RLC-420-5MP-V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/dome/mainStream" - }, - { - "models": [ - "RLC-510A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/cam.mjpeg" - }, - { - "models": [ - "RLC-510A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/media.sav" - }, - { - "models": [ - "rlc-510WA", - "RLC-822A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "RLC-510WA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "rlc-520a" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ROH/channel/11" - }, - { - "models": [ - "RLC-840a" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "" - }, - { - "models": [ - "RWC-511" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/flv?port=1935&app=bcs&stream=channel0_sub.bcs&token=[TOKEN]" - }, - { - "models": [ - "Trackmix", - "TrackMix Wifi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "TrackMix Wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/reotech.json b/data/brands/reotech.json deleted file mode 100644 index b96e62c..0000000 --- a/data/brands/reotech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Reotech", - "brand_id": "reotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "I712-POE-HS-4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/repotec.json b/data/brands/repotec.json deleted file mode 100644 index cdc862b..0000000 --- a/data/brands/repotec.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "brand": "Repotec", - "brand_id": "repotec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "RP-VP370" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "Other", - "RP-VP370", - "RP-WV200", - "VP200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "RP-VP0921", - "RP-VP0961" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "RP-VP370" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "RP-VP700" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - } - ] -} \ No newline at end of file diff --git a/data/brands/reticam.json b/data/brands/reticam.json deleted file mode 100644 index 3c60fd6..0000000 --- a/data/brands/reticam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Reticam", - "brand_id": "reticam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/retina.json b/data/brands/retina.json deleted file mode 100644 index 407195c..0000000 --- a/data/brands/retina.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Retina", - "brand_id": "retina", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iPro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/revo.json b/data/brands/revo.json deleted file mode 100644 index a27096f..0000000 --- a/data/brands/revo.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Revo", - "brand_id": "revo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "i6032BV200", - "RUBCB36-1A", - "RUCB36-1AX", - "RUWCB40-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IPC: Wireless" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?account=[USERNAME]&password=[PASSWORD]&stream=1" - }, - { - "models": [ - "IPC: Wireless" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?account=[USERNAME]&password=[PASSWORD]&stream=0" - }, - { - "models": [ - "Other", - "RUCFE4K-1C", - "RUCT2812-1", - "T320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/revodata.json b/data/brands/revodata.json deleted file mode 100644 index c7710fa..0000000 --- a/data/brands/revodata.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Revodata", - "brand_id": "revodata", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "I712-P-TS-RD", - "1706-P-A", - "1712-P-TS", - "5MP POE mini IP", - "Fisheye 180", - "I704-P-TS", - "I708-P-HS 1616P", - "I712-P-HS", - "MainStream", - "Other", - "PA4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HD 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "I3006-P-Audio-FHW", - "SW2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - } - ] -} \ No newline at end of file diff --git a/data/brands/revotech.json b/data/brands/revotech.json deleted file mode 100644 index 357ebba..0000000 --- a/data/brands/revotech.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "brand": "Revotech", - "brand_id": "revotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1706", - "I712-2-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - }, - { - "models": [ - "1796", - "cctv", - "H6EV100-SW-H", - "I6032B-POE 1080P", - "i6032-HS", - "I6032W-[OE", - "i6038-poe", - "I706-2-p", - "nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - }, - { - "models": [ - "603I", - "604I", - "I706", - "I706-2-POE-FHW", - "i706-3", - "i708-POE", - "I712-16EV2", - "IF04-POE-Audio-16EV2", - "IPIR-P", - "l706-3-poe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "86032b", - "I6032b-wifi", - "if-04-audio", - "ipir-HS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "cctv", - "DVR", - "DVR2", - "jcresort", - "Main Jcresort", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "DVR2" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "H42", - "H6EV200-S-30-L 0S77", - "I712-16EV2", - "I712P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1/stream1" - }, - { - "models": [ - "H42" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "H6EV200-S-30-L 0S77", - "ipir-hs" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "H6EV200-S-30-L 0S77", - "HD cameras", - "HD CAMERAS", - "HS82", - "I706-2-POE-16EV2", - "I712", - "Other", - "REHCUW-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "H85", - "I6032W-FHW", - "I706-4", - "I706-P-FHW", - "I712P", - "IF02-P-FHW-Se", - "IF-04-AUDIO", - "ipir-hs", - "krakonosovo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "HD cameras" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/1/jpeg.php" - }, - { - "models": [ - "HD CAMERAS", - "I6032B-POE 1080P", - "ipc" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD CAMERAS", - "i712", - "I712-16EV2", - "I712-16V2", - "I712P", - "IPIR-P", - "Other", - "R16DVR4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "i3004" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "I3012-P", - "I6032B-P", - "I712", - "if02", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live0.264" - }, - { - "models": [ - "I3012-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam0/h264" - }, - { - "models": [ - "I6032B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "I706-4", - "IF02-P-FHW-Se" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - }, - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Rucb-36" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rfid-poker-table.json b/data/brands/rfid-poker-table.json deleted file mode 100644 index aff62f5..0000000 --- a/data/brands/rfid-poker-table.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Rfid Poker Table", - "brand_id": "rfid-poker-table", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/rhinoco.json b/data/brands/rhinoco.json deleted file mode 100644 index 190c391..0000000 --- a/data/brands/rhinoco.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Rhinoco", - "brand_id": "rhinoco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVI-DVR", - "IP 3MP VIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "MiniPTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=Lismore2480%24" - }, - { - "models": [ - "rh50x20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "rh50x20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "rh50x20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/ribbon.json b/data/brands/ribbon.json deleted file mode 100644 index 99bd1bb..0000000 --- a/data/brands/ribbon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ribbon", - "brand_id": "ribbon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rifatron.json b/data/brands/rifatron.json deleted file mode 100644 index a6f6a41..0000000 --- a/data/brands/rifatron.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Rifatron", - "brand_id": "rifatron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD1 Series DVR", - "MH Series DVR", - "MM Series DVR", - "MM SERİES DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/animate.cgi?[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rigoo.json b/data/brands/rigoo.json deleted file mode 100644 index b8519c0..0000000 --- a/data/brands/rigoo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rigoo", - "brand_id": "rigoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/rimax.json b/data/brands/rimax.json deleted file mode 100644 index 8a7b3af..0000000 --- a/data/brands/rimax.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Rimax", - "brand_id": "rimax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7100", - "7200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other a" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ring.json b/data/brands/ring.json deleted file mode 100644 index dbbdbc6..0000000 --- a/data/brands/ring.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "brand": "Ring", - "brand_id": "ring", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Doorbell", - "pro", - "Pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Doorbell" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "url": "/ring.0/doorbell_82595437/livestream.mp4" - }, - { - "models": [ - "doorbell 3", - "Doorbell 4", - "Stickup Cam", - "Video Doorbell Pro" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image.cgi?type=motion&camera=0" - }, - { - "models": [ - "ring 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image.cgi?type=motion&camera=2" - }, - { - "models": [ - "Ring Dorbell Wired" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/343ea4d97645_live" - }, - { - "models": [ - "Stickup Cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion&camera=[CHANNEL]" - }, - { - "models": [ - "Stickup Cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8123, - "url": "/api/camera_proxy_stream/camera.front_live_view" - }, - { - "models": [ - "Video Doorbell Pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8123, - "url": "/api/camera_proxy_stream/camera.gate_live_view" - }, - { - "models": [ - "Video Doorbell Pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/camera_proxy_stream/camera.garden_live_view" - } - ] -} \ No newline at end of file diff --git a/data/brands/rinin.json b/data/brands/rinin.json deleted file mode 100644 index 5008a8c..0000000 --- a/data/brands/rinin.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Rinin", - "brand_id": "rinin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3mp", - "3mp ip", - "SH035-BL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/rinnin.json b/data/brands/rinnin.json deleted file mode 100644 index da4942f..0000000 --- a/data/brands/rinnin.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Rinnin", - "brand_id": "rinnin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3mp", - "3mp ip", - "SH035-BL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "3mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/risco.json b/data/brands/risco.json deleted file mode 100644 index 1e34017..0000000 --- a/data/brands/risco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Risco", - "brand_id": "risco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3 MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 64272, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IP outdoor bullet" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/riva-flex.json b/data/brands/riva-flex.json deleted file mode 100644 index b1711f2..0000000 --- a/data/brands/riva-flex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Riva-flex", - "brand_id": "riva-flex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rf3201r-a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rivatech.json b/data/brands/rivatech.json deleted file mode 100644 index aeeab72..0000000 --- a/data/brands/rivatech.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Rivatech", - "brand_id": "rivatech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RC1020HD", - "RC1202HD", - "RC3502HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/riwyth.json b/data/brands/riwyth.json deleted file mode 100644 index a982921..0000000 --- a/data/brands/riwyth.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Riwyth", - "brand_id": "riwyth", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Riwyth_810S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - }, - { - "models": [ - "RW-790S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/robaxo.json b/data/brands/robaxo.json deleted file mode 100644 index 6d34df1..0000000 --- a/data/brands/robaxo.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Robaxo", - "brand_id": "robaxo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "204B", - "RC204B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/" - }, - { - "models": [ - "4RC204A", - "Other", - "RC204", - "RC204A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "RC204", - "RC204A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "RC204", - "RC204A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "RC360Z" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/robicam.json b/data/brands/robicam.json deleted file mode 100644 index 2218034..0000000 --- a/data/brands/robicam.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Robicam", - "brand_id": "robicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other", - "st-392-2m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/live/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/robocam.json b/data/brands/robocam.json deleted file mode 100644 index c5e547f..0000000 --- a/data/brands/robocam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Robocam", - "brand_id": "robocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAS771W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "robocam 4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/rocam.json b/data/brands/rocam.json deleted file mode 100644 index d046f2c..0000000 --- a/data/brands/rocam.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "brand": "Rocam", - "brand_id": "rocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M-200HD", - "nc300", - "NC-400", - "NC-500HD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "NC300", - "NC-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "NC300", - "NC-400", - "NC-400HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "NC300", - "NC-400", - "NC-400hd", - "NC-500", - "NC-500HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "NC300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NC300", - "nc360", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "NC300", - "NC-400", - "NC-500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC300-1", - "NC400", - "NC-500HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "nc360", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "NC360", - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NC360" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "NC-400", - "NC-400hd", - "NC-400HD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "NC-400", - "NC-500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "NC-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "NC-400", - "Other", - "PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-500", - "NC-500HD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "NC-500", - "NC-500HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "nch001", - "nhc002" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/rohs.json b/data/brands/rohs.json deleted file mode 100644 index 85fee80..0000000 --- a/data/brands/rohs.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "brand": "Rohs", - "brand_id": "rohs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A1-X20RJ", - "IPD-2M-30V-poe", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "AO99546LKTT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "IP 20", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPD-2M-30V-poe", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "IPD-2M-30V-POE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "IPD-2M-30V-POE", - "Other", - "RC8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "rc8021", - "rc8221", - "WV-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "Other2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "p27-RC8221", - "RC82210D", - "RT8021W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "pipc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "rc8061v", - "RT8021W-adt", - "WV-CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "rc8221" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "S134" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "sch1r1-29" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "TIME2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TL-SC3130" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - } - ] -} \ No newline at end of file diff --git a/data/brands/roidmi.json b/data/brands/roidmi.json deleted file mode 100644 index 0d3ffab..0000000 --- a/data/brands/roidmi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Roidmi", - "brand_id": "roidmi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EVE Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "EVE Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264/HD1080P" - } - ] -} \ No newline at end of file diff --git a/data/brands/roline.json b/data/brands/roline.json deleted file mode 100644 index b11da8f..0000000 --- a/data/brands/roline.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "brand": "Roline", - "brand_id": "roline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC-42D63A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "IC-42D63A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other", - "Ric-54" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other", - "RBOF1-1", - "RBOF4-1", - "RBOV2-1", - "RCIF3-1W", - "rd0f2", - "RDOF4-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "RDOF2-1W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "RPIF4-1W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/rollei.json b/data/brands/rollei.json deleted file mode 100644 index f69781e..0000000 --- a/data/brands/rollei.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "brand": "Rollei", - "brand_id": "rollei", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SafetyCam", - "SafetyCam 10 HD", - "SAFETYCAM 10 HD", - "SAFETYCAM 100", - "SafetyCam 20 HD", - "SAFETYCAM 20 HD", - "SafetzCam-20 HD", - "T Cametra" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SafetyCam 10 HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "SafetyCam 100", - "Securitycam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "SafetyCam 200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "safetycam-10hd" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/romai.json b/data/brands/romai.json deleted file mode 100644 index 7b8859e..0000000 --- a/data/brands/romai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Romai", - "brand_id": "romai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CL201" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/romi.json b/data/brands/romi.json deleted file mode 100644 index 6fc083e..0000000 --- a/data/brands/romi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Romi", - "brand_id": "romi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "neo coolcam nip 61" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/ronin.json b/data/brands/ronin.json deleted file mode 100644 index c5aa2fe..0000000 --- a/data/brands/ronin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ronin", - "brand_id": "ronin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NR-W1CIP2SC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/rosewill.json b/data/brands/rosewill.json deleted file mode 100644 index 1bc0912..0000000 --- a/data/brands/rosewill.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "brand": "Rosewill", - "brand_id": "rosewill", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "12001", - "Other", - "RSCM-12001", - "RSCM-12002" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ICS303C", - "Other", - "rsc-2002", - "RSCM-12001", - "RSCM-12002", - "RXS-3211" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "Other", - "RSCM=13601B", - "RSCM-13601W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "Other", - "RSCM-12001", - "RSCM-12002" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other", - "RSCM-12001", - "RXS-3323" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "rscm-13701w" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other", - "RSCM-15701W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other", - "RSX3211", - "RXS-3211" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "rcsm-13701w", - "RSCM-11001", - "RSCM-12001", - "RSCM-13701W", - "RSCM-15701W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video1+audio1" - }, - { - "models": [ - "RSCM 13601W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "RSCM-13601W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "RXS-3211" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "RXS-3323" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "RXS-3323" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rosh.json b/data/brands/rosh.json deleted file mode 100644 index aaaf4b6..0000000 --- a/data/brands/rosh.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rosh", - "brand_id": "rosh", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/roswill.json b/data/brands/roswill.json deleted file mode 100644 index 6999312..0000000 --- a/data/brands/roswill.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Roswill", - "brand_id": "roswill", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "rscm-122001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/rovio.json b/data/brands/rovio.json deleted file mode 100644 index 3a0699e..0000000 --- a/data/brands/rovio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rovio", - "brand_id": "rovio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wowee" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/royal.json b/data/brands/royal.json deleted file mode 100644 index 3acff8e..0000000 --- a/data/brands/royal.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Royal", - "brand_id": "royal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fine" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Guard" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/royallite.json b/data/brands/royallite.json deleted file mode 100644 index e221f0d..0000000 --- a/data/brands/royallite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Royallite", - "brand_id": "royallite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "un-ip-an213" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rpi.json b/data/brands/rpi.json deleted file mode 100644 index cb57d33..0000000 --- a/data/brands/rpi.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Rpi", - "brand_id": "rpi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1st" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8000, - "url": "/stream.mjpg" - }, - { - "models": [ - "rpi1", - "usbcam", - "zero" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "wzero" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/" - }, - { - "models": [ - "zero" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=[USERNAME]pass&balls=balls5" - } - ] -} \ No newline at end of file diff --git a/data/brands/rraycom.json b/data/brands/rraycom.json deleted file mode 100644 index 6c1e92b..0000000 --- a/data/brands/rraycom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rraycom", - "brand_id": "rraycom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Wired HD Flood" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264?ch=0&subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/rstahl.json b/data/brands/rstahl.json deleted file mode 100644 index 2c9b638..0000000 --- a/data/brands/rstahl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Rstahl", - "brand_id": "rstahl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EC-910-AFZ-I03-P00" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/rtt.json b/data/brands/rtt.json deleted file mode 100644 index e65b5c8..0000000 --- a/data/brands/rtt.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "brand": "Rtt", - "brand_id": "rtt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2220", - "RTT-3600", - "RTT-5300", - "RTT-5500", - "RTT-8300", - "RTT-8700", - "RTT-8800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "5300", - "IPCC-B17-1080P", - "Other", - "rtt-2400", - "RTT-3300", - "RTT-3600", - "RTT-5300", - "RTT-5900", - "RTT-8300", - "RTT-8800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/rtx.json b/data/brands/rtx.json deleted file mode 100644 index ffacd78..0000000 --- a/data/brands/rtx.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "brand": "Rtx", - "brand_id": "rtx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "06R", - "DVS", - "IP01R", - "IP-06R", - "IP-09R", - "IP-26H", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "06R", - "31-HV", - "IP-09R", - "IP-16H", - "IP-25HV", - "IP-26H", - "IP-32HV", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "09h", - "25-HV", - "IP06R", - "IP-26H", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IMX322+HI3516" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IP01R", - "IP-26H", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "IP01R", - "IP-06R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IP-06R", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-09R", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "IP-25HV" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "IP-26H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "IP-26H", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "IP-26H", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 88, - "url": "/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 88, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "rtx2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images/stream_[CHANNEL].jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/rua.json b/data/brands/rua.json deleted file mode 100644 index 8c2ce06..0000000 --- a/data/brands/rua.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Rua", - "brand_id": "rua", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ruang-tamu.json b/data/brands/ruang-tamu.json deleted file mode 100644 index df4bd95..0000000 --- a/data/brands/ruang-tamu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ruang Tamu", - "brand_id": "ruang-tamu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/rubetek.json b/data/brands/rubetek.json deleted file mode 100644 index e6198ce..0000000 --- a/data/brands/rubetek.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Rubetek", - "brand_id": "rubetek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3404", - "rm-3712", - "rv-3407", - "RV-3416" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "RV 3414" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "RV-3420" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ruisvision.json b/data/brands/ruisvision.json deleted file mode 100644 index 7c332a8..0000000 --- a/data/brands/ruisvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ruisvision", - "brand_id": "ruisvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3MP 1.8MM LENS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/runyan-gate.json b/data/brands/runyan-gate.json deleted file mode 100644 index 7df0ad2..0000000 --- a/data/brands/runyan-gate.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Runyan Gate", - "brand_id": "runyan-gate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "RT AQ-6108R5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/rvi.json b/data/brands/rvi.json deleted file mode 100644 index 438587b..0000000 --- a/data/brands/rvi.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "brand": "Rvi", - "brand_id": "rvi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1nct-2023", - "1nct4033", - "RVi-1NCT4052", - "RVI-1NCT4143" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/RVi/1/1" - }, - { - "models": [ - "1nct4033", - "RVi-1NCE2022" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/RVi/1/2" - }, - { - "models": [ - "1nct-4033", - "RVi-1NCT4052" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "2063", - "RVI-IPC32MS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "42dn", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "AL", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - }, - { - "models": [ - "HDR04LA-T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "HDR04LA-T", - "zal" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "HDR04LA-TA", - "HDR04LA-TA-1", - "IPC11S", - "ips12sw", - "Other", - "RVi-IPC12SW", - "RVi-IPC31S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "IPC42S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "IPC42S" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "IPC43L (2.7-12)", - "msi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46UFAxNTMzMDY=" - }, - { - "models": [ - "ipc50dn12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel3" - }, - { - "models": [ - "ipc50dn12", - "ivc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/channel1" - }, - { - "models": [ - "IPC52Z30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ipc52z4i" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "ips12sw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "ivc", - "Other", - "zal" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other", - "R16LA" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "RVI-1NCT2025", - "RVi-IPC12SW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/1/h264/1" - }, - { - "models": [ - "RVI-1NCT4143" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/RVi/2/1" - }, - { - "models": [ - "RVi-IPC11" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "RVI-IPC32DNS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "RVI-IPC32MS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "RVi-IPC43L (2.7-12)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/2?transmode=unicast&profile=vam" - } - ] -} \ No newline at end of file diff --git a/data/brands/s.vision.json b/data/brands/s.vision.json deleted file mode 100644 index ccd42c1..0000000 --- a/data/brands/s.vision.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "S.vision", - "brand_id": "s.vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ahd1108h" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 34567, - "url": "/ch4_0.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 34567, - "url": "/ch2_0.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 34567, - "url": "/ch1_0.264" - }, - { - "models": [ - "P-D140" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/s3vc.json b/data/brands/s3vc.json deleted file mode 100644 index 4e4ac61..0000000 --- a/data/brands/s3vc.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "brand": "S3vc", - "brand_id": "s3vc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "B01POE-3MPL-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "B06POE-5MP-HX", - "BULLET", - "Other", - "SV-B01POE-1080P-L", - "WiFi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Bullet", - "Other", - "SV-B06W-5MP-HX", - "WIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "SV-B01POE-1080P-L" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "SV-B01POE-1080P-L" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/VideoInput/1/mpeg4/1" - }, - { - "models": [ - "SV-B803W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "WiFi" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/saance.json b/data/brands/saance.json deleted file mode 100644 index b0589ed..0000000 --- a/data/brands/saance.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Saance", - "brand_id": "saance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "161be" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "WIFICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/sab.json b/data/brands/sab.json deleted file mode 100644 index 8dfa8e7..0000000 --- a/data/brands/sab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Sab", - "brand_id": "sab", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2600" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "SABIP1400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "SABIP1400" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sacam.json b/data/brands/sacam.json deleted file mode 100644 index 48b1e64..0000000 --- a/data/brands/sacam.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Sacam", - "brand_id": "sacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cn-72m1wl", - "CN-72M2WL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "CN-72M2WH", - "CN-72M2WL", - "p2p", - "p2p hd", - "SW27897964" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1.3gp" - } - ] -} \ No newline at end of file diff --git a/data/brands/saewit.json b/data/brands/saewit.json deleted file mode 100644 index dd4fdf9..0000000 --- a/data/brands/saewit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Saewit", - "brand_id": "saewit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "seaw-20z37e-nh" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/safecam.json b/data/brands/safecam.json deleted file mode 100644 index 3aa50d6..0000000 --- a/data/brands/safecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Safecam", - "brand_id": "safecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/safehome.json b/data/brands/safehome.json deleted file mode 100644 index af142e3..0000000 --- a/data/brands/safehome.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "brand": "Safehome", - "brand_id": "safehome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1 mp hd p2p", - "278040-Nordic", - "hhfhfh", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1 MP HD P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/onvif-stream1" - }, - { - "models": [ - "1 MP HD P2P", - "1HD", - "1MP HD P2P Camera", - "1MPHDP2P", - "2 MP Wireless P2P FULL HD Outdoor", - "278040", - "278040_dreje", - "278047", - "278047-NordicX", - "278050", - "278050-Nordic", - "278050-Nordic-X", - "278052", - "278052-NordicX", - "278054", - "278054-2", - "IPROBOT", - "Nordic", - "Other", - "P2P outdoor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/live/ch0" - }, - { - "models": [ - "1MP HD P2P CAMERA", - "2 MP FULL HD P2P CAMERA", - "278050-Nordic-X", - "278051", - "278051-nordic", - "278056-NORDICX", - "Oma Nordic" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/live/ch1" - }, - { - "models": [ - "278040-nordic", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "278041-NORDIC", - "278042", - "278052-NORDICX", - "HD628", - "HD-628W", - "IP255", - "Other", - "p2p", - "P2P OUTDOOR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "278042", - "616-W", - "IP601W", - "IP601W-hd", - "Other", - "VGA 616W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "278042-NORDIC", - "IP3815W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "278043", - "IP601W", - "IP601W-hd", - "iprobot", - "NORDIC", - "OTHER-MEDION", - "P2P OUTDOOR", - "VGA 616W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "391W-HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/video0" - }, - { - "models": [ - "616-W", - "IP601W-hd", - "Other", - "P2P OUTDOOR", - "VGA 615W", - "w616" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CLJXA1HPJJBBA56PYZ61", - "IPRobot3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8001, - "url": "/" - }, - { - "models": [ - "HD P2P HD628W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "HD-628W", - "HD-720P", - "IP601W", - "IP601W-hd", - "vga616w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "HD-628W", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "IP3815W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-601W", - "Other", - "WH" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ip601w-hd", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "ip601w-hd" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "IP601W-hd", - "IPRobot", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IP601W-hd", - "iprobot", - "MP 391W-HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP601W-hd", - "iprobot", - "Other", - "p2p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other-Medion" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/safer.json b/data/brands/safer.json deleted file mode 100644 index c73b975..0000000 --- a/data/brands/safer.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Safer", - "brand_id": "safer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3216", - "Other", - "SN3216", - "SN326p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stander/livestream/0/0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other", - "SG-861" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "SG-861" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4cif" - } - ] -} \ No newline at end of file diff --git a/data/brands/safesky-cn.json b/data/brands/safesky-cn.json deleted file mode 100644 index 924bd05..0000000 --- a/data/brands/safesky-cn.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Safesky Cn", - "brand_id": "safesky-cn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "08037" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "C5900" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SC-H06" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/safevant.json b/data/brands/safevant.json deleted file mode 100644 index 2a705d0..0000000 --- a/data/brands/safevant.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "brand": "Safevant", - "brand_id": "safevant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P Dome", - "BL05801", - "DO2VV", - "Other", - "Safevant PTZ Dome Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/safire.json b/data/brands/safire.json deleted file mode 100644 index 0554501..0000000 --- a/data/brands/safire.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Safire", - "brand_id": "safire", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCOUNT", - "SF-IPDM937ZAWHH-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "Other", - "SF-IPCV220WH", - "SF-IPD836WA-4P-HV", - "SF-IPDM934-3W", - "SF-IPDM934WH-2W", - "SF-IPDM943WH-4", - "SF-IPMC103AWH-2", - "SF-IPSD4704IHA-4PW", - "sf-ipsd6625ita-4p", - "SF-IPT838UWHA-4US-AI2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "SF-IPCV220WH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h265_stream" - }, - { - "models": [ - "SF-IPD820UWHA-8U-AI2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "SF-IPD820UWHA-8U-AI2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "SF-IPD820UWHA-8U-AI2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/samgane.json b/data/brands/samgane.json deleted file mode 100644 index 1b212f5..0000000 --- a/data/brands/samgane.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Samgane", - "brand_id": "samgane", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "ptz", - "sc-17w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "sc-17w" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "SC-17W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/samsco.json b/data/brands/samsco.json deleted file mode 100644 index 37f9e23..0000000 --- a/data/brands/samsco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Samsco", - "brand_id": "samsco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[CHANNEL]_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/samsung.json b/data/brands/samsung.json deleted file mode 100644 index d8bdf58..0000000 --- a/data/brands/samsung.json +++ /dev/null @@ -1,1536 +0,0 @@ -{ - "brand": "Samsung", - "brand_id": "samsung", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "1.3", - "509", - "6004", - "6084RP", - "7004p", - "7010", - "7010f", - "7080r", - "8610", - "G IP Smart Cam", - "IP CAM G", - "IPOLIS", - "L6013R", - "Other", - "QND-6070R", - "QND-7010R", - "QND-7020R", - "QND7030RN", - "QNO-6010R", - "QNO-6020R", - "QNO-6070R", - "QNO-7020R", - "QNO-7080R", - "QNV-7010R", - "QNV-7020R", - "QNV-7080R", - "SCH-I415", - "SmartCam", - "SME DVR", - "SMP-3120", - "SN0-6084", - "SN0-6084R", - "snb", - "snb 5001", - "SNB 7001", - "SNB-5000", - "SNB-5004", - "SNB-600", - "SNB-6003", - "snb-6004", - "SNB-6010", - "snb7000", - "SNB-7000", - "SNB--7084r", - "SND", - "SND 5000", - "Snd 501", - "SND-1000N", - "SND-3080", - "SND-3080F", - "snd-5048", - "SND-5084", - "snd-5601", - "SND-6011R", - "snd-6011rp", - "SND-6013R", - "SND-6048R", - "snd-6083n", - "SND-6084R", - "SND-L6013", - "snf-810", - "snh p6410", - "snh-e6413bn", - "SNH-P6412BN", - "SNH-V6414BN", - "SNO-1080R", - "SNO-1080RN", - "sno5080", - "SNO-5080R", - "sno5084rp", - "SNO6083R", - "sno7078r", - "SNO-L6013R", - "SNO-L6013RN", - "SNO-L6083R", - "SNO-L6o13R", - "SNP-3120", - "SNP-3370/TH", - "SNP-5200H", - "SNP-5321", - "SNP-5430H", - "SNP-6321", - "snr", - "SNV-3120", - "SNV-5080", - "SNV-6012MN", - "SNV-6013", - "SNV-6048R", - "SNV-6083R", - "SNV-6084", - "SNV-6084R", - "SNV-L5083R", - "SNV-L6083R", - "sp 101", - "SPE-100", - "SPE-101", - "SVN-6012MN", - "video server", - "wisenet" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=jpg" - }, - { - "models": [ - "2080R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "2315", - "3_ipv_n", - "400", - "530T", - "A40", - "avant", - "Core Prime", - "Gaaxy J3 Mission", - "Galaxy 5", - "galaxy A9", - "Galaxy Ace", - "Galaxy I 9001", - "Galaxy III Mini", - "galaxy player 5.0", - "Galaxy player SIII", - "galaxy s", - "galaxy S III", - "Galaxy s10+", - "GALAXY S2-1", - "galaxy s4", - "galaxy s6", - "GALAXY S7", - "GALAXY S9", - "gallaxy", - "gallaxy s6", - "GS5", - "GT-I9070", - "gts7582", - "i747", - "I-997", - "IP WebCAM", - "J7 Prime", - "J7-Prime", - "Mobile Phone", - "Note 1", - "Note 10.1 2014 SM-P605", - "note 3", - "note 4", - "note 8", - "Other", - "prime", - "S4 mini", - "SamsungMini", - "SC-01K", - "SCC-C6325N", - "SC-D353", - "SCH-I415", - "sgh i747", - "SGH-S959G", - "shg", - "SME DVR", - "SM-G530AZ UD", - "SM-G955U", - "SM-N910P", - "SNB-2000", - "SNB-6003", - "snc-550", - "SNC-7478", - "SNC-B2315", - "SNC-B5395", - "SND-7080", - "SNF M300P", - "SNP-3301", - "SPH-M840", - "tab e", - "Tablet", - "Xcover", - "xcover2", - "YOUTH" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "3001", - "a50", - "core 2", - "Galaxy A7 (2018)", - "Galaxy S3", - "galaxy s9", - "Other", - "S20 FE 5G", - "sm-g357", - "SNC-B5399", - "XCover 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video?submenu=mjpg" - }, - { - "models": [ - "3001", - "A10e", - "a32", - "ek gc200", - "galaxy 7", - "Galaxy j7", - "Galaxy S3", - "Galaxy S6 Active", - "Handy S6", - "S21+", - "XCover 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video" - }, - { - "models": [ - "3001", - "5050", - "QNO-7080R", - "QNV-7010R", - "QNV-7080R", - "SNB 5000p", - "SND-5084", - "SND-7084r", - "SND-L5013", - "SND-L6013RN", - "SNO-7082R", - "SNP-5200H", - "SNP-6200RH", - "snv-", - "SNV-1080", - "WISENET III H.264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "3001", - "SNC-79440BW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "386T", - "8610", - "Galaxy", - "Galaxy s10+", - "GALAXY TABLET", - "n750", - "Other", - "prime", - "sch-s738c", - "SNC-B2315", - "tab s", - "tablet" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "5 neo", - "550", - "56431", - "A40", - "advent", - "Avant", - "Cell", - "CORE A03", - "CORE PRIME", - "default", - "Duos", - "ek gc200", - "ek-gc110", - "f3111", - "g550t", - "Galaxy 3", - "Galaxy A5", - "galaxy ace", - "galaxy core prime SM-S820L", - "galaxy grand prime", - "Galaxy Note 3", - "galaxy s 10", - "Galaxy s10+", - "Galaxy S6 Active", - "GALAXY S7", - "Galaxy S8", - "Galaxy SIII", - "Galaxy Tab A", - "GALAXY Tablet", - "glxy", - "GT-8160", - "gt9300", - "GTDuos", - "GT-i9195", - "GT-S5301", - "GT-S6310N", - "GT-S6500t", - "gt-s7582", - "gt-S7582", - "I-1905", - "i-747", - "I-8262", - "I-9082", - "IP WebCAM", - "j3v", - "M830", - "mali", - "Mini", - "n750", - "nbote 4", - "Note", - "note 3", - "NOTE 5", - "note 8", - "note2", - "Old Phone", - "On 5", - "Other", - "phome", - "phone2", - "prevail", - "S 3", - "S III", - "S21+", - "s4 mini", - "S5 Active", - "S5 Neo", - "S6 Edge +", - "S7 Edge", - "S8+", - "Samsung-SM-G870A", - "SCH-I415", - "sgh i747", - "SGH-I727", - "Si900", - "SII", - "Sm-S727VL", - "snc-550", - "snc-b2331", - "SNC-B5395", - "sph-m820-bst", - "sph-m830", - "Stratosphere", - "Ultra", - "wit", - "xcover2", - "xzxd", - "zwart" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "5040", - "550", - "7010", - "cnd-5200", - "IP Smart Cam", - "ip200", - "ipolis", - "L6013R", - "L6013RN", - "L6083RP", - "Other", - "PND-9080R", - "PNV-9080R", - "QND-6070R", - "QND-7010R", - "QND-7080R", - "QNO-6010R", - "QNO-6020R", - "QNO-6070R", - "QNO-7080R", - "QNV-7010R", - "QNV-7080R", - "samsung sn", - "SDE-120", - "Smartcam", - "SMZ", - "SN0-6084", - "snb 6011N", - "SNB 7001", - "snb 7004n", - "SNB-3000", - "snb5000", - "SNB-5004", - "SNB-6003", - "SNB-6004", - "SNB-6010", - "SNB-6011", - "snb-8000", - "SNB-8000N", - "SNC-B5366N", - "snd", - "SND - 3038", - "SND 1011", - "snd-1000n", - "SND-5011", - "SND-5011P", - "SND-5061", - "SND5080", - "snd-6011rp", - "SND-6013R", - "SND-6083N", - "SND-6084R", - "SND-7080", - "SND-7084", - "SND-L6013", - "SND-L6013R", - "SND-L6083R", - "SNF-7010", - "SNF-8010", - "snh p6410", - "snh-6440bn", - "SNH-E6411BN", - "SNH-E6413BN", - "SNH-E6413BN CAMERA", - "SNH-E6440BN", - "SNH-V6414BN", - "SNO-1080R", - "SNO-1080RN", - "SNO-5080R", - "SNO-6084R", - "SNO-6543", - "SNO-7082R", - "sno-7084r", - "SNO-8081R", - "SNO-L6013R", - "SNO-L6083R", - "SNP-3120", - "SNP-5200H", - "SNP-6200H", - "SNP-6200RH", - "SNP-6200RP", - "snp-6320", - "SNP6320", - "SNP-6320H", - "snp-6321", - "snr", - "SNS-R0810W", - "SNV-3082", - "SNV-5010", - "SNV-5080", - "SNV-5080R", - "SNV-6013", - "snv-6018", - "SNV-6083", - "SNV-6083R", - "snv-6084r", - "SNV-7080", - "SNV-7080R", - "SNV-7082n", - "SNV-7084R", - "SNV-8080", - "SNV-L5083R", - "SNV-L6083R", - "SNZ-5200", - "SNZ-6320P", - "SPE-100", - "SPE-101", - "spe-400", - "Too", - "WISENET", - "WN3", - "XNP-6120H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "6013", - "6084RP", - "Other", - "QNO-6010R", - "SN0-6084", - "SNB-6004P", - "SNB-6400", - "SNB-7000", - "SND-5080P", - "SND-6011R", - "SND-6048R", - "SND-6084R", - "SND-L6013R", - "SNH-1011N", - "SNH-P6410BN", - "SNH-P6412BN", - "SNO-6011R", - "SNO-6019", - "SNO-L6083R", - "SNP-3370TH", - "SNP-6320H", - "snv-6012mp", - "SNV-6013", - "SNV-6048R", - "snv-6084", - "SNV-6084R", - "SNV-L6083R", - "WiseNet III H.264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/profile1/media.smp" - }, - { - "models": [ - "6084RP", - "Other", - "SNB-3000", - "SNB-6003", - "SNC-7478", - "SNC-B2315P", - "SNC-B5366N", - "SNC-B5395", - "snc-m300", - "snc-msnc300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=jpg" - }, - { - "models": [ - "7010", - "QNO-7080R", - "snf7010", - "SNF-8010", - "SNH-1011n", - "SNH-P6410BN", - "SNH-V6410PN", - "SNV-6048R", - "XNO6085R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/profile4/media.smp" - }, - { - "models": [ - "800 V", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "A 20", - "galaxy tab a", - "Other", - "S20 FE", - "SNH-P6410BN" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A03s", - "Grand Prime SM-G530 G", - "Other", - "sm-a250f", - "SM-G900F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/h264_pcm.sdp" - }, - { - "models": [ - "A50", - "A54", - "Galaxy III Mini", - "Galaxy J7", - "Galaxy S3", - "galaxy s6", - "Galaxy Tab A", - "J3 IP Webcam", - "Neo" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "A70", - "DIWK41M", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Blaze", - "galaxy", - "GT3110", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video" - }, - { - "models": [ - "Core", - "Galaxy", - "Galaxy 3", - "GALAXY S2", - "GALAXY S3", - "galaxy s4", - "Galaxy s5", - "Galaxy S6", - "Galaxy S7", - "gt-p3113ts", - "gtp3114ts", - "n750", - "Other", - "sch-s738c", - "SM-J100H", - "SPH-L710T", - "Xperia" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "D910", - "Galaxy S2", - "Galaxy S2-1", - "GALAXY S7", - "GT-I9070", - "I-337", - "I-8262", - "I-9300", - "IP WebCAM LP", - "Note5", - "Other", - "phone", - "S6 Edge +", - "SII", - "SM-N910P", - "SPH-L710T", - "sprint", - "Tab 3", - "Ultra" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "DC-D353", - "SC-D353" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=[CHANNEL].JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "ds60" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "ds60", - "Galaxy S7", - "note", - "Other", - "sm-s920l" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "F6836W", - "F-M136", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "galaxy", - "galaxy A9", - "galaxy ace", - "Galaxy j7", - "Galaxy s8+", - "Mobile Phone", - "note 8", - "S20 FE 5G", - "SDR-B84300", - "SNC-79440BW", - "wisenet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/" - }, - { - "models": [ - "galaxy", - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/1" - }, - { - "models": [ - "Galaxy J7", - "Galaxy S3", - "Iscar-Camera", - "note 4", - "Other", - "sm-s920l", - "sm-s975l", - "SNP-3301" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Galaxy J7" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/Browser" - }, - { - "models": [ - "Galaxy S5" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/shot.jpg" - }, - { - "models": [ - "Galaxy Tab A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1024, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Grand Prime SM-G530 W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/h264.sdp" - }, - { - "models": [ - "GT-I0980", - "Other", - "SRD-165" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "IP Smart Cam", - "PoE Outdoor", - "snh-6440bn", - "SNH-E6411BN", - "SNH-E6440BN", - "SNH-P6410BN", - "SNH-V6410PN", - "SNH-V6414BN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile5/media.smp" - }, - { - "models": [ - "IP Smart Cam", - "QNO-6020R", - "Smartcam", - "SmartCam D1", - "SNH-1011N", - "SNH-E6440BN", - "SNH-P6410BN", - "SNH-V6410PN", - "SNH-V6430BN", - "XNP-6120H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/profile5/media.smp" - }, - { - "models": [ - "ipolis", - "Other", - "QNO-6020R", - "snb 6011N", - "SNB-5000", - "SND-6011R", - "SND-6013RP", - "snd-7004", - "SND-L6013R (H.264)", - "snd-L6013R H.264", - "SNH-1011N", - "snv*8080", - "SNV-5080", - "SNV-6013", - "SNV-7084r", - "SPE-101", - "WISENET", - "XNF-8010RV", - "XNV-6010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/profile2/media.smp" - }, - { - "models": [ - "iPolis-RTSP", - "SNH-P6410BN", - "SNH-V6414BN", - "SNO-L6013R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile2/media.smp" - }, - { - "models": [ - "nx3000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 7679, - "url": "/qvga_livestream.avi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other", - "s10", - "XCover 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "SNO-6084R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Other", - "SDR-B73303P1T", - "SDR-B74301", - "WISENET" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "media/still.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "SDR-B73303P1T" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other", - "SME DVR", - "SNB-2000", - "SNC-1300", - "SNC-B5395", - "SND-7080", - "SNP-3301", - "SNP-3370TH" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4unicast" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other", - "SCC-C6325N", - "tabS3", - "WISENET" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "profile[CHANNEL]/media.smp" - }, - { - "models": [ - "Other", - "SNB-5004", - "SNC-570", - "SNC-570N", - "SND-560", - "SNP-3301", - "SNP-3370TH" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "public/video.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other", - "SDE-120", - "SDE-3000N", - "SME", - "SME DVR", - "SME DVR 4220", - "SME-2220" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "Other", - "SRN-473S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/checkimage.cgi?UID=[USERNAME]&CAM=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "scc-c6475" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=0.JPG&SENDEMPTYIMAGES=NO" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/0" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/2" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/3" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/4" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/5" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/6" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/7" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/8" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/9" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/10" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/11" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/12" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/13" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/14" - }, - { - "models": [ - "SDC-9441BC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4524, - "url": "/15" - }, - { - "models": [ - "sfd", - "SNH-E6411BN", - "SNH-P6410BN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile4/media.smp" - }, - { - "models": [ - "Smartcam", - "SNH-1011N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/profile6/media.smp" - }, - { - "models": [ - "SMT DVR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fwstream.cgi?ServerId=0&AppKey=0x00006784&PortId=0&CameraId=[CHANNEL]&PauseTime=0&FwCgiVer=0x0001" - }, - { - "models": [ - "SNB-2000" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "video/cam[CHANNEL]/2.0?audio=0&stream=0" - }, - { - "models": [ - "SNB-2000" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mjpeg/media.smp" - }, - { - "models": [ - "SNB-3000", - "SNB-6000", - "SNV-3081", - "SNV-6084N", - "SNV-6084R", - "WISENET" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MJPEG/media.smp" - }, - { - "models": [ - "SNB-3000", - "SND-3080F", - "SNV-3080", - "SNV-3081" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "H264/media.smp" - }, - { - "models": [ - "SNB-3000", - "SND-1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1/media.smp" - }, - { - "models": [ - "SNB-6003" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "SNC-570" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/public/video.cgi?ch=1" - }, - { - "models": [ - "SND-6048R", - "Techwin SND-7084", - "Techwin SNV-7084" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sanan-cctv.json b/data/brands/sanan-cctv.json deleted file mode 100644 index dfdec13..0000000 --- a/data/brands/sanan-cctv.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "brand": "Sanan-cctv", - "brand_id": "sanan-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B-Series", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "B-Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "B-Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "B-Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "B-Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "B-Series" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "dl81a", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPCAM-100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Itthon", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/sanetron.json b/data/brands/sanetron.json deleted file mode 100644 index 61586e8..0000000 --- a/data/brands/sanetron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sanetron", - "brand_id": "sanetron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sannce.json b/data/brands/sannce.json deleted file mode 100644 index b26d880..0000000 --- a/data/brands/sannce.json +++ /dev/null @@ -1,399 +0,0 @@ -{ - "brand": "Sannce", - "brand_id": "sannce", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=0", - "auth_required": true, - "notes": "Bubble Protocol - main stream (works with go2rtc bubble:// source)" - }, - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=1", - "auth_required": true, - "notes": "Bubble Protocol - sub stream (lower quality)" - }, - { - "models": [ - "1080p", - "720 HD IP cam", - "i21 ag", - "l41GH", - "Other", - "PTZ camera", - "WIFICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "1080P", - "141FK", - "720 HD IP CAM", - "DVR", - "I71BD", - "Mark 4", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Unicast/channels/101" - }, - { - "models": [ - "1080P", - "121AJ", - "222", - "I41V", - "I51CL", - "I52CL", - "i61be", - "I71BD", - "IPCAM-JPEG", - "l21aj", - "Other", - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080P", - "720 HD IP CAM", - "8CH-2P", - "DVR", - "I21AN", - "i61dx", - "Other", - "PTZ CAMERA", - "wifi nvr", - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "121ag", - "I21AG", - "Other", - "PTZ CAMERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "121ag", - "DN81BJ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 19430, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "121AJ", - "i21v", - "I41V", - "i61be" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "141CB", - "720 HD IP CAM", - "I21AG", - "I21AN", - "I21AS", - "l21AN", - "PTZ CAMERA", - "WIFICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5323" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "71GL", - "i21v", - "i41ec", - "l31v" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720 HD IP CAM", - "i21AG", - "I21AG", - "I21AN", - "Other", - "PTZ CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "8ch-w", - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=3&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "8ch-w", - "DVR", - "N441H" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "960p", - "l41CC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - }, - { - "models": [ - "DM81Z1T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DT81BF", - "I51FQ", - "i61be" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "dvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp?real_stream" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=4&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DX-8104", - "I91FT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "i21AG" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "I21AG" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "I41CC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "I41DC" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "I41V" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "I51BE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "I51CS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "I51CS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "I51CS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "I61DD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "i61dx", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "N441K" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "PTZ CAMERA" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/sansco.json b/data/brands/sansco.json deleted file mode 100644 index 467a06f..0000000 --- a/data/brands/sansco.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Sansco", - "brand_id": "sansco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2699" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "4chn", - "6699", - "8108", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "4chn", - "8108" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "6699", - "8699" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=3_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/santachi.json b/data/brands/santachi.json deleted file mode 100644 index 6908b16..0000000 --- a/data/brands/santachi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Santachi", - "brand_id": "santachi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ST-NT280E1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/santec-video.json b/data/brands/santec-video.json deleted file mode 100644 index 70eaae0..0000000 --- a/data/brands/santec-video.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "brand": "Santec-video", - "brand_id": "santec-video", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "53151", - "Other", - "snc-6202", - "snc-6302", - "SNC-6303" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "I-8262" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "I-8262" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "I-8262" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other", - "snc-6302" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SNC-521 IR/B", - "SNC-565 IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "ipcam/mjpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "SNC-565 IR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "snc-6302" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "jpeg" - }, - { - "models": [ - "SNC-6303" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/h264" - }, - { - "models": [ - "SNC-6303" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/sanyo.json b/data/brands/sanyo.json deleted file mode 100644 index 305f05c..0000000 --- a/data/brands/sanyo.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Sanyo", - "brand_id": "sanyo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3300", - "Other", - "vcc-hd2500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "HD 5400", - "hd5400", - "hd-5400p", - "HD5600", - "VCC HD2500P", - "VCC-MCH5600P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - }, - { - "models": [ - "VDC-HD3300P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/1/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sanzio.json b/data/brands/sanzio.json deleted file mode 100644 index f7550cb..0000000 --- a/data/brands/sanzio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sanzio", - "brand_id": "sanzio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ebay" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/saocom.json b/data/brands/saocom.json deleted file mode 100644 index abc3bec..0000000 --- a/data/brands/saocom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Saocom", - "brand_id": "saocom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/saphire.json b/data/brands/saphire.json deleted file mode 100644 index 93811d0..0000000 --- a/data/brands/saphire.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Saphire", - "brand_id": "saphire", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SF-IPCV025-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/sapsan.json b/data/brands/sapsan.json deleted file mode 100644 index 512c80a..0000000 --- a/data/brands/sapsan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sapsan", - "brand_id": "sapsan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-CAM 1304" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/saqicam.json b/data/brands/saqicam.json deleted file mode 100644 index ecb3cf8..0000000 --- a/data/brands/saqicam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Saqicam", - "brand_id": "saqicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SQ-D20CT30-POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/MAIN" - } - ] -} \ No newline at end of file diff --git a/data/brands/sarmatt.json b/data/brands/sarmatt.json deleted file mode 100644 index 4a2f032..0000000 --- a/data/brands/sarmatt.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Sarmatt", - "brand_id": "sarmatt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dsr 1610h" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DSR-1623-Real" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=" - }, - { - "models": [ - "DSR-1623-Real" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=16&u=[USERNAME]&p=" - } - ] -} \ No newline at end of file diff --git a/data/brands/sarotech.json b/data/brands/sarotech.json deleted file mode 100644 index aea5f6b..0000000 --- a/data/brands/sarotech.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Sarotech", - "brand_id": "sarotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip300", - "IPCAM-1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPCAM-1000G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - }, - { - "models": [ - "IPCAM-1000G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live2" - } - ] -} \ No newline at end of file diff --git a/data/brands/sartek.json b/data/brands/sartek.json deleted file mode 100644 index e37f117..0000000 --- a/data/brands/sartek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sartek", - "brand_id": "sartek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "iHM42-2T07-T2-EN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sas-digital.json b/data/brands/sas-digital.json deleted file mode 100644 index c77f74d..0000000 --- a/data/brands/sas-digital.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Sas Digital", - "brand_id": "sas-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720p IP #1", - "720p IP# 2", - "asd" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "das" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/satvision.json b/data/brands/satvision.json deleted file mode 100644 index 06e3320..0000000 --- a/data/brands/satvision.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "brand": "Satvision", - "brand_id": "satvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "143" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "svi-223a", - "SVI-D223A SD", - "SVI-S223A", - "SVI-S223S", - "SVI-S483VM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - }, - { - "models": [ - "SVI-D343V", - "SVI-S123 SD", - "SVN-6625-PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "SVI-S112" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "SVI-S123 SD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "SVI-S123 SD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/savitmicro.json b/data/brands/savitmicro.json deleted file mode 100644 index 96b8756..0000000 --- a/data/brands/savitmicro.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "brand": "Savitmicro", - "brand_id": "savitmicro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-1300PTW", - "IP350W", - "VIJE SERIES" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "IP-1300PTW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP-2000HW", - "VIJE Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP-2000HW", - "VIJE Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP-2000HW", - "VIJE Series" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "IP-2000HW", - "VIJE Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "ip-2000ptw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IP350W", - "VIJE Series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "VIJE Series" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/savvypixel.json b/data/brands/savvypixel.json deleted file mode 100644 index 145e517..0000000 --- a/data/brands/savvypixel.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Savvypixel", - "brand_id": "savvypixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3mp" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "3MP VANDAL DOME" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sawyobi.json b/data/brands/sawyobi.json deleted file mode 100644 index 3443453..0000000 --- a/data/brands/sawyobi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sawyobi", - "brand_id": "sawyobi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ezviz" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/saxxon.json b/data/brands/saxxon.json deleted file mode 100644 index 26d76da..0000000 --- a/data/brands/saxxon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Saxxon", - "brand_id": "saxxon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CC1310T" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sayus.json b/data/brands/sayus.json deleted file mode 100644 index 2fe92a3..0000000 --- a/data/brands/sayus.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Sayus", - "brand_id": "sayus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "US-0399", - "US-1403", - "US-9121" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/scada-technology.json b/data/brands/scada-technology.json deleted file mode 100644 index c46af4f..0000000 --- a/data/brands/scada-technology.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Scada Technology", - "brand_id": "scada-technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ST-MB-3MP", - "ST-MD-3MP", - "ST-MP-PTZ-18XIR", - "ST-TD-3MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ST-VD-1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/scancam.json b/data/brands/scancam.json deleted file mode 100644 index 29aa012..0000000 --- a/data/brands/scancam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Scancam", - "brand_id": "scancam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SCM-SW2632FD" - ], - "type": "JPEG", - "protocol": "http", - "port": 1554, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/schlage.json b/data/brands/schlage.json deleted file mode 100644 index f431646..0000000 --- a/data/brands/schlage.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Schlage", - "brand_id": "schlage", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NEXIA WCW100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/schneider.json b/data/brands/schneider.json deleted file mode 100644 index 97c84d5..0000000 --- a/data/brands/schneider.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Schneider", - "brand_id": "schneider", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PoE Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/scout-cctv.json b/data/brands/scout-cctv.json deleted file mode 100644 index fa6a835..0000000 --- a/data/brands/scout-cctv.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Scout Cctv", - "brand_id": "scout-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Jned89-360D" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "jvev" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "SC-MDB3-13", - "SC-SBT8108" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/scs.json b/data/brands/scs.json deleted file mode 100644 index 11b87f2..0000000 --- a/data/brands/scs.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "Scs", - "brand_id": "scs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wf-100ah" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WF-100AH", - "WF-100PCX", - "wf404", - "WF-450" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "WF-100AH", - "wf-100p", - "WF-100PCX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "WF-100PCX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "WF-100PCX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "WF-100PCX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WF-402H" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "WF-450" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/scsi.json b/data/brands/scsi.json deleted file mode 100644 index 07fe507..0000000 --- a/data/brands/scsi.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Scsi", - "brand_id": "scsi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SDN-2000", - "V-2001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "V-2000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - }, - { - "models": [ - "V-2001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/scv3.json b/data/brands/scv3.json deleted file mode 100644 index d64ec78..0000000 --- a/data/brands/scv3.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Scv3", - "brand_id": "scv3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/scw.json b/data/brands/scw.json deleted file mode 100644 index 0f82c2a..0000000 --- a/data/brands/scw.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Scw", - "brand_id": "scw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Deputy 2.0", - "HNC303-MB", - "Other", - "Sheriff 8.0", - "Warrior 8.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1025, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Deputy 2.0", - "deputy 4.0", - "sheriff 4.0", - "Viking 4.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Sheriff 8.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/3" - } - ] -} \ No newline at end of file diff --git a/data/brands/sdc.json b/data/brands/sdc.json deleted file mode 100644 index b38c89d..0000000 --- a/data/brands/sdc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sdc", - "brand_id": "sdc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "intelbras dvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sdeter.json b/data/brands/sdeter.json deleted file mode 100644 index d26e4e6..0000000 --- a/data/brands/sdeter.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "brand": "Sdeter", - "brand_id": "sdeter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4332027043", - "AB-A2", - "DB-02-HD", - "GGGG-203267-FBCFB", - "Other", - "smart wifi camera", - "SMART WIFI CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - }, - { - "models": [ - "720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[CHANNEL]_stream=0.sdp" - }, - { - "models": [ - "AB002HD", - "DB-02-HD", - "Other", - "smart wifi camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "AB-A2", - "mycam1", - "Other", - "Smart WIFI Cam", - "Teet ABA2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "AB-A4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "mycam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/cif" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Smart WIFI Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sea-wit.json b/data/brands/sea-wit.json deleted file mode 100644 index 12e3a56..0000000 --- a/data/brands/sea-wit.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Sea Wit", - "brand_id": "sea-wit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20BB56A", - "Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "SEAW-13Z37EA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "SEAW-13Z37EA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/secam-cctv.json b/data/brands/secam-cctv.json deleted file mode 100644 index 315a6fb..0000000 --- a/data/brands/secam-cctv.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Secam Cctv", - "brand_id": "secam-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "510", - "IPCAM 501" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IPCAM 501" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "tx-23+" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/seccam.json b/data/brands/seccam.json deleted file mode 100644 index 35897c0..0000000 --- a/data/brands/seccam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seccam", - "brand_id": "seccam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SEC01" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sectec.json b/data/brands/sectec.json deleted file mode 100644 index 98a1f45..0000000 --- a/data/brands/sectec.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Sectec", - "brand_id": "sectec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "buiten", - "BULLET", - "DOME", - "ST-758M", - "ST-AHD5008P", - "STIP", - "ST-IP121M", - "ST-IP7016E-1M", - "ST-IP805M", - "st-ip935w-1.4m" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[CHANNEL]_stream=0.sdp" - }, - { - "models": [ - "BULLET" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[CHANNEL]_stream=1.sdp" - }, - { - "models": [ - "sfip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]&stream=0.sdp?" - }, - { - "models": [ - "ST-291-2M-AI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "ST-IP573F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[CHANNEL]_stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/secu-first.json b/data/brands/secu-first.json deleted file mode 100644 index d0c7851..0000000 --- a/data/brands/secu-first.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Secu First", - "brand_id": "secu-first", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip180" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "JSW P2P" - ], - "type": "JPEG", - "protocol": "http", - "port": 26337, - "url": "/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/secueasy.json b/data/brands/secueasy.json deleted file mode 100644 index 92a7d95..0000000 --- a/data/brands/secueasy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Secueasy", - "brand_id": "secueasy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SE-NI102V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "SE-NI102VH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/seculink.json b/data/brands/seculink.json deleted file mode 100644 index e417e87..0000000 --- a/data/brands/seculink.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Seculink", - "brand_id": "seculink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10709" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "avr7804", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "HD IPC", - "Other", - "SA-IPC1100HI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1.264" - }, - { - "models": [ - "ipc-r10" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/secuon.json b/data/brands/secuon.json deleted file mode 100644 index f0ec50d..0000000 --- a/data/brands/secuon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Secuon", - "brand_id": "secuon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/secuplug.json b/data/brands/secuplug.json deleted file mode 100644 index ff42a2d..0000000 --- a/data/brands/secuplug.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "brand": "Secuplug", - "brand_id": "secuplug", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-B130P-30X", - "IPD-D53Y0701", - "onvif", - "SP-APHD46F-4K3X", - "SPEED DOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPD-D53M02", - "IPD-D53M02-BS series", - "Other", - "SP-MG03AR-5.0MP-B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "IPD-D53M02", - "IPD-E2A5Y04-BS", - "SP-AMPHD48FDM324SP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPD-D53M02", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4main" - }, - { - "models": [ - "IPD-E2A5Y04-BS", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "onvif" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/secur-eye.json b/data/brands/secur-eye.json deleted file mode 100644 index bac07ce..0000000 --- a/data/brands/secur-eye.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "brand": "Secur Eye", - "brand_id": "secur-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "32563456" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "F Series", - "PT10W", - "SIP-PT10W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Gate-64", - "SIP-PT10W", - "SIP-PT20W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "nvr 4 ch" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Other", - "SIP-PT10W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "S-C20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "scip2p4wwpd-vf" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "SIP-PT10W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SIP-PT10W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "SIP-PT10W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SIP-PT10W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "SIP-PT10W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "xxc5330" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/secur360.json b/data/brands/secur360.json deleted file mode 100644 index ad68a3e..0000000 --- a/data/brands/secur360.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Secur360", - "brand_id": "secur360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SL 9600", - "SL-9601-00", - "Video Doorbell SL-9601-00" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/securecam.json b/data/brands/securecam.json deleted file mode 100644 index 676cf44..0000000 --- a/data/brands/securecam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Securecam", - "brand_id": "securecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SS-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/securia-pro.json b/data/brands/securia-pro.json deleted file mode 100644 index 87dd34a..0000000 --- a/data/brands/securia-pro.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Securia Pro", - "brand_id": "securia-pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "3108", - "8MP 4K" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "N388T-200W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/securicom-tunisie.json b/data/brands/securicom-tunisie.json deleted file mode 100644 index 069fe74..0000000 --- a/data/brands/securicom-tunisie.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Securicom Tunisie", - "brand_id": "securicom-tunisie", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Securicom dome" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/security-cam.json b/data/brands/security-cam.json deleted file mode 100644 index 747907f..0000000 --- a/data/brands/security-cam.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Security Cam", - "brand_id": "security-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet HD", - "BULLET HD 1080" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IPVA58", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/main" - }, - { - "models": [ - "sec" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/security-camera-2000.json b/data/brands/security-camera-2000.json deleted file mode 100644 index e262515..0000000 --- a/data/brands/security-camera-2000.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "brand": "Security Camera 2000", - "brand_id": "security-camera-2000", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "bosch" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IPQ-2367XL6" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "IPQ-2385XPOE", - "Other", - "SKU-IPQ-2385X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "neye3c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other", - "SKU-IPQW-2283X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "SKU-IPQW-2367X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/security-camera-warehouse.json b/data/brands/security-camera-warehouse.json deleted file mode 100644 index 8b9f863..0000000 --- a/data/brands/security-camera-warehouse.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Security Camera Warehouse", - "brand_id": "security-camera-warehouse", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "43230", - "Viking 4.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Warrior 2.0 v2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/security-labs.json b/data/brands/security-labs.json deleted file mode 100644 index cbb9bd5..0000000 --- a/data/brands/security-labs.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Security Labs", - "brand_id": "security-labs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FNJX9RPY94LR3J6PUFWJ", - "SLW 164" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "FNJX9RPY94LR3J6PUFWJ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other", - "SLW-163", - "SLW-164", - "SWL-164" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/security.json b/data/brands/security.json deleted file mode 100644 index 58d13ff..0000000 --- a/data/brands/security.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Security", - "brand_id": "security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Labs SLD251" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Labs SLD251" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "Labs SLD264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "NV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "retro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/securitytronix.json b/data/brands/securitytronix.json deleted file mode 100644 index 1397b26..0000000 --- a/data/brands/securitytronix.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Securitytronix", - "brand_id": "securitytronix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "STEVO36BT" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ST-HD-BT2812-720-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ST-HD-BT2812-720-G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/securix.json b/data/brands/securix.json deleted file mode 100644 index 74a6edc..0000000 --- a/data/brands/securix.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Securix", - "brand_id": "securix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other", - "SME4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "SMC4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/secuvision.json b/data/brands/secuvision.json deleted file mode 100644 index c0779b8..0000000 --- a/data/brands/secuvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Secuvision", - "brand_id": "secuvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR-D0432A-16P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/chID=1&streamType=main" - } - ] -} \ No newline at end of file diff --git a/data/brands/secvision.json b/data/brands/secvision.json deleted file mode 100644 index cddefe6..0000000 --- a/data/brands/secvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Secvision", - "brand_id": "secvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pa3020w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/seecam.json b/data/brands/seecam.json deleted file mode 100644 index b98a991..0000000 --- a/data/brands/seecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seecam", - "brand_id": "seecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HS-6100-HD1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/seecom.json b/data/brands/seecom.json deleted file mode 100644 index 39db463..0000000 --- a/data/brands/seecom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seecom", - "brand_id": "seecom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SNP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/seedary.json b/data/brands/seedary.json deleted file mode 100644 index afe00ea..0000000 --- a/data/brands/seedary.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Seedary", - "brand_id": "seedary", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D2-X-20", - "PTZ 4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=1.sdp" - }, - { - "models": [ - "D2-X-20", - "Other", - "PTZ 4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/seenergy.json b/data/brands/seenergy.json deleted file mode 100644 index c6c65c6..0000000 --- a/data/brands/seenergy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seenergy", - "brand_id": "seenergy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SVR-104" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/seesoon.json b/data/brands/seesoon.json deleted file mode 100644 index 398390a..0000000 --- a/data/brands/seesoon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Seesoon", - "brand_id": "seesoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome", - "p2p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/seetong.json b/data/brands/seetong.json deleted file mode 100644 index 005c46b..0000000 --- a/data/brands/seetong.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "brand": "Seetong", - "brand_id": "seetong", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "Dome", - "TI368GW", - "Tuin" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "456", - "DOME", - "hl-ip14-100e", - "Other", - "TW38T15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "TI368GW" - ], - "type": "JPEG", - "protocol": "http", - "port": 2001, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/sefica.json b/data/brands/sefica.json deleted file mode 100644 index eff730a..0000000 --- a/data/brands/sefica.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sefica", - "brand_id": "sefica", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PC95BOF/IR-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1554, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/seif.json b/data/brands/seif.json deleted file mode 100644 index 39151a5..0000000 --- a/data/brands/seif.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seif", - "brand_id": "seif", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "POE-280HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/seimem.json b/data/brands/seimem.json deleted file mode 100644 index 705ce79..0000000 --- a/data/brands/seimem.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seimem", - "brand_id": "seimem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S6203Y-WR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/seisa.json b/data/brands/seisa.json deleted file mode 100644 index b3de51e..0000000 --- a/data/brands/seisa.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "brand": "Seisa", - "brand_id": "seisa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JK-C7823W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "JK-H616WS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/seisatek.json b/data/brands/seisatek.json deleted file mode 100644 index 0cbc8ce..0000000 --- a/data/brands/seisatek.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Seisatek", - "brand_id": "seisatek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JK-C7815W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JK-H624WS", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "JK-H624WS", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/selea.json b/data/brands/selea.json deleted file mode 100644 index 9f4d40e..0000000 --- a/data/brands/selea.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Selea", - "brand_id": "selea", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X-T850" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/p3.264" - }, - { - "models": [ - "X-T850" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/p3.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/semac.json b/data/brands/semac.json deleted file mode 100644 index b1469d8..0000000 --- a/data/brands/semac.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Semac", - "brand_id": "semac", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "510", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "990506" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IPCAM 515", - "IPCAM500", - "IPCAM510", - "P2P IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipcam510" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPCAM510" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IPCAM520" - ], - "type": "JPEG", - "protocol": "http", - "port": 3333, - "url": "/tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/senao.json b/data/brands/senao.json deleted file mode 100644 index 441c3e2..0000000 --- a/data/brands/senao.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Senao", - "brand_id": "senao", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EXT1025" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "PTZ-01H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sensormatic.json b/data/brands/sensormatic.json deleted file mode 100644 index 5d9fabe..0000000 --- a/data/brands/sensormatic.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Sensormatic", - "brand_id": "sensormatic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "api.htm?op.liveimage=1" - }, - { - "models": [ - "icam1000", - "OC-810", - "RC-8021WADT", - "rc8025b-adt", - "RT8021W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "nv412a", - "OC-810", - "Other", - "RC-8021", - "RC-8021WADT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "nv412a", - "RC8021", - "RC-8021WADT", - "RC-8021W-ADT" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "oc810", - "OC-810", - "OC-810v", - "Other", - "RC-8021", - "RC-8021WADT", - "rc8025b", - "rc8025b-adt" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "RC8025B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/sentient-pro.json b/data/brands/sentient-pro.json deleted file mode 100644 index 4e7701e..0000000 --- a/data/brands/sentient-pro.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Sentient Pro", - "brand_id": "sentient-pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A21RQ", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "N09KT" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "N09KT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sentry-360.json b/data/brands/sentry-360.json deleted file mode 100644 index 5a52c68..0000000 --- a/data/brands/sentry-360.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Sentry 360", - "brand_id": "sentry-360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360", - "fs-ip8180" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "360", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "360", - "360EYE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "IS-DM210", - "is-ip200-dn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "is-ip200-dn" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "/" - }, - { - "models": [ - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/sentryview.json b/data/brands/sentryview.json deleted file mode 100644 index 004b279..0000000 --- a/data/brands/sentryview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sentryview", - "brand_id": "sentryview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "101" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/sentul.json b/data/brands/sentul.json deleted file mode 100644 index 57588ac..0000000 --- a/data/brands/sentul.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sentul", - "brand_id": "sentul", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/sepcam.json b/data/brands/sepcam.json deleted file mode 100644 index 60aa463..0000000 --- a/data/brands/sepcam.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Sepcam", - "brand_id": "sepcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LEDVANCE", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/septekon.json b/data/brands/septekon.json deleted file mode 100644 index bc55ae9..0000000 --- a/data/brands/septekon.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Septekon", - "brand_id": "septekon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "640", - "764", - "Other", - "ty30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "764" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1000, - "url": "/live/ch1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/sequrecam.json b/data/brands/sequrecam.json deleted file mode 100644 index d807c25..0000000 --- a/data/brands/sequrecam.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Sequrecam", - "brand_id": "sequrecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "Other", - "PNP-125" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "PNP-125" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/serage.json b/data/brands/serage.json deleted file mode 100644 index 7a7e4f6..0000000 --- a/data/brands/serage.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Serage", - "brand_id": "serage", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/serang.json b/data/brands/serang.json deleted file mode 100644 index 7164b49..0000000 --- a/data/brands/serang.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Serang", - "brand_id": "serang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "tl-3171" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - } - ] -} \ No newline at end of file diff --git a/data/brands/sercam.json b/data/brands/sercam.json deleted file mode 100644 index 10c965c..0000000 --- a/data/brands/sercam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sercam", - "brand_id": "sercam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1245" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sercomm.json b/data/brands/sercomm.json deleted file mode 100644 index 39bea76..0000000 --- a/data/brands/sercomm.json +++ /dev/null @@ -1,775 +0,0 @@ -{ - "brand": "Sercomm", - "brand_id": "sercomm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000E8F72C088", - "0C432", - "0C810", - "1000", - "8020", - "8021", - "8025B", - "ICAMERA 2", - "ICAMERA1000", - "ICAMERA2-C", - "OC432", - "OC-810", - "OC810-ADT", - "OC-810V", - "OC-821", - "OC-832", - "OoC830", - "Other", - "RC3221", - "RC4030", - "RC-6230D", - "RC-8020", - "RC-8021", - "RC-8021 w/Mic", - "RC-8021 W/MIC", - "RC-8021v", - "RC8021W-ADT", - "rc8025", - "rc8025b", - "rc8026", - "RC-8026W", - "RC-8030", - "RC-8061", - "RC-8061v", - "rc8083", - "RC-8110", - "rc8221", - "RC-8221", - "RC-8221D", - "RC8221W", - "RC-8230", - "RC-8230D" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "0c432", - "0C432", - "0C-432", - "0C835", - "1000", - "1000W", - "1010", - "1CAMERA2", - "2E4819F", - "8020", - "8021", - "8026W", - "8030", - "8110", - "8221", - "8221D", - "8230", - "age", - "CR8026", - "ICAMEA2", - "ICAMERA 2", - "ICAMERA-1000", - "icamera2", - "ICAMERA-2", - "ICAMERA2-C", - "IPCAMERA2", - "np12e9ce", - "oc342", - "OC380", - "OC431", - "oc432", - "OC-432", - "oc-801adt", - "OC-810", - "oc810adt", - "OC810-ADT", - "OC-810V", - "OC-821", - "oc8210", - "OC821D", - "oc-830", - "OC830", - "OC835-V2", - "oct 432", - "Other", - "R8026W", - "rc 8111", - "RC-1445", - "RC4030", - "RC-4551", - "rc8021", - "RC-8021", - "RC8021`", - "RC-8021v", - "RC8021W-ADT", - "RC8025", - "rc8026", - "RC8026E", - "RC8026W", - "RC8030", - "RC-8061V", - "RC8110", - "RC8221", - "RC-8221", - "RC8221D", - "RC8221W", - "rc82226w", - "RC-8230", - "rc8230d", - "RC-8230D", - "RS8026W", - "RS8221", - "SC79D0F8", - "SCEC073A", - "Sercomm: RC8030", - "sr8026", - "XCAM", - "XHC1-1", - "XHC1-SE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "0c432", - "0C432", - "0C835", - "1000", - "1010", - "1010W", - "1camera2", - "8020", - "8021", - "8025B", - "8030", - "8221", - "AC821", - "I1000", - "ICAMERA 2", - "icamera1000", - "icamera2", - "ICAMERA2-4", - "ICamera2-c", - "IP2", - "IPCAMERA2", - "oc380", - "OC431", - "OC432", - "OC-432", - "OC-802", - "OC-810", - "OC810-ADT", - "OC-810V", - "OC-821", - "oc830", - "OC830", - "OC-832", - "OC835-V2", - "OC835v3-FBC8EB", - "Other", - "RC-4020", - "RC-4551", - "rc80", - "RC-802", - "RC-8020", - "RC-8021", - "RC-8021 W/MIC", - "RC-8021v", - "RC8021W-ADT", - "RC-8025B", - "rc8026", - "rc8026w", - "RC-8026W", - "RC-8030", - "RC-8061", - "RC-8061v", - "RC8110", - "RC-8221", - "RC-8221D", - "RC8221W", - "RC822v2", - "rc8230", - "RC-8230D", - "RC8261", - "RS8026", - "RS8026W", - "sc15214c", - "SC72C088", - "XHC1-1", - "XHC1-SE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "0c432", - "0C-432", - "1000", - "1000w", - "1010W", - "8010", - "8021", - "8025B", - "8030", - "8221", - "AC821", - "ADMIN", - "icamea2", - "ICAMERA 2", - "icamera2", - "iCamera-2", - "ICAMERA2-C", - "oc 821", - "oc432", - "OC432", - "OC-432", - "OC-810", - "OC810-ADT", - "OC-821", - "OC830", - "OC-832", - "Other", - "rc-4021", - "rc8021", - "RC-8021 W/MIC", - "RC8021W-ADT", - "rc-8025", - "RC-8025B", - "RC-8026W", - "rc-8030", - "RC-8030", - "RC-8110", - "RC-8221", - "RC8221W", - "RC8230", - "rc8230d", - "RC8320D", - "RS8026", - "rs8026w", - "SC1F7157" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "0c432", - "0C-432", - "0c835", - "1000", - "8020", - "8021", - "8025", - "8025B", - "8030", - "8325", - "AC821", - "I DUNNO", - "i1000", - "icamera 2", - "ICAMERA-2", - "ICamera2-c", - "IPCAMERA2", - "mdc835", - "oc 821", - "OC-432", - "OC-802", - "OC-810", - "OC-810v", - "OC-810V", - "OC820", - "OC-821", - "OC821D", - "OC-832", - "oc835-v2", - "OC835v3-DDB88F", - "Other", - "rc2021w", - "RC4020", - "RC-4551", - "RC-8021", - "RC-8021 W/MIC", - "RC-8021v", - "RC-8021V", - "RC8021W-ADT", - "rc8025", - "rc8025b", - "RC-8025B", - "RC8026E", - "RC-8026W", - "RC-8030", - "RC-8061", - "RC-8061v", - "RC-8110", - "RC-8221", - "RC-8230", - "RC-8230D", - "SCED5F72", - "xcam", - "xcam2", - "xhc1-se" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "0c432", - "0c835", - "1000", - "8021", - "8026W", - "8030", - "ICAMERA", - "ICAMERA 2", - "icamera2-c", - "ip2", - "IPcamera2", - "MyCam2", - "OC380", - "OC-432", - "OC-810", - "OC-810v", - "OC-821", - "oc8230d", - "oc-830", - "OC830", - "Other", - "QTY6", - "RC3221", - "RC-4030", - "RC-8021", - "RC-8021v", - "rc8025", - "RC8025", - "RC8025B-ADT", - "RC8026", - "RC-8026W", - "RC8030", - "RC-8221", - "rc-8230", - "rc8230d", - "RC8326", - "XHC1-1", - "xhc1-se" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "0C432", - "0C-432", - "0C835", - "1000", - "1010", - "1010W", - "1CAMERA2", - "30.0", - "8021", - "8025", - "8025B", - "8026W", - "8030", - "8030d", - "820", - "821 D", - "8221D", - "8230", - "ALL", - "DBC831V2", - "i2000", - "icam", - "ICAMEA2", - "icamera", - "icamera 1000", - "icamera-2", - "ICAMERA-2", - "ICAMERA2-C", - "ICamers2", - "oc 821", - "OC380", - "OC421", - "oc432", - "OC432", - "OC-432", - "oc810", - "OC-810", - "oc810adt", - "OC-810v", - "OC-821", - "OC821D", - "OC830", - "Other", - "QTY6", - "R8026W", - "RC-1467", - "RC4551", - "RC-4551", - "RC-802", - "RC-8021", - "RC-8021 w/Mic", - "RC-8021v", - "RC-8021V", - "RC8021W-ADT", - "RC8025", - "rc-8025b", - "RC-8025b", - "RC-8025B", - "RC8026", - "rc-8026w", - "RC8026W", - "RC-8030", - "RC-8110", - "RC-8221", - "rc8221d", - "RC-8221D", - "RC8221W", - "RC8230", - "RC-8230D", - "RC8261", - "rc85", - "RC8520", - "RT8230D", - "SC72C088", - "SC79D0F8", - "SCEC073A", - "XCAM", - "XHC1-SE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "0C-432", - "8030", - "ICAMERA 2", - "icamera-2", - "oc432", - "OC-432", - "OC452", - "OC-810", - "OC-810V", - "OC-821", - "OC830", - "Other", - "RC-8021", - "RC-8026W", - "RC-8030", - "RC-8110", - "RC-8221", - "RC-8221D", - "RC-8222", - "XHC1-SE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "0C-432", - "0c830", - "2210", - "8020", - "8111", - "icamea2", - "icamera 1000", - "icamera2", - "iCamera-2", - "ICAMERA2-4", - "oc432", - "OC-432", - "OC432 (SC27B611)", - "OC821D", - "oc-830", - "RC-4551", - "rc8025", - "RC8111", - "xcam", - "xCam1", - "xhc1-se" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/video.sav" - }, - { - "models": [ - "0c830" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=2" - }, - { - "models": [ - "1000", - "I1000", - "ICAMERA 2", - "OC-432", - "OC-810v", - "Other", - "rc4021", - "RC8021", - "RC-8021 W/MIC", - "RC-8021v", - "RC-8030", - "RC8061V", - "RC-8221", - "rc-8230", - "rc8230d", - "RC-8230D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "1000", - "8021", - "8030", - "OC-810", - "Other", - "RC-4020", - "rc4021", - "RC-8021", - "RC-8021 W/MIC", - "RC-8021v", - "RC-8021V", - "RC8021W-ADT", - "RC-8030", - "RC-8061", - "RC-8061V", - "rc8230" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "1000", - "8111", - "81110", - "icamera 1000", - "icamera-2", - "iCamera2", - "oc830", - "Other", - "rc-8030", - "RC8030", - "RC8111", - "RT8021", - "scfe8a4a", - "WCO200NX", - "xcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/media.sav" - }, - { - "models": [ - "1000", - "8110", - "8221D", - "8230", - "DBC831", - "icamera 2", - "icamera2", - "icamera2-c", - "iConnect2", - "OC-432", - "OC432 (SC27B611)", - "OC432 (SC27B617)", - "R8026W", - "rc-8025", - "rc8083", - "RC8110", - "RC8111", - "RT8021", - "SCFCEAE1", - "xCam1", - "xhc1-se" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "1camera2", - "icamera 2", - "RC4551", - "RC-8221" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "8310", - "F-HACAM01A 0-WN", - "iCamera-2", - "RC8510A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "Icamera 2", - "icamera2", - "ICAMERA-2", - "icamera2-c", - "QTY6", - "RC-8021 w/Mic", - "RC8221D" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/mjpeg.cgi" - }, - { - "models": [ - "icamera-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_2" - }, - { - "models": [ - "icamera-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream_1" - }, - { - "models": [ - "oc432", - "OC-432", - "oc830", - "rc8025", - "RC8221v2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "OC-432" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "RC-8021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "RC-8221D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "RC8221W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "SCF8767C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/serioux.json b/data/brands/serioux.json deleted file mode 100644 index 596b0f1..0000000 --- a/data/brands/serioux.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Serioux", - "brand_id": "serioux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "srx-ipi3000", - "SRX-IPI3000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sertek.json b/data/brands/sertek.json deleted file mode 100644 index b2ab232..0000000 --- a/data/brands/sertek.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Sertek", - "brand_id": "sertek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/ses.json b/data/brands/ses.json deleted file mode 100644 index d67ed02..0000000 --- a/data/brands/ses.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ses", - "brand_id": "ses", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sesco-security.json b/data/brands/sesco-security.json deleted file mode 100644 index 465d46f..0000000 --- a/data/brands/sesco-security.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sesco Security", - "brand_id": "sesco-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/seteye.json b/data/brands/seteye.json deleted file mode 100644 index f1c7efd..0000000 --- a/data/brands/seteye.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Seteye", - "brand_id": "seteye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANC-818GE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.asp" - }, - { - "models": [ - "ANC-818GE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage?video=1&audio=0" - }, - { - "models": [ - "ANC-818GR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/setik.json b/data/brands/setik.json deleted file mode 100644 index cb7d7d7..0000000 --- a/data/brands/setik.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Setik", - "brand_id": "setik", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Blip20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "SK-HFW2100P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/seven-systems.json b/data/brands/seven-systems.json deleted file mode 100644 index d420949..0000000 --- a/data/brands/seven-systems.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Seven Systems", - "brand_id": "seven-systems", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SEVEN IP-7215PA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/sgs.json b/data/brands/sgs.json deleted file mode 100644 index cb54bb4..0000000 --- a/data/brands/sgs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sgs", - "brand_id": "sgs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/shamim.json b/data/brands/shamim.json deleted file mode 100644 index d2531d2..0000000 --- a/data/brands/shamim.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Shamim", - "brand_id": "shamim", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c50s" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "c50s v4.0" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/shany.json b/data/brands/shany.json deleted file mode 100644 index 87bb0b6..0000000 --- a/data/brands/shany.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Shany", - "brand_id": "shany", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mjpeg" - }, - { - "models": [ - "SNC-218", - "SNC-L2104M" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "SNC-2202" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/2" - }, - { - "models": [ - "SNC-WD91M1322" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264main" - }, - { - "models": [ - "SNC-WD91M1322" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4main" - }, - { - "models": [ - "WTC-7341" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - } - ] -} \ No newline at end of file diff --git a/data/brands/sharx-security.json b/data/brands/sharx-security.json deleted file mode 100644 index 198f7a5..0000000 --- a/data/brands/sharx-security.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "brand": "Sharx Security", - "brand_id": "sharx-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2700", - "Other", - "SCNC-2601", - "SCNC-2606N", - "SCNC-2607", - "SCNC-2700", - "SCNC-3605N", - "SCNC-3606" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "2700-WP", - "Other", - "SCNC-2601", - "SCNC-2606N", - "SCNC-2700", - "SCNC3606", - "SCNC-3905" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Other", - "SCNC-2900WP", - "SCNC-3604", - "SCNC-3606", - "SCNC3904W", - "SCNC-3905" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other", - "SCNC-3904-Wide" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot_3gp.jpg" - }, - { - "models": [ - "Other", - "SCNC-2601", - "SCNC-2900", - "SCNC-2900WP", - "SCNC-3605N", - "SCNC3904", - "SCNC-3904-WIDE", - "SCNC3905" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "scn3905", - "SCNC3905" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/stream.jpg" - }, - { - "models": [ - "SCNC-2601", - "SCNC-2606N", - "SCNC-3905" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "stream.av" - }, - { - "models": [ - "SCNC-3604", - "SCNC3904" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "SCNC-3605N", - "SCNC3904" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "SCNC-3605N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream1.asf" - }, - { - "models": [ - "scnc3905" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8150, - "url": "/live/0/mjpeg.jpg" - }, - { - "models": [ - "SCNC3905" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/shenwhen-neo-electronic-co.json b/data/brands/shenwhen-neo-electronic-co.json deleted file mode 100644 index f3be63b..0000000 --- a/data/brands/shenwhen-neo-electronic-co.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "brand": "Shenwhen Neo Electronic Co", - "brand_id": "shenwhen-neo-electronic-co", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AJ-C0WA-C0D8", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "AY-IP9042S", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "AY-IP9042S", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av0_[CHANNEL]" - }, - { - "models": [ - "AY-IP9042S", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "BE-IPH", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "FI-8909W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "LEP-FM69-H1080W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "NC-400", - "Other", - "Thuis" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "NC-541", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "NC-541" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NC-541", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NC-541" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "Other", - "X-5000B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=[CHANNEL]_stream=0.sdp" - }, - { - "models": [ - "X-5000B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/shenzhen-reecam-tech.ltd..json b/data/brands/shenzhen-reecam-tech.ltd..json deleted file mode 100644 index 6af0b08..0000000 --- a/data/brands/shenzhen-reecam-tech.ltd..json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Shenzhen Reecam Tech.ltd.", - "brand_id": "shenzhen-reecam-tech.ltd.", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SPOT-WIFI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/shenzhen-tong-bo-wei.json b/data/brands/shenzhen-tong-bo-wei.json deleted file mode 100644 index 83edc1b..0000000 --- a/data/brands/shenzhen-tong-bo-wei.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Shenzhen Tong Bo Wei", - "brand_id": "shenzhen-tong-bo-wei", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "V380S" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/shenzhen-toptech.json b/data/brands/shenzhen-toptech.json deleted file mode 100644 index ffcb098..0000000 --- a/data/brands/shenzhen-toptech.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Shenzhen Toptech", - "brand_id": "shenzhen-toptech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DANMINI", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "SMARTEYE", - "x series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "P2PWIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SMARTEYE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TE-IBL780" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/shenzhen-ycx-electronics.json b/data/brands/shenzhen-ycx-electronics.json deleted file mode 100644 index 7640a3d..0000000 --- a/data/brands/shenzhen-ycx-electronics.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Shenzhen Ycx Electronics", - "brand_id": "shenzhen-ycx-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4K/8MP HD IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "N-A G463GWp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264" - }, - { - "models": [ - "YC-W608FCZ49EA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/shenzhen.json b/data/brands/shenzhen.json deleted file mode 100644 index 5b7c8a9..0000000 --- a/data/brands/shenzhen.json +++ /dev/null @@ -1,393 +0,0 @@ -{ - "brand": "Shenzhen", - "brand_id": "shenzhen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2A6M4HQ-X", - "B SERIES", - "CTIPC-285C-Z4", - "P2PWIFICAM", - "SD5W 1080PS HX", - "SPOT-WIFI", - "v380", - "V380", - "v380s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "3516F0", - "C112WX", - "D200-SW", - "HD-IPC smart cam", - "i6032b", - "IPCAME BILLIAN", - "Other", - "P05", - "P2PIPCAM", - "P2PWIFICAM", - "PTZ", - "reecam", - "TC105", - "TC55", - "V380", - "XM82-8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "720p", - "i6032b", - "TC98", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "720P", - "N5810HH-E", - "Other", - "P2PWIFICAM", - "smart wifi camera", - "V380" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "720P", - "Other", - "P2PWIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720P", - "Other", - "P2PIPCAM", - "SMARTEYE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "720P", - "HuiYanIPC", - "i6032b", - "Other", - "P2PIPCAM", - "P2PWIFICAM", - "SMARTEYE", - "TC20", - "V380", - "V380S", - "xseries" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/live/ch0" - }, - { - "models": [ - "720P", - "Other", - "v380", - "V380", - "v380s", - "V380S" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "b series", - "P2PWIFICAM", - "smarteye", - "SMARTEYE", - "V380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CCC365" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "CP05", - "N-AG463GWp", - "TC105", - "YCC365 PLUS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "cvafa-i465", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/4" - }, - { - "models": [ - "EYE_PLUS (YCC365 Plus app)", - "i6032b", - "Other", - "v380s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "GWIPC-19664444", - "P26-32-3-GK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "icomm", - "v380", - "XM82-8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "im61" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "N-AG463GWp", - "Other", - "TC56", - "TC98" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch0/raw/av_stream" - }, - { - "models": [ - "Other", - "P2PWIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "P2PIPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other", - "SMARTEYE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 555, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "v380", - "v380 pro", - "V380 PRO", - "YCC365 Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_1" - }, - { - "models": [ - "Other", - "TC56" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/H264/ch1/main/av_stream" - }, - { - "models": [ - "P2PWIFICAM", - "TR-CIPR129-POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Shixin" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/ucast/11" - }, - { - "models": [ - "SMART WIFI CAMERA", - "XD07" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "SMARTEYE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "SV-B01-1080p-poe" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "TD-3104B1H-4P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/?chID=2&streamType=main&linkType=tcp" - }, - { - "models": [ - "Trolink" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch1" - }, - { - "models": [ - "v380", - "v380s" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "v380s" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "XM30-4MP-BY" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/shieldeye.json b/data/brands/shieldeye.json deleted file mode 100644 index 0fd77f2..0000000 --- a/data/brands/shieldeye.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Shieldeye", - "brand_id": "shieldeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipb28w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "ipb28w" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "IPB28W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "POSCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "smartp2p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/shindai.json b/data/brands/shindai.json deleted file mode 100644 index ddf6205..0000000 --- a/data/brands/shindai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Shindai", - "brand_id": "shindai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sv-b06w-1080p-hx" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/shinsoft-co.json b/data/brands/shinsoft-co.json deleted file mode 100644 index af4c449..0000000 --- a/data/brands/shinsoft-co.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Shinsoft Co", - "brand_id": "shinsoft-co", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "I-315", - "SIS-T2001RE" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v01" - } - ] -} \ No newline at end of file diff --git a/data/brands/shiwojia.json b/data/brands/shiwojia.json deleted file mode 100644 index cbedf9f..0000000 --- a/data/brands/shiwojia.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Shiwojia", - "brand_id": "shiwojia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "PTZ security camera", - "ST-426-TY" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/shixin-china.json b/data/brands/shixin-china.json deleted file mode 100644 index 165bfcc..0000000 --- a/data/brands/shixin-china.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "brand": "Shixin China", - "brand_id": "shixin-china", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10921", - "129HW", - "IP-05HW", - "IP-129HW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "129HW", - "X9300-MH36" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "333" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/av0" - }, - { - "models": [ - "H264DVR", - "IP-109H RTSP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP Series (Other)", - "IP SERIES (Other)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IP Series (Other)", - "IP-333" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IP Series (Other)", - "IP06 v2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "pda.cgi?page=image&cam=[CHANNEL]" - }, - { - "models": [ - "IP-05HW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "IP06 v1", - "IP-109H", - "IP-129HW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP06 v1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "showimg_pda.cgi?cam=[CHANNEL]" - }, - { - "models": [ - "IP-108H", - "IP-109H RTSP", - "IP-129HW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "0/video[CHANNEL]" - }, - { - "models": [ - "IP-109H", - "IP-109H RTSP", - "ulko" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IP-129HW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/stream3" - }, - { - "models": [ - "IP-129HW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IP-129HW" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "IP-129HW", - "ONVIF" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "HighResolutionVideo" - }, - { - "models": [ - "IP-129HW" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "IP-129HW", - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/mpeg4" - }, - { - "models": [ - "IP-510" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.html" - }, - { - "models": [ - "IPCAM P2P", - "Other", - "X9300-MH36" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/ucast/11" - }, - { - "models": [ - "ptz1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - } - ] -} \ No newline at end of file diff --git a/data/brands/short-8ch-nvr.json b/data/brands/short-8ch-nvr.json deleted file mode 100644 index 1d4d6ab..0000000 --- a/data/brands/short-8ch-nvr.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Short 8ch Nvr", - "brand_id": "short-8ch-nvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "adt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/201" - }, - { - "models": [ - "adt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "adt" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/401" - }, - { - "models": [ - "ADT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "H.264 WIRELESS P2P NVR", - "K8204-w", - "K9604-W", - "K9608-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "K9604-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NBD8016RA-UL", - "Nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/short.json b/data/brands/short.json deleted file mode 100644 index 077610d..0000000 --- a/data/brands/short.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Short", - "brand_id": "short", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8CH NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/showtec.json b/data/brands/showtec.json deleted file mode 100644 index df025f9..0000000 --- a/data/brands/showtec.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Showtec", - "brand_id": "showtec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "general" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "SW641W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SW641W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/sibel.json b/data/brands/sibel.json deleted file mode 100644 index 4523200..0000000 --- a/data/brands/sibel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sibel", - "brand_id": "sibel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPOB-ELE4IR28" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sibo.json b/data/brands/sibo.json deleted file mode 100644 index d07d82e..0000000 --- a/data/brands/sibo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sibo", - "brand_id": "sibo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hd1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/sichuan.json b/data/brands/sichuan.json deleted file mode 100644 index 9faf200..0000000 --- a/data/brands/sichuan.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Sichuan", - "brand_id": "sichuan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=01&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/103" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/siemens.json b/data/brands/siemens.json deleted file mode 100644 index 1f8985e..0000000 --- a/data/brands/siemens.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "brand": "Siemens", - "brand_id": "siemens", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCIC-1410-L", - "CCIC-1410-LA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "CCIC-1410-ST", - "CCMC-1315-LP", - "CFMS-2025" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "CCIS1345" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "CCIS1345", - "CCIS1425", - "CCMX-1315", - "CFMC-1315LP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "livestream" - }, - { - "models": [ - "CCIS-1345" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video" - }, - { - "models": [ - "CCIS-1345" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "CCIS1425" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "CCIS-1425", - "CCMC-1315-LP", - "CCMS 2010-IR", - "CCMS-1315-LP", - "CFMS-2025", - "cvms2025-ir", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stilljpeg" - }, - { - "models": [ - "CCIS-1425", - "CFMS-2025" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi?VideoType=3" - }, - { - "models": [ - "CCMC-1315-LP", - "CCMS-1315", - "CCMS-1315-LP", - "CFMC-1315LP", - "CFMS-2025", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "CCMD3025-DN18", - "CCMS-1315" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi?VideoType=[CHANNEL]" - }, - { - "models": [ - "CCMS2010-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "CCMS2010-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "CCMS-2025", - "CFMS-2025" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "CCMS-2025", - "CFMS2025", - "CVMS2025-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/livestream/trackID=1" - }, - { - "models": [ - "CFMS-2025" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getstream.cgi" - }, - { - "models": [ - "CVMW-3025", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/siepem.json b/data/brands/siepem.json deleted file mode 100644 index 63d2832..0000000 --- a/data/brands/siepem.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Siepem", - "brand_id": "siepem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC S5030-M", - "S5001Y-BW", - "S5030-MP2P", - "S62024-BWRA", - "S6202Y", - "S6203", - "S6203-WR", - "S6203y", - "s6203y-wp", - "S6203Y-WR", - "S6207Y-WRA", - "S6219W-WR", - "SPCN-330866" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC S5030-M", - "S5030-MP2P", - "S6319W1-WR2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC S5030-M", - "S6203Y-WR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "P2PWIFICAM", - "S6203-WR", - "S6207Y-WRA", - "S6265F-WR2", - "S6266F-WR2", - "S6319W1-WR2", - "s6863 fn", - "S6863-fn", - "S6863FN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "S5001Y-BW", - "s6202y", - "S6203y", - "S6203Y-WR", - "S6211Y-WR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "s6265f-wr2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "S6265F-WR2" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sightlogix.json b/data/brands/sightlogix.json deleted file mode 100644 index 1bc1061..0000000 --- a/data/brands/sightlogix.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Sightlogix", - "brand_id": "sightlogix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IF56N53-IR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IF56N53-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "NS340" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25" - }, - { - "models": [ - "NS340" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "NS340" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/sigma-electronics.json b/data/brands/sigma-electronics.json deleted file mode 100644 index a767873..0000000 --- a/data/brands/sigma-electronics.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sigma Electronics", - "brand_id": "sigma-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SG-IP 9305 Zoom" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "W0021" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/sigmatel.json b/data/brands/sigmatel.json deleted file mode 100644 index cb42150..0000000 --- a/data/brands/sigmatel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sigmatel", - "brand_id": "sigmatel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FSM-161" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/signet.json b/data/brands/signet.json deleted file mode 100644 index 3f06f06..0000000 --- a/data/brands/signet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Signet", - "brand_id": "signet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QC3399" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "QC3399" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sikvio.json b/data/brands/sikvio.json deleted file mode 100644 index c55290c..0000000 --- a/data/brands/sikvio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sikvio", - "brand_id": "sikvio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Z17" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/silent-sentinel.json b/data/brands/silent-sentinel.json deleted file mode 100644 index 1acf150..0000000 --- a/data/brands/silent-sentinel.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Silent Sentinel", - "brand_id": "silent-sentinel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Easy Home", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Oculus" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Oculus" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "Oculus" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=0" - }, - { - "models": [ - "Oculus" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/api/mjpegvideo.cgi?InputNumber=1&StreamNumber=1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/silicon-labs.json b/data/brands/silicon-labs.json deleted file mode 100644 index eb07ca1..0000000 --- a/data/brands/silicon-labs.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Silicon Labs", - "brand_id": "silicon-labs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F6815W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "F6815W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "F6836W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "RS-6W10IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/silvus.json b/data/brands/silvus.json deleted file mode 100644 index 5cf4ac2..0000000 --- a/data/brands/silvus.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "brand": "Silvus", - "brand_id": "silvus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KP.WIBISANA-7013_CAM-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "live/ch00_0" - }, - { - "models": [ - "KP.WIBISANA-7013_CAM-B", - "Other", - "SPSVA-43" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Obscura", - "Other", - "Silvus 1", - "Silvus 2", - "silvus2", - "silvus3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "Other", - "SC4400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other", - "silvus1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/simi-ip-camera-viewer.json b/data/brands/simi-ip-camera-viewer.json deleted file mode 100644 index 4c9bea7..0000000 --- a/data/brands/simi-ip-camera-viewer.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Simi Ip Camera Viewer", - "brand_id": "simi-ip-camera-viewer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2345", - "3128", - "344556", - "366357", - "425", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3455", - "3566", - "366357", - "45677", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "H43", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "SIRI1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SRI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/simicam.json b/data/brands/simicam.json deleted file mode 100644 index 174f342..0000000 --- a/data/brands/simicam.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Simicam", - "brand_id": "simicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4K POE 48V", - "3.6mm", - "4K POE Camera", - "H43", - "HD Camera", - "HD CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=1.sdp?real_stream" - }, - { - "models": [ - "A314D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "HD Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=5_stream=1.sdp?real_stream" - }, - { - "models": [ - "HD Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=6_stream=1.sdp?real_stream" - }, - { - "models": [ - "HD Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=10_stream=1.sdp?real_stream" - }, - { - "models": [ - "QJ-8M-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/simshine.json b/data/brands/simshine.json deleted file mode 100644 index 8da9bd9..0000000 --- a/data/brands/simshine.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Simshine", - "brand_id": "simshine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "simcam s1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/sineoji.json b/data/brands/sineoji.json deleted file mode 100644 index 9f003a4..0000000 --- a/data/brands/sineoji.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "brand": "Sineoji", - "brand_id": "sineoji", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "PT593V", - "PT716V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other", - "PT-315V", - "PT-3215P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "PT-3215P", - "PT593V", - "PT716V", - "PTCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "PT-3215P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PT-3215P", - "PT-325IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "PT-331V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "PT-331V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "PT339V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sinocam.json b/data/brands/sinocam.json deleted file mode 100644 index cf999df..0000000 --- a/data/brands/sinocam.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "brand": "Sinocam", - "brand_id": "sinocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1mp Cam", - "1mp IP Cam", - "1mp IP Camera", - "4036SW", - "5033 SW", - "8n-ipc-5033sw", - "ip 2mp cam", - "IP-66", - "IPC F20M", - "IPC-5030", - "IPC-5033", - "IPC-F10P", - "IPC-F20M", - "Other", - "SN-5022CSW", - "SN-6409C", - "SN-IPC-5032CSW", - "SN-IPC-5033SW-UK", - "sn-ipc-5033sw-us", - "SN-IPC-8002A-Wi-EU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1MP IP Camera", - "4036sw", - "5001-S", - "5033 SW", - "8002", - "8003-C", - "8107", - "Aussen", - "Black", - "Cam2", - "H264", - "H264 IP", - "ipc-5001c-ppoe", - "IPC-7004A-Wi-EU", - "IPC-9031A-POE", - "notsure", - "onvi", - "Other", - "sino", - "SINO", - "SN-30008B", - "sn5033", - "SN-6408CW", - "SN-6409C", - "SN-6409CW", - "SN-IP-8005C", - "SN-IPC 4036SW", - "Sn-IPC-4015SW-AU", - "SN-IPC-4036SW-AU", - "SN-IPC-5032CSW", - "SN-IPC-5033", - "SN-IPC5033CSW-WI", - "SN-IPC-5033SW-WI-UK", - "SN-IPC-5125CSW", - "SN-IPC-562410", - "SN-IPC-6409", - "SN-IPC-8002A-Wi-EU", - "SN-NVK-6004H10", - "SN-NVK-W5065", - "x264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "1MP IP CAMERA", - "5033 SW", - "8003-C", - "c7824wip", - "H264", - "IP 2MP CAM", - "ONVI", - "Other", - "SNIPC3010FCSW20-UK", - "SN-IPC-4036SW-AU", - "sn-ipc-5033", - "SN-IPC-5033SW-EU", - "sn-ipc-5033sw-us", - "SN-IPC-HW07-UK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "3001", - "4000", - "snipc3001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "5033", - "HI-3518C", - "ip 2mp cam", - "IPC-4036CSW-UK", - "ONVI", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "8002", - "IPC 4015CSW-EU", - "x264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ROH/channel/11" - }, - { - "models": [ - "8003-C", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "BulletTech83" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "ipc 4550", - "sn-ipc-4550" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "IP-CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other", - "SN-IPC-3010FCSW", - "SN-IPC-5032CSW-EU", - "SN-IPC-5033SW-US" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "SN-IPC-3001FSW13" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sinovision.json b/data/brands/sinovision.json deleted file mode 100644 index 80b4264..0000000 --- a/data/brands/sinovision.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Sinovision", - "brand_id": "sinovision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SN-IPCH20-MPT09", - "SN-MFPT20-ICS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/sionyx.json b/data/brands/sionyx.json deleted file mode 100644 index bd0126a..0000000 --- a/data/brands/sionyx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sionyx", - "brand_id": "sionyx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CRV-500C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/sip.json b/data/brands/sip.json deleted file mode 100644 index bab9088..0000000 --- a/data/brands/sip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sip", - "brand_id": "sip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VSIP4MPVDIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/siqura.json b/data/brands/siqura.json deleted file mode 100644 index 0f78a16..0000000 --- a/data/brands/siqura.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "brand": "Siqura", - "brand_id": "siqura", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2f2002f2-ei", - "HSD-626" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ProfileToken_1_4" - }, - { - "models": [ - "900", - "BC-620", - "BC829v2", - "C-60 E-MC", - "HD-66APT/N", - "HSD-620", - "HSD-622", - "HSD-626", - "HSD-820", - "MSD-620", - "MSD-622" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/h264/1" - }, - { - "models": [ - "BC-20", - "BC-22", - "BC-24", - "FD-20", - "FD-22", - "FD-24", - "FD27", - "FD-28", - "FD67", - "MD-20" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "BL860" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "fd2002f2-ei" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "FD-24", - "FD67", - "HSD-620" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "" - }, - { - "models": [ - "FD62", - "HSD-626", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "fd64" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "HD626" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ProfileToken_1_1" - }, - { - "models": [ - "HD-66", - "HSD-621PRH", - "HSD-626", - "HSD-820", - "MD60" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.jpg?ch=[CHANNEL]" - }, - { - "models": [ - "HSD-620PRH", - "HSD-621PRH", - "HSD-628EXP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "HSD-820" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/sircom.json b/data/brands/sircom.json deleted file mode 100644 index 298dfd7..0000000 --- a/data/brands/sircom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sircom", - "brand_id": "sircom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ap004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/siricam.json b/data/brands/siricam.json deleted file mode 100644 index c2b556f..0000000 --- a/data/brands/siricam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Siricam", - "brand_id": "siricam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "oo4" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/siricom.json b/data/brands/siricom.json deleted file mode 100644 index fae6d4b..0000000 --- a/data/brands/siricom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Siricom", - "brand_id": "siricom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ap001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sisview.json b/data/brands/sisview.json deleted file mode 100644 index cbec2ab..0000000 --- a/data/brands/sisview.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sisview", - "brand_id": "sisview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sitecom.json b/data/brands/sitecom.json deleted file mode 100644 index 07ab410..0000000 --- a/data/brands/sitecom.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "brand": "Sitecom", - "brand_id": "sitecom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "150N", - "150-NWL-405", - "IC-192701", - "wl_405", - "WL-405" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "150N", - "150-NWL-405", - "Other", - "WL-404", - "WL-405" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "150-NWL-405", - "WL405", - "WL-405" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "LN-400", - "LN-401", - "Other", - "WL-400", - "WL-402" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "LN-400", - "LN-401", - "Other", - "WL-402" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "LN-406" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "LN-406", - "Other", - "WL-404" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "LN-406", - "WL-404" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "LN-406" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]&snapshot=on" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg?type=motion" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/still.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WL-404" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "WLC1000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/video.sav" - }, - { - "models": [ - "wlc-4000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sjet.json b/data/brands/sjet.json deleted file mode 100644 index e08a9cf..0000000 --- a/data/brands/sjet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sjet", - "brand_id": "sjet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "544545d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ucast/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/sk-tel.json b/data/brands/sk-tel.json deleted file mode 100644 index 75929e4..0000000 --- a/data/brands/sk-tel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sk Tel", - "brand_id": "sk-tel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/skilleye.json b/data/brands/skilleye.json deleted file mode 100644 index e9a327d..0000000 --- a/data/brands/skilleye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Skilleye", - "brand_id": "skilleye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T4220HI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/skjm.json b/data/brands/skjm.json deleted file mode 100644 index dd4829f..0000000 --- a/data/brands/skjm.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Skjm", - "brand_id": "skjm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/sklad.json b/data/brands/sklad.json deleted file mode 100644 index ffb53c6..0000000 --- a/data/brands/sklad.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sklad", - "brand_id": "sklad", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-200PHD-24" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "IPT_IPL720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/skone.json b/data/brands/skone.json deleted file mode 100644 index b2fbbaf..0000000 --- a/data/brands/skone.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Skone", - "brand_id": "skone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam_h264.sdp" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/skvision.json b/data/brands/skvision.json deleted file mode 100644 index c87c6f9..0000000 --- a/data/brands/skvision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Skvision", - "brand_id": "skvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "238BDP-PoE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "IPC-115HAP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/sky-genious.json b/data/brands/sky-genious.json deleted file mode 100644 index 8e47e22..0000000 --- a/data/brands/sky-genious.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sky Genious", - "brand_id": "sky-genious", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Genious" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/skyfield.json b/data/brands/skyfield.json deleted file mode 100644 index 1188bb6..0000000 --- a/data/brands/skyfield.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Skyfield", - "brand_id": "skyfield", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DE3117" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/skylink.json b/data/brands/skylink.json deleted file mode 100644 index 44feed3..0000000 --- a/data/brands/skylink.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "brand": "Skylink", - "brand_id": "skylink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wc-200ps", - "WC-300PS", - "wc-510ph" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WC-300PS", - "wc-400ph", - "wc-510ph" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WC-300PS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?" - }, - { - "models": [ - "WC-300PS", - "WC-400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "WC-400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "WC-400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "WC-400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "WD-400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/skyreo.json b/data/brands/skyreo.json deleted file mode 100644 index d4bdd8b..0000000 --- a/data/brands/skyreo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Skyreo", - "brand_id": "skyreo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SR8918W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SW8918" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/skytronic.json b/data/brands/skytronic.json deleted file mode 100644 index 6ea386c..0000000 --- a/data/brands/skytronic.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Skytronic", - "brand_id": "skytronic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "351.148", - "dome", - "IP Camera Outdoor", - "IP Outdfoor", - "IP66", - "IP99", - "JWEV-163290-DDEDB", - "Other", - "WiFi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "DOME" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "JWEV-163290-DDEDB", - "WIFI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JWEV-330332-CDDEB" - ], - "type": "MJPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "oem", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/skyview.json b/data/brands/skyview.json deleted file mode 100644 index ad90b7a..0000000 --- a/data/brands/skyview.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Skyview", - "brand_id": "skyview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/skyvision.json b/data/brands/skyvision.json deleted file mode 100644 index 32aafed..0000000 --- a/data/brands/skyvision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Skyvision", - "brand_id": "skyvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "SV:CB13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/skyway-security.json b/data/brands/skyway-security.json deleted file mode 100644 index 0027825..0000000 --- a/data/brands/skyway-security.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Skyway Security", - "brand_id": "skyway-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/sline.json b/data/brands/sline.json deleted file mode 100644 index 50ac78b..0000000 --- a/data/brands/sline.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sline", - "brand_id": "sline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD3300P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/smallcell.json b/data/brands/smallcell.json deleted file mode 100644 index c478dd8..0000000 --- a/data/brands/smallcell.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smallcell", - "brand_id": "smallcell", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/smanos.json b/data/brands/smanos.json deleted file mode 100644 index f54a588..0000000 --- a/data/brands/smanos.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smanos", - "brand_id": "smanos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip6" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/smar.json b/data/brands/smar.json deleted file mode 100644 index b852065..0000000 --- a/data/brands/smar.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Smar", - "brand_id": "smar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A1004N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=1.sdp" - }, - { - "models": [ - "A1004N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "Q-NX2002-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "S6-NX3CF800BS-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "s6-wnx3cf2001hw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "WN1908F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-cloud-camera.json b/data/brands/smart-cloud-camera.json deleted file mode 100644 index e99f63e..0000000 --- a/data/brands/smart-cloud-camera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Smart Cloud Camera", - "brand_id": "smart-cloud-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c-p11-68" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "ch0_0.h264" - }, - { - "models": [ - "hcsp-13" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "tk-q2 1mp201911" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-hd-wifi-camera.json b/data/brands/smart-hd-wifi-camera.json deleted file mode 100644 index 91cd944..0000000 --- a/data/brands/smart-hd-wifi-camera.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Smart Hd Wifi Camera", - "brand_id": "smart-hd-wifi-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "sy6002f-wr", - "YCC365" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "ycc365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-home.json b/data/brands/smart-home.json deleted file mode 100644 index 1836069..0000000 --- a/data/brands/smart-home.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Smart Home", - "brand_id": "smart-home", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "daua" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EW-N4D2J" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264.sdp?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "general" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Other", - "SCHLAGE NEXIA WCW100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264.sdp?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "PNI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "SCHLAGE NEXIA WCW100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "SCHLAGE NEXIA WCW100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "SCHLAGE NEXIA WCW100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-industry.json b/data/brands/smart-industry.json deleted file mode 100644 index b0772ca..0000000 --- a/data/brands/smart-industry.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Smart Industry", - "brand_id": "smart-industry", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "27X" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "DOZ27", - "Doz27w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "doz27w" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "DOZ27W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-net-camera.json b/data/brands/smart-net-camera.json deleted file mode 100644 index 424a357..0000000 --- a/data/brands/smart-net-camera.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smart Net Camera", - "brand_id": "smart-net-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CamHouse" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "IPC-V380-Q3S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-pixel.json b/data/brands/smart-pixel.json deleted file mode 100644 index 254aebb..0000000 --- a/data/brands/smart-pixel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smart Pixel", - "brand_id": "smart-pixel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip-camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-security.json b/data/brands/smart-security.json deleted file mode 100644 index ea89ae0..0000000 --- a/data/brands/smart-security.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smart Security", - "brand_id": "smart-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OUT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart-zoom.json b/data/brands/smart-zoom.json deleted file mode 100644 index bfc8d5c..0000000 --- a/data/brands/smart-zoom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smart Zoom", - "brand_id": "smart-zoom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sm-172MAHD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart.json b/data/brands/smart.json deleted file mode 100644 index 863d457..0000000 --- a/data/brands/smart.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Smart", - "brand_id": "smart", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dbpower", - "SmartCam", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Wireless IP-Cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/pusher.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/smart380.json b/data/brands/smart380.json deleted file mode 100644 index bfe17d6..0000000 --- a/data/brands/smart380.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smart380", - "brand_id": "smart380", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartcam.json b/data/brands/smartcam.json deleted file mode 100644 index 9a1c640..0000000 --- a/data/brands/smartcam.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Smartcam", - "brand_id": "smartcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "smartcam hd+" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "smartcam hd+" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "SmartCam Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile4/media.smp" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartec.json b/data/brands/smartec.json deleted file mode 100644 index 1eaebcf..0000000 --- a/data/brands/smartec.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Smartec", - "brand_id": "smartec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPM3672 A/1 Xaro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "n8-200w ir" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "stc-ipm3077A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "STC-IPM3550A/1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "STC-IPMX3593A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "STC-IPX2050A/1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartek.json b/data/brands/smartek.json deleted file mode 100644 index 01d807f..0000000 --- a/data/brands/smartek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smartek", - "brand_id": "smartek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smarteye.json b/data/brands/smarteye.json deleted file mode 100644 index 134a23e..0000000 --- a/data/brands/smarteye.json +++ /dev/null @@ -1,282 +0,0 @@ -{ - "brand": "Smarteye", - "brand_id": "smarteye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3096" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "625GB", - "NCM750GA", - "NCM754KC", - "Other", - "x series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "720p h.264", - "HD701W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "720P H.264", - "754GA", - "B1 IP Camera", - "NC-530", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "754GA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - }, - { - "models": [ - "B1 IP Camera", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "B1 IP Camera", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "FR-4020A2", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HD701W", - "IC-202", - "NC-530", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IC-202", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "L Series IP Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-530", - "SME IP 315 MB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "NC-530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "NC-530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "NC-530", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "NC-530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "NCM630GB", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "SAE50-NX4C100B", - "SAE60-NX4C100B" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "SC-514244" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "sip08", - "SP1M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "sip1m" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartfrog.json b/data/brands/smartfrog.json deleted file mode 100644 index 6666be2..0000000 --- a/data/brands/smartfrog.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smartfrog", - "brand_id": "smartfrog", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-Cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartguard.json b/data/brands/smartguard.json deleted file mode 100644 index 3527702..0000000 --- a/data/brands/smartguard.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Smartguard", - "brand_id": "smartguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DR-IPC-01", - "WIFI HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/smarthome.json b/data/brands/smarthome.json deleted file mode 100644 index a9ca423..0000000 --- a/data/brands/smarthome.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Smarthome", - "brand_id": "smarthome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "noname" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartiscam.json b/data/brands/smartiscam.json deleted file mode 100644 index 7441869..0000000 --- a/data/brands/smartiscam.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Smartiscam", - "brand_id": "smartiscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "Bullett", - "HD-701", - "PanTilt", - "Spinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Bullett", - "Spinner" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "h.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartit.json b/data/brands/smartit.json deleted file mode 100644 index 389b39c..0000000 --- a/data/brands/smartit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smartit", - "brand_id": "smartit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "b30-6" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartrol.json b/data/brands/smartrol.json deleted file mode 100644 index dcd449e..0000000 --- a/data/brands/smartrol.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smartrol", - "brand_id": "smartrol", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ZX-C23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "ZX-C23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam2/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartsecurity.json b/data/brands/smartsecurity.json deleted file mode 100644 index c3d53fe..0000000 --- a/data/brands/smartsecurity.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smartsecurity", - "brand_id": "smartsecurity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartsf.json b/data/brands/smartsf.json deleted file mode 100644 index 77ab362..0000000 --- a/data/brands/smartsf.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smartsf", - "brand_id": "smartsf", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SmartCam 2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smarttec.json b/data/brands/smarttec.json deleted file mode 100644 index 4cc5d02..0000000 --- a/data/brands/smarttec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smarttec", - "brand_id": "smarttec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ptz p9" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/smarttek.json b/data/brands/smarttek.json deleted file mode 100644 index 1f7b685..0000000 --- a/data/brands/smarttek.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Smarttek", - "brand_id": "smarttek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8950wb" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "ST-8940W-BK" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartview.json b/data/brands/smartview.json deleted file mode 100644 index e638fa8..0000000 --- a/data/brands/smartview.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Smartview", - "brand_id": "smartview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "thd2410A", - "The2410a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartvision.json b/data/brands/smartvision.json deleted file mode 100644 index 6fcb7a1..0000000 --- a/data/brands/smartvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smartvision", - "brand_id": "smartvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1TB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartwares.json b/data/brands/smartwares.json deleted file mode 100644 index 4e51219..0000000 --- a/data/brands/smartwares.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "brand": "Smartwares", - "brand_id": "smartwares", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "39218", - "blabla", - "C723IP", - "C924IP", - "CIP-37", - "cip-37186", - "CIP-37186", - "CIP-392", - "CIP-39218", - "cip39218at", - "CIP-39218AT", - "CIP-39218KL", - "CIP-3921AT", - "CIP-39220", - "Other", - "unknwn01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "923ip", - "c177789", - "c923", - "C923ip", - "C923IP", - "CIP-39218AT", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "923IP", - "924IP", - "C723IP", - "c724ip", - "c923ip", - "c923IP", - "C923IP-KL", - "c924ip", - "vast", - "VAST" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c704 ip" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C721" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0?user=[USERNAME]&passwd=Djayden%2B2012" - }, - { - "models": [ - "c721IP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C721IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "//live/av0?" - }, - { - "models": [ - "c724ip", - "C923IP", - "c924ip", - "CIP3390", - "CIP-39220", - "CIP39330" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "c724ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0?user=[USERNAME]&passwd=Atpq192000v!" - }, - { - "models": [ - "C923IP", - "CIP", - "CIP-37186", - "CIP-37186AT", - "CIP-392", - "CIP-39218", - "CIP-39218AT", - "CIP-39218KL", - "CIP39220", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c928ip", - "cip", - "cip-37186", - "CIP-39218", - "CIP-39218AT", - "CIP-39218kl", - "CIP-39218KL", - "CIP39220", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "CIP-37210at", - "CIP-37210AT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/av0" - }, - { - "models": [ - "CIP-37210AT" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "CIP-37210AT" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0?" - }, - { - "models": [ - "CP35IP" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/smartz.json b/data/brands/smartz.json deleted file mode 100644 index 6cca7ee..0000000 --- a/data/brands/smartz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smartz", - "brand_id": "smartz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SCX1001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/smax.json b/data/brands/smax.json deleted file mode 100644 index 0bd3687..0000000 --- a/data/brands/smax.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Smax", - "brand_id": "smax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AD1", - "AU1", - "SICPT500W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Other", - "SICPT500W", - "SICPT501W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/smc.json b/data/brands/smc.json deleted file mode 100644 index 5194659..0000000 --- a/data/brands/smc.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "brand": "Smc", - "brand_id": "smc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1010-W", - "1011" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1010-W", - "RC-8021", - "RC-8120", - "SMC-1010W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "1010-W", - "SMC-1010W", - "SMC-1011W", - "SMCWIPCAM-PZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "1010-W", - "Other", - "SMC-1010W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "1010-W", - "RC-1010W", - "RC-8021", - "RC-8120", - "SMC-1010W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "1010-W", - "1011", - "1011-W", - "110-W", - "FD1", - "Other", - "RC-1010W", - "SD1", - "SMC-1010W", - "SMC-1011W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "1011", - "1011w", - "1011-W", - "SMC-1011W", - "SMC-1011WLeft" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "1011", - "1011-W", - "SMC-1010W", - "SMC-1011W", - "t Window" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "1011-W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "1011-W", - "Other", - "SMC-1011W", - "SMC-1011W2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "1011-W", - "Other", - "SMC-1010W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.html" - }, - { - "models": [ - "Other", - "SMC-1010W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "SMCWIPCFN-G2" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "SMC1", - "SMCWIPCAM-PZ", - "SMCWIPCFN-G2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "SMCWIPCAM-PZ", - "smcwipcfn-g2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "SMCWIPCAM-PZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SMCWIPCAM-PZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/smonet.json b/data/brands/smonet.json deleted file mode 100644 index eabda74..0000000 --- a/data/brands/smonet.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Smonet", - "brand_id": "smonet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "K9604-W", - "K9608-W", - "Other", - "WNK892TB-001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "single 960p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - }, - { - "models": [ - "single 960p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.264" - }, - { - "models": [ - "w8410t" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/smp.json b/data/brands/smp.json deleted file mode 100644 index 9b03967..0000000 --- a/data/brands/smp.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smp", - "brand_id": "smp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P3-5MP-RWF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/smtkey.json b/data/brands/smtkey.json deleted file mode 100644 index eeef720..0000000 --- a/data/brands/smtkey.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Smtkey", - "brand_id": "smtkey", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/smtsec.json b/data/brands/smtsec.json deleted file mode 100644 index 04203a2..0000000 --- a/data/brands/smtsec.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Smtsec", - "brand_id": "smtsec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H15HP", - "SIP-E0312-178D", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/smvi.json b/data/brands/smvi.json deleted file mode 100644 index 8ecab16..0000000 --- a/data/brands/smvi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Smvi", - "brand_id": "smvi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "orion" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "orion" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/sn-ipc.json b/data/brands/sn-ipc.json deleted file mode 100644 index 7b37564..0000000 --- a/data/brands/sn-ipc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sn Ipc", - "brand_id": "sn-ipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4015sw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/snapav.json b/data/brands/snapav.json deleted file mode 100644 index 1525dcf..0000000 --- a/data/brands/snapav.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Snapav", - "brand_id": "snapav", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "750", - "Other", - "WPS-300-CUB-IP-WH", - "WPS-750-DOM-IP-WH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "750" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "750", - "Other", - "REAL", - "WPS-750-DOM-IP", - "WPS-750-DOM-IP-WH" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "LUM-500-TUR-IP-BL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "Other", - "WPS-300-CUB-IP-WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "Other", - "WPS-750-DOM-IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "WPS-750-DOM-IP", - "WPS-750-DOM-IP-WH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v2" - }, - { - "models": [ - "WPS-750-DOM-IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "WPS-750-DOM-IP-WH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/s1" - } - ] -} \ No newline at end of file diff --git a/data/brands/soar.json b/data/brands/soar.json deleted file mode 100644 index f997f61..0000000 --- a/data/brands/soar.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Soar", - "brand_id": "soar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "971" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/videoMain" - }, - { - "models": [ - "971" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/soggi.json b/data/brands/soggi.json deleted file mode 100644 index 85c326e..0000000 --- a/data/brands/soggi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Soggi", - "brand_id": "soggi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "orno" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/soho.json b/data/brands/soho.json deleted file mode 100644 index 8ca86f8..0000000 --- a/data/brands/soho.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Soho", - "brand_id": "soho", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cs-5814cf", - "Internet Camera", - "IP-561" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IP-561" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - } - ] -} \ No newline at end of file diff --git a/data/brands/solar-ip-camera.json b/data/brands/solar-ip-camera.json deleted file mode 100644 index 9683506..0000000 --- a/data/brands/solar-ip-camera.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "brand": "Solar Ip Camera", - "brand_id": "solar-ip-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "122334", - "1234", - "344556", - "3455", - "6KT", - "ggakh" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "3455", - "425" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/solarcam.json b/data/brands/solarcam.json deleted file mode 100644 index 6082de4..0000000 --- a/data/brands/solarcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Solarcam", - "brand_id": "solarcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4G_UFI_1839" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/soleratec.json b/data/brands/soleratec.json deleted file mode 100644 index 5d70b35..0000000 --- a/data/brands/soleratec.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Soleratec", - "brand_id": "soleratec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP 61335", - "IP51000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "IP61335" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/solosecurity.json b/data/brands/solosecurity.json deleted file mode 100644 index 9063f26..0000000 --- a/data/brands/solosecurity.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Solosecurity", - "brand_id": "solosecurity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h265" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/solwise.json b/data/brands/solwise.json deleted file mode 100644 index 2a20e77..0000000 --- a/data/brands/solwise.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "brand": "Solwise", - "brand_id": "solwise", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "SEC-1002W-IR", - "SEC-C1062" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "SEC-1002W-IR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "SEC-1002W-IR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SEC-1002W-IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "SEC-1002W-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SEC-1002W-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "SEC-C1062" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "SEC-C1062" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "SEC-MJCAS-210IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sonoff.json b/data/brands/sonoff.json deleted file mode 100644 index 6848ed2..0000000 --- a/data/brands/sonoff.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "brand": "Sonoff", - "brand_id": "sonoff", - "last_updated": "2025-11-11", - "source": "ispyconnect.com, github.com/roleoroleo/sonoff-hack", - "website": "https://github.com/roleoroleo/sonoff-hack", - "entries": [ - { - "models": [ - "Cam Slim", - "CAM-S2", - "DW2", - "GBP", - "GK_200MP2C", - "GK-200", - "GK-200MP2-B", - "Other", - "S-CAM", - "Slim" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av_stream/ch0" - }, - { - "models": [ - "CAM Slim", - "GK-200MP2B", - "GK-200MP2-B", - "Slim" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av_stream/ch1" - }, - { - "models": [ - "gk-200", - "GK-200MP2", - "GK-200MP2-B", - "Pant-Tilt", - "XXXX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "GK-200MP2B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/snapshot.sh?res=low" - }, - { - "models": [ - "GK-200MP2-B" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "SONOFF-HACK GOKE GK7205V200", - "GK-200MP2-B with sonoff-hack", - "Goke GK7205V200", - "sonoff-hack" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av_stream/ch0", - "notes": "Sonoff-hack custom firmware - Main stream" - }, - { - "models": [ - "SONOFF-HACK", - "GK-200MP2-B with sonoff-hack", - "sonoff-hack" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/snapshot.jpg", - "notes": "Sonoff-hack custom firmware - JPEG snapshot (port 8080)" - }, - { - "models": [ - "SONOFF-HACK GOKE GK7205V300", - "GK7205V300", - "Goke chipset" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av_stream/ch0", - "notes": "Sonoff-hack for Goke GK7205V300 chipset" - } - ] -} \ No newline at end of file diff --git a/data/brands/sony.json b/data/brands/sony.json deleted file mode 100644 index 8cde7ab..0000000 --- a/data/brands/sony.json +++ /dev/null @@ -1,1394 +0,0 @@ -{ - "brand": "Sony", - "brand_id": "sony", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10 MINI", - "C6603", - "Experia", - "f3111", - "F3111", - "Other", - "ST25I", - "U20I", - "x10", - "x10i", - "X-10i", - "xa1", - "Xperia", - "XPERIA x10", - "Xperia X8", - "XperiaJJ", - "Xperia-T", - "XxperiaS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "110", - "210T", - "BASMENT", - "CH-110", - "ch-120", - "CH-120", - "CH160", - "CH180", - "ch210", - "CH-210", - "CH-220", - "CH-240", - "CH-260", - "CH-280", - "cns-cs20", - "DH-110", - "DH-120", - "DH-140", - "DH-160", - "DH-180", - "DH-210", - "DH-210T", - "HISSAR_8080", - "IPELA", - "Ipela HD", - "MueCH-120", - "Other", - "SDC", - "snc", - "snc ch140", - "SNC-580", - "SNC-CH110", - "SNC-CH120", - "SNC-CH140", - "SNC-CH160", - "SNC-CH210", - "SNC-CH210 (2)", - "SNC-CH260", - "SNC-CM120", - "SNC-DF50N", - "SNC-DF80N", - "SNC-DH110T", - "SNC-DH120", - "SNC-DH120 (kdp)", - "snc-dh120T", - "SNC-DH140", - "SNCDH-160", - "SNC-DH180", - "SNC-DH210T", - "snc-dh220", - "SNC-DH240T", - "SNC-DH260", - "SNC-DH280", - "SNC-DM110", - "SNC-DM160", - "SNC-DS10", - "SNC-DS60", - "SNC-EP520", - "SNC-EP550", - "SNC-EP580", - "SNC-ER550", - "SNC-ER580", - "SNC-RX550N", - "SNC-RX550P", - "SNC-RX570N", - "SNC-RZ25", - "SNC-RZ50N", - "SNC-RZ50P", - "SNCVB-600", - "sony dh280", - "Sony DM110", - "SONY IP CAMERA", - "SPZ_50" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/vga.jpg" - }, - { - "models": [ - "210", - "300se", - "Boa", - "BRC-X400", - "C6603", - "CH180", - "CH280", - "cns-cs20", - "CUWE", - "DH110", - "DH-120", - "DH-140", - "DH-160", - "DH-240", - "DM-110", - "EM600", - "EMC-EM642R", - "ER-6032-VAP-B", - "IPELA", - "IPELA HD", - "IPELA SNC-EB600", - "Ipela SNC-EM632R", - "IPELA SNC-EP580", - "Other", - "SG300se", - "SNC", - "SNC CH-110", - "snc eb600", - "SNC RZ25N", - "SNC VM601", - "snc_vb770", - "SNC-580", - "snc-630n", - "SNC-CH110", - "SNC-CH120", - "SNC-CH140", - "SNCCH-160", - "SNC-CH160", - "SNC-CH180", - "SNC-CH1810", - "SNC-CH210", - "SNC-CH220", - "SNC-CH240", - "SNC-CH280", - "SNC-CM120", - "SNC-CX600W", - "SNC-DH110T", - "SNC-DH120", - "SNC-DH120 (kdp)", - "snc-dh120T", - "SNC-DH140", - "SNC-DH140-ONVIF", - "SNC-DH160", - "SNC-DH160-arclight441", - "SNC-DH180", - "SNC-DH210T", - "SNC-DH220", - "SNC-DH260", - "SNC-DH280", - "SNCDS-60", - "SNC-EB600", - "SNC-EB602R", - "SNC-EB630", - "SNC-EB630B", - "SNC-EB640", - "SNC-EM 632R", - "SNC-EM601", - "SNC-EM602R", - "snc-em602rc", - "SNC-EM630", - "SNC-EM631", - "SNC-EM632", - "SNC-EP 550", - "SNC-EP520", - "SNC-EP521", - "SNC-EP580", - "SNC-ER521", - "SNC-ER550", - "SNCER-580", - "SNC-ER585", - "SNC-RH164", - "SNC-RX550P", - "snc-vb600", - "SNC-VB600B", - "SNC-VB630", - "SNC-VB632D", - "SNC-VM600", - "SNC-VM601", - "snc-vm601b", - "SNC-VM630", - "SNC-VM632R", - "snc-WR600", - "SNCWR-600", - "SNC-WR630", - "SNC-XM631", - "SNC-XM632", - "SNC-Z25N", - "snc-zp550", - "SNT-EX104", - "Sony cctv", - "SRG300SE", - "SRG-X120", - "srg-x400", - "Timbues", - "VB-630", - "WR-630", - "XM-632", - "xrg x400" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "210", - "DH-120", - "DH-140", - "RH-124", - "SNC-CX600W", - "SNC-EM602R", - "SNC-WR632", - "SNC-XM632" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video2" - }, - { - "models": [ - "210", - "c110", - "CH-110", - "CH-120", - "CH-140", - "CH-210", - "CH-220", - "CH-280", - "DH-110", - "dh140", - "DH-160", - "dh180", - "DH-260", - "DHC110", - "EP-550", - "IPELA", - "ipela HD", - "Ipela SNC-EP580", - "Other", - "SNC-CH110", - "SNC-CH120", - "SNC-CH140", - "SNC-CH210", - "SNC-DH110", - "SNC-DH110T", - "SNC-DH120", - "SNC-DH140", - "SNC-DH180", - "SNC-DH210T", - "SNC-DH220", - "SNC-DH220T", - "SNC-DH260", - "SNC-EP521", - "SNC-ER580", - "SNC-ER585", - "SNC-RX530", - "SNC-RX570n", - "SNC-RZ50", - "SNC-RZ50N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8554, - "url": "h264" - }, - { - "models": [ - "210", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 8554, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "510" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "ali", - "Other", - "SNC-VB600B", - "SNC-VB630", - "SNC-WR600", - "SNC-WR630", - "SNC-XM632", - "sony-ccc", - "star", - "VB-630", - "VB-635", - "VB-65", - "WR-630", - "XM-632" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile" - }, - { - "models": [ - "ALIEXPRESS", - "DM160", - "SNC-DF80N", - "SNC-RX550P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "ALIEXPRESS", - "h.265x", - "h265", - "IMX222", - "IMX222-2", - "imx335", - "Other", - "PTZ", - "snc cs50p", - "SNC-EB632R", - "sony imx335", - "star" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "aw-he60" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg" - }, - { - "models": [ - "bcr 330z", - "PS3 Eye", - "PTZ", - "raspberrypi", - "SNC-EB632R", - "SNC-RX550P", - "SNC-RZ50P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "bl-ip camera", - "IPELA", - "Other", - "SNC", - "snc M3", - "SNC-CS10", - "SNC-DF70N", - "SNC-RZ25N", - "SNC-Z25N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "bubo", - "ER-6032-VAP-B", - "Other", - "SNC RZ25N", - "SNC-DF40N", - "SNC-DS10", - "SNC-RZ50N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/mjpeg" - }, - { - "models": [ - "C6603", - "Other", - "XPERIA", - "XPERIA x10", - "Xperia Z1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "cc-ipc-hs20s142", - "Other", - "SNC-EB602R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "CH-110", - "CH-240", - "DF-70N", - "DS10", - "ds-60", - "Ipela Sony SNC-RZ25N", - "Other", - "SNC", - "SNC-CH210", - "SNC-CM120", - "SNC-CS11", - "SNC-CS3N", - "SNC-CS50n", - "SNC-CS50P", - "SNC-DF40N", - "SNC-DF40P", - "SNC-DF70N", - "SNC-DS10", - "SNC-DS60", - "SNC-EP580", - "SNC-M1", - "SNC-M1/M3 MPEG4", - "SNC-P1", - "SNC-P5", - "SNC-P5S-3", - "SNC-RX530", - "SNC-RX550P", - "SNC-RZ25", - "SNC-RZ25n", - "SNC-RZ25P", - "SNC-RZ50N", - "SNC-RZ50P", - "SND", - "SND-160", - "Sony DM110" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "CH-110", - "CH-160", - "CH-210", - "CH-260", - "DH-110", - "DH-160", - "DH-210", - "DH-260", - "ICS-3178DN", - "IPELA", - "Ipela SNC-RX530", - "IPELA SNC-RX530", - "Other", - "RZ-25P", - "SNC RZ25N", - "SNC-20", - "SNC-CH110", - "SNCCH-160", - "SNC-CS11", - "SNC-CS20", - "SNC-CS3", - "SNC-CS3N", - "SNC-CS3P", - "SNC-DF40N", - "SNC-DF50N", - "SNC-DF50p", - "SNC-DF70N", - "SNC-DH180", - "SNC-M1", - "SNC-M1/M3 MPEG4", - "SNC-M3", - "snc-M3W", - "SNC-P5S-2", - "SNC-RS84N", - "SNC-RX550P", - "SNC-RZ20P", - "SNC-RZ25", - "SNC-RZ25n", - "SNC-RZ30", - "SNC-RZ30N", - "SNC-RZ30P", - "snc-rz50n", - "SNC-z20N", - "SNT-EP104", - "SNT-EX101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image" - }, - { - "models": [ - "CH-110", - "IPELA SNC-DM110", - "SNC ER 580", - "SNC-CS50P", - "SNC-DH110", - "SNC-DH240", - "SNC-RX-570P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpeg/vga.jpg" - }, - { - "models": [ - "ch-120", - "CH-120", - "CH-210", - "DH-140", - "IPELA HD", - "SNC-CH140", - "SNC-CX600W", - "SNC-DH140", - "SNC-EB600B", - "SNC-EM600", - "SNC-HM662", - "SNC-VB635", - "SNC-VM600", - "SNC-VM630", - "Snc-vm772r", - "SNC-XM631", - "Sony IPCAMsnc-hm662", - "SRG300SE", - "SRG-300SE", - "XM-631" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video1" - }, - { - "models": [ - "CH-120", - "CH-180", - "DF-70N", - "DH-140", - "DH-180", - "DM-110", - "Em600", - "em-602r", - "EM602R", - "Other", - "RZ-25p", - "SCN-DS60", - "SNC", - "snc cx_600w", - "snc vm602r (jpeg)", - "SNC-50", - "SNC-642R", - "SNC-CH110", - "SNC-CH140", - "SNC-CH160", - "SNC-CH220", - "SNC-CH240", - "SNC-CH260", - "SNC-CS11", - "SNC-CS20", - "SNC-CS3N", - "SNC-CS3P", - "SNC-CS50P", - "SNC-CX600", - "SNC-CX600W", - "SNC-DF50N", - "SNC-DF70N", - "SNC-DF80P", - "SNC-DH110", - "SNC-DH110T", - "SNC-DH120", - "SNC-DH120T", - "SNC-DH140", - "SNC-DH160", - "SNC-DH210T", - "SNC-DH280", - "SNC-DS10", - "SNCDS-60", - "SNC-EB600", - "SNC-EB600B", - "SNC-EB602", - "SNC-EB602R", - "SNC-EB630B", - "SNC-EB632R", - "SNC-EM600", - "SNC-EM602R", - "SNC-EM630", - "SNC-EM631", - "SNC-EM632", - "SNC-ER580", - "SNC-ER585", - "SNC-M1", - "SNC-M3", - "SNC-P1", - "SNC-P5", - "SNC-P5S-1", - "SNC-RH164", - "SNC-RS84N", - "SNC-RX550N", - "SNC-RX550P", - "SNC-RX750N", - "SNC-RZ20P", - "SNC-RZ25", - "SNC-RZ25n", - "SNC-RZ25P", - "SNC-RZ30N", - "sncrz30p", - "SNC-RZ30P", - "SNC-RZ50", - "SNC-RZ50N", - "SNC-RZ50P", - "SNCVB-600", - "SNC-VB600B", - "snc-vb630", - "SNC-VB770", - "SNC-VM600", - "SNC-VM600b", - "SNC-VM601", - "snc-vm601b", - "SNC-VM630", - "SNC-VM630B", - "SNC-VM632R", - "Snc-vm772r", - "SNCWR-600", - "SNC-WR62", - "SNC-WR630", - "SNC-WR632", - "SNC-XM631", - "SNC-XM632", - "SNC-Z20N", - "SNC-Z20P", - "SNT-EX104", - "Sony IP Camera", - "SRG300se", - "SRG-300SE", - "SRG300SE_jk", - "VB600", - "VB-630", - "VM601", - "WR-630", - "XM-631", - "XM-632" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "oneshotimage.jpg" - }, - { - "models": [ - "CH-120", - "Other", - "SNC-CH120", - "SNC-CH160", - "SNC-DH110", - "SNC-EB600B", - "SNC-RZ25", - "XM-631" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "oneshotimage[CHANNEL]" - }, - { - "models": [ - "CH-120", - "CH-140", - "CH-160", - "CH-180", - "CH-210", - "CH-220", - "CH-240", - "CH-260", - "CH-280", - "DH-110", - "DH-120", - "DH-140", - "DH-160", - "DH-180", - "DH-210", - "DH-220", - "DH-240", - "DH-260", - "DH-280", - "RH-124", - "RH-164", - "SNC-CH110" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "media/video1" - }, - { - "models": [ - "CH-160", - "DH-110", - "ds-60", - "EP-550", - "IPELA SNC-EP580", - "Other", - "SNC-50", - "SNC-CH140", - "SNC-CH160", - "SNC-DF50N", - "SNC-DF50p", - "SNC-DF70N", - "SNC-DH140", - "SNC-DS10", - "SNCDS-60", - "SNC-EP520", - "SNC-EP521", - "SNC-EP580", - "SNC-ER580", - "SNC-ER585", - "SNC-RX550N", - "SNC-RX570n", - "SNC-RX750N", - "SNC-RZ25", - "SND", - "Student Other Entrance" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "CH-160", - "CH-210", - "DH-160", - "DH-210", - "ICS-3718DN", - "Other", - "SNC-CH110", - "SNC-DF70N", - "SNC-M1/M3 MPEG4", - "SNC-RX550P", - "SNC-RZ25", - "SNC-RZ30N", - "SNC-RZ30P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "CIP-WD-2048W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Clock Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "DH-160", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/qvga.jpg" - }, - { - "models": [ - "DOME", - "IMX222", - "imx335", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "DreamMachine", - "HI-6440A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Experia", - "Other", - "SNC-RZ30N", - "XPERIA x10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Experia", - "IQ031s", - "Other", - "Xperia-T", - "xpieria" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg" - }, - { - "models": [ - "FCB-EH6300", - "PCAM-6300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/fwstream.cgi?ServerId=0&AppKey=0x00006784&PortId=0&CameraId=[CHANNEL]&PauseTime=0&FwCgiVer=0x0001" - }, - { - "models": [ - "FCB-EV7500", - "IMX323" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/videoinput_1:0/h264_1/onvif.stm" - }, - { - "models": [ - "hi3516", - "imx355", - "ONVIF", - "SNC-RX550P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "HI-6440A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ICS3178DN", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "IMX175" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "imx335", - "sip-k678a", - "SNC-EB632R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/h264_stream" - }, - { - "models": [ - "IP66" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=2" - }, - { - "models": [ - "Ipela", - "Ipela Sony SNC-RZ25N", - "ONVIF", - "Other", - "SNC-DH110T", - "SNC-DH120", - "SNC-DH140", - "SNC-DH140-ONVIF", - "SNC-ER521" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/h264" - }, - { - "models": [ - "IPELA SNC-DM110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Ipela SNC-XM632" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 82, - "url": "/oneshotimage1?COUNTER" - }, - { - "models": [ - "Ipela Sony SNC-RZ25N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "M4 aqua", - "Xperia m4 aqua" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4747, - "url": "/video.mjpg" - }, - { - "models": [ - "NC1500-1600" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "ONVIF", - "Other", - "SNC-RX-570P", - "SNC-RZ50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "SDE-3000n" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "Other", - "SNC-DF70N", - "SNC-RX550P", - "SNC-RZ25" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image?res=half&x0=0&y0=0&x1=1600&y1=1200&quality=15&doublescan=0&ssn=1340443365044&id=1340443379230" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other", - "SNC-RZ25", - "SNC-VM601" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other", - "SNC-EB632R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other", - "SN9C202" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other", - "STS-3282TE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "-wvhttp-01-/GetOneShot?image_size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "vari-focal" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "PTZ", - "Starvis IP 66" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "SCN RZ30N", - "SNC-EB632R", - "SNC-VM632R", - "SNC-Z20", - "SNC-z20N", - "SNC-Z20P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/oneshotimage.jpg" - }, - { - "models": [ - "snc25", - "SNC-RZ25", - "SNC-RZ50N", - "SNC-RZ50P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image?speed=25" - }, - { - "models": [ - "snc-ch120", - "SNC-EM630" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "SNC-CH120", - "SNC-RX550P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "image.mpg" - }, - { - "models": [ - "SNC-CS50P", - "SNC-DF40N", - "SNC-DF40P", - "SNC-DS60", - "SNC-RZ25n", - "SNC-RZ30", - "SNC-RZ30N", - "SNC-RZ50P", - "SNC-z20N", - "Sony - Ipela - snc-df40n" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image" - }, - { - "models": [ - "SNC-CS50P", - "SNT-EX104", - "SNT-V704" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "CH[CHANNEL]/oneshotimage.jpg" - }, - { - "models": [ - "SNC-DM160" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "SNC-EB632R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/image.mpg" - }, - { - "models": [ - "SNC-EM641", - "SNC-RH124", - "SNC-VM600", - "Snc-vm772r", - "SNC-WR632" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/image1" - }, - { - "models": [ - "SNC-HM662" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "SNC-M1", - "SNC-M1/M3 MPEG4", - "SNC-M3" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "SNC-RX550N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "SNT-V704" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "command/image.cgi?grant=User&channelno=[CHANNEL]" - }, - { - "models": [ - "white" - ], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "videostream.cgi?" - }, - { - "models": [ - "XPERIA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/soohao.json b/data/brands/soohao.json deleted file mode 100644 index bc50b05..0000000 --- a/data/brands/soohao.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Soohao", - "brand_id": "soohao", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ev1001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/soospy.json b/data/brands/soospy.json deleted file mode 100644 index 86c817d..0000000 --- a/data/brands/soospy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Soospy", - "brand_id": "soospy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "p2w" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "v88" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sorrano.json b/data/brands/sorrano.json deleted file mode 100644 index c89762a..0000000 --- a/data/brands/sorrano.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sorrano", - "brand_id": "sorrano", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.0" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 4747, - "url": "/video?1920x1080" - } - ] -} \ No newline at end of file diff --git a/data/brands/sotion.json b/data/brands/sotion.json deleted file mode 100644 index 7e61589..0000000 --- a/data/brands/sotion.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sotion", - "brand_id": "sotion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/soullife.json b/data/brands/soullife.json deleted file mode 100644 index f709c63..0000000 --- a/data/brands/soullife.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Soullife", - "brand_id": "soullife", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "PS6Lite" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "PS6Lite" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "SL-03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sovmiku.json b/data/brands/sovmiku.json deleted file mode 100644 index ab3cf28..0000000 --- a/data/brands/sovmiku.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sovmiku", - "brand_id": "sovmiku", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SFWS318" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "SFWS318" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/sozo.json b/data/brands/sozo.json deleted file mode 100644 index 2d9cce4..0000000 --- a/data/brands/sozo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sozo", - "brand_id": "sozo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SOC-SNIP36-30E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/space-technology.json b/data/brands/space-technology.json deleted file mode 100644 index e975fbb..0000000 --- a/data/brands/space-technology.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Space Technology", - "brand_id": "space-technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "171 M IP Home", - "ST-110 IP Home" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "ST-171 M IP HOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "ST-710 M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video.mp4" - }, - { - "models": [ - "ST-901 IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "ST-901 IP", - "ST-V5603" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile2" - }, - { - "models": [ - "ST-901 IP", - "ST-V5603", - "ST-V5603 PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile1" - }, - { - "models": [ - "st-v2611 pro", - "ST-v2703" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264Preview_01_sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/spacetronik.json b/data/brands/spacetronik.json deleted file mode 100644 index 9c8923c..0000000 --- a/data/brands/spacetronik.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Spacetronik", - "brand_id": "spacetronik", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SP-20IP20PTZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/sparklan.json b/data/brands/sparklan.json deleted file mode 100644 index 514f716..0000000 --- a/data/brands/sparklan.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "brand": "Sparklan", - "brand_id": "sparklan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAS-330" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "CAS-330", - "CAS-330W", - "CAS-370", - "CAS-771W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "CAS-370" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "IMAGE.JPG" - }, - { - "models": [ - "CAS-370", - "CS-15285B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "CAS-370W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/IMAGE.JPG" - }, - { - "models": [ - "CAS-630" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "_gCVimage.jpg" - }, - { - "models": [ - "CAS-633", - "CAS-673" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "CAS-673", - "CS-673" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "CAS-700" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "CAS-771W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "CAS-771W", - "CAS-861W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "CS-673" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/spc.json b/data/brands/spc.json deleted file mode 100644 index 14a37f4..0000000 --- a/data/brands/spc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Spc", - "brand_id": "spc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720", - "DOME6340C28WD", - "KST4-1080P", - "streethome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mode=real&idc=1&ids=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/speco.json b/data/brands/speco.json deleted file mode 100644 index 9bfb140..0000000 --- a/data/brands/speco.json +++ /dev/null @@ -1,363 +0,0 @@ -{ - "brand": "Speco", - "brand_id": "speco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "02b5", - "02MD2", - "05MDP1", - "O2-B2", - "o2b5", - "O2C1", - "O2d3", - "O2-D4", - "o2dp9", - "O2FB3M", - "O2iB3M", - "O2iMD1", - "O2iMT61", - "O2MB1", - "o5mdp1", - "OINT-56B1G", - "OPTZ-36XO", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg.jpg" - }, - { - "models": [ - "02C1", - "02MD2", - "O2C1", - "O2D10", - "O2-MD1", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "02MB1", - "O2-D4", - "O2MB1", - "O4VLD1", - "O8D2M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "02vlb7", - "O2VLD7J" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9008, - "url": "/ch01/0" - }, - { - "models": [ - "02vlb7" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9008, - "url": "/ch01/1" - }, - { - "models": [ - "03VLD1", - "04d1", - "04d2m", - "O3VFDM", - "O3VLB3", - "O3VLD1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "03VLD1", - "04d1", - "1234", - "DVR4WM", - "O2C1", - "O2-D4", - "O3VLB3", - "OID-4", - "Other", - "TECH DVR-16IP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "04d2m", - "O3VLD1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "D16HS", - "D8RS1TB", - "O2DP14", - "O2DP14-242954" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Master-0" - }, - { - "models": [ - "H4FB1M 4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/main_1" - }, - { - "models": [ - "IP-SD10X", - "Other", - "SIP", - "SIPD3", - "SIPWDRB2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "O2-B16", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "O2-D4", - "OINT-56B1G", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "O2MD2WK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "O2-VLB2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "O3VLB3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "O4D9M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 9008, - "url": "/profile2" - }, - { - "models": [ - "O4T7N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/chID=3&streamType=main&linkType=tcp" - }, - { - "models": [ - "Other", - "VIP2B3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/1/jpeg.php" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "ZIP-2B" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "Live/Channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "SIPD3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/cmd/system?GET_STREAM&USER=[USERNAME]&PWD=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "mobile/channel[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ivop.get?action=live&THREAD_ID=" - }, - { - "models": [ - "Tech DVR-16IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images[CHANNEL]sif" - }, - { - "models": [ - "Tech DVR-16IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "images[CHANNEL]full" - }, - { - "models": [ - "Tech DVR-16IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getimage?camera=[CHANNEL]&fmt=full" - }, - { - "models": [ - "VIP-2B1M", - "VIP-2C1N", - "VIP-2P1", - "VIP-2PTZ12X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "VIP2P1N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - }, - { - "models": [ - "ZIP-2B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream0/Channel=0;Profile=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/sperado-cctv.json b/data/brands/sperado-cctv.json deleted file mode 100644 index 8abde2e..0000000 --- a/data/brands/sperado-cctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sperado Cctv", - "brand_id": "sperado-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SDS-2016H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/spetslab.json b/data/brands/spetslab.json deleted file mode 100644 index 9bdf94c..0000000 --- a/data/brands/spetslab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Spetslab", - "brand_id": "spetslab", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "videoserv" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/1/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/spider.json b/data/brands/spider.json deleted file mode 100644 index e709c1d..0000000 --- a/data/brands/spider.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Spider", - "brand_id": "spider", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR 5104" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/spigen.json b/data/brands/spigen.json deleted file mode 100644 index d829714..0000000 --- a/data/brands/spigen.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Spigen", - "brand_id": "spigen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E300W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/spotai.json b/data/brands/spotai.json deleted file mode 100644 index 4a8cd10..0000000 --- a/data/brands/spotai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Spotai", - "brand_id": "spotai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/spotcam.json b/data/brands/spotcam.json deleted file mode 100644 index e715a58..0000000 --- a/data/brands/spotcam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Spotcam", - "brand_id": "spotcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD Eva" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "HD8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/sprint-cctv.json b/data/brands/sprint-cctv.json deleted file mode 100644 index 5ad160f..0000000 --- a/data/brands/sprint-cctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sprint Cctv", - "brand_id": "sprint-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SSC313" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/spy-cameras.json b/data/brands/spy-cameras.json deleted file mode 100644 index 52725fa..0000000 --- a/data/brands/spy-cameras.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Spy Cameras", - "brand_id": "spy-cameras", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C923IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "WF-100PCX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WF-100PCX", - "WF-110V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "WF-100PCX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "WF-100PCX 720P", - "WF-110V" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "WF-110V" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "WF-110V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/spycam.json b/data/brands/spycam.json deleted file mode 100644 index a1382d2..0000000 --- a/data/brands/spycam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Spycam", - "brand_id": "spycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/hi3510/snap.cgi?&-getstream&-chn=2" - }, - { - "models": [ - "SQ29" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/spyclops.json b/data/brands/spyclops.json deleted file mode 100644 index e1f91e8..0000000 --- a/data/brands/spyclops.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Spyclops", - "brand_id": "spyclops", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=1" - }, - { - "models": [ - "Other", - "spy-mnbltwip5", - "SPY-MNDMWIP4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/spydroid.json b/data/brands/spydroid.json deleted file mode 100644 index 4dc0bc5..0000000 --- a/data/brands/spydroid.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Spydroid", - "brand_id": "spydroid", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/spytech.json b/data/brands/spytech.json deleted file mode 100644 index d1212d1..0000000 --- a/data/brands/spytech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Spytech", - "brand_id": "spytech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC128PW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "NC128PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/spytecinc.json b/data/brands/spytecinc.json deleted file mode 100644 index 2045ce4..0000000 --- a/data/brands/spytecinc.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "brand": "Spytecinc", - "brand_id": "spytecinc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-20" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "IP-20", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other", - "SP D3013" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/ch1/sub/" - }, - { - "models": [ - "SPYPIR32WF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/sq11.json b/data/brands/sq11.json deleted file mode 100644 index 3cb0774..0000000 --- a/data/brands/sq11.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sq11", - "brand_id": "sq11", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini DV" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8090, - "url": "/?&AUDIO=YES&CHOPIMAGE=YES&STREAM=YES&WANTIMAGE=0.JPG&SENDEMPTYIMAGES=NO" - } - ] -} \ No newline at end of file diff --git a/data/brands/squira.json b/data/brands/squira.json deleted file mode 100644 index f2d65b4..0000000 --- a/data/brands/squira.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Squira", - "brand_id": "squira", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PD910" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sricam.json b/data/brands/sricam.json deleted file mode 100644 index 869cc63..0000000 --- a/data/brands/sricam.json +++ /dev/null @@ -1,958 +0,0 @@ -{ - "brand": "Sricam", - "brand_id": "sricam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0001", - "004", - "AP0009ted", - "AP-001", - "AP002", - "AP-003", - "AP-004", - "AP-005", - "ap006", - "AP-006", - "AP007", - "AP-009", - "AP009 TESTED", - "AP-011", - "ap05", - "ap1", - "AP-CAM", - "IPCAM my latest", - "Kilinski AP Cam", - "Other", - "SP006", - "sp008", - "sp013", - "sp014", - "SP015", - "SRICAM AP006", - "SRICAM SP", - "SRICAM SP004", - "SRICAM SP005", - "SRICAM SP006", - "SRICAM SP009", - "SRICAM SP011", - "SRICAM SP014", - "SRICAM1", - "VIEW-004964-CTETZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "0001", - "AP-003", - "AP003(WORKING)", - "CTO185", - "FLOUREON", - "ONIF", - "ONVIF", - "ONVIF SP013", - "Other", - "P2P-BLACK", - "smart wifi camera", - "SP006", - "SP-008", - "sp011", - "SP012", - "SP015", - "SP016", - "SP12" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "0001", - "005", - "A0009", - "A001", - "aj-c2wa-c118", - "AJ-C2WA-C118", - "AP SERIES IP CAMERS", - "ap0001", - "AP-001", - "AP-003", - "AP-004", - "AP-005", - "AP-009", - "ap1", - "AP-CAM", - "Cam1", - "IPC", - "Other", - "PAN TILT", - "SP005", - "SP008b", - "SP012", - "SP013", - "SP015", - "SRICAM SP006", - "SRICAM WIFI AP", - "SRICAM1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "0001", - "013", - "A0009", - "AJ-C2WA-C118", - "ap-0001", - "AP0009", - "AP-001", - "AP003", - "AP-004", - "AP-004004", - "AP-005", - "AP006", - "AP007", - "AP-008", - "AP-009", - "AP009 TESTED", - "ap013", - "Canada", - "Canada2", - "Majas", - "my0210-IPcam", - "Other", - "P2P- Black", - "p2p black(frank)", - "P2P-BLACK", - "sp005", - "SP008b", - "sp013", - "SRICAM AP006", - "SRICAM AP009", - "SRICAM WIFI AP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "0001", - "004", - "A001", - "AP 008", - "ap series ip camers", - "AP0006", - "AP-001", - "AP-004", - "AP006", - "AP-009", - "AP-CAM", - "h.264", - "ip008", - "Other", - "SP005", - "SP006", - "sp009", - "sp012", - "sp013", - "SP015", - "SP14", - "SRICAM SP014", - "xxc50100-ts" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "0001", - "004", - "AP-001", - "AP-004", - "IPC", - "Other", - "SP012", - "SRICAM SP006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "0001", - "0004", - "003", - "004", - "004964", - "AP0001", - "AP0009", - "AP-006", - "AP-011", - "Other", - "PTZ", - "PTZ IP 008", - "SP008b", - "SP011", - "SP015_AK", - "SRICAM WIFI AP", - "yes" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "0001", - "A001", - "AP0001", - "AP001", - "ap004", - "AP009", - "apoo5", - "IPC", - "Other", - "SP005", - "SP008b", - "SRICAM1" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "0001", - "001", - "0014", - "002", - "003", - "A001", - "A003", - "AP 008", - "ap0005", - "AP001", - "AP-003", - "AP003B", - "AP-004", - "AP-005", - "AP006", - "AP-006", - "ap008", - "AP-008", - "AP-009", - "ap03", - "AP-03", - "Other", - "SP-008", - "SP014", - "SP015", - "SRICAM SP001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "0001", - "Other", - "SP012" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "0001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "0004", - "003", - "A006", - "AAP003", - "AP0001", - "AP0005", - "AP-001", - "AP004", - "AP-008", - "AP009 TESTED", - "AP03", - "AP-CAM", - "IPC", - "Other", - "P2P-BLACK", - "SP005", - "SP012", - "SRICAM1" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "0004", - "AP 008", - "AP004", - "AP-008", - "SP014" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "001", - "0014", - "485906", - "AP002", - "AP006", - "AP-012", - "IPCAM my latest", - "LS-Q11 PRO", - "Other", - "SH035", - "SP005", - "SP012", - "SP017", - "SP020" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "003", - "005", - "A001", - "A003", - "AAP003", - "AP SERIES IP CAMERS", - "AP001", - "Ap003", - "AP-003", - "AP005", - "ap009", - "AP-012", - "ap05", - "Other", - "SP012" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "003", - "004", - "A006", - "AP002", - "ap003", - "AP-006", - "AP009 TESTED", - "ap05", - "SP012", - "Sricam006", - "sricm" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "004" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "004", - "720P", - "AP-001", - "AP-005", - "AP995", - "AP-CAM", - "Other", - "SP-008" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "004", - "A001", - "AP-001", - "AP002", - "AP-004", - "SRICAM AP007", - "SRICAM SP004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "005", - "007", - "1080P", - "1174030", - "720P", - "AP001", - "AP002", - "ap003(working)", - "AP006C", - "AP-009", - "AP015", - "BV852", - "dome", - "Floureon", - "INNE CAM", - "ip015", - "IP14", - "IPC_441311 sp_15", - "IPC_708420", - "IPC_748484", - "IPC_794113", - "IPC_807757", - "IPC_819175", - "IPC_830435", - "onvif sp013", - "Other", - "Other(MY IP CAM)", - "P13", - "Pan Tilt", - "PTZ IP 008", - "S700", - "sp0009a", - "SP0017", - "SP005DG", - "sp-007", - "SP008", - "SP-009", - "SP009A", - "SP009C", - "SP012", - "sp013", - "SP013", - "SP014", - "sp015", - "SP015_AK", - "SP017", - "SP020", - "SP023", - "SP028", - "SP07", - "SP09", - "sp12", - "SP12", - "sp14", - "SP700", - "SQLodge", - "SRICAM AP006", - "Sricam ONVIF", - "SRICAM SP005", - "SRICAM SP011", - "who knows" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "005", - "AP SERIES IP CAMERS", - "sh024", - "SH028", - "SH208" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8080, - "url": "live/mpeg4" - }, - { - "models": [ - "027", - "SH028B", - "SH035", - "sh042", - "SH20", - "SP020", - "sp028", - "sp030" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "1174030", - "FLOUREON", - "SP012" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsp_live1" - }, - { - "models": [ - "720P", - "AP-006", - "AP006C", - "AP015", - "IPC", - "Other", - "sh017", - "SP0017", - "SP005", - "sp-007", - "SP008", - "SP012", - "SP013", - "SP015", - "SP017", - "SP020", - "SP07", - "who knows" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif2" - }, - { - "models": [ - "A001" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A001", - "AP-001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A04", - "AP SERIES IP CAMERS", - "AP0005", - "AP0009", - "AP-001", - "AP004", - "AP-005", - "ap006", - "AP-006", - "AP-009", - "AP-012", - "AP-CAM", - "Home", - "IPC", - "IPCAM1", - "IPCAM2", - "ONVIF SP013", - "Other", - "PTZ IP 008", - "SP013", - "SP015", - "SRICAM AP006", - "SRICAM SP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AABEC", - "Other", - "P2P-BLACK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "aap003", - "AP002", - "ap003", - "AP-005", - "AP-008", - "ptz", - "SP-002", - "SP015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "admin", - "AP001", - "AP002", - "ap009", - "IPCAM1", - "IPCAM2", - "Other", - "SRICAM AP009", - "SRICAM SP09", - "sricam wifi ap", - "Sricam006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "AP0009", - "AP001", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "user/videostream.cgi" - }, - { - "models": [ - "ap001" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AP002", - "E1A3000-W", - "Home", - "onvif sp013", - "Other", - "sh024", - "SH028", - "SH030" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "AP002", - "onvif sp013" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "AP-003", - "AP004", - "SRICAM AP006" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AP-004" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "AP005", - "Other", - "SP020", - "SRICAM SP006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AP-005" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "AP-008", - "onif", - "ONVIF", - "Other", - "Sp015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "dfasd", - "sh024", - "SH024", - "SH026", - "SH028", - "SH030", - "sp013", - "SP028" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1/h264major" - }, - { - "models": [ - "E1A3000-W", - "sh024" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "hs0024", - "SH024", - "SH028", - "SH031B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "IPCAM MY LATEST" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "onvif sp013" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "SH020", - "sh024", - "sh026", - "sh035" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "sh024" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "sh024", - "SP019" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "sh024" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/user/videostream.cgi" - }, - { - "models": [ - "sh029" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "SH029" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/onvif-stream2" - }, - { - "models": [ - "sh035" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "SH035" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile1" - }, - { - "models": [ - "sp-007" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SP009" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "SP012" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "SP013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "SP14", - "SRICAM AP006" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "SRICAM AP006" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8040, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sricctv.json b/data/brands/sricctv.json deleted file mode 100644 index 982afd4..0000000 --- a/data/brands/sricctv.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "brand": "Sricctv", - "brand_id": "sricctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "004", - "008", - "A-0009", - "A-001", - "A-003", - "AP-0005", - "AP-0009", - "AP-001", - "AP-0014", - "AP003", - "AP-003", - "AP-004", - "AP-005", - "AP-006", - "AP-008", - "AP-009", - "AP-009 Trial", - "AP-011", - "AP-03", - "Other", - "SR-001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "004", - "AP-004", - "AP-006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "009C", - "AP-008", - "Other", - "SP-006", - "SP-007", - "SP-009B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "A-0006", - "AP-0009", - "AP-001", - "AP-002", - "AP003", - "AP-005", - "AP-006", - "AP-008", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "A-0006", - "AP-004", - "AP-005", - "AP-006", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "A-0006", - "A-009", - "AJ-006", - "AP-0001", - "AP-0005", - "AP-0009", - "AP-001", - "AP-003", - "AP-004", - "AP-005", - "AP-006", - "AP-008", - "AP-009", - "AP-009 TESTED", - "AP-014", - "H-264", - "Other", - "P2P-Black", - "P2P-BLACK", - "SP-007", - "SR-001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A-001", - "A-003", - "AB-001", - "AP-003", - "AP-008", - "AP-009", - "AP-0091", - "AP-0093", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "A-003", - "AP-0009", - "AP-001", - "AP-009", - "AP-011", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "A-004", - "A-500", - "AP-0005", - "AP-001", - "AP-003", - "AP-004", - "AP-005", - "AP-006", - "AP-008", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "AB-001", - "AP-003", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "AP-0005", - "AP-001", - "AP-002", - "AP-003", - "AP-004", - "AP-005", - "AP-008", - "AP-009", - "AP-011", - "Other", - "SP-007", - "SR-001", - "SR-004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AP-0005", - "AP-001", - "AP-003", - "AP-004", - "AP-006", - "AP-008", - "AP-009 TESTED", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "AP-001", - "AP-002", - "AP-003", - "AP-004", - "AP-005", - "AP-008", - "AP-009", - "AP-011", - "AP-014", - "Other", - "SR-001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AP-001", - "AP-003", - "AP-004", - "AP-004AF", - "AP-008", - "AP-009 Trial", - "Other", - "SR-001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AP-002", - "AP-003", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "AP-003", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "AP-003", - "AP-007", - "AP-008", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "AP-003", - "AP-004", - "AP-008", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "AP-004", - "AP-005", - "AP-006", - "AP-0093", - "Other", - "P2P-BLACK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "AP-004", - "AP-006", - "AP-009", - "AP-011", - "HD-750", - "Other", - "P2P-BLACK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "AP-005", - "AP-006", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "AP-006" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "C6F0SfZ3N0P0L0", - "C6F0SFZ3N0P0L0", - "IPF-W-2", - "Other", - "sp012" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/srihome.json b/data/brands/srihome.json deleted file mode 100644 index 14e5594..0000000 --- a/data/brands/srihome.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "brand": "Srihome", - "brand_id": "srihome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0004", - "511WA", - "RLC-511 WA", - "S024", - "sh024", - "sh025", - "SH026" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "031", - "S024", - "sh024", - "sh025", - "sh029" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "E1A3000-W", - "S024", - "sh024", - "sh025", - "sh029", - "SH030" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HD-IPC", - "Other", - "S025", - "SH020", - "SH021", - "SH025", - "SH029", - "SH032", - "SH034", - "SH035", - "SH039", - "SH041", - "sh052", - "SH20", - "SHO21", - "SP028", - "sp030" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "Other", - "RoHS", - "SH 28", - "sh024", - "SH026", - "SH027", - "SH028", - "SH035", - "SH25", - "SHO24", - "SHO26", - "srihome sh028" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "sh024", - "SH028" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "sh024", - "SH024" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SH025", - "SH029", - "SH036", - "sh038", - "SH038", - "SH038-4MP", - "SH039B", - "SH20", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/onvif-stream1" - }, - { - "models": [ - "SH029" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "srihome sh028" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam5/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/sspc.json b/data/brands/sspc.json deleted file mode 100644 index 8124160..0000000 --- a/data/brands/sspc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sspc", - "brand_id": "sspc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sst.json b/data/brands/sst.json deleted file mode 100644 index e5d8cf3..0000000 --- a/data/brands/sst.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sst", - "brand_id": "sst", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SST-CNS-BUI18" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mjpeg" - }, - { - "models": [ - "SST-CNS-BUI18" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sstech.json b/data/brands/sstech.json deleted file mode 100644 index ba908e8..0000000 --- a/data/brands/sstech.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sstech", - "brand_id": "sstech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HX-HC450B72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/st-(spacetechnology).json b/data/brands/st-(spacetechnology).json deleted file mode 100644 index 6af0e83..0000000 --- a/data/brands/st-(spacetechnology).json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "St (spacetechnology)", - "brand_id": "st-(spacetechnology)", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "181 ip home" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "ST - 177 IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/st-nt280e1.json b/data/brands/st-nt280e1.json deleted file mode 100644 index df044f5..0000000 --- a/data/brands/st-nt280e1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "St-nt280e1", - "brand_id": "st-nt280e1", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/st-team.json b/data/brands/st-team.json deleted file mode 100644 index 49e38f5..0000000 --- a/data/brands/st-team.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "St-team", - "brand_id": "st-team", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ST-S2541Lite" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/stabo.json b/data/brands/stabo.json deleted file mode 100644 index b21977f..0000000 --- a/data/brands/stabo.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Stabo", - "brand_id": "stabo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Wifi", - "Other", - "Wifi fisheye" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/stadis.json b/data/brands/stadis.json deleted file mode 100644 index 8f6eed4..0000000 --- a/data/brands/stadis.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Stadis", - "brand_id": "stadis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Smart Pro-W3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/stalwall.json b/data/brands/stalwall.json deleted file mode 100644 index 946ae8a..0000000 --- a/data/brands/stalwall.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Stalwall", - "brand_id": "stalwall", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N648" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "N648" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?real_stream--rtp-caching=100" - }, - { - "models": [ - "N817" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/stanley.json b/data/brands/stanley.json deleted file mode 100644 index 2f4054f..0000000 --- a/data/brands/stanley.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Stanley", - "brand_id": "stanley", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8000 irv", - "IPC-5100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "IPC-5100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/star-eye.json b/data/brands/star-eye.json deleted file mode 100644 index 3762686..0000000 --- a/data/brands/star-eye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Star Eye", - "brand_id": "star-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "619" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/star-vedia.json b/data/brands/star-vedia.json deleted file mode 100644 index 5b1be13..0000000 --- a/data/brands/star-vedia.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "brand": "Star Vedia", - "brand_id": "star-vedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6836", - "T-6836WTP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "7837-WIP", - "C-7835WIP", - "Other", - "T-7837WIP", - "T-7838WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "C-7837WIP", - "Other", - "T-7838WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "F-6815W", - "F-6836w", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "H-6837EI", - "H-6837WI", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "IC-202" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IC-202", - "IC502w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IC-202", - "IC502W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IC-202", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other", - "T-7833WIP", - "T-7837WIP", - "T-7838WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other", - "T-7815WIP", - "T-7837WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "T-7833WIP", - "T-7837WIP", - "T-7838WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "T-7833WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/starcam.json b/data/brands/starcam.json deleted file mode 100644 index 3d751e6..0000000 --- a/data/brands/starcam.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Starcam", - "brand_id": "starcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7837WIP", - "c7816wip", - "EY4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "7837WIP", - "C7816WIP", - "c7837wip", - "EY4", - "F6836W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C33-X4", - "C35", - "IP CAMAERA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "C34S-X4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "c63s" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "f6836w", - "F-6836W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H6837WI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Rotation" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/stardot-tech.json b/data/brands/stardot-tech.json deleted file mode 100644 index 023458b..0000000 --- a/data/brands/stardot-tech.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "brand": "Stardot Tech", - "brand_id": "stardot-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0030f4c10852", - "Express Video Server", - "NETCAM SC", - "NETCAM XL", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "netcam.jpg" - }, - { - "models": [ - "Express 2", - "Express Video Server", - "ExpressXL", - "NetcamSC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nph-mjpeg.cgi?[CHANNEL]" - }, - { - "models": [ - "Express Video Server", - "EXPRESS VIDEO SERVER", - "ExpressXL", - "NetCam XL", - "Netcam XL 3MP", - "NetcamSC", - "Other", - "SDH130V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg.cgi?[CHANNEL]" - }, - { - "models": [ - "ExpressXL", - "NetCam XL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "NETCAM", - "NetCam SC", - "NETCAM sc", - "NetCam XL", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nph-mjpeg.cgi" - }, - { - "models": [ - "NETCAM", - "stardot" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "image.jpg" - }, - { - "models": [ - "NetCam SC", - "NetCam XL", - "NETCAMSC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg.cgi" - }, - { - "models": [ - "NETCAM SC", - "NETCAM XL", - "NetcamSC", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "nph-h264.cgi" - }, - { - "models": [ - "NETCAM SC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "NetCamSC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/stardot.json b/data/brands/stardot.json deleted file mode 100644 index 958cf94..0000000 --- a/data/brands/stardot.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Stardot", - "brand_id": "stardot", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "belmont svb", - "belmontsvg2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg.cgi?[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/starir.json b/data/brands/starir.json deleted file mode 100644 index f4e6460..0000000 --- a/data/brands/starir.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Starir", - "brand_id": "starir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ima80l15" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/starlight.json b/data/brands/starlight.json deleted file mode 100644 index d70f195..0000000 --- a/data/brands/starlight.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Starlight", - "brand_id": "starlight", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "amazon" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/start-vision.json b/data/brands/start-vision.json deleted file mode 100644 index ce716c3..0000000 --- a/data/brands/start-vision.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Start Vision", - "brand_id": "start-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-330", - "IP-350", - "Other", - "SV-IP206" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "SV-IP206" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SV-IP2206" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/starvedia.json b/data/brands/starvedia.json deleted file mode 100644 index c29061a..0000000 --- a/data/brands/starvedia.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Starvedia", - "brand_id": "starvedia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC-212w", - "Other", - "ST-1354" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IC-212w", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "IC-502w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other", - "V30508" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "CAM_ID.[PASSWORD].mp2" - } - ] -} \ No newline at end of file diff --git a/data/brands/starvision.json b/data/brands/starvision.json deleted file mode 100644 index a68feb1..0000000 --- a/data/brands/starvision.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Starvision", - "brand_id": "starvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ST-8216" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "ST-8216" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/steinel.json b/data/brands/steinel.json deleted file mode 100644 index b74c37c..0000000 --- a/data/brands/steinel.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Steinel", - "brand_id": "steinel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "L620" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?real_stream-rtp-caching=500" - }, - { - "models": [ - "Outdoor light camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/stem.json b/data/brands/stem.json deleted file mode 100644 index 2d93890..0000000 --- a/data/brands/stem.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Stem", - "brand_id": "stem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Izon", - "Izon View" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/steren.json b/data/brands/steren.json deleted file mode 100644 index 99b2485..0000000 --- a/data/brands/steren.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Steren", - "brand_id": "steren", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCTV-220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IP Cam Z 32001", - "Smart IPcam Z:32001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=320x240" - } - ] -} \ No newline at end of file diff --git a/data/brands/stipelectronics.json b/data/brands/stipelectronics.json deleted file mode 100644 index 87fc69a..0000000 --- a/data/brands/stipelectronics.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Stipelectronics", - "brand_id": "stipelectronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/stopcontact.json b/data/brands/stopcontact.json deleted file mode 100644 index 1d6763f..0000000 --- a/data/brands/stopcontact.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Stopcontact", - "brand_id": "stopcontact", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "stop" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/storage-options.json b/data/brands/storage-options.json deleted file mode 100644 index 615bb48..0000000 --- a/data/brands/storage-options.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "brand": "Storage Options", - "brand_id": "storage-options", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "55663", - "EYECAM", - "F Series", - "Other", - "Sn IPC1", - "SON-IPC1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Eyecam", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "HOMEGUARD", - "Other", - "SON-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HOMEGUARD", - "Other", - "SON-IPC1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Homeguard 720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "Other", - "SON-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SON-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "SON-IPC1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "SON-IPC1" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - } - ] -} \ No newline at end of file diff --git a/data/brands/storex.json b/data/brands/storex.json deleted file mode 100644 index ac97f5b..0000000 --- a/data/brands/storex.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Storex", - "brand_id": "storex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D-10H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "D-10H", - "DH-20", - "DNR-30", - "DNR-30H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "D-10H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "D-10H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "D-10H", - "DN-20H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - } - ] -} \ No newline at end of file diff --git a/data/brands/storm.json b/data/brands/storm.json deleted file mode 100644 index d55dd02..0000000 --- a/data/brands/storm.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Storm", - "brand_id": "storm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "INSBO3IRF", - "INSDO4IR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/strawberry.json b/data/brands/strawberry.json deleted file mode 100644 index af23193..0000000 --- a/data/brands/strawberry.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Strawberry", - "brand_id": "strawberry", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/strongshine.json b/data/brands/strongshine.json deleted file mode 100644 index 00577a3..0000000 --- a/data/brands/strongshine.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Strongshine", - "brand_id": "strongshine", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD 960P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/stuart-cam.json b/data/brands/stuart-cam.json deleted file mode 100644 index d221b3a..0000000 --- a/data/brands/stuart-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Stuart Cam", - "brand_id": "stuart-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "qcp-a356" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/styco.json b/data/brands/styco.json deleted file mode 100644 index c55a8e6..0000000 --- a/data/brands/styco.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Styco", - "brand_id": "styco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ST-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "ST-IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/suba.json b/data/brands/suba.json deleted file mode 100644 index 8919cc1..0000000 --- a/data/brands/suba.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Suba", - "brand_id": "suba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "601" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/sucam.json b/data/brands/sucam.json deleted file mode 100644 index c5c00de..0000000 --- a/data/brands/sucam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sucam", - "brand_id": "sucam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "y3h-20" - ], - "type": "JPEG", - "protocol": "http", - "port": 8082, - "url": "/tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sucjar.json b/data/brands/sucjar.json deleted file mode 100644 index 77ac11c..0000000 --- a/data/brands/sucjar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sucjar", - "brand_id": "sucjar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sucura-networks.json b/data/brands/sucura-networks.json deleted file mode 100644 index 1bc9f66..0000000 --- a/data/brands/sucura-networks.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Sucura Networks", - "brand_id": "sucura-networks", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPCAM1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "IPCAM1080", - "Standard 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264/ch01/main/av_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/sudvision.json b/data/brands/sudvision.json deleted file mode 100644 index ea33956..0000000 --- a/data/brands/sudvision.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Sudvision", - "brand_id": "sudvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ib131w", - "IP-Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/summvision.json b/data/brands/summvision.json deleted file mode 100644 index d701e0f..0000000 --- a/data/brands/summvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Summvision", - "brand_id": "summvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hawkeye" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sumpple.json b/data/brands/sumpple.json deleted file mode 100644 index caede33..0000000 --- a/data/brands/sumpple.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "brand": "Sumpple", - "brand_id": "sumpple", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "610", - "610S", - "631", - "A610", - "S610", - "S631", - "S650", - "Sumpple S610" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "610", - "610S", - "631", - "960P", - "Other", - "qd300", - "S601", - "S610", - "s631", - "S631", - "S6312", - "S651", - "SUMPPLE S610" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "610", - "s601", - "s610", - "S610", - "s650", - "S651", - "SC631" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "610", - "610S", - "S610", - "S631", - "SUMPPLE S610" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "610S", - "s310", - "S822" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "631" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5546, - "url": "/live/av1" - }, - { - "models": [ - "S610" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/sumvision.json b/data/brands/sumvision.json deleted file mode 100644 index 17323df..0000000 --- a/data/brands/sumvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sumvision", - "brand_id": "sumvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hawkeye" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunba.json b/data/brands/sunba.json deleted file mode 100644 index 4b3d693..0000000 --- a/data/brands/sunba.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "brand": "Sunba", - "brand_id": "sunba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1800", - "187", - "20x", - "20X", - "405", - "406-D20X", - "502-4X", - "502S-4X", - "507-20XB", - "507-20XB P2P", - "507-20XC", - "601", - "601 20x", - "601 20X", - "601-D20X", - "602-D20X", - "801-D20X", - "805", - "805-DG20X", - "FT-HD PoE 3.6mm", - "Other", - "P636 V2", - "PTZ", - "Sunba Megapixel 1080 HP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "405-D20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - }, - { - "models": [ - "405-ECO", - "Illuminati", - "p425" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1" - }, - { - "models": [ - "507-20XB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "601-D20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "601-D20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "601-D20X" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ONVIF/MediaInput" - }, - { - "models": [ - "601-D25X", - "805-D20X", - "805-DG20x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "801-D20X", - "sipuli" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "HZ502-20XA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8556, - "url": "/Onvif/Streaming/2" - }, - { - "models": [ - "P636 V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "P636 V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "PTZ IR Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "robot" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunbio.json b/data/brands/sunbio.json deleted file mode 100644 index 3b11ed6..0000000 --- a/data/brands/sunbio.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Sunbio", - "brand_id": "sunbio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NIP-160238-AADDB", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP-162848-ACFCE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-179845-FCDEA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunchan.json b/data/brands/sunchan.json deleted file mode 100644 index af1e8ad..0000000 --- a/data/brands/sunchan.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Sunchan", - "brand_id": "sunchan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EPC-HR820AR5", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/suncomm.json b/data/brands/suncomm.json deleted file mode 100644 index 45526b3..0000000 --- a/data/brands/suncomm.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Suncomm", - "brand_id": "suncomm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "oc-432", - "rc8230d" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/sundari.json b/data/brands/sundari.json deleted file mode 100644 index c5bd715..0000000 --- a/data/brands/sundari.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sundari", - "brand_id": "sundari", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WV2210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunell-security.json b/data/brands/sunell-security.json deleted file mode 100644 index 1990fbf..0000000 --- a/data/brands/sunell-security.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sunell Security", - "brand_id": "sunell-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BD", - "BD-Z", - "CAM01IPR54/12ND", - "IPR54/12ND", - "IPR-5440APDN", - "IPS-56", - "IPV56/41ZDR/B", - "IPVv56/41ZDR/B", - "Other", - "sn-ipv57/02efdr/b" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/snl/live/1/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/suneyes.json b/data/brands/suneyes.json deleted file mode 100644 index 34179e7..0000000 --- a/data/brands/suneyes.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "brand": "Suneyes", - "brand_id": "suneyes", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "SP-FJ01W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "702", - "Other", - "SP-HS01W", - "SP-HS02W", - "SP-HS04WR", - "SP-HS05W", - "SP-P1806SZ", - "SP-P701", - "SP-T01EWP", - "SP-V1801SW", - "SP-V1801W", - "sp-v1802w", - "SP-V1806SW", - "SP-V701W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "Q701", - "SP-P1083WP", - "SP-P1802", - "SP-P1802SWPT2", - "SP-P1802SWPTZ", - "SP-P1803SW", - "SP-P1803SWZ", - "SP-P1804SW", - "SP-P1804SWZ", - "SP-P1806SZ", - "SP-P701EWPT", - "SP-P702W", - "SP-P703W", - "SP-P901W", - "SP-Q701", - "SP-Q701W", - "SP-Q702", - "SP-TM01WP", - "SP-V1802W", - "SP-V1806SW", - "SP-V701W", - "sw-1803sw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "Other", - "SP-FJ01W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "SP-H02W", - "SP-HS02W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other", - "SP-FJ02W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "SP-FJ01W", - "SP-FJ02W", - "SP-H01W", - "SP-H02W", - "SP-HM01WP", - "SP-HS01W", - "SP-HS02W", - "SP-HS04WR", - "SP-T02WP", - "SP-TH02WP", - "SP-TM01EWP", - "SP-TM01WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other", - "SP-H01W", - "SP-H02W", - "SP-H02WP", - "SP-HS01W", - "SP-HS02W", - "SP-HS05W", - "SP-T03WP", - "SP-TM01EWP", - "SP-TM01WP", - "SP-TM06EWP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other", - "SP-FJ01W", - "SP-H01W", - "SP-H02W", - "SP-HM01WP", - "SP-T01EWP", - "SP-TH02Wp", - "SP-TH02WP", - "SP-TM01EWP", - "SP-TM01WP", - "SP-tm05wp" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "outside", - "SP-HS01W", - "SP-HS02W", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "Other", - "P703", - "SP-P1802SWPTZ", - "SP-P1803SWZ", - "SP-P701", - "SP-P701EW", - "SP-P701EWPT", - "SP-V1801W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other", - "SP-H01W", - "SP-H02W", - "SP-HS01W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "SP-H02W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SP-FJ01W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "SP-H02W", - "SP-HM01WP", - "SP-HS01W", - "SP-HS02W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "SP-H02W", - "SP-HM01WP", - "SP-HS02W", - "sp-th02w", - "SP-TH02WP", - "Sp-TM", - "SP-TM01EWP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "SP-H02W", - "SP-HS02W", - "SP-T01EWP", - "SP-T01WP", - "SP-TH02WP", - "SP-TM01EWP", - "SP-TM01WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SP-H02W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "user/videostream.cgi" - }, - { - "models": [ - "SP-H02W", - "SP-P701", - "SP-V1801W", - "suneye" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "SP-H02WP", - "SP-TH02WP", - "sp-tho2wp" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "SP-HS02W", - "sp-th02w", - "SP-TH02WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "SP-P1803SWZ", - "SP-P1804SWZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "sp-p903w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "sp-tes", - "SP-TH02WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunivision.json b/data/brands/sunivision.json deleted file mode 100644 index ab512e7..0000000 --- a/data/brands/sunivision.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Sunivision", - "brand_id": "sunivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/0" - }, - { - "models": [ - "B1012", - "Other", - "SV-B603W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "Other", - "SV-B603W", - "SW-B603W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunkwang.json b/data/brands/sunkwang.json deleted file mode 100644 index e8f24d9..0000000 --- a/data/brands/sunkwang.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Sunkwang", - "brand_id": "sunkwang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "b607w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "N190X", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "N591RP" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Unk" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Unk" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunluxy.json b/data/brands/sunluxy.json deleted file mode 100644 index 3e12d27..0000000 --- a/data/brands/sunluxy.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "brand": "Sunluxy", - "brand_id": "sunluxy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "BT464", - "BT470", - "H-264", - "HSL-111812", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "1234", - "T8809", - "T8810", - "TK-D8C4L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "8CH", - "H-264 Network DVR", - "H-264 NETWORK DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "8CH", - "H-264 NETWORK DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "8CH", - "h 265", - "H-264", - "H-264 NETWORK DVR", - "Other", - "TK-D8C4L" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "8CH", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "B015FQKJZO", - "SL-C222" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/mjpeg?res=full&x0=0&y0=0&x1=100%25&y1=100%25&quality=12&doublescan=0" - }, - { - "models": [ - "CMOS 600TVL" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/snapshot.cgi?chn=3&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Dual-HD", - "H 265", - "Netcam", - "Netcam highres", - "Other", - "SL-C702" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "h 265", - "H-264", - "H-264 NETWORK DVR", - "Other", - "TK-D8C4L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "H-264", - "HSL-111812", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H-264", - "HZCam", - "Other", - "PTZ ONVIF", - "SL-701" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ip security cam", - "SL-701", - "SL-C704", - "SL-C709", - "T8809" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "IPC_714838", - "SL-C704", - "SL-C707-4", - "SL-C708", - "SP-009", - "SP-009A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Netcam lowres", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "Other", - "SL-C704" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other", - "PTZ ONVIF", - "sl-c704", - "SUNLUXY720", - "T8809" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "SL-701" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream.cgi?stream=MainStream&Audio=1" - }, - { - "models": [ - "SL-C222" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/view.cgi?chn=1&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "T8809" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunnex.json b/data/brands/sunnex.json deleted file mode 100644 index 10a259b..0000000 --- a/data/brands/sunnex.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sunnex", - "brand_id": "sunnex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sx-ip-dm412f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunnylux.json b/data/brands/sunnylux.json deleted file mode 100644 index f3d14e7..0000000 --- a/data/brands/sunnylux.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sunnylux", - "brand_id": "sunnylux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunplus-innovation.json b/data/brands/sunplus-innovation.json deleted file mode 100644 index 5845159..0000000 --- a/data/brands/sunplus-innovation.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sunplus Innovation", - "brand_id": "sunplus-innovation", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "laptop integrated" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunsom.json b/data/brands/sunsom.json deleted file mode 100644 index 8d16aaa..0000000 --- a/data/brands/sunsom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sunsom", - "brand_id": "sunsom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "eHD 1080P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/suntek.json b/data/brands/suntek.json deleted file mode 100644 index eef2712..0000000 --- a/data/brands/suntek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Suntek", - "brand_id": "suntek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S6211Y-WR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/qvga.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunvision-us.json b/data/brands/sunvision-us.json deleted file mode 100644 index 403092c..0000000 --- a/data/brands/sunvision-us.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Sunvision Us", - "brand_id": "sunvision-us", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B603W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "B603W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/sunywo.json b/data/brands/sunywo.json deleted file mode 100644 index bdebac3..0000000 --- a/data/brands/sunywo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Sunywo", - "brand_id": "sunywo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H6EV100-N4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "JVSW0711" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "JVSW0711" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile1" - } - ] -} \ No newline at end of file diff --git a/data/brands/super-focus.json b/data/brands/super-focus.json deleted file mode 100644 index 0bbec92..0000000 --- a/data/brands/super-focus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Super Focus", - "brand_id": "super-focus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/supera.json b/data/brands/supera.json deleted file mode 100644 index 99d3af0..0000000 --- a/data/brands/supera.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Supera", - "brand_id": "supera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC 20" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ipc-1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/supercircuits.json b/data/brands/supercircuits.json deleted file mode 100644 index fd9e4bb..0000000 --- a/data/brands/supercircuits.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "brand": "Supercircuits", - "brand_id": "supercircuits", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "16-CHDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "ivop.get?action=live&THREAD_ID=" - }, - { - "models": [ - "BLK-IPS101" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "BLK-IPS101", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_unicast_firststream" - }, - { - "models": [ - "DVQ-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Getvideo.cgi?Cookie=" - }, - { - "models": [ - "NC-11", - "WL-IC2D", - "WL-IC2DV" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_unicast_secondstream" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/supereye.json b/data/brands/supereye.json deleted file mode 100644 index 5c7070a..0000000 --- a/data/brands/supereye.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Supereye", - "brand_id": "supereye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD 1080 360", - "PC200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - }, - { - "models": [ - "pc100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "pc100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "pc100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "pc100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "pc100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "pc100", - "pc200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "pc100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "pc100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=00" - }, - { - "models": [ - "PC200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=554&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/superspring.json b/data/brands/superspring.json deleted file mode 100644 index f02e923..0000000 --- a/data/brands/superspring.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Superspring", - "brand_id": "superspring", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "505", - "IP550", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/supervision.json b/data/brands/supervision.json deleted file mode 100644 index f1531de..0000000 --- a/data/brands/supervision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Supervision", - "brand_id": "supervision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SV-5804W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/supra-space.json b/data/brands/supra-space.json deleted file mode 100644 index ba53e9f..0000000 --- a/data/brands/supra-space.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "brand": "Supra Space", - "brand_id": "supra-space", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10-AC", - "1-PC1", - "IP-2", - "IPC", - "IPC-1", - "IPC-100AC", - "IPC-10A", - "IPC-10-ac", - "IPC-10AC", - "IPC-1A", - "IPC-2", - "IPC-20c", - "Other", - "SP1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ipc", - "IPC-1", - "IPC-100AC", - "IPC-10AC", - "IPC-20" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC", - "IPC-10AC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "IPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "IPC 10AC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "IPC 10AC", - "IPC-1", - "IPC-100AC", - "IPC-10A", - "IPC-1A", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC 20C", - "IPC-1", - "IPC-100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-1", - "IPC-100AC", - "IPC-10AC", - "IPC-1A", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "IPC-1", - "IPC-100AC", - "IPC-1A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPC-1", - "IPC-10AC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPC-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "IPC-1", - "IPC-10AC", - "IPC-20C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "IPC-1", - "IPC-100AC", - "IPC-10AC", - "Other", - "supra ipc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-100" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/desktop/index_framed.htm" - }, - { - "models": [ - "IPC-100 HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "ipc-100ac", - "IPC-1A", - "IPC-20" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "IPC-100ac" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IPC-100AC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IPC-1A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IPC-1A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipc-20c", - "IPC25" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ipc-20c" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "IPC-25HDC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/supvin.json b/data/brands/supvin.json deleted file mode 100644 index 3c8da6d..0000000 --- a/data/brands/supvin.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Supvin", - "brand_id": "supvin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "WIFICAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/surcomm.json b/data/brands/surcomm.json deleted file mode 100644 index 13f5d9e..0000000 --- a/data/brands/surcomm.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Surcomm", - "brand_id": "surcomm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DBC831", - "oc810", - "rc8025b" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "OC830", - "rc8025b" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/sure-eye.json b/data/brands/sure-eye.json deleted file mode 100644 index a61f34b..0000000 --- a/data/brands/sure-eye.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Sure-eye", - "brand_id": "sure-eye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "1111" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/surecom.json b/data/brands/surecom.json deleted file mode 100644 index 90065be..0000000 --- a/data/brands/surecom.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Surecom", - "brand_id": "surecom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LN-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "LN-400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=appletvstream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - } - ] -} \ No newline at end of file diff --git a/data/brands/surip-cam.json b/data/brands/surip-cam.json deleted file mode 100644 index b2a01b7..0000000 --- a/data/brands/surip-cam.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Surip Cam", - "brand_id": "surip-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "SI-H653R" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "SI-F1057R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "SRICAM AP009" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/surveilist.json b/data/brands/surveilist.json deleted file mode 100644 index f364aff..0000000 --- a/data/brands/surveilist.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Surveilist", - "brand_id": "surveilist", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAMID203", - "CAMID401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "Surveilist PTDA4XHL200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/surveon.json b/data/brands/surveon.json deleted file mode 100644 index 10f0403..0000000 --- a/data/brands/surveon.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Surveon", - "brand_id": "surveon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1320", - "1980", - "4321", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/surway-technology.json b/data/brands/surway-technology.json deleted file mode 100644 index 5fda723..0000000 --- a/data/brands/surway-technology.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Surway Technology", - "brand_id": "surway-technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-C01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/surya-net.json b/data/brands/surya-net.json deleted file mode 100644 index e33f7fe..0000000 --- a/data/brands/surya-net.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Surya-net", - "brand_id": "surya-net", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANC-606V" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/sv-b0w-720p-hx.json b/data/brands/sv-b0w-720p-hx.json deleted file mode 100644 index 5df3cfa..0000000 --- a/data/brands/sv-b0w-720p-hx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sv-b0w-720p-hx", - "brand_id": "sv-b0w-720p-hx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SV-B06W-720P-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/sv3c.json b/data/brands/sv3c.json deleted file mode 100644 index 3d835c1..0000000 --- a/data/brands/sv3c.json +++ /dev/null @@ -1,685 +0,0 @@ -{ - "brand": "Sv3c", - "brand_id": "sv3c", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10-11080P PTZ", - "1080P HD", - "1080p hx", - "1080P HX2", - "1080P M", - "1080P POE", - "1080P PTZ", - "1080P VArifocal", - "1080p Wifi Cam", - "1080ps-hx", - "135", - "136SE42", - "1861080P PTZ", - "2031080P PTZ", - "3mp", - "4k Poe", - "4mp", - "5MP POE", - "720", - "960", - "960P", - "960P HD", - "AAA3", - "admin", - "B01P0E", - "B01POE", - "B01POE-1080P", - "B01POE-5MPL-A2", - "b01w", - "B01W-960P", - "B01W-960P-HX", - "b06", - "B06POE", - "B06POE-5MP-HX", - "B06W-5MP-HX", - "b06w720hx", - "B08POE-8MP-A", - "B08W", - "B08W-5MP-HX", - "B09W-5MP:", - "B16VW-3MP-HX", - "B16VW-5MP-HX", - "B8-3MP-HX", - "bp01", - "Bullet", - "c11", - "C25-UK", - "C6F0S", - "C6F0SoZ0N0PnL2", - "C6F0SoZ3N0PfL2", - "C6F0SoZ3N0PlL2", - "D02POE-1080P", - "D02POE-1080P-L", - "D05POE-1080P-HX", - "dome", - "HD 960P", - "HD WIFI", - "HI3518EV200", - "hp1900", - "HX Series (WiFi)", - "HX02", - "HX1080P", - "idk", - "L series", - "L Series", - "MMMM-231680-AFDAE", - "Other", - "poe", - "poe 1080", - "poe hx", - "POE1080P", - "POE1081P", - "Property Entry", - "Rea", - "SC-B01-POE-1080P", - "Sco", - "SD10W", - "SD5W-1080PS-HX", - "SD7POE-8MP-HX", - "SD7W-1080PS-HX", - "sd7w-5mp-hx", - "SD8POE-5MP-HX", - "SD9W-1080P", - "sd9w-1080p-hx", - "SUPER HD 5MP", - "SV3C 5MP PTZ", - "SV3C 720P WiFi Security Camera", - "SV3C-SV-B06W", - "SV-806W-1080P", - "SV-B01-1080PL", - "SV-B01POE-1080-L", - "SV-B01POE-1080P", - "sv-b01poe-1080p-l", - "SV-B01W", - "SV-B01W-1080P", - "SV-B01W-1080P-HX", - "SV-B01W-906P", - "SVB01W-960P", - "SV-B01W-960P", - "SV-B01W-960P-HX", - "SV-B06POE-1080P-A", - "SV-B06W", - "SV-B06W-1080P", - "SV-B06W-1080P-HX", - "SV-B06W-1080P-HX", - "SV-B06W-720P", - "sv-b06w-720p-hx", - "SV-B07W-1080P-HX", - "SV-B11VPOE-1080-L", - "SV-B11VPOE-1080P", - "SV-B11VPOE-1080P-L", - "SV-BO1POE", - "SV-BO1POE-1080P", - "sv-bo1w-960p-hx", - "SV-BO6W-1080P-HX", - "SV-BO6W-720P", - "sv-bo6w-720p-hx", - "sv-d02w-720p-hx", - "sv-do2poe-1080p", - "sv-do2poe-1080p-l", - "SV-SD5W-1080PS-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1048HD PoE", - "1080", - "1080P POE", - "1080P PTZ", - "1080poe", - "3mp", - "5MP", - "AO2 8mp", - "B06POE", - "B08POE", - "B08POE-5MPL-A", - "bo1poe-3mpl-A", - "D02POE-1080P", - "D02POE-3mpl-a", - "D1080POE", - "Other", - "sd9w-1080p", - "SV-B01POE-5MPL-A", - "SV-B08POE-5MPL-A", - "SV-DO2POE-1080P-L", - "sw9d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "1080", - "1080p", - "1080P hd", - "1080P HX", - "1080P POE", - "1080P WIFI CAM", - "1080POE", - "5MP PTZ", - "720P", - "790p", - "960P", - "B02W-720P", - "B06", - "B06W", - "B06W HX", - "B06W-5MP-HX-2", - "b06w-720p", - "B08W-5MP-HX", - "B09W-5MP", - "BULLET", - "C6F0SEZ3N0P6L2", - "hd 960p", - "hd camera", - "HD WIFI", - "HX Series", - "HX1080p", - "Other", - "ptz", - "SD5W-1080PS-HX", - "SV-806W-1080P", - "SV-B01W", - "SV-B01W-906P", - "sv-b01w-960-p", - "SVB01W-960P", - "SV-B01W-960P", - "SV-B01W-960P ndm", - "SV-B02W", - "SV-B06POE-5MP HX", - "SV-B06w", - "SV-B06W-1080P-HX", - "SV-B06W-720P", - "SV-B06W-720P-HX", - "sv-b07", - "sv-bo1poe-1080pl" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080", - "5MP PTZ", - "B08POE-8MP-A", - "Dome", - "SD8W-5MP-HX", - "sv3c 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0" - }, - { - "models": [ - "1080", - "1080P HD", - "1080P PTZ", - "B01P0E", - "HX1080P", - "Other", - "SV-B01POE-5MPL-A", - "SV-B06POE-4MP-A", - "SV-D02POE-5mp", - "SV-DO2POE-1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "1080P", - "1080P WIFI CAM", - "960P", - "abc", - "B08W", - "BULLET", - "HD WIFI", - "Other", - "ptz", - "SV-301W-960P-JP", - "sv3c HD 960p", - "SV-B01W", - "SV-B01W-1080o", - "SV-B01W-1080P", - "sv-b06w-720-hx", - "SV-B06W-720P", - "SV-B06W-720P-HX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1080P", - "1080p hx", - "720P", - "B01POE-5MPL-A", - "B06W HX", - "B06W-5MP-HX", - "B08POE-8MP-A", - "B09W-5MP:", - "C10", - "C13-2", - "C15", - "C25-UK", - "HX02", - "mega pixel", - "N series", - "Other", - "SD10W-5MP", - "SD8W-5MP-HX", - "SD9W-1080P", - "SV3C 5MP", - "SV3C 5MP PTZ", - "SV-B01W-960P-HX", - "SV-B06w", - "sv-bo6w-720p-hx", - "SV-BO6W-720P-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "1080P HD", - "B06", - "SVB06POE", - "SV-D13POE-5MPL-A" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi" - }, - { - "models": [ - "1080P HD", - "Other", - "SV-B01POE-5MPL-T" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080P HD", - "1080P POE", - "B01POE-5MPL-T", - "B08POE-5MPL-A", - "BO8POE", - "D02POE-1080P", - "Other", - "poe", - "sv-b06poe-1080p", - "SV-DO2POE-1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "1080P HD", - "1080P POE", - "4MP", - "H.265", - "Other", - "sv-b01poe-5mpl-t", - "SV-BO1POE-1080P", - "SV-DO2POE-1080P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1080P HD", - "B01POE-5MPL-T" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080p hx" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "1080P POE", - "Other", - "SD6W-1080ps-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/TTTT-748045-HBNGS:ChickensRock21/main" - }, - { - "models": [ - "1080P POE", - "SD8W-5MP-HX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/IPCAM:Summer_2021/main" - }, - { - "models": [ - "1080P POE", - "Super HD 5MP", - "SV-B01POE-5MPL-A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "1080P POE", - "sv3c HD 960p", - "SV-B01W-1080P-HX", - "sv-b06poe-1080p", - "SV-B06POE-1080P-A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "1080P POE", - "SVB06POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "1080P POE", - "960P", - "L series", - "SV-B01W-960P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1080P POE", - "960P", - "SV-B01W", - "SVB01W-960P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "1080P POE", - "B01POE-5MPL-A", - "B06POE", - "D02POE-3MPL-A", - "H.265", - "SV-B01POE-1080-L", - "SV-B01POE-5MPL-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/1/mpeg4/1" - }, - { - "models": [ - "1080P POE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "admin/cgi-bin/getstream.cgi?10&&&&&0&0&0&0" - }, - { - "models": [ - "1080P POE", - "hd wifi", - "SV-B01W", - "SV-B06W-720P-HX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080P POE", - "1080P PTZ", - "HD06-1080p", - "l series", - "SD5W-1080PS-HX", - "SD8W-5MP-HX", - "SV-B06W", - "SV-B06W-720P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "1080P PTZ", - "sv3c 5MP", - "SV-B01POE-5MPL-A", - "SV-D13POE-5MPL-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "2K WiFi Security Camera Outdoor", - "5MP PTZ", - "c16 cloud", - "c18", - "C19", - "PTZ 5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "720", - "SV-B01W-906P", - "SV-D02W-960P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "960P", - "SV-B01W-960P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "A series" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "B01POE-5MPL-A2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/1/mpeg4/1" - }, - { - "models": [ - "B08POE-8MP-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "B10POE-5MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "BULLET" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "Other", - "SV-B01POE-5MPL-T" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "SD10W-5MP", - "SD8W-5MP-HX" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "SD8POE-5MP-HX", - "SV3C HX", - "SVB06POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SV-301W-960P-JP", - "SV3C 720P WiFi Security Camera", - "SV3C-SV-B06W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "sv3c HD 960p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/admin/cgi-bin/getstream.cgi?10&&&&&0&0&0&0" - }, - { - "models": [ - "SV-B01W-960P" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "sv-b06poe-1080p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "sv-b06poe-1080p" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/sv3p.json b/data/brands/sv3p.json deleted file mode 100644 index ad52a62..0000000 --- a/data/brands/sv3p.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Sv3p", - "brand_id": "sv3p", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SV-B02W-720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "SV-B06PoE-1080P-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/svat.json b/data/brands/svat.json deleted file mode 100644 index 0328e26..0000000 --- a/data/brands/svat.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Svat", - "brand_id": "svat", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CV-500" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetStream.cgi?Video=[CHANNEL]" - }, - { - "models": [ - "CV-501", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/svb-international.json b/data/brands/svb-international.json deleted file mode 100644 index c4cf1b8..0000000 --- a/data/brands/svb-international.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Svb International", - "brand_id": "svb-international", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SIP-018262-RYERR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SIP-018262-RYERR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/svbc.json b/data/brands/svbc.json deleted file mode 100644 index 92596f4..0000000 --- a/data/brands/svbc.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Svbc", - "brand_id": "svbc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A Series", - "Sv3c", - "SV-B01POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "B06W-720P-HX", - "B08W-5MP-HX", - "Eas", - "Other", - "SV3C", - "SV-B01-960P", - "SV-B01W-1080p-HX", - "sv-b05w-5mp-hx", - "SV-B11vPOE-1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "SAEU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/svc.json b/data/brands/svc.json deleted file mode 100644 index 45df9aa..0000000 --- a/data/brands/svc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Svc", - "brand_id": "svc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sve3.json b/data/brands/sve3.json deleted file mode 100644 index 1a74b7d..0000000 --- a/data/brands/sve3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Sve3", - "brand_id": "sve3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hdcamera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/svec.json b/data/brands/svec.json deleted file mode 100644 index 45ab26f..0000000 --- a/data/brands/svec.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Svec", - "brand_id": "svec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720phx", - "B01POE-4MP-HX", - "sv3c poe 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/svi.json b/data/brands/svi.json deleted file mode 100644 index b6bbfbc..0000000 --- a/data/brands/svi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Svi", - "brand_id": "svi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "SVIP-432" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/svision-co.json b/data/brands/svision-co.json deleted file mode 100644 index 13a374d..0000000 --- a/data/brands/svision-co.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Svision Co", - "brand_id": "svision-co", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "idk" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 34567, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/svn.json b/data/brands/svn.json deleted file mode 100644 index f41fbfa..0000000 --- a/data/brands/svn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Svn", - "brand_id": "svn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "500SB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/svplus.json b/data/brands/svplus.json deleted file mode 100644 index f5f1236..0000000 --- a/data/brands/svplus.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Svplus", - "brand_id": "svplus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SVIP PT100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "SVIP-432P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sw360.json b/data/brands/sw360.json deleted file mode 100644 index 6ef95f2..0000000 --- a/data/brands/sw360.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Sw360", - "brand_id": "sw360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CIP-37186AT", - "CIP-39218KL" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "CIP-39218AT", - "IP66" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/swann.json b/data/brands/swann.json deleted file mode 100644 index 56376c0..0000000 --- a/data/brands/swann.json +++ /dev/null @@ -1,1355 +0,0 @@ -{ - "brand": "Swann", - "brand_id": "swann", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL+1]02" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/[CHANNEL]02" - }, - { - "models": [ - "005FTCD", - "440-IPC", - "ADS-440", - "ADS-440_VLC", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "005FTCD", - "440", - "440-IPC", - "ADS-440", - "Other", - "SWADS-440-IPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080msb", - "5580", - "swanncamHD 830", - "SWIFI-PTCAM2", - "swifi-spotcam", - "SWNHD-830CAM" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch04/1" - }, - { - "models": [ - "1080msb", - "1590", - "8580", - "875", - "885F", - "886", - "887 MSB", - "888", - "900pt", - "DV84780", - "DVR8-5580RN", - "DVR8-5680RN", - "NHD-865", - "NHD-865MSB", - "NHD-887FN", - "NHD-900BE", - "Other", - "swifi-4kflocam", - "SWIFI-FLOCAM2", - "SWIFI-FLOCAMB-AU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/1" - }, - { - "models": [ - "1080msb", - "4575", - "885F", - "8ch 3MP NVR", - "DVR4-4500", - "DVR4-4580RN", - "DVR8-5580RN", - "DVR8-5680RN", - "NHD-887FN", - "NHD-887MSFB", - "NVR8-8580" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch02/0" - }, - { - "models": [ - "1080p", - "880", - "Alertcam", - "ALERT-CAM", - "DVR 4680", - "floodLigth", - "NHD-850CAM", - "Other", - "SpotCAM", - "SWADS-446-CAM", - "SWADS-450-IPC", - "SWANHD-830", - "SWIFI", - "swifi-corecam", - "SWIFI-FLOCAM2", - "SWIFI-PTCAM2", - "SWNHD-800CAM", - "SWNHD-806CAM", - "SWNHD-820CAM", - "SWNHD-830CAM", - "SWWHD-FLOCAM", - "SWWHD-INTCAM-US", - "SWWHD-OUTCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "111WP", - "ip1000", - "Other", - "SW111-UIP", - "SW111-wip", - "SW111-WIP-21030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "1590", - "875", - "DVR8-4900", - "NVR8-8580" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch07/0" - }, - { - "models": [ - "2009" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "2KOCAM", - "DVR8 5580 RTSP", - "DVR8-4780", - "NVR8-8580", - "Other", - "SWIFI-2KOCAM", - "swifi-4kflocam", - "SWIFI-PTCAM2", - "swifi-spotcam", - "SWWHD-FLOCAM", - "SWWHD-INTCAM-AU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch06/0" - }, - { - "models": [ - "440", - "440abaj", - "440-IPC", - "ADS-440", - "ADS440Other", - "ADS-440-PTZ", - "AJ-COWA-C116", - "Other", - "SWAD 440IPC", - "swads-440", - "SWADS-440IPC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "440", - "440-IPC", - "ADS-440", - "SWADS-440-IPC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "440", - "440-IPC", - "ADS-440", - "ADS-440-PTZ", - "Other", - "SWADS-440-IPC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "440", - "ADS-440", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "440", - "440-IPC", - "ADS440", - "ADS-440-PTZ", - "Other", - "SWADS-440-IPC", - "SwannEye" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "440", - "IP-3G", - "IP3G connect cam", - "Other", - "Other0", - "RTSP(TCP) DVR", - "SW111-UIP", - "SW111-WIP-21030" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "440", - "440-IPC", - "540d04w", - "ADS-440", - "ADS-440_VLC", - "ADS-440-PTZ", - "Other", - "SWADS-440-IPC", - "SWADS-440-PTZ", - "SwannEye" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "440", - "440-IPC-2", - "446-IPC", - "456", - "ADS446", - "ADS-446CAM", - "FloodCam", - "flood-Light", - "light", - "NHD-850CAM", - "nhd-851", - "Other", - "Outcam", - "RTSP(TCP) DVR", - "Spotcam", - "SVC01K", - "SWADS-446-CAM", - "SWADS-466CAM", - "SWIFI", - "SWIFI-ALERTCAM", - "SWIFI-FLOCAM2", - "SWIFI-SPOTCAM", - "SWWHD-OUTCAM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "440", - "max ip", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "440", - "440-IPC", - "ADS-440", - "ADS-440-PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "440", - "446", - "460", - "470", - "470CAM", - "815", - "ADS-466CAM", - "N-470CAM", - "NHD-806", - "NVW-470CAM", - "Other", - "PAT160", - "SRNHD-815", - "SWIFI", - "Swifi-alertcam", - "SWIFI-PTCAM2", - "SWIFI-SPOTCAM", - "SWNHD-825CAM", - "SWNHD-830CAM", - "SWO-SVC02K", - "SWWHD-PTCAM", - "SWWHD-PTCAM160", - "SW-WIFIPT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_sub" - }, - { - "models": [ - "4400" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "440-IPC", - "ADS-440", - "ADS-440-PTZ", - "SWADS-440-IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "440-IPC", - "ADS-440", - "ADS-CAMAX1", - "Other", - "SWADS-440IPC", - "SWADS-466-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "440-IPC", - "ADS-440", - "Other", - "SWADS-440-IPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "440-IPC", - "ADS-440-PTZ", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "440-IPC", - "SWADS-440-IPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "440-IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "440-IPC", - "450", - "Other", - "SWNHD-825CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "440-IPC", - "450", - "ADS-440", - "ADS-450", - "Other", - "RTSP(TCP) DVR", - "SWADS-440-IPC", - "SWADS-450-IPC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "4480" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch04/01" - }, - { - "models": [ - "4575", - "4860", - "885F", - "886", - "888", - "900pt", - "DVR4-4580RN", - "DVR8-1500", - "DVR8-4575", - "DVR8-4680", - "DVR8-5580", - "DVR8-5680RN", - "NHD 880", - "nhd-851", - "NHD-865", - "NHD-865MSB", - "NHD-886MSD", - "NHD-887", - "nhd-900be", - "NHD-900DE", - "SWIFI-FLOCAM2", - "SWIFI-SPOTCAM", - "SWNHD-888MSD-US", - "SW-WIFISPOTCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01/0" - }, - { - "models": [ - "4575", - "DVR8-5680RN", - "NVR", - "NVR8-8580" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch03/0" - }, - { - "models": [ - "460", - "815", - "818", - "entranc3", - "flood-Light", - "HD 815 3MP", - "HD-815", - "ipc-bo", - "NHD-806", - "NHD-850CAM", - "NHD-880", - "nvr16-7090", - "NVR-7200", - "ramce", - "Shed", - "SPOTCAM", - "SRNHD-815", - "SWIFI-SPOTCAM", - "SWNHD-806CAM", - "swnhd-816cam", - "SWNHD-825CAM", - "SWPTCAM", - "SWWHD-PTCAM", - "SW-WIFIPT", - "Xtreem" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "5580", - "885F", - "SWNHD-888MSD-US" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch02/1" - }, - { - "models": [ - "5580", - "NHD-888N" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch03/1" - }, - { - "models": [ - "5580" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch05/1" - }, - { - "models": [ - "887" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "ads440", - "ADS-CAMAX1", - "SWADS-440IPC-AU", - "SWANNEYE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ADS440", - "SWADS-440-IPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "ADS-440", - "ADS-440-PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "ADS-440-PTZ", - "ADS-446", - "DVR8-1500", - "DVR8-4900", - "NVR-7200", - "Other", - "SWADS-446-CAM", - "SWADS-456-CAM", - "SWADS-466CAM", - "SWANHD-830", - "Swifi", - "swifi-spotcam", - "swnhd 800cam", - "SWNHD-820CAM", - "SWNHD-825CAM", - "SWNHD-830CAM", - "SWO-SVC01K", - "SW-WIFIPT", - "SW-WIFISPOTCAM", - "WIFI-PT", - "XTREEM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "ADS-440-PTZ", - "WIFI-PT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "ADS-440-PTZ" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "ADS-440-PTZ", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "ADS-440-PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "ADS-440-PTZ", - "SWADS-440IPC-AU" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "ADS-450", - "WIFI-PT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ADS-450" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "ADS-CAMAX1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "AV8185DN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "C3MPCAM", - "SWIFI-FLOCAM2", - "SWNHD-820CAM", - "SWWHD-OUTCAM", - "Wifi Spot Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "DM-299", - "dvr8-4850v", - "Exir Bullet", - "NHD-836CAM", - "NHD-850CAM", - "nhd-851", - "NHD-865", - "Spotcam", - "SR-SVC01K", - "SWIFI", - "Swifi-alertcam", - "SWIFI-BUDDY", - "SWIFI-FLOCAM2", - "SWIFI-FLOCAM2W-EU", - "SWIFI-PTCAM232GB", - "swifi-spotcam", - "SWIFI-TRACKCM32GB", - "SWNHD-820CAM", - "SWO-SVC02K", - "SWWHD-FLOCAM", - "SWWHD-FLOCAM-US", - "SWWHD-INTCAM-US", - "Wifi Spot Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264" - }, - { - "models": [ - "DV84780" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch00/0" - }, - { - "models": [ - "DV8-4780", - "DVR8-4580V", - "DVR8-5580", - "HDDVR" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch04/0" - }, - { - "models": [ - "DVR W/ WEB PORT", - "DVR4-4500", - "DVR8-4500", - "DVR8-4900", - "SPCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/401" - }, - { - "models": [ - "DVR4", - "DVR8-4500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/101" - }, - { - "models": [ - "DVR4", - "Other", - "SWNHD-825CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "DVR4-720P", - "DVR8-1525", - "dvr8-4580g", - "dvr9-1425", - "nvr16-7090", - "NVR-7200", - "NVR8-7400", - "swann adw=410" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "DVR8-4500", - "DVR8-4900" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/201" - }, - { - "models": [ - "DVR8-4500", - "DVR8-4580V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch08/0" - }, - { - "models": [ - "DVR8-4580G", - "SWIFI-BUDDY", - "SWIFT-ALERTCAM", - "SWWHD-OUTCAM", - "SW-WIFISPOTCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "DVR8-4580NR", - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/main/av_stream" - }, - { - "models": [ - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/sub/av_stream" - }, - { - "models": [ - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch2/sub/av_stream" - }, - { - "models": [ - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch3/sub/av_stream" - }, - { - "models": [ - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch2/main/av_stream" - }, - { - "models": [ - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch3/main/av_stream" - }, - { - "models": [ - "DVR8-4580RN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch4/main/av_stream" - }, - { - "models": [ - "DVR8-4680xc8", - "SWIFI-ALERTCAM", - "SWWHD-INTCAM-AU", - "SWWHD-INTCAM-US", - "VDD16KATLD9BDJDG111A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8282, - "url": "/12" - }, - { - "models": [ - "DVR8-5580", - "Spotcam", - "Swann Buddy Video Doorbell", - "swifi spotcam", - "SWIFI-ALERTCAM-EU", - "SWIFI-SPOTCAM", - "SWWHD-INTCAM-US", - "WIFISPOTCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "DVR8-5680RN", - "NVR8-8580" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch06/1" - }, - { - "models": [ - "GS3500", - "OUTCAM", - "pro-t852CAM", - "SWADS456", - "SWIFI", - "swifi spotcam", - "SWIFI-ALERTCAM", - "swifi-spotcam", - "SWWHD-OUTCAM", - "Wifi Spot Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "IP-3g ConnectCamm 3000" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/jpg/image.cgi" - }, - { - "models": [ - "NHD 880", - "Other", - "SWADS-446-CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NHD-1200BE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsp/streaming?channel=6&subtype=0" - }, - { - "models": [ - "NHD-887" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/index.html?" - }, - { - "models": [ - "NHD-900BE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsp/streaming?channel=8&subtype=0" - }, - { - "models": [ - "NHD-900PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsp/streaming?channel=11&subtype=0" - }, - { - "models": [ - "nvr16-7090" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channel1/102" - }, - { - "models": [ - "nvr16-7090", - "SWIFI-PTCAM2" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Camera%201/Channel1/1" - }, - { - "models": [ - "Other", - "swifi-spotcam", - "SWWHD-OUTCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/HD1080P" - }, - { - "models": [ - "Other", - "SWK-2550" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Getvideo.cgi?Cookie=" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/Stream?Video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other", - "SWADS-446-CAM", - "SWADS-466-CAM", - "swifi-spotcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "Other", - "RTSP(TCP) DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "SWADS-440UIPC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "SWADS-446-CAM", - "SWO-SVC02K", - "SWWHD-OUTCAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "7-12", - "8ch 3MP NVR", - "dv8-3425", - "DVR w/ Web Port", - "DVR W/ WEB PORT", - "DVR4 4350", - "DVR8", - "DVR8-4900", - "DVR8-8050", - "DVR8-8075", - "HDR8050", - "lv-9808", - "NHD-850CAM", - "NHH-880CAM", - "nvr16-7090", - "NVR-7200", - "Other", - "SWIFI-FLOCAM2", - "swifi-spotcam", - "SWIFI-XTRCAM", - "SWWHD-OUTCAM", - "T855" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "880", - "DVR4 4350", - "DVR8-1500", - "DVR8-1525", - "DVR8-4500", - "DVR8-4900", - "HDR8050", - "lv-9808", - "NHD-850CAM", - "nvr16-7090", - "NVR-7200", - "Other", - "SPOTCAM", - "WIFI-PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "DVR W/ WEB PORT", - "DVR4 4350", - "DVR8-8075", - "lv-9808", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "DVR-1500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/701" - }, - { - "models": [ - "DVR-1500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/601" - }, - { - "models": [ - "DVR8-4500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/301" - } - ] -} \ No newline at end of file diff --git a/data/brands/sweex.json b/data/brands/sweex.json deleted file mode 100644 index 04b6c3a..0000000 --- a/data/brands/sweex.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Sweex", - "brand_id": "sweex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Network Camera" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "IP Network Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP Network Camera" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "IP Network Camera" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "IP NETWORK CAMERA", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/swibe.json b/data/brands/swibe.json deleted file mode 100644 index 7dd6516..0000000 --- a/data/brands/swibe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Swibe", - "brand_id": "swibe", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Detect" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/swnhd-800cam.json b/data/brands/swnhd-800cam.json deleted file mode 100644 index 58f2fcf..0000000 --- a/data/brands/swnhd-800cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Swnhd-800cam", - "brand_id": "swnhd-800cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/sy2l.json b/data/brands/sy2l.json deleted file mode 100644 index 66e0103..0000000 --- a/data/brands/sy2l.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Sy2l", - "brand_id": "sy2l", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "sy8001-wr", - "SY8001-WR", - "sy8002f" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "720p", - "960P", - "SY8001", - "SY8001-MR", - "sy8001-wr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "960P", - "Other", - "sy8001" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/sygonix.json b/data/brands/sygonix.json deleted file mode 100644 index 2870d11..0000000 --- a/data/brands/sygonix.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "brand": "Sygonix", - "brand_id": "sygonix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "43171S", - "43558A", - "F18918W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "43171S", - "F18903W", - "F18918W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "43176A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "43176A", - "43558A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "43176A", - "43176Y", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "43176S", - "43176Y", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v01" - }, - { - "models": [ - "FI8904W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/v01" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/symynelec.json b/data/brands/symynelec.json deleted file mode 100644 index cce23a7..0000000 --- a/data/brands/symynelec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Symynelec", - "brand_id": "symynelec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Smart Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "v380pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/syneye.json b/data/brands/syneye.json deleted file mode 100644 index 49f6198..0000000 --- a/data/brands/syneye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Syneye", - "brand_id": "syneye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "sh02" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/synshore.json b/data/brands/synshore.json deleted file mode 100644 index 8759515..0000000 --- a/data/brands/synshore.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Synshore", - "brand_id": "synshore", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/syny-snc.json b/data/brands/syny-snc.json deleted file mode 100644 index 90aa947..0000000 --- a/data/brands/syny-snc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Syny-snc", - "brand_id": "syny-snc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RZ25P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "oneshotimage.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/syokudou.json b/data/brands/syokudou.json deleted file mode 100644 index 78db34b..0000000 --- a/data/brands/syokudou.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Syokudou", - "brand_id": "syokudou", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BB-HCM580" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/syscom-cctv.json b/data/brands/syscom-cctv.json deleted file mode 100644 index 42cf0ce..0000000 --- a/data/brands/syscom-cctv.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Syscom Cctv", - "brand_id": "syscom-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Cube", - "Cubeip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/systemmax.json b/data/brands/systemmax.json deleted file mode 100644 index 7333747..0000000 --- a/data/brands/systemmax.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Systemmax", - "brand_id": "systemmax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N-1350", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "SMB-2MPIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/systoda.json b/data/brands/systoda.json deleted file mode 100644 index 8a4d2b7..0000000 --- a/data/brands/systoda.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Systoda", - "brand_id": "systoda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SY-1500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/szneo.json b/data/brands/szneo.json deleted file mode 100644 index ad03fa0..0000000 --- a/data/brands/szneo.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "brand": "Szneo", - "brand_id": "szneo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C-32FX", - "CoolCam", - "COOLCAM", - "NIP-16", - "Nip-31 (L2J)", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CAM0X", - "NIP", - "NIP-0", - "NIP-02", - "NIP-12", - "NIP-20", - "NIP-210485-ABABC", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "CoolCam", - "NIP", - "NIP-06", - "NIP-31", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CoolCam", - "NIP", - "NIP-02", - "NIP-12" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-031", - "NIP", - "NIP-02", - "NIP-031", - "NIP-06", - "NIP-070291-RKJMC", - "NIP-11", - "NIP-12OAM", - "NIP-146342-CDCEE", - "NIP-210485-ABABC", - "NIP-254930-EAFFB", - "NIP-H20", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-603P", - "NHP-09Z", - "NIP", - "NIP-02", - "NIP-031", - "NIP-12", - "NIP-X", - "NIT", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "NI-36L2J", - "NIP-20", - "NIP-22L2J", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NIP", - "NIP-09", - "NIP-20", - "NIP-26", - "NIP-H20", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "NIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "NIP", - "NIP-02", - "NIP-06", - "NIP-12", - "NIP-2", - "NIP-26", - "Other", - "TFD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP", - "NIP-02", - "NIP-06", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP", - "NIP-02", - "NIP-031", - "NIP-031H", - "NIP-20", - "NIP-X", - "NP-254095", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP", - "NIP-031H", - "NIP-22L2J", - "NIP-31", - "NOP-16", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "NIP-02" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "NIP-02" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NIP-02", - "NIP-09", - "NIP-9", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "NIP-02", - "NIP-05BW", - "NIP-12-320", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "NIP-031", - "NOP-16", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "NIP-05BW", - "NIP-09z", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "NIP-12" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "NIP-16" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "NIP-31" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "NIP-31(L2J)" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NIP-36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "NOP-16", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/szsinocam.json b/data/brands/szsinocam.json deleted file mode 100644 index c9e2a84..0000000 --- a/data/brands/szsinocam.json +++ /dev/null @@ -1,424 +0,0 @@ -{ - "brand": "Szsinocam", - "brand_id": "szsinocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.0 ip", - "1.0 omp ip camera", - "2.0 MP IP CAMERA", - "720P", - "720p Wifi Onvif", - "794d6e", - "IPC-5030BSW-UK", - "Other", - "P2P IP", - "SN-IPC 5033SW-UK", - "sn-ipc-3008", - "SN-IPC-4015SW-UK", - "SN-IPC-5023CSWF", - "SN-IPC-5030BSW-AU", - "SN-IPC-5032CSW", - "SN-IPC-5033SW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - }, - { - "models": [ - "1.0 IP", - "1.0 OMP IP CAMERA", - "1.0MP IP CAMERA", - "1mp", - "1MP CAM", - "1MP IP CAM", - "1MP IP CAMERA", - "2.0 MP IP CAMERA", - "2mp F20M", - "2MP F20M", - "5001s", - "5033SW", - "5033sw-uk", - "5033SWUS", - "562410", - "720P", - "720P WIFI ONVIF", - "C6F0SeZ3N0P5L0", - "C6F0SGZ0N0P0L0", - "C6F0SGZ3N0P6L2", - "C9F0SeZ3N0P8L0", - "H.264", - "H264", - "IPC-4024", - "IPC-4036SW", - "IPC-5030", - "IPC-5030BSW-EU", - "IPC-5030BSW-UK", - "IPC-5030CSW-UK", - "IPC-5033-SW-EU", - "IP-CAM", - "IPC-F20M", - "IPC-HR05", - "Other", - "P2P IP", - "PC-5033SW-UK", - "SN - IPC - 3009FCSW20", - "SN - IPC - HW07 - UK", - "SN- IPC 5033SW-W-UK", - "SN6408CW", - "SN-IPC 5033w", - "SN-IPC-4003", - "SN-IPC-4015SW-UK", - "sn-ipc-5030bsw-uk", - "SN-IPC-5030SW", - "SN-IPC-5033CSW-AU", - "SN-IPC-5033CSW-US", - "SN-IPC-5033SW", - "sn-IPC5033SW-eu", - "SN-IPC-5033SW-EU", - "SN-IPC-5033SW-UK", - "SN-IPC5034CSW-UK", - "sn-ipc-5034sw", - "SN-IPC-7042CSW-UK", - "SN-IPC-9031A-POE", - "SN-IPC-HW14", - "SN-IPC-HW16", - "sn-ipc-hw20", - "zzzz-531097-fbaec" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "1.0 IP", - "1.0 OMP IP CAMERA", - "1MP IP CAM", - "1MP IP CAMERA", - "2", - "0 ip", - "2.0 MP IP CAMERA", - "5033SW", - "5033SW-UK", - "720P", - "720P WIFI ONVIF", - "7889BF", - "C6F0SgZ0N0P0L0", - "C6F0SgZ3N0P6L2", - "gb-204", - "H.264", - "IP 2MP CAM", - "IPC-5030BSW-UK", - "IPC-5030CSW-UK", - "IPC-5033-SW", - "ONVI", - "Other", - "pc-5033sw-uk", - "SINOCAM", - "SN- IPC 5033SW-W-UK", - "SN", - "IPC.5030CSW-UK", - "SN.IPC.5030CSW.UK", - "SN.IPC.5030CSW-UK", - "SN-HSP-4007W20", - "SN-IPC", - "SN-IPC 5033SW-UK", - "SNIPC3010FCSW20-au", - "SNIPC3010FCSW20-UK", - "SN-IPC-3010FCSW-UK", - "SN-IPC-3010FCW20-UK", - "SN-IPC-4015SW-UK", - "SN-IPC-4036CSW-UK", - "SN-IPC-4036SW-AU", - "sn-ipc-5030bsw-uk", - "sn-ipc-5030csw", - "SN-IPC-5030CSW-UK", - "SN-IPC-5031CSW", - "SN-IPC-5033CSW-AU", - "SN-IPC-5033CSW-us", - "SN-IPC-5033SW", - "sn-IPC5033SW-eu", - "SN-IPC-5033SW-EU", - "sn-ipc-503530 uk", - "SN-IPC-HW14", - "SN-IPC-HW16", - "Wifi bullet cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1.0 IP", - "1MP IP CAMERA", - "5033", - "720P WIFI ONVIF", - "IPC-5033-SW", - "Other", - "SN-IPC-5033SW", - "SN-IPC-5033SW-EU", - "SN-IPC-5033SW-uk", - "sn-ipc-503530 uk" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "1.0 IP", - "1.0 OMP IP CAMERA", - "1MP IP CAMERA", - "2.0 MP IP CAMERA", - "720P WIFI ONVIF", - "C6F0SgZ3N0P5L2", - "fullhd", - "IPC-5033-SW", - "IP-CAM", - "sn-hsp-ht05", - "SN-IPC 5033SW-UK", - "SN-IPC 5033SW-W-UK", - "SN-IPC-4015SW-UK", - "SN-IPC-5033SW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "1.0 IP", - "1.0 OMP IP CAMERA", - "IPC-HR01", - "SN - IPC - 3009FCSW20", - "SN-IPC 5033SW-UK", - "SN-IPC-3002FSW10", - "SN-IPC-6006e10", - "SN-IPC-HR01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "1.0 OMP IP CAMERA", - "1MP IP CAM", - "1MP IP CAMERA", - "2.0 MP IP CAMERA", - "4036", - "5024sw", - "5033SW", - "720p", - "720P WIFI ONVIF", - "7889BF", - "Cam5", - "cheap 2mp", - "gross", - "IP 2MP CAM", - "IPC-5029", - "IPC-5030BSW-EU", - "ipc-5030BSW-UK", - "ipc-5033-sw", - "IPC-5033-SW-EU", - "ONVI", - "Other", - "P2P IP", - "SN- IPC 5033SW-W-UK", - "SN IPC 5042CSW", - "sn-ipc 5033sw-uk", - "SN-IPC 5033SW-WI-UK", - "SN-IPC-3008FCW-AU", - "sn-ipc-4014sw-au", - "SN-IPC-4015SW-AU", - "SN-IPC-4015SW-UK", - "SN-IPC-4036SW-AU", - "sn-ipc-5033sw", - "SN-IPC5033SW-WI-UK", - "SN-IPC5034CSW-UK", - "SN-IPC-7042CSW-UK", - "sn-ipc-8107cs-uk", - "szscam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "1.0 OMP IP CAMERA", - "1MP IP CAM", - "IPC-5030BSW-UK", - "Other", - "sn-ipc-5033sw", - "sn-ipc-5033sw-us", - "sn-ipc-503530 uk", - "sn-ipc-5633sw-us" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1MP CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "1MP IP CAM", - "2.0 MP IP CAMERA", - "5033", - "5033SW", - "720P WIFI ONVIF", - "IP 2MP CAM", - "Other", - "SN- IPC 5033SW-W-UK", - "SN-IPC 5033SW-UK", - "SN-IPC 5033SW-WI-UK", - "SN-IPC-4015SW-UK", - "SN-IPC5030CSW-UK", - "SN-IPC-5033CSW-AU", - "SN-IPC-5033SW", - "SN-IPC5034CSW-UK", - "SN-IPC5034SW-UK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/12" - }, - { - "models": [ - "1MP IP CAMERA", - "sn-ipc-5030bsw-uk", - "sn-ipc-5032csw" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "2.0 MP IP CAMERA", - "SN-IPC-6004E10", - "SZSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "5033", - "5033SW", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "C6F0SeZ0N0P3L0", - "IPC-3008FCSW20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "IP 2MP CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IPCA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "kw 905" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "SN - IPC - 3009FCSW20" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "SN-IPC-5033CSW-AU" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "sn-ipc-5033sw" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/1/video.mjpg" - }, - { - "models": [ - "sn-ipc-hr01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SZSCAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/t.one.json b/data/brands/t.one.json deleted file mode 100644 index 9146a8e..0000000 --- a/data/brands/t.one.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "T.one", - "brand_id": "t.one", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "tn0020" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/taber.json b/data/brands/taber.json deleted file mode 100644 index be9d118..0000000 --- a/data/brands/taber.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Taber", - "brand_id": "taber", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p Dual Light Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "8115" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/takaovi.json b/data/brands/takaovi.json deleted file mode 100644 index f3ca292..0000000 --- a/data/brands/takaovi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Takaovi", - "brand_id": "takaovi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "mpeg4/media.amp?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/taller.json b/data/brands/taller.json deleted file mode 100644 index 8b8b4b4..0000000 --- a/data/brands/taller.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Taller", - "brand_id": "taller", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C320WS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/talos-security.json b/data/brands/talos-security.json deleted file mode 100644 index 225a3f3..0000000 --- a/data/brands/talos-security.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Talos Security", - "brand_id": "talos-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Camera H264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "IP Camera H264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP Camera H264" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/talos.json b/data/brands/talos.json deleted file mode 100644 index 5b24ef8..0000000 --- a/data/brands/talos.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Talos", - "brand_id": "talos", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D1082PN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/tank.json b/data/brands/tank.json deleted file mode 100644 index 90f2ceb..0000000 --- a/data/brands/tank.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tank", - "brand_id": "tank", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6025" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tapo.json b/data/brands/tapo.json deleted file mode 100644 index cec4754..0000000 --- a/data/brands/tapo.json +++ /dev/null @@ -1,631 +0,0 @@ -{ - "brand": "Tapo", - "brand_id": "tapo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "15C200", - "200", - "210", - "211", - "220", - "3.20", - "310", - "310C", - "320ws", - "325WB", - "420", - "500c", - "510", - "510W", - "520SW", - "520ws", - "5326", - "950 A", - "apiha2", - "aTC70", - "c 510W", - "c100", - "C100", - "C101", - "c1030", - "C110", - "C111", - "c113", - "C120", - "c120b", - "C121", - "C125", - "c200", - "C200", - "C200C", - "c201", - "C202", - "c210", - "C210", - "C210P2", - "C211", - "C211-2k", - "C212", - "C21A", - "C220", - "C222", - "C225", - "C230", - "C250", - "c300", - "C300", - "C310", - "C-310", - "C31O", - "C320", - "c320ws", - "C320WS", - "C325", - "C325WB", - "C325WS", - "C357", - "C420", - "C425", - "c500", - "C500", - "C500W", - "C500WS", - "c510", - "c510w", - "C51A", - "C520", - "C5200", - "C520W", - "C520WA", - "C520ws", - "C520WS", - "C52A", - "C530WS", - "C560WS", - "c5a", - "c60", - "C65", - "C70", - "c72", - "C720", - "CCWS10", - "CT70", - "Cubi", - "D130", - "D225", - "D235", - "D30C", - "Dalam Bilik", - "E20A", - "E6E3-HD", - "ENTRADA", - "Entre", - "Etupiha2", - "G510W", - "IPC22A", - "IPC33A", - "NC41", - "Other", - "Study Roo", - "T40", - "Tapo", - "Tapo 200", - "TAPO 200", - "Tapo 500", - "TAPO C100", - "TAPO C110", - "Tapo C200", - "tapo c210", - "tapo c212", - "Tapo c220", - "Tapo C225", - "Tapo C310", - "tapo_c200_646f", - "tapo200", - "tapo-c310", - "TC40", - "TC41", - "TC43", - "TC55", - "TC60", - "TC65", - "TC70", - "tc701", - "tc702", - "TC71", - "TC72", - "TC73", - "TC85", - "TCB72", - "TP-70", - "tplink", - "ttapo", - "Window", - "WS320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "200", - "425", - "500", - "520WS", - "c 425", - "C100", - "c110", - "C111", - "C120", - "C121", - "C130", - "C200", - "c210", - "C210", - "C210c210", - "C211", - "C212", - "c220", - "C225", - "c310", - "C310", - "c320w", - "c320ws", - "C320WS", - "C400", - "C410", - "C420", - "C425", - "c500", - "c510", - "C510W", - "C510W_FB19", - "C520W", - "C520WS", - "C600", - "C65", - "C70", - "cs520-ws", - "d225", - "EC71", - "tapo c200", - "tapo c210", - "tapotc70", - "tc65", - "TC70", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "200", - "310", - "500", - "510W", - "520ws", - "C120", - "C121", - "C200", - "C202", - "c211", - "C212", - "C216", - "C220", - "C222", - "C225", - "C310", - "C325WB", - "C500", - "C500_813E", - "c510w", - "C51a", - "C520WS", - "D235", - "TC40", - "TC70", - "TC71", - "yyy" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/stream1" - }, - { - "models": [ - "200", - "2000", - "310", - "510W", - "c100", - "C100", - "C110", - "C120", - "C200", - "C200C", - "C202", - "c210", - "C210", - "C212", - "C216", - "C222", - "C225", - "c235", - "C300", - "c310", - "C-310", - "C-310 ht", - "C-310Panos", - "c310wc", - "C320WS", - "C325WB", - "C425", - "C500", - "C510", - "C510W", - "C51A", - "C520", - "C520ws", - "C520WS_B53D", - "C52A", - "C65", - "C70", - "C720", - "CP220", - "CT70", - "D130", - "D225", - "D235", - "NC41", - "Other", - "Phone", - "T60", - "Tapo", - "TAPO C100", - "Tapo C200", - "tapo c212", - "Tapo C310", - "TC40", - "TC60", - "TC65", - "TC70", - "TC70_5D76", - "TC71", - "unlisted" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "310", - "510W", - "89DC", - "c 500", - "C100", - "C110", - "c111", - "C120", - "c200", - "c210", - "c211", - "C212", - "C216", - "C220", - "C222", - "C225", - "c300", - "C310", - "c3200ws", - "c320ws", - "C320WS", - "C325WB", - "C500", - "c500ws", - "C510", - "C510W", - "C510WS", - "c520", - "C520WS", - "CCWS10", - "CS520-WS", - "cw520ws", - "Other", - "Tapo C200", - "TC40", - "TC41", - "TC70", - "TC72", - "W510" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream1" - }, - { - "models": [ - "310", - "asfasg", - "c120", - "C200", - "C211", - "C-310", - "C500", - "C51A", - "C520WS", - "TAPO C310" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mp4" - }, - { - "models": [ - "520SW", - "C510W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - }, - { - "models": [ - "a72", - "C120", - "c211", - "C212", - "C220", - "C222", - "C225", - "C310", - "c320", - "C325WB", - "C500", - "C720", - "D235", - "TC40", - "TC55", - "TC70", - "TC72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/stream2" - }, - { - "models": [ - "c100", - "C110", - "c120", - "C200", - "C210", - "C310", - "C320WS", - "C60", - "TAPO C100", - "Tapo C200", - "tapo c210", - "Tapo C310", - "tapo100", - "TC70" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "c120", - "Tapo C200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/?action=stream" - }, - { - "models": [ - "C120", - "C211", - "C500", - "tc41", - "TC72", - "WS320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2%20640%20x%20360" - }, - { - "models": [ - "c121", - "c320ws", - "c500", - "C520WS", - "CCWS10", - "TC70" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream2" - }, - { - "models": [ - "C200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream11" - }, - { - "models": [ - "C200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "C200", - "C500", - "Tapo 500", - "Tapo C200", - "TC60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "C200", - "TAPO C100", - "Tapo C310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Stream1" - }, - { - "models": [ - "c210", - "TC70" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "C210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "C225", - "c500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream=1" - }, - { - "models": [ - "c310" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "C310", - "c500", - "C60", - "Tapo C200", - "TC60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "C520WS", - "CT70" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1r" - }, - { - "models": [ - "C520WS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream8" - }, - { - "models": [ - "TAPO C100", - "Tapo C200", - "Tapo C310" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 2020, - "url": "/onvif/device_service" - }, - { - "models": [ - "TAPO C100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "TAPO C100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "Tapo C200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/H264/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/targa.json b/data/brands/targa.json deleted file mode 100644 index 5aa20da..0000000 --- a/data/brands/targa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Targa", - "brand_id": "targa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WAL 14 A1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/554/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tas-tech.json b/data/brands/tas-tech.json deleted file mode 100644 index 22c6be8..0000000 --- a/data/brands/tas-tech.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Tas-tech", - "brand_id": "tas-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPHD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IPHD", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - } - ] -} \ No newline at end of file diff --git a/data/brands/tbi.json b/data/brands/tbi.json deleted file mode 100644 index 7654e2f..0000000 --- a/data/brands/tbi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tbi", - "brand_id": "tbi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pro panoptic" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tbkvision.json b/data/brands/tbkvision.json deleted file mode 100644 index f4b865b..0000000 --- a/data/brands/tbkvision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Tbkvision", - "brand_id": "tbkvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL+1]01" - }, - { - "models": [ - "ALL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/[CHANNEL]01" - }, - { - "models": [ - "TBK-BUL8841Z" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/tbs.json b/data/brands/tbs.json deleted file mode 100644 index f2583f3..0000000 --- a/data/brands/tbs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tbs", - "brand_id": "tbs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2603" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/hdmi" - } - ] -} \ No newline at end of file diff --git a/data/brands/tcs-avd-ip.json b/data/brands/tcs-avd-ip.json deleted file mode 100644 index 1abb61e..0000000 --- a/data/brands/tcs-avd-ip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tcs Avd Ip", - "brand_id": "tcs-avd-ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AVD94020-0010" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/teamme.json b/data/brands/teamme.json deleted file mode 100644 index 80b7591..0000000 --- a/data/brands/teamme.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Teamme", - "brand_id": "teamme", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HM206" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/H264/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/teamvision.json b/data/brands/teamvision.json deleted file mode 100644 index d5b1ede..0000000 --- a/data/brands/teamvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Teamvision", - "brand_id": "teamvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP5158" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/tech-world.json b/data/brands/tech-world.json deleted file mode 100644 index c9da8f7..0000000 --- a/data/brands/tech-world.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tech World", - "brand_id": "tech-world", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fisheye" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tech.json b/data/brands/tech.json deleted file mode 100644 index 033ef1e..0000000 --- a/data/brands/tech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tech", - "brand_id": "tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/techage.json b/data/brands/techage.json deleted file mode 100644 index 07756d5..0000000 --- a/data/brands/techage.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "brand": "Techage", - "brand_id": "techage", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3MP", - "8MP 4K", - "Other", - "XMEye" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]" - }, - { - "models": [ - "5 MP POE", - "NVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "508", - "BT508GV-20SC", - "east3.0", - "IPC", - "IPC_NT98566_80N50_S38", - "ipc-bt511sw-1.0", - "IPC-BT618-40", - "IPC-BT619W-2.0", - "NVR", - "Other", - "PT915", - "TA-520SB-20W", - "TA-608G-AI", - "TA-XM-605GP-AI-50", - "TA-XM-PT825G-80P", - "XM530", - "XM530_50X20-WG_8M", - "XM-IP508GV-20", - "XM-IP511SWTV-20-64G", - "XM-IP605GV-50", - "XM-IP608G-AI-20W", - "YN-IPC-511SW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "5MP POE PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "IPC", - "IPC-BT619W-10", - "ipc-bt619w-2.0", - "IPC-BT619W-2.0", - "JA-608GW-20", - "NVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "IPC", - "IPC-BT511SW", - "ipc-bt618-40", - "NVR", - "TA-XM-605GP-AI-50", - "TA-XM-M29SP-AI-50N", - "XM530", - "XMEYE", - "xm-ip511swtv-20", - "XM-IP608G-AI-20W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "IPC-BT511SW-1.0", - "IPC-BT619W-2.0", - "NVR", - "NVS", - "Other", - "W4W4S-BT619AW-13", - "w4w4s-bt619aw-15" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPC-BT618-20" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TA-605P-AI-50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "TA-JA-508GW-30" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=1" - }, - { - "models": [ - "TA-XM-DM13EP-50" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "vm-530" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8899, - "url": "/onvif/device_service" - } - ] -} \ No newline at end of file diff --git a/data/brands/techmaxx.json b/data/brands/techmaxx.json deleted file mode 100644 index cbc9813..0000000 --- a/data/brands/techmaxx.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Techmaxx", - "brand_id": "techmaxx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T-67" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "XLT-062311-CSXMN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/technaxx.json b/data/brands/technaxx.json deleted file mode 100644 index a8944ed..0000000 --- a/data/brands/technaxx.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "brand": "Technaxx", - "brand_id": "technaxx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TX-145" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "tx-146" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "tx-23" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "TX-23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "tx-23+" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "TX23+" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "TX-61", - "tx-62" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TX62" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "tx-65", - "TX66", - "TX-67" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "TX-67" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/technology.json b/data/brands/technology.json deleted file mode 100644 index 663ed75..0000000 --- a/data/brands/technology.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Technology", - "brand_id": "technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "IPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5000, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/techpro.json b/data/brands/techpro.json deleted file mode 100644 index 90fa89c..0000000 --- a/data/brands/techpro.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Techpro", - "brand_id": "techpro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr", - "EL2IRLZ2712-D2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/techview.json b/data/brands/techview.json deleted file mode 100644 index ebab703..0000000 --- a/data/brands/techview.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "brand": "Techview", - "brand_id": "techview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "006E060233FE", - "287", - "CQ3834", - "F9805W", - "N287", - "Other", - "QC3836" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 88, - "url": "videostream.asf" - }, - { - "models": [ - "006E060B996D", - "3832", - "Other", - "QC-3834" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "3831", - "cq3834", - "GATE", - "N287", - "Other", - "QC-3638", - "qc3832" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "3831", - "3846", - "720IP", - "720p", - "CQ3834", - "CQ3846", - "HDIP", - "N287", - "QC-3638", - "QC-3840", - "QC-3844", - "QC3846", - "QC3848" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "3846", - "N287", - "qc3638", - "QC-3638" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "3846", - "720P", - "HBP", - "iveway", - "N287", - "Other", - "QC3122", - "QC-3638", - "QC-3834", - "QC3839", - "QC-3840", - "QC-3846", - "QCC3846", - "rmr55" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/12" - }, - { - "models": [ - "38748" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?" - }, - { - "models": [ - "720IP", - "Gate", - "N287", - "Other", - "QC-3638", - "QC3832", - "QC3839", - "QC-3840", - "QC3842", - "QC-3844", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "720IP", - "qc3638", - "TS4001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "C5F0S", - "QC-3844", - "tpz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "CV3130", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "GM8126" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "GM8126" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "N287", - "qc-3836" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "N287" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "N287" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "N287", - "QC3836", - "QCr836" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "QC-3638" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "QC3834-7Link" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "qc3839" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/techvision.json b/data/brands/techvision.json deleted file mode 100644 index adb193a..0000000 --- a/data/brands/techvision.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Techvision", - "brand_id": "techvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "220" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "T-8XXDVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/techyo.json b/data/brands/techyo.json deleted file mode 100644 index dc27723..0000000 --- a/data/brands/techyo.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Techyo", - "brand_id": "techyo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "g1405", - "oipcam g1405" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/teckin.json b/data/brands/teckin.json deleted file mode 100644 index 392af1e..0000000 --- a/data/brands/teckin.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Teckin", - "brand_id": "teckin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hvn tc800" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "TC100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video0_unicast" - } - ] -} \ No newline at end of file diff --git a/data/brands/tecvoz.json b/data/brands/tecvoz.json deleted file mode 100644 index 7126e31..0000000 --- a/data/brands/tecvoz.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Tecvoz", - "brand_id": "tecvoz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HLC-79AD/W", - "HLC-83VW", - "Other", - "THK-IDM13" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other", - "THK-IDM13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "THK-ICB13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/tedun.json b/data/brands/tedun.json deleted file mode 100644 index 8b685b2..0000000 --- a/data/brands/tedun.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Tedun", - "brand_id": "tedun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F20W-WSBE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/telca.json b/data/brands/telca.json deleted file mode 100644 index 65c2a52..0000000 --- a/data/brands/telca.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Telca", - "brand_id": "telca", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TC-9751", - "TC-9852" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi" - }, - { - "models": [ - "TC-9751", - "TC-9852" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - } - ] -} \ No newline at end of file diff --git a/data/brands/telco.json b/data/brands/telco.json deleted file mode 100644 index dc5dc14..0000000 --- a/data/brands/telco.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Telco", - "brand_id": "telco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC-530W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "NV-530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/telekom.json b/data/brands/telekom.json deleted file mode 100644 index ed55fd3..0000000 --- a/data/brands/telekom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Telekom", - "brand_id": "telekom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NV530" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/teleste.json b/data/brands/teleste.json deleted file mode 100644 index ffad4be..0000000 --- a/data/brands/teleste.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Teleste", - "brand_id": "teleste", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MPX" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/snapshot.esp?stream=videoport&type=jpeg&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/telesystem.json b/data/brands/telesystem.json deleted file mode 100644 index db98739..0000000 --- a/data/brands/telesystem.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Telesystem", - "brand_id": "telesystem", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TVedo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/teletek-electronics.json b/data/brands/teletek-electronics.json deleted file mode 100644 index 24f645f..0000000 --- a/data/brands/teletek-electronics.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Teletek Electronics", - "brand_id": "teletek-electronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD-313" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/telview-cctv.json b/data/brands/telview-cctv.json deleted file mode 100644 index a48ae0f..0000000 --- a/data/brands/telview-cctv.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "brand": "Telview Cctv", - "brand_id": "telview-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM35SR-S3235-H16EV2", - "FIW321H", - "H16EV2", - "Other", - "WID320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "fid320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other", - "WID320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "Other", - "SWB-1612" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other", - "SWB-1612" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "monitor.cgi?Channel=[CHANNEL]&Audio=0000&Live=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/tenda.json b/data/brands/tenda.json deleted file mode 100644 index 37463f0..0000000 --- a/data/brands/tenda.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "brand": "Tenda", - "brand_id": "tenda", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "c-30", - "c5+", - "C50S" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "C-30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "C-30", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "C-30" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "C-30", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "C5+", - "c50s", - "C50s", - "C50S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C50", - "C50S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "C50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "C-50", - "C-59" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C-50", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "C50S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C50S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "C50S", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "C50S", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "C50S", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CH3", - "CH3 V1.0", - "CH3-WCA", - "CP3", - "CP7", - "CT3", - "IC7-L(P)RS", - "Tenda CP3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile0" - }, - { - "models": [ - "CH7", - "CP3", - "RP3 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch=1?subtype=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tensai.json b/data/brands/tensai.json deleted file mode 100644 index f7d6f4a..0000000 --- a/data/brands/tensai.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tensai", - "brand_id": "tensai", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tensky.json b/data/brands/tensky.json deleted file mode 100644 index 7d87091..0000000 --- a/data/brands/tensky.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tensky", - "brand_id": "tensky", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SB-122" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 5544, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tenvis.json b/data/brands/tenvis.json deleted file mode 100644 index 0a0231c..0000000 --- a/data/brands/tenvis.json +++ /dev/null @@ -1,1566 +0,0 @@ -{ - "brand": "Tenvis", - "brand_id": "tenvis", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0001", - "0001RW", - "1P602W 2013", - "2013", - "319-W", - "330-KP", - "3815", - "3815-W", - "3815W.", - "3815W2013", - "391", - "602w", - "626", - "640x480", - "H262", - "io602", - "ip 391w", - "IP ROBOT 3", - "IP-319w", - "IP-391W", - "IP-391WHD", - "IP-602W", - "JP-3815", - "JP-3815W", - "jpt 3815-w", - "JPT3185w", - "JPT-3815", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "JPT-3815W+ 2013", - "JPT8415W-HD", - "Mini-319", - "MINI-319w", - "MINI-319W", - "MINI-319W 2013", - "MJPEG", - "Other", - "PT-713x", - "t18618", - "T27653", - "t50239", - "t54300", - "TR-3818" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "0001", - "1920", - "3085W", - "319-W", - "3813", - "3815", - "3815-W", - "3815W.", - "3815W-HD", - "391w-hd", - "602W", - "661", - "692", - "H-264", - "H-264-inge", - "HD", - "HD PAN TILT", - "ip 391whdWHD", - "IP319W", - "IP-391-HD", - "IP-391W", - "IP-391WHD", - "IP-602W", - "IP602WInge", - "IPROBOT2", - "IP-ROBOT3", - "IPROBOT3 H.264", - "JP-3815", - "JP-3815W", - "JPT 3815W-HD", - "JPT3185W", - "JPT-3815", - "JPT-3815HD", - "jpt3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "JPT-381HD", - "JPW-3815 HD", - "MJPEG", - "Other", - "P391W-HD", - "PT-7131W", - "T6812", - "T8801", - "T8805", - "T8809", - "T8810", - "TBS3008", - "TH-611", - "th661", - "TH-661", - "TH661d", - "TH667", - "TH692", - "TR3815W", - "TZ100", - "TZ300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "0001rw", - "0012", - "3813", - "391w-hd", - "IP-602W", - "JPT3185W", - "JPT-3814WP2P", - "JPT-3815-P2P", - "JPT3815W", - "JPT-3815W 2013", - "JPT-3815WHD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "0012", - "1P602W 2013", - "3815-W", - "IP-391W", - "IP391W HD", - "IP-602W", - "JPT-3815", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013A", - "JPT-3815W+", - "JPT-3818", - "Mini-319", - "Other", - "PT-7131W", - "TR3815W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "0952", - "3085W", - "3815-w", - "3815W", - "3815-W", - "3815W.", - "3815W2013", - "3815W-HD", - "djdw", - "IP-319w", - "IP-391W", - "IP-602W", - "JP-3815", - "JP-3815W", - "JPT 3815W (CLONE)", - "JPT 3815W HD", - "JPT3185W", - "JPT3815", - "JPT-3815", - "JPT-3815w", - "JPT3815W", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+ 2013", - "LTP2013W", - "Mini-319", - "MINI-319W", - "MINI-319W 2013", - "Other", - "T-50348", - "UNLISTED", - "us55526" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1P602W 2013", - "3085w", - "319-W", - "3815", - "3815-W", - "3815W2013", - "391W-HD", - "IP 391 W HD", - "IP-319W", - "IP-391W", - "IP-602W", - "JP-3815", - "JP-3815W", - "JPT 3815W HD", - "JPT 3815W-HD", - "JPT3185W", - "JPT-3815", - "JPT-3815-P2P", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "JPT-3815WP2P", - "JPT-3818", - "JW-1315", - "Other", - "TH-661", - "TR-3818" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "1P602W 2013", - "3815W", - "IP-319W", - "IP-391W", - "IP-391WHD", - "IP-602W", - "IPROBOT 3", - "IPROBOT 3 IAN", - "JP-3815W", - "JPT-3815", - "JPT-3815w", - "JPT-3815W 2013", - "Mini-319", - "MINI-319W", - "Other", - "TH-661" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1P602W 2013", - "3815", - "3815-W", - "3815W2013", - "IP-319W", - "IP-391W", - "IP-391WHD", - "IP-602W", - "JP-3815W", - "JPT-3814WP2P", - "JPT-3815", - "JPT-3815-P2P", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "Other", - "T8612", - "TZ100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1P602W 2013", - "2013", - "3815-W", - "3815W.", - "3815W2013", - "HD", - "IP-391WHD", - "IP602W", - "JPT-3815W 2013", - "JPT-3815W+", - "JPW-3815 HD", - "Other", - "T8612", - "TR-3828" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "2013", - "ip391w", - "Iprobot 3", - "JPT3815", - "JPT-3815W 2013", - "misc", - "Other", - "reeca" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "2014", - "Iprobot 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 7777, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "319w", - "319-W", - "3815W2013", - "3815W-HD", - "391", - "611", - "661", - "692", - "720HD", - "AE38312", - "AE8312", - "FIXEDWP", - "H-264", - "H692", - "HD", - "HD PAN TILT", - "HT661", - "ibrobot3", - "IP-391-HD", - "IP-391WHD", - "IPROBOT 3-E", - "IP-ROBOT3", - "IPROBOT3 H.264", - "JP-3815W", - "JPT 3815-W", - "JPT 3815w (Clone)", - "JPT 3815W HD", - "JPT-3815 HD", - "jpt3815-hd", - "JPT3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W 2013A", - "JPT-3815W+", - "JPT3815WHD", - "JPT8415W-HD", - "JPTW", - "JPTW8750", - "JPW-3815 HD", - "JTP", - "Mini319", - "Other", - "RJN", - "RJN-2", - "RTT-8700", - "SH692", - "T8612", - "T8810", - "TH-611", - "TH-661", - "TH661 Black", - "TH661 White", - "TH661D", - "TH662", - "TH671", - "TH-69", - "TH692", - "th692alan", - "TH-962", - "TZ100", - "WH-TH661" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "319w", - "319-W", - "IP-391W", - "JPT3185W-HD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "319w", - "3815", - "3815-W", - "3815W.", - "3815W2013", - "draai", - "HD", - "IP 391 w hd", - "IP-319w", - "ip391w", - "IP-602W", - "JP3815", - "JP-3815W", - "JPT3185W", - "JPT-3815", - "JPT-3815 HD", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815WP2P", - "M1Q", - "mini319w", - "Other", - "TR3815W", - "TZ100/IPROBOT3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "319w", - "319-W", - "362B", - "3815", - "3815W", - "3815W.", - "3815W2013", - "3815W-HD", - "661", - "692", - "8805", - "H-264", - "H-692", - "IBROBOT3", - "iMegaCam", - "IP ROBOT 3", - "IP-391W", - "IP-391WHD", - "iprobot", - "iprobot 3 Ian", - "IProbot2", - "iprobot3", - "iprobot3t", - "jpg.jpg", - "JPT 3815-W", - "JPT3185W", - "JPT3815", - "jpt3815-hd", - "JPT-3815HD", - "JPT-3815W 2013A", - "JPT-3815W HD", - "JPT-6315", - "Other", - "P391W-HD", - "ROBOT", - "ROBOT3", - "RTT-8700", - "SH661", - "T3875D", - "T6812", - "T8805", - "T8806", - "T8809", - "TH661", - "TH-661", - "TH661D", - "TH671", - "TH-692", - "TR3815W", - "TZ100/iProbot3", - "v.2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "319-W", - "3815-W", - "391W-HD", - "IP391W", - "IP-602W", - "JPT-3815", - "JPT-3815 HD", - "JPT-3815w", - "JPT-3815W", - "Other", - "TR3815W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "319-W", - "JPT8518W", - "MINI-319w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi" - }, - { - "models": [ - "351.148", - "381", - "3815", - "3815-w", - "3815-W", - "3815W.", - "3815w2013", - "391W-HD", - "8513", - "IP-319W", - "IP-391-HD", - "IP-391W", - "IP-602W", - "JP-3815", - "JP-3815W", - "JPT-3815", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W 2013a", - "JPT-3815W+", - "JW-1315", - "Mini-318W", - "MINI-319", - "MINI-319W", - "MINI-319W 2013", - "Other", - "PT-7131W", - "T-23979", - "T-50348", - "US-28449" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "381", - "3815", - "3815-W", - "3815W2013", - "3815W-HD", - "HATENA", - "IP ROBOT 3", - "IP319w", - "IP-319W", - "IP-391W", - "IP-602W", - "JP-3815W", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "JPT8518W", - "MINI-319W 2013", - "Other", - "TH661", - "TR-3818" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "3815", - "3815-W", - "IP-391W", - "IP-602W", - "iprobot", - "Iprobot 3", - "IPROBOT 33", - "IPW-391", - "JPT-3815", - "JPT-3815-P2P", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT3815W-HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "3815", - "3815-W", - "3815W.", - "3815W2013", - "H262", - "IP-319W", - "IP-391W", - "IP-391WHD", - "IP-602W", - "JP-3815", - "JP-3815W", - "JPT3185W", - "JPT-3815", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "Mini-318w", - "Mini-319", - "MINI-319w", - "MINI-319W 2013", - "Other", - "PT3815W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3815", - "3815-W", - "3815W2013", - "IP-391W", - "IP-602W", - "JP-3815W", - "JPT-3815", - "jpt3815w", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3818", - "JPW-3815 HD", - "MINI-319W", - "Other", - "TR3815W", - "TR-3818" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "3815", - "3815W", - "3815W2013", - "JP-3815W", - "JPT-3815W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3815", - "3815-W", - "3815W-HD", - "HD", - "JPT-3815W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "3815", - "3815-W", - "3815W.", - "HD", - "IP-391W", - "IP-602W", - "IPROBOT 33", - "JPT-3815", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "Mini-319", - "Other", - "PT-7131W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3815", - "3815-W", - "3815W2013", - "IP-319w", - "IP-602W", - "JP-3815", - "JP-3815_1", - "JPT-3815", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "JPT-3815W+", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "3815w", - "TH-661" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "3815W", - "3815W2013", - "IP-319w", - "IP-602W", - "JPT-3815W", - "JPT-3815W+", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "3815-W", - "3815W.", - "3815W-HD", - "391", - "FS-IPC100", - "IP-391W", - "IP-602W", - "IP-602WW", - "iprobot3", - "JP-3815", - "JP-3815W", - "JPT-3815", - "jpt3815w", - "JPT-3815w", - "JPT-3815W", - "JPT-3815W 2013", - "mini", - "MINI-319W", - "Other", - "PT-7131W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "3815-W", - "3815W2013", - "JP-3815W", - "JPT-3815-P2P", - "JPT-3815W", - "JPT-3815W+ 2013" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3815-W", - "JPT-3815W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "3815-W", - "ibrobot3", - "IP-391W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "image.mpg" - }, - { - "models": [ - "3815-W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "3815W-HD", - "391W-HD", - "IP ROBOT 3", - "Iprobot 3", - "JPT-3815", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "391", - "391W-HD", - "IP ROBOT2", - "IP-391W", - "IP-ROBOT3", - "JP-3815W", - "JPT-381HD", - "Other", - "P391W-HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/video0" - }, - { - "models": [ - "391", - "IP-391WHD", - "IPROBOT 3 2", - "IPROBOT3", - "IPWHD", - "Other", - "TS4001", - "TZ100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "391", - "IP-391W", - "JPT-3815", - "JPT-3815w", - "MINI-319W", - "MINI-319W 2013", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "391", - "IP ROBOT2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 7777, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&rate=11" - }, - { - "models": [ - "391W-HD", - "IP ROBOT 3", - "IP-391WHD", - "IP-ROBOT3", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "391W-HD", - "IP Robot 3", - "IP ROBOT 3", - "IP-391W", - "IP-391WHD", - "IPRobot2", - "Other", - "TH-661", - "TZ100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/av0" - }, - { - "models": [ - "391W-HD", - "IP-391W", - "IPRobot2", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/av1" - }, - { - "models": [ - "391W-HD", - "IP ROBOT2", - "IP-391WHD", - "iprobot3", - "Other", - "T3806D", - "T8863D", - "TZ100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "391W-HD", - "H-264", - "IP-391W", - "IP-391WHD", - "IPROBOT 3 2", - "iprobot3", - "JPT-3815W", - "Other", - "TZ100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "602", - "IP-602W", - "JPT-3815w", - "JPT-3815W 2013", - "JPT-3815W+", - "Mini-319", - "MINI-319W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/media/?action=stream" - }, - { - "models": [ - "602", - "TV-IP311PI Low" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 81, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "C16S", - "IP391W", - "IP-602W", - "Iprobot 3", - "JP-3815W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 27973, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "GM8126", - "IP319W", - "IP-391WHD", - "JPT-3815", - "Other", - "TZ100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - }, - { - "models": [ - "HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "ibrobot3", - "IPROBOT 3", - "IP-ROBOT3", - "Other", - "TZ100/IPROBOT3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - }, - { - "models": [ - "IBROBOT3", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/rtsp_live1" - }, - { - "models": [ - "IP 391W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "IP ROBOT2", - "IPRobot2", - "IPROBOT2", - "Other", - "TZ100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "IP ROBOT2", - "IPROBOT 3 IAN", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "video[CHANNEL]" - }, - { - "models": [ - "IP-319W", - "IP-391W", - "IP-602W", - "JPT-3815", - "JPT-3815w", - "JPT-3815W", - "MINI-319W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "IP391W" - ], - "type": "JPEG", - "protocol": "http", - "port": 7777, - "url": "/vjpeg.v?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP391W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 7777, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=30" - }, - { - "models": [ - "IP-391W", - "Other", - "P391W-HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "IP-391W", - "JPT-3815", - "JPT-3815w", - "Other", - "TR-3818" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "IP-391W", - "IPROBOT3", - "Other", - "TH-661", - "TZ100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Video?Codec=MPEG4&Width=720&Height=576&Fps=30" - }, - { - "models": [ - "IP-391WHD", - "IPRobot2", - "JPT8518W", - "Other", - "TZ100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "ip602", - "IP-602W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP-602", - "IP-602W", - "jp 3815", - "JPT-3815W HD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "IP-602W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "IP-602W" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "IPK", - "PTZ", - "th661" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 7777, - "url": "/" - }, - { - "models": [ - "Iprobot 3", - "T8863D", - "TS4001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/video1" - }, - { - "models": [ - "Iprobot 3", - "Other", - "TH661", - "TH661D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "JP-3815W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "JPT-3815", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "JPT-3815" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/index1.htm" - }, - { - "models": [ - "JPT-3815-P2P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "JPT-3815W", - "MINI-319W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "JPT-3815W 2013", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "JPT-3815W 2013", - "Mini-319", - "MINI-319W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "JPT-3815W 2013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 7777, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=720&rate=0" - }, - { - "models": [ - "JPT3815WHD", - "TH692" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "JPT3815W-HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "JPT3815W-HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other", - "TZ100" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "nph-h264.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "CAM_ID.[PASSWORD].mp2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 83, - "url": "/videostream.asf" - }, - { - "models": [ - "T8863D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video0" - }, - { - "models": [ - "T8863D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/image.mpg" - }, - { - "models": [ - "T8863D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/av2" - }, - { - "models": [ - "th-661" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "TH661" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "w319" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tenvus.json b/data/brands/tenvus.json deleted file mode 100644 index 40e6263..0000000 --- a/data/brands/tenvus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tenvus", - "brand_id": "tenvus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JPG3815W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/teruhal.json b/data/brands/teruhal.json deleted file mode 100644 index 5424a75..0000000 --- a/data/brands/teruhal.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Teruhal", - "brand_id": "teruhal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Intelligent Camera", - "TC55", - "TC56" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tesco.json b/data/brands/tesco.json deleted file mode 100644 index 44f5983..0000000 --- a/data/brands/tesco.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tesco", - "brand_id": "tesco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hudl" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/tethys-innovation.json b/data/brands/tethys-innovation.json deleted file mode 100644 index b14e72e..0000000 --- a/data/brands/tethys-innovation.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tethys Innovation", - "brand_id": "tethys-innovation", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "825-C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/tevah.json b/data/brands/tevah.json deleted file mode 100644 index 3b2345d..0000000 --- a/data/brands/tevah.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Tevah", - "brand_id": "tevah", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ANC-600G", - "ANC-606G", - "ANC-818G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/texhnaxx.json b/data/brands/texhnaxx.json deleted file mode 100644 index b5211b4..0000000 --- a/data/brands/texhnaxx.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Texhnaxx", - "brand_id": "texhnaxx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xlt-23" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/thethys.json b/data/brands/thethys.json deleted file mode 100644 index 8c08039..0000000 --- a/data/brands/thethys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Thethys", - "brand_id": "thethys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SmartCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/thingino.json b/data/brands/thingino.json deleted file mode 100644 index 6f8cd54..0000000 --- a/data/brands/thingino.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "brand": "Thingino", - "brand_id": "thingino", - "last_updated": "2025-11-11", - "source": "ispyconnect.com, thingino.com", - "website": "https://github.com/themactep/thingino-firmware", - "entries": [ - { - "models": [ - "wuuk", - "Wyze 2 (Neos)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0" - }, - { - "models": [ - "INGENIC T31", - "T31", - "T31X", - "T31ZX", - "T31A", - "Generic T31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0", - "notes": "Main stream 1080p - Ingenic T31 series SoC" - }, - { - "models": [ - "INGENIC T31", - "T31", - "T31X", - "T31ZX", - "T31A", - "Generic T31" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1", - "notes": "Sub stream 360p - Ingenic T31 series SoC" - }, - { - "models": [ - "INGENIC T20", - "T20", - "T20X", - "T20L", - "Generic T20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0", - "notes": "Main stream 1080p - Ingenic T20 series SoC" - }, - { - "models": [ - "INGENIC T20", - "T20", - "T20X", - "T20L", - "Generic T20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1", - "notes": "Sub stream 360p - Ingenic T20 series SoC" - }, - { - "models": [ - "INGENIC T10", - "T10", - "Generic T10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0", - "notes": "Main stream - Ingenic T10 SoC" - }, - { - "models": [ - "INGENIC T10", - "T10", - "Generic T10" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1", - "notes": "Sub stream - Ingenic T10 SoC" - }, - { - "models": [ - "INGENIC S3L", - "S3L", - "Generic S3L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0", - "notes": "Main stream - Ingenic S3L SoC" - }, - { - "models": [ - "Generic", - "Other", - "Xiaomi Dafang", - "Xiaomi Xiaofang" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0", - "notes": "Main stream 1080p - Generic Thingino installation" - }, - { - "models": [ - "Generic", - "Other", - "Xiaomi Dafang", - "Xiaomi Xiaofang" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1", - "notes": "Sub stream 360p - Generic Thingino installation" - }, - { - "models": [ - "Generic", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg", - "notes": "JPEG snapshot" - }, - { - "models": [ - "Generic", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/", - "notes": "MJPEG stream via HTTP" - } - ] -} diff --git a/data/brands/thinkvalue.json b/data/brands/thinkvalue.json deleted file mode 100644 index 1993184..0000000 --- a/data/brands/thinkvalue.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Thinkvalue", - "brand_id": "thinkvalue", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "T8855", - "t8890" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "T8855" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "VBOF-2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/thomson.json b/data/brands/thomson.json deleted file mode 100644 index 84c86e2..0000000 --- a/data/brands/thomson.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Thomson", - "brand_id": "thomson", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "512391" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "512393", - "523W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "DSC-723W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 88, - "url": "/videoMain" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/threeboy.json b/data/brands/threeboy.json deleted file mode 100644 index 38a691f..0000000 --- a/data/brands/threeboy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Threeboy", - "brand_id": "threeboy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-660" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/thrifty-tech.json b/data/brands/thrifty-tech.json deleted file mode 100644 index 8ea23a9..0000000 --- a/data/brands/thrifty-tech.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Thrifty Tech", - "brand_id": "thrifty-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8MP 4K UHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=Golden%40786&channel=1&stream=101.sdp?" - }, - { - "models": [ - "8MP GOLD SERIES", - "Thrifty Tech 5MP IP", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=101.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/tiandy.json b/data/brands/tiandy.json deleted file mode 100644 index eaf42c2..0000000 --- a/data/brands/tiandy.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Tiandy", - "brand_id": "tiandy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM321", - "TC-C321N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other", - "TC-C32KN", - "TC-C32QN", - "TC-NC44M" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other", - "TC-C34QN", - "tc-c34sp", - "TC-C34XN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - }, - { - "models": [ - "TC-321N", - "TC-C320N", - "TC-C34XN", - "TC-C35US" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "TC-C321N", - "TC-H332N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tic.json b/data/brands/tic.json deleted file mode 100644 index 5143c3e..0000000 --- a/data/brands/tic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tic", - "brand_id": "tic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3MPX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/2" - } - ] -} \ No newline at end of file diff --git a/data/brands/tidetech.json b/data/brands/tidetech.json deleted file mode 100644 index 9702f67..0000000 --- a/data/brands/tidetech.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "brand": "Tidetech", - "brand_id": "tidetech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "12443d9d", - "B01-2MP", - "BC1-2MP", - "PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4_1.sdp" - }, - { - "models": [ - "BC3-5MP-SD", - "E36Y0701", - "Other", - "P1-4X-5MPB", - "PTZ Outdoor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp" - }, - { - "models": [ - "gtn", - "PTZ OUTDOOR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/tigersecu.json b/data/brands/tigersecu.json deleted file mode 100644 index 07ef0ed..0000000 --- a/data/brands/tigersecu.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Tigersecu", - "brand_id": "tigersecu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MP Super HD", - "Other", - "TS-M02308" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tigris.json b/data/brands/tigris.json deleted file mode 100644 index 48f8359..0000000 --- a/data/brands/tigris.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Tigris", - "brand_id": "tigris", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S2M", - "Ti-S2M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/timhillone.json b/data/brands/timhillone.json deleted file mode 100644 index e5bf31b..0000000 --- a/data/brands/timhillone.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Timhillone", - "brand_id": "timhillone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H264-WebCam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.jpg?ch=[CHANNEL]" - }, - { - "models": [ - "UC-7008WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "UC-7008WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/tinosec.json b/data/brands/tinosec.json deleted file mode 100644 index 67e33c0..0000000 --- a/data/brands/tinosec.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Tinosec", - "brand_id": "tinosec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DomeIPCAM", - "IPC-BT5025C", - "IPC-BT513S", - "IPC-DM06WV-2.0", - "TC-BT635" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC-BT511SW", - "IPC-BT619W", - "IPC-Z10B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/tinycam.json b/data/brands/tinycam.json deleted file mode 100644 index 593b729..0000000 --- a/data/brands/tinycam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Tinycam", - "brand_id": "tinycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 8083, - "url": "/axis-cgi/mjpg/video.cgi?camera=1" - }, - { - "models": [ - "server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/tipo.json b/data/brands/tipo.json deleted file mode 100644 index 6509964..0000000 --- a/data/brands/tipo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tipo", - "brand_id": "tipo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C500" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/titanium.json b/data/brands/titanium.json deleted file mode 100644 index 2ba5fa3..0000000 --- a/data/brands/titanium.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Titanium", - "brand_id": "titanium", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-5IRD5S44/28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1242, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/titathink.json b/data/brands/titathink.json deleted file mode 100644 index 4a0c137..0000000 --- a/data/brands/titathink.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Titathink", - "brand_id": "titathink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Clock", - "GF-H100", - "TT531W-N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "CLOCK", - "TT520PW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/1.3gp" - }, - { - "models": [ - "Pinhole", - "TT520PW", - "TT522PW-PRO", - "TT522W-PRO", - "TT525PW", - "TT525PW 108", - "TT730PW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "TT520PW", - "TT522PW", - "TT522PW-PRO", - "TT730PW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TT520PW", - "TT522PW-PRO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "TT531W-N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/tl-sc3130g.json b/data/brands/tl-sc3130g.json deleted file mode 100644 index f701d6c..0000000 --- a/data/brands/tl-sc3130g.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tl-sc3130g", - "brand_id": "tl-sc3130g", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/tmezon.json b/data/brands/tmezon.json deleted file mode 100644 index c4a8420..0000000 --- a/data/brands/tmezon.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "brand": "Tmezon", - "brand_id": "tmezon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AES-30H100E", - "MZ-W205CR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "AES-30H100E-A1", - "dvr", - "mz-adh1216", - "mz-ahd 1208", - "MZ-W205CR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "AES30H200E", - "AES-H301", - "BP20S-1H", - "MZ-205CR", - "MZ-W205CR", - "MZ-W205CR-A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "MZ-205CR", - "MZ-W205CR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "MZ-W205CR", - "S836/5520PHR-AI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "MZ-W205CR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "MZ-W205CR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tmt.json b/data/brands/tmt.json deleted file mode 100644 index 8d8b0c8..0000000 --- a/data/brands/tmt.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tmt", - "brand_id": "tmt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "W200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/toa.json b/data/brands/toa.json deleted file mode 100644 index 9a870a6..0000000 --- a/data/brands/toa.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Toa", - "brand_id": "toa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "n-c3120", - "n-c3220 3", - "n-c3820" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "getjpeg.cgi?[USERNAME]&ch[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/toaioho.json b/data/brands/toaioho.json deleted file mode 100644 index df5f00e..0000000 --- a/data/brands/toaioho.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Toaioho", - "brand_id": "toaioho", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QB320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/toguard.json b/data/brands/toguard.json deleted file mode 100644 index d34d505..0000000 --- a/data/brands/toguard.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Toguard", - "brand_id": "toguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AP10", - "CE30", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "h264" - }, - { - "models": [ - "ap40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ap40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "AP40" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/tomtop.json b/data/brands/tomtop.json deleted file mode 100644 index 1b1762c..0000000 --- a/data/brands/tomtop.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tomtop", - "brand_id": "tomtop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S63B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tonton.json b/data/brands/tonton.json deleted file mode 100644 index 108a06a..0000000 --- a/data/brands/tonton.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "brand": "Tonton", - "brand_id": "tonton", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "T8ZD2-10", - "wireless nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "1080p", - "PE3020-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "1080p" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1080P", - "1329", - "C1319DN4-H", - "C6F0SgZ0P5L2", - "C6F0SgZ3N0P5L2", - "C6F0SGZ3N0P6L2", - "Other", - "TTTT-291042-FGBDF", - "TTTT-53493HDDX", - "tttt-648629-kfvgy", - "tttt-648877-zlkhc", - "TTTT-743510-WWBEL", - "TTTT-753493", - "tttt-834942-yljcs", - "tttt-838077-kjzul", - "WIRELESS NVR", - "X001YAVP5P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7070, - "url": "/11" - }, - { - "models": [ - "1080P", - "c1319DN4-H", - "c1319dn4h1808", - "C6F0SgZ3N0P5L2", - "C6F0SgZ3N0P6L2", - "c6fosgz3nop6l2", - "IPC365", - "Other", - "TCW51A-2MP", - "TTTT-753493-HDDM" - ], - "type": "JPEG", - "protocol": "http", - "port": 554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1PJ2-2019B", - "8CH NVR", - "wireless nvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "5MP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C6fosgz3nop6l2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "MMMM-672187_EEDCF", - "wifi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/top-sky.json b/data/brands/top-sky.json deleted file mode 100644 index 4ace66c..0000000 --- a/data/brands/top-sky.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "brand": "Top Sky", - "brand_id": "top-sky", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EC-8512W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "EC-IP5911P", - "gadaa urd", - "N500", - "Other", - "WP-1014VIP", - "Z-IPZ18X13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "N-1490", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "TE-IQ619" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "TE-IQ619" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "TSV-HR03W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/top-vision.json b/data/brands/top-vision.json deleted file mode 100644 index 290943a..0000000 --- a/data/brands/top-vision.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Top Vision", - "brand_id": "top-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6026hec-xmw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "6026hec-xmw" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Q05" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=&password=pass&balls=balls5" - } - ] -} \ No newline at end of file diff --git a/data/brands/topcam.json b/data/brands/topcam.json deleted file mode 100644 index cfe3d4a..0000000 --- a/data/brands/topcam.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "brand": "Topcam", - "brand_id": "topcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "201", - "IPAH200-P", - "SL-130IPC36WF", - "TOP-201", - "TOP-308", - "TOP52" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "201", - "Other", - "TOP-201" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "7052" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPA-7063", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "ipa8079" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "SL-910IW30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ONVIF/channel1" - }, - { - "models": [ - "Other", - "TOP-308" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "SL-30IPC01Z", - "SL-720IPC02Z", - "SL-910IW30" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "SL-910IW30" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "SL-910IW30" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TOP-228wf" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/topcony.json b/data/brands/topcony.json deleted file mode 100644 index d11152c..0000000 --- a/data/brands/topcony.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Topcony", - "brand_id": "topcony", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1920p", - "TY10", - "ty8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "TY10", - "TY50", - "ty55", - "ty8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "TY10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/topica-cctv.json b/data/brands/topica-cctv.json deleted file mode 100644 index b96a9a1..0000000 --- a/data/brands/topica-cctv.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "brand": "Topica Cctv", - "brand_id": "topica-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "107", - "301", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "42352", - "42353", - "42532", - "4400", - "IPA-5857", - "IPA-6440", - "Other", - "TCAM-2390" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "FS-MPB20P-2812" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "IPB-9389" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "MY-310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "av2" - }, - { - "models": [ - "Other", - "TOP-788HMP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other", - "TOP-788", - "TOP-788HMP", - "TOP-788XMP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "TIP-303EZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "TOP-107HMP", - "TOP-301" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "top-23xip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "TOP-757VPC", - "TOP-788HMP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "TOP-757VPC-MIR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "TOP-788HMP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "TP-S26404DR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/topmountain.json b/data/brands/topmountain.json deleted file mode 100644 index 15f8fc8..0000000 --- a/data/brands/topmountain.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Topmountain", - "brand_id": "topmountain", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JND-Y1-100W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/topo.json b/data/brands/topo.json deleted file mode 100644 index 08a3935..0000000 --- a/data/brands/topo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Topo", - "brand_id": "topo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Domo" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/topodome.json b/data/brands/topodome.json deleted file mode 100644 index e6760f7..0000000 --- a/data/brands/topodome.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Topodome", - "brand_id": "topodome", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP66", - "S503B", - "S50B", - "td10c", - "TD-J10A", - "TD-S10C", - "TD-S50B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "S40B", - "TD-J10A", - "TD-S10C", - "td-s50b" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "TD-S10C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/topsee.json b/data/brands/topsee.json deleted file mode 100644 index 277d2e9..0000000 --- a/data/brands/topsee.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Topsee", - "brand_id": "topsee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5MP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "5MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Bullet Camera", - "fisheye", - "LHT-8880W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "LHT-8880W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/topsicherheit.json b/data/brands/topsicherheit.json deleted file mode 100644 index d5dcc51..0000000 --- a/data/brands/topsicherheit.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Topsicherheit", - "brand_id": "topsicherheit", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "YUC-K7B89M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/toptech.json b/data/brands/toptech.json deleted file mode 100644 index 27e9417..0000000 --- a/data/brands/toptech.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Toptech", - "brand_id": "toptech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD CMOS IR CCTV IP CAMERA", - "ib622", - "IBL780" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/topway.json b/data/brands/topway.json deleted file mode 100644 index 06b5d3e..0000000 --- a/data/brands/topway.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Topway", - "brand_id": "topway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4ch", - "DVR 4 CH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/topwelltech.json b/data/brands/topwelltech.json deleted file mode 100644 index 1a7b927..0000000 --- a/data/brands/topwelltech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Topwelltech", - "brand_id": "topwelltech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LT-6804" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/torno.json b/data/brands/torno.json deleted file mode 100644 index 5e2fa19..0000000 --- a/data/brands/torno.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Torno", - "brand_id": "torno", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ONVIF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile2" - } - ] -} \ No newline at end of file diff --git a/data/brands/torv.json b/data/brands/torv.json deleted file mode 100644 index 97acf59..0000000 --- a/data/brands/torv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Torv", - "brand_id": "torv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR-HK02W-IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/toscan.json b/data/brands/toscan.json deleted file mode 100644 index 7b4612d..0000000 --- a/data/brands/toscan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Toscan", - "brand_id": "toscan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "v380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/toshiba.json b/data/brands/toshiba.json deleted file mode 100644 index aec5c2b..0000000 --- a/data/brands/toshiba.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "brand": "Toshiba", - "brand_id": "toshiba", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DT01ACA2" - ], - "type": "JPEG", - "protocol": "http", - "port": 8088, - "url": "/cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "ik wb15a", - "IKWB-15", - "IKWB15A", - "ikwb21", - "IK-WB21A", - "toshiba IK-wb15a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "admin/cgi-bin/getstream.cgi?10&&&&&0&0&0&0" - }, - { - "models": [ - "IK-6420A", - "ik-wb16", - "IK-WB16A-W", - "IKWB-30A", - "IK-WB80A", - "ik-WP41A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "IK-WB01A", - "IK-WB16a", - "IK-WB16A-W", - "ik-wb70a", - "IKWB-70A", - "IKWB-80A", - "IKWB-81A", - "IKWD-01A", - "IKWD05A", - "IK-WD31A", - "IK-WR12A", - "Other", - "TD05W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "IK-WB01A", - "IK-WB11A", - "IK-WB15A", - "IK-WB21A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "IK-WB01A", - "IK-WB11A", - "IK-WB15A", - "IK-WB16A-W", - "IK-WB21A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "__live.jpg?&&&" - }, - { - "models": [ - "IK-WB01A", - "IK-WB11A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "__live.jpg?&&[USERNAME]&[PASSWORD]" - }, - { - "models": [ - "IK-WB01A", - "IK-WB11A", - "IK-WB15A", - "IK-WB16A-W", - "IK-WB21A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "getstream.cgi?10&10&&&10&0&0&0&0" - }, - { - "models": [ - "IK-WB01A", - "ikwb15a", - "IK-WB15A", - "IK-WB21A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/cgi-bin/getstream.cgi?10&&&&0&0&0&0&0" - }, - { - "models": [ - "IK-WB02A", - "IKWR-01A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "IK-WB02A", - "IKWR-01A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "IK-WB15A", - "IK-WB16A", - "IKWB-30A", - "IKWB-70A", - "IK-WB80A", - "IKWB-81A", - "IKWD-14A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IK-WB15A", - "IK-WB161A", - "IK-WB16A", - "IKWB-80A", - "IK-WD31A", - "IK-WR04A", - "IK-WR12A", - "IK-WR14A", - "Other", - "WEBCAM HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "IK-WB16", - "ik-wb16a", - "IK-WB16A", - "IK-WB16A-W", - "IK-WB21A", - "IKWB-70A", - "IKWB-80A", - "IKWD-01A", - "IKWD-12A", - "IKWD-14A", - "IKWP-41A", - "IKWR-01A", - "IKWR-04A", - "IK-WR12A", - "IK-WR14A", - "Other", - "VIVOTEK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "IK-WB16A", - "IK-WB16A-W", - "IK-WB21A", - "IKWB-70A", - "IK-WB80A", - "IKWD-01A", - "IKWD-14A", - "IK-WR14A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IK-WB16A", - "IKWB-80A", - "IK-WR12A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "IK-WB16A-W", - "IKWB-70A", - "IKWD-12A", - "IKWD-14A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live2.sdp" - }, - { - "models": [ - "IK-WB21A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "IKWB-70A", - "IKWD-01A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video[USERNAME].mjpg" - }, - { - "models": [ - "IKWB-81A", - "IK-WR14A", - "WD04A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live4.sdp" - }, - { - "models": [ - "IK-WD04A", - "IKWD-12A", - "IKWD-14A", - "IKWR-05" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "IKWD-14A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live3.sdp" - }, - { - "models": [ - "M-1060W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "Other", - "WebCam HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other", - "WEBCAM HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WVSC-385" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mjpeg?stream=[CHANNEL]" - }, - { - "models": [ - "wv-sw155", - "WV-SW155" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/mjpeg?stream=0" - }, - { - "models": [ - "WV-SW155" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/nphMotionJpeg?Resolution=1280x720&Quality=Standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/toughdog.json b/data/brands/toughdog.json deleted file mode 100644 index 0d022de..0000000 --- a/data/brands/toughdog.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Toughdog", - "brand_id": "toughdog", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HCVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/touralle.json b/data/brands/touralle.json deleted file mode 100644 index 56167dd..0000000 --- a/data/brands/touralle.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Touralle", - "brand_id": "touralle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N04" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/tp-ipc.json b/data/brands/tp-ipc.json deleted file mode 100644 index 2958135..0000000 --- a/data/brands/tp-ipc.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Tp-ipc", - "brand_id": "tp-ipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "310", - "3d print", - "424-A", - "c100", - "C110", - "c200", - "C200", - "C200 TAPO", - "C210", - "C211", - "C320WS", - "C400HP", - "cam2", - "F782", - "IPC424-A", - "Other", - "t100", - "Tapo", - "Tapo 200", - "Tapo C200", - "Tapo C200.", - "Tapo C225", - "Tapo C320WS", - "tapo_c200", - "Tapo65", - "tapoc100", - "TC60", - "TP-200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "310", - "C200", - "C210", - "C22", - "C320WS 2", - "tapo", - "TAPO C200_", - "Tapo C225", - "TAPO tc40", - "tapo100", - "tip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "C200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "C200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/tp-link.json b/data/brands/tp-link.json deleted file mode 100644 index 5150fca..0000000 --- a/data/brands/tp-link.json +++ /dev/null @@ -1,1462 +0,0 @@ -{ - "brand": "Tp-link", - "brand_id": "tp-link", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "110", - "210", - "520ws", - "520WS", - "553AE", - "AS1", - "AS2", - "AS2 FUT2 GM", - "c 100", - "C100", - "C110", - "C111", - "c120", - "C120", - "C121", - "c125", - "c200", - "C200", - "C201", - "C2010", - "c210", - "C210", - "C211", - "C212", - "c220", - "C222", - "C225", - "C230", - "C240", - "C240I", - "C250", - "c300hp", - "C310", - "c310", - "C320i", - "C320i 2.8mm", - "C320WS", - "C325WB", - "C330", - "C340", - "C350", - "C385", - "C400HP", - "C420i", - "C420I", - "C425", - "C430I 1.0", - "C440I", - "c500", - "C500", - "C510", - "C510w", - "C510W", - "C520", - "C520SW", - "c520ws", - "C520ws", - "C530WS", - "C70", - "CP 310", - "cp11", - "CS510W", - "CW320WS", - "D130", - "InSight S485", - "IPC42A", - "IPC443AM", - "IPC44AN", - "IPC48AW", - "IPC55AE", - "IPC64NA", - "NC-200", - "NC450-2", - "Other", - "SC-200", - "SC3171", - "Tabo C210", - "Tape C210 V2", - "Tapo C100", - "TAPO C100", - "Tapo C110", - "Tapo c200", - "Tapo C200", - "TAPO C200C", - "Tapo C225", - "tapo C310", - "Tapo C310", - "TAPO C310", - "tapo c310", - "Tapo C320WS", - "Tapo C325WB", - "Tapo C60", - "TAPO C71", - "TAPO TC60", - "Tapo TC70", - "Tapo TC75", - "Tapo_C520WS", - "Tapo-c200", - "tapoc310", - "TC40", - "tc41", - "TC65", - "TC71", - "tl-ipc44aw", - "TL-IPC633-Z", - "TL-IPC638-AEZ", - "TL-IPC63N", - "TP70", - "TP-C320WB", - "tp-c325wb", - "TP-LINK TL-IPC423P-6", - "Vigi", - "Vigi 400", - "VIGI C240", - "VIGI C300HP-6", - "VIGI C320I 1.0", - "VIGI C330 1.0", - "VIGI C340I", - "VIGI C340W", - "VIGI C400HP-2.8 1.0", - "VIGI C400HP-4", - "VIGI C420I 1.0", - "VIGI C440", - "VIGI C440I", - "VIGI C440-W", - "VIGI C450", - "VIGI C540", - "VIGI C540 2.0", - "Vigi C540V 1.0", - "VIGI C540-W 1.0", - "vivo c540" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1" - }, - { - "models": [ - "110", - "IP-501P", - "TL-SC4171G 5", - "TV-751WIC", - "TVIP551WI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "110", - "252P", - "321", - "IP-501P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "2020", - "3130", - "3130G", - "3171", - "3171G", - "3220", - "3230n", - "3741", - "DCS 2020", - "NC220", - "Other", - "SC-2020", - "SC-2020N", - "SC-3031", - "SC-3130", - "SC-3130G", - "SC-3171", - "SC-3171G", - "SC-3230N", - "SC-3430", - "SC-3430n", - "SC-3430N", - "SC-3741", - "SC-4171G", - "TL-2020", - "TLSC-2020", - "TL-SC2020N", - "TLSC-3020N", - "TLSC-3130", - "TLSC-3130G", - "TLSC-3171", - "TLSC-3171G", - "TLSC-3230", - "TLSC-3230N", - "TLSC-3430", - "TLSC-3430N", - "TLSC-4171", - "TLSC-41716", - "TLSC-4171G", - "TL-SC4171G 4", - "TPLINK", - "WVC54GCA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "2020", - "3130", - "3130g", - "3130G", - "3170C", - "3171", - "3171G", - "3430", - "3741", - "Other", - "SC-1713G", - "SC-2020", - "SC-2020N", - "sc3030", - "sc3031", - "SC-3031", - "SC3130", - "SC-3130G", - "SC-3171", - "SC-3171G", - "SC3230", - "SC-3230N", - "SC-3430", - "SC-3741", - "TLSC-2020", - "TLSC-2020N", - "tl-sc3130", - "TLSC-3130", - "TLSC-3130g", - "TLSC-3130G", - "TL-SC3130G V1", - "TLSC-3171", - "TLSC-3171G", - "TLSC-3230", - "TLSC-3230N", - "TLSC-3430", - "TLSC-4171G", - "WXH-103232-EACBA" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "252P", - "IP-110", - "IP-TV422W", - "Other", - "TV-410W", - "TVIP-100W", - "TVIP-110WN", - "TV-IP252P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "3020", - "NC-200", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "311", - "311PI", - "IP-311", - "TV-314pi", - "TV-IP314PI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "311PI", - "C310", - "C320WS", - "IP-320PI", - "Tapo C310", - "TV-IP319PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "3120", - "3130", - "3130G", - "3170C", - "3171", - "3171g", - "3171G RTSP", - "3230N", - "3430", - "4171g", - "4171G", - "c 100", - "C200", - "C510W", - "Other", - "SC-2020", - "SC-3031", - "SC-3130", - "SC-3130G", - "SC-3171", - "SC-3171G", - "SC-3171G-my", - "SC3171Gv1", - "SC-3220", - "SC-3230", - "SC-3230N", - "SC-3430", - "SC-4171G", - "SC-4171G-2", - "TL-3050", - "TLSC-2020N", - "TLSC-3020N", - "TLSC-31", - "TLSC-3130", - "TLsc3130g", - "TLSC-3130G", - "TLSC-3171", - "TLSC-3171G", - "TLSC-3230", - "TLSC-3430N", - "TLSC-4171", - "TLSC-4171G", - "TL-SC4171G 2", - "TPLINK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "3130", - "3130G", - "3171", - "3171G", - "Other", - "SC-2020", - "SC3130", - "SC-3130G", - "SC-3171", - "sc3171g", - "SC-3171G", - "TL-SC", - "TLSC-2020", - "TLSC-3130", - "TLSC-3130G", - "TLSC-3171", - "TLSC-3171 v2", - "TLSC-3171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "3130", - "3160", - "3171G", - "C310", - "Other", - "SC-3130G", - "SC3171", - "SC-3171G", - "TL-SC3130G V1", - "TL-SC3170G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - }, - { - "models": [ - "3130", - "3171", - "3171g", - "3171G", - "Other", - "SC-1713G", - "SC-3130Gv2", - "sc3171g", - "SC-3171G", - "tlsc31", - "TLSC-3171", - "TL-SC3171G", - "tlscg1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro2" - }, - { - "models": [ - "3130", - "3171G", - "SC3130v2", - "SC-3171G", - "TLSC-3171G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro3" - }, - { - "models": [ - "3130", - "3171", - "3171G", - "3741", - "4171G", - "Other", - "SC-1713G", - "SC-2020", - "SC-3130", - "SC-3130G", - "SC3171", - "SC-3171G", - "SC3171-Grafeio", - "SC3171-Grafeio2", - "SC-3430", - "SC-4171G", - "TLSC-2020", - "TLSC-2020N", - "TLSC-3130", - "TLSC-3130G", - "TLSC-3130PC", - "TLSC-3171", - "TLSC-3171G", - "TLSC-3430", - "TLSC-4171", - "TLSC-4171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "3130g", - "sc-2020", - "SC-2020", - "SC-3130G", - "SC-3430" - ], - "type": "JPEG", - "protocol": "http", - "port": 8081, - "url": "/jpg/image.jpg?size=3" - }, - { - "models": [ - "3130G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "3171", - "3171G", - "C200", - "C310", - "C400HP-2.8", - "JKY", - "Other", - "SC-2020", - "TLSC-2020", - "TL-SC2020N", - "TLSC-3137G", - "TLSC-3171G", - "TLSC-3230", - "TLSC-3230N", - "TV-300i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.mjpg" - }, - { - "models": [ - "3171G", - "Other", - "SC-2020", - "SC-3040", - "SC-3171G", - "SC-3430", - "TL-IP551W", - "TLSC-2020", - "TLSC-2020N", - "TLSC-3130", - "TLSC-3171G", - "TLSC-3230" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "3230n", - "Other", - "SC-3230", - "SC-3230N", - "Tapo c200", - "TLSC-3230", - "TLSC-3230N" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "3230N", - "SC3230", - "SC-3230N", - "TLSC-3230" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "3430", - "Other", - "SC-3130G", - "SC-3220N", - "SC-3230N", - "SC-3430", - "SC-3430n", - "Tapo C100", - "TC70", - "TLSC-2020", - "TLSC-3230", - "TLSC-3230N", - "TLSC-3430", - "TLSC-3430N", - "TVIP-310PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.h264" - }, - { - "models": [ - "3741", - "4171G", - "dcs 2020", - "Other", - "SC-2020", - "SC-2020DN", - "SC-2020N", - "SC-3130G", - "SC3171", - "SC-3220N", - "SC3230", - "SC-3430", - "TL-MR2020", - "TLSC-2020", - "TLSC-2020N", - "TLSC-3130", - "TLSC-3130G", - "TLSC-3171", - "TLSC-3171G", - "TLSC-3430", - "TLSC-4171G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "3741", - "Other", - "SC-1713G", - "SC-3130G", - "SC-3171", - "SC-3171G", - "SC-4171G", - "TLSC-3130", - "TLSC-3130G", - "TLSC-3171", - "TLSC-3171G", - "TLSC-3230", - "TLSC-3430", - "TLSC-4171", - "TLSC-4171g", - "TLSC-4171G" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "430C", - "c100", - "C111", - "C120", - "C121", - "c200", - "C200", - "C225", - "C230", - "C240I", - "C310", - "C320Ws", - "C325WB", - "C340", - "C350", - "C400HP", - "C400HP-2.8", - "C400HP-2.8 1.0", - "C430I 1.0", - "c500", - "C500", - "C510W", - "C520WS", - "C530WS", - "cs320", - "CW320", - "CW320WS", - "D130", - "IPC48AW", - "tapo", - "Tapo C100", - "Tapo c200", - "Tapo C210", - "Tapo C220", - "TAPO C310", - "Tapo TC70", - "TC100", - "TC60", - "TC65", - "TL-IPC63N", - "VIGI C300", - "VIGI C300HP-4", - "VIGI C540", - "VIGI C540 2.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "450", - "nc220", - "NC220", - "NC230", - "NC250", - "NC260", - "NC450", - "NC450-2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/h264_vga.sdp" - }, - { - "models": [ - "450", - "C310", - "loor", - "NC230", - "NC250", - "nc-260", - "NC260", - "NC260 RTSP", - "NC400", - "NC450", - "NC450-2", - "NC450-2_anda", - "ntani", - "Other", - "Tapo c200", - "TL-NC230", - "wmm" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_hd.sdp" - }, - { - "models": [ - "520ws", - "C100", - "C110", - "c120", - "C200", - "c210", - "C210", - "C220", - "c310", - "C310", - "C320WS", - "C325WB", - "c420", - "C425", - "c500", - "C500", - "C510w", - "C60", - "kc420ws", - "NC400", - "tapo", - "TAPO C100", - "Tapo c200", - "TAPO TC60", - "TAPOC310", - "TC65", - "tc70" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "ANC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "imagep/picture.jpg" - }, - { - "models": [ - "BASIC 01", - "SC3230", - "TLSC-3137G", - "TL-SC3230", - "TLSC-3230N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "c 100", - "tc310", - "TC60" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "C100", - "C310", - "NC220", - "Other", - "SC-32230", - "SC-3230N", - "VIGI C330I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "C100x", - "C210", - "c310", - "NC450-2", - "tc310", - "Topo C310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "C110" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "C121", - "c330", - "C430I 1.0", - "Tapo c200", - "tapo c320ws" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream1" - }, - { - "models": [ - "c200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 800, - "url": "/mjpeg.cgi" - }, - { - "models": [ - "C200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Camera%201" - }, - { - "models": [ - "C210", - "KC100 Home Assistant Integration", - "Tapo c200", - "TAPO C310", - "tapo c310 f552" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 554, - "url": "/live/BalconyCam" - }, - { - "models": [ - "C240I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1/Profile1" - }, - { - "models": [ - "C310" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "C310", - "Tapo C310" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/view.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "C310", - "Tapo C310" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "c500", - "Tapo c200", - "Tapo C200C", - "tapo c310", - "TAPO C71", - "Tapo D235", - "TC70", - "VIGI C355" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/stream1" - }, - { - "models": [ - "c500", - "C510W", - "Tapo C210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif-stream2" - }, - { - "models": [ - "DCS", - "DCS-2332L", - "DCS-935L", - "IP-572PI", - "TV-IP562WI", - "TV-IP571PI", - "TV-IP745SIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "dcs 931l", - "DCS-2102", - "DCS-2130", - "DCS-930L", - "dcs-932l", - "IP-551W1", - "IP-672W", - "Other", - "SC-2020", - "TLSC-3171", - "TV-851WI", - "TV-IP110WN", - "TVIP551W", - "TV-IP551WI", - "TV-IP672PI", - "TV-IP751WC", - "TV-IP851WIC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "DCS-2130", - "TL-SC4171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "DCS-2130", - "DCS-2332L" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dms" - }, - { - "models": [ - "DCS-5020L", - "DCS-520L", - "DCS-930", - "DCS-930L", - "DCS-932l", - "DCS-932LB", - "Other", - "SC3230", - "TL-IP551W", - "TLSC-3230", - "TLSC-3230N", - "TP-IP751", - "TVIP-100W", - "TV-IP551W", - "TV-IP751WC", - "TV-IP751WIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "DCS-5020L", - "TL-SC4171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "IC-5150W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "IP311PI" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "IPC669-A4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream1?channel=2" - }, - { - "models": [ - "IP-TV422W", - "TV-IP310" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "N3230", - "Other", - "SC3230" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "NC200", - "NC220" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/stream/getvideo" - }, - { - "models": [ - "NC-200", - "NC230", - "TPLINK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "NC-200" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-200" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "NC-200", - "nc210", - "Tapo c200", - "TL-SC4171G", - "tp-link IPC-43AN-ZOOM-DUAL 1.0" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "nc220", - "NC230", - "NC250", - "NC450-2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/stream/video/mjpeg" - }, - { - "models": [ - "NC250", - "tp-wr105eu" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other", - "SC-3220", - "SC-3220N", - "SC-32230", - "SC-3230", - "SC-3230N", - "TLSC-3230N", - "TP-LINK-S1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "Winkel" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "SC-3230N", - "TLSC-3020N", - "TLSC-3230" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/jpg/image.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Other", - "TLSC-3130", - "TLSC-3130G", - "TLSC-3171", - "TLSC-3171G", - "TLSC-4171G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "live/mjpeg" - }, - { - "models": [ - "Other", - "SC-3230", - "SC-3230N", - "TLSC-3020N", - "TLSC-3130", - "TLSC-3230", - "TLSC-3230N" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "Other", - "SC-3230", - "SC-3230N", - "TLSC-3230" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "SC-2020N", - "tl-3130g", - "TLSC-2020", - "TL-SC4171" - ], - "type": "JPEG", - "protocol": "http", - "port": 1180, - "url": "/jpg/image.jpg" - }, - { - "models": [ - "SC-3230", - "SC-3230N", - "TAPO C100", - "TLSC-3020N", - "TLSC-3230", - "TLSC-3230N" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Tapo C100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Tapo c200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/net_video.cgi?channel=0" - }, - { - "models": [ - "Tapo c200" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 2020, - "url": "/onvif/device_service" - }, - { - "models": [ - "tapo c320ws" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/stream2" - }, - { - "models": [ - "Tapo C530WS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream8" - }, - { - "models": [ - "Tapo D235" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/stream2" - }, - { - "models": [ - "TLSC-3130" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "TLSC-3130" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "TLSC-3171G" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "TL-SC3230N", - "TV-IP311PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "TP-Link 3230" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "TV IP110W", - "TV-IP110WN", - "TV-IP262PI", - "TV-IP312", - "TV-IP312W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/tptek.json b/data/brands/tptek.json deleted file mode 100644 index cdf392f..0000000 --- a/data/brands/tptek.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Tptek", - "brand_id": "tptek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5MP", - "C6F0SoZ0N0PmL2", - "MP8", - "Other", - "tpek", - "WO1013E", - "WO2018E(8MP)", - "WOR205-5XCH" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "960p", - "UNLISTED" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C6F0SoZ0N0PmL2", - "MP8", - "Other", - "WO2018E(8MP)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/tr-d4101ir1v3.json b/data/brands/tr-d4101ir1v3.json deleted file mode 100644 index 9237b08..0000000 --- a/data/brands/tr-d4101ir1v3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tr-d4101ir1v3", - "brand_id": "tr-d4101ir1v3", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/traficon.json b/data/brands/traficon.json deleted file mode 100644 index 60fbcc7..0000000 --- a/data/brands/traficon.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Traficon", - "brand_id": "traficon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2018", - "JA7204S-2", - "K9604-W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "d3004v" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=2&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "JA7204S-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=6&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "JA7204S-2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - } - ] -} \ No newline at end of file diff --git a/data/brands/trantech.json b/data/brands/trantech.json deleted file mode 100644 index 72c40aa..0000000 --- a/data/brands/trantech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Trantech", - "brand_id": "trantech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ufirststream" - } - ] -} \ No newline at end of file diff --git a/data/brands/trasera.json b/data/brands/trasera.json deleted file mode 100644 index 1fdf094..0000000 --- a/data/brands/trasera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Trasera", - "brand_id": "trasera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CIPCAMPTIWL V1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/trassir.json b/data/brands/trassir.json deleted file mode 100644 index 00f179f..0000000 --- a/data/brands/trassir.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Trassir", - "brand_id": "trassir", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2141", - "2143", - "3243", - "D2B5 3.6", - "d2s5", - "D8121IR2V3", - "D8121IR2V4", - "D8121IRV4", - "IPC-M0502", - "TR 2141", - "TR-D2121IR3", - "TR-D2123IR6", - "TR-D2143IR6", - "TR-D2221WDIR4", - "tr-d2d1 2.8", - "TR-D3121IR1", - "TR-D4141R1", - "TR-D4S5 v2", - "TR-D7111IR1W", - "TR-D7141IR1", - "TR-D8111IR2W", - "TR-D8121IR2W", - "TR-D8121WDIR2V2", - "TR-D9151", - "TR-W2C1", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/main" - }, - { - "models": [ - "TR-D4101IR1V3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "TR-D4S5 v2", - "TR-W2C1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/sub" - }, - { - "models": [ - "TR-D8121IR2V6", - "TR-X204v2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/trek.json b/data/brands/trek.json deleted file mode 100644 index 2be056f..0000000 --- a/data/brands/trek.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "brand": "Trek", - "brand_id": "trek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ai ball 01", - "Ai-Ball", - "Ai-Ball_1", - "Ai-Ball2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Ai-Ball" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "?action=snapshot" - }, - { - "models": [ - "Ai-Ball", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=appletvstream" - }, - { - "models": [ - "Ai-Ball" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/trendnet.json b/data/brands/trendnet.json deleted file mode 100644 index 17cf2cf..0000000 --- a/data/brands/trendnet.json +++ /dev/null @@ -1,2035 +0,0 @@ -{ - "brand": "Trendnet", - "brand_id": "trendnet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100", - "100W", - "110", - "110W", - "400", - "551W", - "551wi", - "651W", - "B30", - "IP100", - "IP110", - "IP-551W", - "IP-551W1", - "IP-55IWI", - "IP-651WI", - "Other", - "TP 571WC", - "Trend Net: IP-751WIC", - "TV-110", - "TV-IP 501p", - "TV-IP100", - "TV-IP100 / 100W", - "tv-ip100/a", - "TV-IP100N", - "TV-IP100W", - "TV-IP100W-N", - "TV-IP110W", - "tv-ip110wn", - "TV-IP200W", - "tv-ip3220wi", - "TV-IP400w", - "TV-IP410W", - "TV-IP501P", - "tvip501w", - "TV-IP501W", - "TVIP551W", - "TVIP551WI", - "TV-IP600", - "TV-IP600W", - "TV-IP651W", - "TV-IP651WI", - "TV-IP751W", - "TV-IP751WC", - "TV-IP751WC(TV-IP751WC)", - "TV-IP751WC/A", - "TvV IP 0100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "100", - "100W", - "110", - "110W", - "110WN", - "312W", - "410", - "422W", - "672WI", - "IP100", - "IP-252P", - "IP312w", - "IP-312WN", - "IP-410", - "IP-410W", - "IP-422W", - "IP-672PI", - "ip-tv110wn", - "IP-TV121W", - "IP-TV422w", - "IP-TV422W", - "IPV-422WN", - "Other", - "TP-IP110W", - "TRENDNET TV-IP410 Series", - "tv ip110w", - "TV-IP100 / 100W", - "TV-IP110", - "TV-IP110/A", - "TVIP110W", - "TV-IP110WN", - "tv-ip121w", - "TV-IP121WN", - "Tv-IP201P", - "TV-IP212", - "TV-IP212W", - "TV-IP252P", - "TV-IP262P/A", - "TV-IP262PI", - "TV-IP301", - "TV-IP302PI", - "TV-IP312", - "TV-IP312W", - "TV-IP312WN", - "TV-IP322P", - "TV-IP400w", - "TV-IP410", - "TV-IP410w", - "TV-IP410W", - "TV-IP410WN", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-IP851WIC", - "TV-VS1", - "vip110w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "100", - "110", - "110W", - "400", - "551WI", - "55w", - "Indoor1", - "IP-110", - "ip55IWI", - "IP-651w", - "IP-651W", - "IP-651WI", - "IP-TV110", - "Other", - "tv651wi", - "TV-751WIC", - "TV-i501P", - "TV-IP 501P", - "TV-IP100", - "TV-IP100 / 100W", - "TV-IP100W-N", - "TVIP110", - "TVIP110W", - "TV-IP110WN", - "TV-IP121W", - "TV-IP200A", - "TV-IP201W", - "TV-IP212", - "TV-IP252P", - "TV-IP300", - "TV-IP301", - "TV-IP312W", - "TV-IP312WN", - "TV-IP322P", - "TV-IP400", - "TV-IP400w", - "TV-IP410", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-IP501W", - "TV-IP512P", - "TV-IP512WN", - "TV-IP522P", - "TVIP551W", - "TVIP-551WI", - "TV-IP572WI", - "TV-IP600", - "TV-IP600W", - "TV-IP602", - "TV-IP651W", - "TV-IP651WI", - "TV-IP672P", - "TV-IP672W", - "TV-IP751W", - "TV-IP751WC", - "TV-IP751WIC", - "TV-IP851WC", - "TV-IP851WIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "100", - "110", - "110W", - "110WN", - "312w", - "312W", - "400W", - "410W", - "422W", - "IP-110", - "ip110wn", - "IP-252P", - "IP-262PI", - "IP-311", - "IP-312PI", - "IP-410", - "IP-TV110", - "IP-TV121W", - "IP-TV1312", - "IPTV-2525P", - "IP-TV410w", - "IP-TV422", - "IP-TV422W", - "IPV-422WN", - "Other", - "sp5511", - "TP-IP110W", - "TP-IP110WN", - "TP-IP912", - "TV-110", - "TV-312W/A", - "tv-ip100", - "TV-IP100 / 100W", - "TVIP110", - "TV-IP110/A", - "TV-IP110lan", - "TVIP110W", - "TV-IP110WN", - "TV-IP121W", - "TV-IP121WN", - "TV-IP212", - "TV-IP212W", - "TV-IP252P", - "TV-IP262P/A", - "TV-IP262PI", - "TV-IP312", - "TV-IP312W", - "TV-IP312W/A", - "TV-IP312WN", - "TV-IP322P", - "TV-IP410", - "TV-IP410w", - "TV-IP410W", - "TV-IP410WN", - "tv-ip422", - "TV-IP422", - "TV-IP422 / 422W", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-IP512", - "TVIP-551W", - "TV-IP600", - "TVP110", - "TvV IP 0100", - "TV-VS1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "100", - "110", - "400", - "Indoor1", - "IP-551W", - "ip-600w", - "Other", - "TV651WI", - "TV-751WC", - "TV-751WIC", - "TV-851WI", - "TVIP-100", - "TV-IP100 / 100W", - "TV-IP100N", - "TV-IP200a", - "TV-IP400", - "TV-IP400w", - "TV-IP410W", - "TV-IP442W", - "TV-IP501P", - "TV-IP501W", - "TV-IP551W", - "TV-IP551WI", - "TV-IP600", - "TV-IP600W", - "TV-IP651W", - "TV-IP651WI", - "TV-IP651Z", - "TV-IP751WC/A", - "tv-ip751wic" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "110", - "110WN", - "410W", - "422W", - "ip 110", - "IP-110", - "ip110w", - "IP-252P", - "ip410", - "IP-TV121W", - "Other", - "TP-IP110W", - "TP-IP110WN", - "tv ip110w", - "TV-410W", - "TV-4140W", - "TV-IP", - "TV-IP100", - "TV-IP100 / 100W", - "TVIP110", - "TVIP110W", - "TV-IP110WN", - "TV-IP121W", - "TV-IP121WN", - "TV-IP212", - "TV-IP212W", - "TV-IP252P", - "TV-IP262PI", - "TV-IP301", - "TV-IP312", - "TV-IP312W", - "TV-IP312WN", - "TV-IP322P", - "TV-IP410", - "TV-IP410w", - "TV-IP410WN", - "TV-IP422", - "TV-IP422 / 422W", - "TV-IP422W", - "TV-IP422WN", - "TV-IP501W", - "TV-IP651W", - "TV-VS1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "110", - "551W", - "751wc", - "IP-551w", - "IP-551W", - "Other", - "TP-IP551W", - "TV-501W", - "TV-751WC", - "TV-IP100", - "TV-IP100 / 100W", - "TV-IP501P", - "TV-IP551/651", - "TVIP551W", - "TVIP551WI", - "TV-IP572WI", - "TV-IP651W", - "TV-IP651WI", - "TV-IP672PI", - "tv-ip751wic", - "TV-IP751WIC", - "TV-IP851WC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "MJPEG.CGI" - }, - { - "models": [ - "110" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "310", - "310PI", - "311", - "311PI", - "321", - "IP-1319", - "IP-262PI", - "IP-310", - "IP311PI", - "IP-312PI", - "IP-320PI", - "IP-321PI", - "ip400", - "ip420", - "IP-420P", - "IP440PI", - "IP-7621C", - "IP-TV1311PI", - "IP-TV318PI", - "IP-TV450P", - "NVR-216", - "Other", - "trendnet tv-ip325pi", - "TRENDNET TV-IP410 SERIES", - "trendnet762", - "TV-311IP", - "TV-311PI", - "TVIP", - "TV-IP121WN", - "TV-IP1315PI", - "TV-IP1318PI", - "TV-IP1319PI", - "TV-IP1328PI", - "TV-IP1329PI", - "TV-IP301", - "tvip310pi", - "TV-IP310PI", - "TV-IP310PI H264", - "TV-IP310PI_dk", - "TV-IP311", - "TV-IP3114PI", - "TV-IP311P", - "tvip-311p1", - "TV-IP311PI", - "TV-IP312", - "TV-IP3129PI", - "TV-IP312PI", - "TV-IP314IP", - "tv-ip314pi", - "TV-IP315PI", - "TV-IP316PI", - "TV-IP317pi", - "TV-IP317PI", - "TV-IP318PI", - "TV-IP319PI", - "TV-IP320PI", - "TV-IP320PIA", - "TV-IP321PI", - "TV-IP322P", - "TV-IP323PI", - "tv-ip324pi", - "TV-IP324PI", - "TV-IP325PI", - "TV-IP326a", - "TV-IP327PI", - "TV-IP328PI", - "TV-IP341PI", - "TV-IP344PI", - "TV-IP420P", - "TV-IP430PI", - "TV-IP440PI", - "TV-IP450P", - "TV-IP450PI", - "TV-IP512wn", - "TV-IP572WI", - "tv-ip762ic", - "TV-IP851WC", - "TV-IP851WIC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "310", - "311PI", - "Other", - "TV-IP310PI", - "TV-IP310PI H264", - "TV-IP311PI", - "TV-IP321PI", - "tv-ip324pi", - "TV-IP324PI", - "tv-ip420p", - "TV-IP420P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "PSIA/Streaming/channels/1?videoCodecType=MPEG4" - }, - { - "models": [ - "310", - "IP310PI", - "IP-311", - "IP-320PI", - "IP-TV1312", - "Other", - "TV-IP1313", - "TV-IP1314PI", - "TV-IP1319", - "TV-IP1322", - "TV-IP310PI", - "TV-IP311PI", - "tv-ip318pi", - "TV-IP320i", - "TV-IP320PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "310ip", - "310IP", - "319pi", - "320", - "IP-311PI", - "ip314pi", - "IP-320PI", - "IP-322WI", - "IP-TV318PI", - "TV-IP312PI", - "TV-IP317pi", - "TV-IP320PI", - "TV-IP321pi", - "tv-ip324pi", - "tv-ip327pi", - "TV-IP344P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "310IP", - "310PI", - "IP-310", - "IP-320PI", - "IP-322WI", - "IP-TV1322", - "Other", - "TV-310", - "TV-672PI", - "TV-IP310PI", - "TV-IP314IP", - "TV-IP341PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "310PI", - "312w", - "312W", - "422W", - "IP-422W", - "IP-TV1312", - "IP-TV1322", - "IP-TV1322WI", - "IP-TV262P", - "IP-TV422", - "Other", - "TP-IP110W", - "TV-311PI", - "TV-312W/A", - "TV-IP212", - "TV-IP212W", - "TV-IP252P", - "TV-IP262P", - "TV-IP262P/A", - "TV-IP262PI", - "TV-IP310", - "TV-IP310PI", - "TV-IP311", - "TV-IP311PI", - "TV-IP312", - "TV-IP312W", - "TV-IP312WN", - "TV-IP314PI", - "TV-IP321PI", - "TV-IP322P", - "TV-IP410WN", - "TV-IP422", - "TV-IP422 / 422W", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-VS1" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "311ip" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "311PI", - "3MP", - "IP-311PI", - "IP-TV1311PI", - "trendnet762", - "TV- IP325PI", - "TV-311PI", - "TV-IP1315PI", - "TV-IP310PI", - "TV-IP310PI H264", - "TV-IP311PI", - "TV-IP315PI", - "TV-IP318PI", - "TV-IP321PI", - "TV-IP328PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "311PI", - "IP-320PI", - "TV-312W/A", - "TV-IP310PI", - "TV-ip321pi", - "TV-IP321PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "311PI", - "321", - "422W", - "IP-310", - "IP311PI", - "IP313PI", - "IP-322WI", - "TV-IP310PI", - "TV-IP310PI H264", - "TV-IP310PIBC", - "TV-IP311P", - "TV-IP311PI", - "TV-IP322WI", - "TV-IP851WIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "313PI", - "IP-315PI", - "Other", - "TV-IP311PI", - "tv-ip314pi", - "TV-IP315PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "321", - "IP314PI", - "IP-320PI", - "TP-IP324", - "tv ip322wi", - "TV IP322WI", - "TV-IP314IP", - "TV-IP314PI", - "TV-IP320PI", - "TV-IP340PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "400", - "400W", - "551W", - "651WI", - "IP-400", - "IP-651WI", - "Other", - "TV-IP100", - "TV-IP400", - "TV-IP400w", - "TV-IP501P", - "TV-IP551W", - "TV-IP551WI", - "TV-IP55IWI", - "TV-IP600", - "TV-IP600W", - "TV-IP651W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "551W", - "IP-551", - "IP-551W", - "IP-55IWI", - "Other", - "TP-IP551W", - "TV-i501P", - "TV-IP200a", - "TV-IP501P", - "TV-IP512WN", - "TV-IP551W", - "TV-IP551WI", - "TV-IP55IWI", - "TV-IP600 #1", - "TV-IP651W", - "TV-IP651WI", - "TV-IP751WC/A", - "TV-IP851WIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "551W", - "651WI", - "672WI", - "920", - "IP-262PI", - "IP-501P", - "IP-551", - "IP-551W", - "IP-55IWI", - "IP-572PI", - "IP-662PI", - "IP672", - "IP-672", - "IP-672PI", - "ip672wi", - "IP-672WI", - "IP-7621C", - "IP-851WIC", - "IP-8621C", - "Other", - "TP-IP110W", - "TV-110", - "TV-671WI", - "TV-IP", - "TV-IP 661", - "TVIP110W", - "TV-IP512", - "TV-IP512P", - "TV-IP512WN", - "TV-IP522P", - "TV-IP551W", - "TVIP-551WI", - "TV-IP55IWI", - "TV-IP562W", - "TV-IP562WI", - "tv-ip563wi", - "TVIP-572PI", - "TV-IP572W", - "TV-IP572WI", - "TV-IP602", - "TV-IP602WN", - "TV-IP612", - "TV-IP612P", - "TV-IP612WN", - "TV-IP651-180", - "TV-IP651-185", - "TV-IP651W", - "TV-IP651WI", - "TV-IP662PI", - "TV-IP662WI", - "tv-ip662wi-a1", - "TV-IP672P", - "TVIP672PI", - "TV-IP672W", - "TV-IP672WI", - "TV-IP745SIC", - "TV-IP751WC", - "TV-IP751WC(TV-IP751WC)", - "TV-IP751WC/A", - "TV-IP7621C", - "tv-ip762ic", - "TV-IP762IC", - "TV-IP851", - "TV-IP851WC", - "TV-IP851WIC", - "TV-IP862IC", - "TV-IP862IC/A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/jpeg.cgi" - }, - { - "models": [ - "551WI", - "IP-551W", - "IP-55IWI", - "IP-572PI", - "ip651w", - "IP-672WI", - "IP851wic", - "IP-851WIC", - "Other", - "TP-IP551W", - "TV-510ip", - "TV-I501P", - "TV-IP100", - "TV-IP100 / 100W", - "TVIP110", - "TVIP110W", - "TV-IP110WN", - "TV-IP121W", - "TV-IP201W", - "TV-IP252P", - "TV-IP300", - "TV-IP301", - "TV-IP312", - "TV-IP312W", - "TV-IP312WN", - "TV-IP322P", - "TV-IP400", - "TV-IP410", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP501P", - "TV-IP501W", - "TV-IP512P", - "TV-IP512WN", - "TV-IP551W", - "TVIP-551WI", - "TV-IP572PI", - "TV-IP572WI", - "TV-IP600", - "TV-IP612WN", - "TV-IP651W", - "TV-IP651WI", - "TV-IP672P", - "TV-IP672PI", - "TV-IP751WC", - "TV-IP751WIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "651W", - "651WI", - "672WI", - "BabyCam", - "IP-551W", - "IP-551W1", - "IP-572PI", - "ip572w", - "IP-612P", - "ip-651wi", - "IP-651WI", - "IP-662PI", - "IP-672", - "IP-672PI", - "IP-672W", - "IP-672WI", - "IP751WC", - "IP-7621C", - "IP-851WIC", - "IP-8621C", - "IP-TV751WIC", - "Other", - "TP-IP110W", - "TP-IP551W", - "tv ip551wi", - "tv501", - "TV-512P", - "tv562wi", - "TV-672PI", - "TV-I501P", - "TV-IP100", - "TV-IP100 / 100W", - "TVIP110", - "TVIP110W", - "TV-IP110WN", - "TV-IP201W", - "TV-IP212W", - "TV-IP252P", - "TV-IP300", - "TV-IP301", - "TV-IP312", - "TV-IP312W", - "TV-IP312WN", - "TV-IP322P", - "TV-IP400", - "TV-IP410", - "TV-IP410W", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-IP501P", - "TV-IP512", - "TV-IP512P", - "TV-IP512WN", - "TV-IP522P", - "TVIP-551W", - "TV-IP551WI", - "TV-IP562WI", - "TV-IP562WI/A", - "TV-IP571PI", - "TV-IP572P", - "TV-IP572pi", - "TV-IP572PI", - "TV-IP572W", - "TV-IP572WI", - "TV-IP600", - "TV-IP600W", - "TV-IP602WN", - "TV-IP612", - "TV-IP612P", - "TV-IP612WN", - "tv-ip622wi", - "TV-IP651W", - "TV-Ip662pi", - "TV-IP662PI", - "TV-IP662WI", - "TV-IP672P", - "TVIP672PI", - "TV-IP672W", - "TV-IP672WI", - "TV-IP743SIC", - "TV-IP745SIC", - "TV-IP751WC", - "TV-IP751WC(TV-IP751WC)", - "TV-IP751WIC", - "TV-IP7621C", - "TV-IP762IC", - "tv-ip851", - "TV-IP851WC", - "TV-IP851WIC", - "TV-IP862IC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video/mjpg.cgi" - }, - { - "models": [ - "672WI", - "IP-320PI", - "ip400", - "ip572pi", - "IP-672", - "IP-672PI", - "IP-672WI", - "IP-8621C", - "Other", - "TV-IP310PI", - "TV-IP310PI H264", - "TV-IP311PI", - "TV-IP320", - "TV-IP320PI", - "TV-IP322P", - "tv-ip322WI", - "TV-IP345PI", - "TV-IP450P", - "TV-IP512", - "TV-IP512P", - "TV-IP512WN", - "TV-IP522P", - "TV-IP551W", - "TV-IP562WI", - "TV-IP572P", - "TV-IP572PI", - "TV-IP572WI", - "TV-IP602WN", - "TV-IP612P", - "TV-IP612WN", - "TV-IP662PI", - "TV-IP672P", - "TVIP672PI", - "TV-IP672W", - "TV-IP672WI", - "TV-IP745SIC", - "TV-IP7621C", - "TV-IP762IC", - "TV-IP851WIC", - "TV-IP862IC", - "tv-ip862ic/a" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "AIC250W", - "TV-IP200W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/VIDEO.CGI" - }, - { - "models": [ - "BabyCam", - "IP-672PI", - "IP762P", - "TV-IP512wn", - "TV-IP562WI", - "TV-IP672P", - "TV-IP7621C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/play1.sdp" - }, - { - "models": [ - "IP-1319", - "IP-315PI", - "TV-IP1318PI", - "tv-ip311pi", - "TV-IP311PI", - "TV-IP314PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "IP-300", - "IP672", - "IP-672WI", - "Other", - "TV-300", - "TV-I501P", - "TV-IP100", - "TV-IP100 / 100W", - "TVIP110", - "TVIP110W", - "TV-IP110WN", - "TV-IP201", - "TV-IP201W", - "TV-IP252P", - "TV-IP300", - "TV-IP300w", - "TV-IP301", - "TV-IP312", - "TV-IP312WN", - "TV-IP322P", - "TV-IP400", - "TV-IP410", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-IP512", - "TV-IP512P", - "TV-IP512WN", - "TV-IP551W", - "TV-IP572WI", - "TV-IP602", - "TV-IP612WN", - "TV-IP672P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "IP-301W", - "Other", - "TRENDnet TV-IP301", - "TV-IP100", - "TV-IP100 / 100W", - "TV-IP110W", - "TV-IP201", - "tv-ip201p", - "TV-IP201W", - "TV-IP210W", - "TV-IP212W", - "TV-IP252P", - "TV-IP300", - "TV-IP301", - "TV-IP312", - "TV-IP322P", - "TV-IP400", - "TV-IP410", - "TV-IP410W", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP512P", - "TV-IP512WN", - "TV-IP551W", - "TV-IP572WI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "ip310pi", - "IP-311PI", - "IP-312WN", - "IP-315PI", - "IP-320PI", - "Other", - "TV-311pi", - "tv-ip310", - "TV-IP310PI", - "TV-IP313", - "TV-IP314PI", - "TV-IP315PI", - "TV-IP316PI", - "TV-IP318", - "TV-IP320PI", - "TV-IP321pi", - "TV-IP322WI", - "tv-ip324pi", - "TV-IP344P", - "TV-IP410PI", - "tv-ip420p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "IP310PI", - "IP314PI", - "IP321PI", - "TVDVR", - "TV-IP310PI", - "TV-IP311PI", - "TV-IP314PI", - "TV-IP315PI", - "TV-IP320PI", - "TV-IP321PI", - "TV-IP322WI", - "TV-IP340PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "IP-315PI", - "TVDVR", - "TV-IP310PI", - "TV-IP315PI", - "TV-IP329PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/102" - }, - { - "models": [ - "IP-320PI", - "Other", - "TV-I501P", - "TV-IP100", - "TV-IP110W", - "TV-IP110WN", - "TV-IP201W", - "TV-IP212W", - "TV-IP252P", - "TV-IP301", - "TV-IP302", - "TV-IP302PI", - "TV-IP312", - "TV-IP322P", - "TV-IP342PI", - "tv-ip343pi", - "TV-IP345PI", - "TV-IP400", - "TV-IP410", - "TV-IP422W", - "TV-IP422WN", - "TV-IP512P", - "TV-IP512WN", - "TV-IP522P", - "TV-IP551W", - "TV-IP572WI", - "TV-IP672P", - "TV-IP672PI", - "TV-IP851WIC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10600, - "url": "GetData.cgi" - }, - { - "models": [ - "IP400", - "IP-551W", - "IP-551w1", - "IP715WC", - "Other", - "TV-IP100", - "TV-IP100 / 100W", - "TV-IP100W-N", - "TV-IP400", - "TV-IP501W", - "TV-IP512WN", - "TVIP551W", - "TV-IP551WI", - "TV-IP551WI/A", - "tv-ip571w", - "TV-IP651-1", - "TV-IP651-1W", - "TV-IP651W", - "TV-IP651WI", - "TV-IP672WI", - "TV-IP751WC", - "tv-ip851wc", - "TV-IP851WIC", - "tw400ip" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "IP410TI", - "TRENDNET TV-IP410 SERIES", - "TV-IP 420", - "TV-IP310PI", - "tv-ip325pi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "IP-501P", - "IP-551", - "Other", - "TV-IP551W", - "TV-IP551WI", - "TV-IP55IWI", - "TV-IP651W", - "TV-IP651WI", - "TV-IP751WC", - "tv-ip751wic" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "IP-551w", - "TV-IP315PI", - "TV-IP317pi", - "tv-ip318pi", - "TV-IP319PI", - "TV-IP325PI" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/mpeg4" - }, - { - "models": [ - "IP-55IWI", - "IP-TV110", - "IP-TV422W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "IP-572WI", - "IP-672", - "IP-672PI", - "IP-672WI", - "Mess", - "Other", - "TV-510ip", - "TV-IP512WN", - "TV-IP551WI", - "TV-IP572P", - "TVIP-572PI", - "TV-IP572WI", - "TV-IP612P", - "TV-IP662PI", - "TV-IP672P", - "TV-IP672PI", - "TV-IP672W", - "TV-IP672WI", - "TV-IP745SIC", - "TV-IP762IC", - "TV-IP862IC" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play2.sdp" - }, - { - "models": [ - "IP-672PI", - "IP-7621C", - "IP-8621C", - "Other", - "TV-IP321PI", - "TV-IP345PI", - "TV-IP562W", - "TV-IP572pi", - "TVIP-572PI", - "TV-IP662PI", - "TV-IP672P", - "TVIP672PI", - "TV-IP672WI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/OVProfile00" - }, - { - "models": [ - "IP-672WI", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "IP-7621C", - "TV-IP562WI", - "TV-IP612WN", - "TV-IP751WC", - "TV-IP762IC", - "TV-IP862IC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video/mjpg.cgi" - }, - { - "models": [ - "IP-7621C", - "TV-IP1514PI", - "TV-IP501P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "IP-TV110", - "IP-TV422w", - "trendnet tvip422w", - "TV IP 121WN", - "tv-ip110wn", - "tv-ip121w", - "TV-IP121W", - "TV-IP252P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "IP-TV1311PI", - "TV-IP311PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias[CHANNEL]" - }, - { - "models": [ - "IP-TV1312", - "Other", - "TV-IP1328PI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IP-TV1314PI", - "TV-IP1314PI", - "TV-IP1329PI", - "TV-IP314IP", - "TV-IP320PI", - "TV-IP420P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "IP-TV1314PI", - "TV-IP7621C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/play1" - }, - { - "models": [ - "IP-TV422", - "TV-IP110WN", - "TV-IP672PI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "IP-TV512P", - "nvr-1", - "tv-ip314pi", - "tv-ip322WI", - "TV-IP325PI", - "TV-IP342PI", - "TV-IP512P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "NC450", - "TV-IP321P", - "TV-IP751WC", - "TV-IP751WC(TV-IP751WC)" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image/jpeg.cgi" - }, - { - "models": [ - "Other", - "tv ip322wi", - "TV-IP851WIC" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 557, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "Other", - "tv-ip322WI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "Other", - "TV-IP110W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/1/video.mjpg" - }, - { - "models": [ - "Other", - "TV-IP345PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "axis-media/media.amp" - }, - { - "models": [ - "Other", - "TV-IP400", - "TV-IP422W", - "TV-IP651WI" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "TV-IP851WIC", - "TV-VS1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "TV-I501P", - "TV-IP100", - "TV-IP100 / 100W", - "TVIP110", - "TVIP110W", - "TV-IP110WN", - "TV-IP121W", - "TV-IP201", - "Tv-IP201P", - "TV-IP201P", - "TV-IP201W", - "TV-IP210", - "TV-IP212W", - "TV-IP252P", - "TV-IP300", - "TV-IP301", - "TV-IP312", - "TV-IP312W", - "TV-IP322P", - "TV-IP400", - "TV-IP410", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP512", - "TV-IP512P", - "TV-IP512WN", - "TV-IP551W", - "TV-IP572WI", - "TV-IP602", - "TV-IP602WN", - "TV-IP672W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other", - "TV-IP100", - "TVIP110W", - "TV-IP110WN", - "TV-IP121W", - "TV-IP201W", - "TV-IP212", - "TV-IP212W", - "TV-IP252P", - "TV-IP301", - "TV-IP312", - "TV-IP312W", - "TV-IP322P", - "TV-IP410", - "TV-IP422", - "TV-IP422W", - "TV-IP422WN", - "TV-IP442W", - "TV-IP512P", - "TV-IP512WN", - "TV-IP522P", - "TV-IP551W", - "TV-IP572WI", - "TV-IP612P", - "TV-IP612WN", - "TV-IP672P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "view2.cgi?profile=5" - }, - { - "models": [ - "Other", - "TV-512P", - "TV-IP321PI", - "TV-IP501P", - "TV-IP512P", - "TV-IP572P", - "TVIP-572PI", - "TV-IP572WI", - "TV-IP602WN", - "TV-IP672WI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play3.sdp" - }, - { - "models": [ - "tv1381", - "TV-IP1318IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/h264" - }, - { - "models": [ - "TV-312W/A", - "TV-IP314PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "TV-322WI", - "TV-323PI", - "TV-IP314PI", - "tv-ip322WI", - "TV-IP323PI", - "TV-IP325PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "TV-IP100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "TV-IP110W", - "TV-IP110WN", - "tv-ip121w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "/cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "TV-IP110WN", - "TV-IP851WIC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "TV-IP1313PI", - "TV-IP310PI", - "tv-ip311pi", - "TV-IP311PI", - "tv-ip314pi", - "TV-IP315PI", - "TV-IP317pi", - "TV-IP320PI", - "TV-IP326PI", - "TV-IP450P", - "TV-IP602WIN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "TV-IP1315PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/VideoInput/0/h264/1" - }, - { - "models": [ - "TV-IP1315PI", - "TV-IP1319PI", - "TV-IP319PI", - "TV-IP325PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "TV-IP1315PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h265" - }, - { - "models": [ - "TV-IP1318PI", - "TV-IP672P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/high-res.sdp" - }, - { - "models": [ - "TV-IP1319PI", - "tv-ip420p", - "TV-IP420PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "TV-IP1329PI", - "tv-ip318pi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "TV-IP201", - "TV-IP201P", - "TV-IP301", - "TV-ip301w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "TV-IP252P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/view2.cgi?profile=5" - }, - { - "models": [ - "TV-IP300", - "TV-IP301" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "TV-IP300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "TV-IP314IP", - "TV-IP320PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/ch0" - }, - { - "models": [ - "TV-IP314PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/1:1/main" - }, - { - "models": [ - "TV-IP320PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "TV-IP322WI", - "tv-ip420p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "TV-IP326PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=101.sdp?" - }, - { - "models": [ - "TV-IP340PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "TV-IP345PIv2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.sdp" - }, - { - "models": [ - "TV-IP400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "TV-IP400w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi" - }, - { - "models": [ - "TV-IP400W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.cgi?resolution=320x240" - }, - { - "models": [ - "TV-IP512wn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/play2.sdp" - }, - { - "models": [ - "TV-IP600" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/Image.jpg" - }, - { - "models": [ - "tvip651wi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "TV-IP751WC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "TV-IP751WC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg.cgi" - }, - { - "models": [ - "TV-IP751WC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/MJPEG.CGI" - }, - { - "models": [ - "TV-IP851WIC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/triax.json b/data/brands/triax.json deleted file mode 100644 index 67ba023..0000000 --- a/data/brands/triax.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Triax", - "brand_id": "triax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CM-MHL400", - "TBF 2IP", - "TBV 4IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264?ch=1&subtype=0" - }, - { - "models": [ - "CM-MHL400", - "TBF 2IP", - "TBV 4IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264?ch=1&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/trident.json b/data/brands/trident.json deleted file mode 100644 index 57f9e29..0000000 --- a/data/brands/trident.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Trident", - "brand_id": "trident", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TP100W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/trivision.json b/data/brands/trivision.json deleted file mode 100644 index 36fb37a..0000000 --- a/data/brands/trivision.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "brand": "Trivision", - "brand_id": "trivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "335PW", - "336PW", - "NC 335PW", - "NC-217WF", - "NC-240WF-HD-1080P", - "NC-316W", - "NC-326PW", - "NC-326W", - "nc-335", - "nc-335w", - "NC-336PW", - "NC-336PW-HD-1080P", - "NC-336W", - "NC-336W HD", - "NC-336W-HD-1080P", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "335PW", - "338wp-1080", - "cc 335pw", - "nc 335PW", - "NC-239WF", - "NC-240WF", - "NC-240WF-HD-1080P", - "nc-250hd 1080p", - "NC-250PW-HD 1080P", - "NC-250WP HD 1080P", - "NC-316PW", - "NC-316W", - "NC-335pw", - "NC-335PW-HD-1080P", - "nc336", - "NC-336PW-HD-1080P", - "NC-336PW-HD-1080P SBR", - "nc336w", - "NC-336W-HD-1080P", - "ntro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "335PW", - "MFC-228WF", - "MFC-229WF", - "nc 3333pw", - "NC-107W", - "nc-227wf-hd-720p", - "NC-240WF", - "NC-306W", - "NC-307W", - "NC-335PW", - "NC-335PW-HD-1080P", - "NC-336PW", - "NC-336PW-HD-1080P", - "NC-336W-HD-1080P", - "NC-360PW", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "nc 3333pw", - "nc 333pw", - "nc 33pw", - "NC-240WF-HD-1080P", - "NC-326G", - "NC-326PW", - "NC-326W", - "nc330pw", - "nc-335pw", - "NC-335PW-HD-1080P", - "NC-336P", - "NC-336PW", - "NC-336PW HD1080", - "NC-336PW-HD-1080P", - "NC-350PW HD 1080", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-107W", - "NC-336PW-HD-1080P", - "NC-336W-HD-1080P" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "stream.av" - }, - { - "models": [ - "NC-230WF", - "NC-335PW-HD-1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "NC-335PW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-335PW-HD-10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-335PW-HD-1080P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/live/1/mjpeg.jpg" - }, - { - "models": [ - "NC-335PW-HD-1080P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/live/0/mjpeg.jpg" - }, - { - "models": [ - "NC-335PW-HD-1080P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/stream.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "TV-IP110WN" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "TRI-VID23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live0.264" - }, - { - "models": [ - "TV-IP302PI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch1/stream0" - }, - { - "models": [ - "TV-IP302PI" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "TV-TY 308-2mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/tronitec.json b/data/brands/tronitec.json deleted file mode 100644 index 6a3e892..0000000 --- a/data/brands/tronitec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tronitec", - "brand_id": "tronitec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TR-200Z2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/truen.json b/data/brands/truen.json deleted file mode 100644 index 2d2d5f6..0000000 --- a/data/brands/truen.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Truen", - "brand_id": "truen", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "TCS-300" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "TN-B230CSLX" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video1" - } - ] -} \ No newline at end of file diff --git a/data/brands/trueview.json b/data/brands/trueview.json deleted file mode 100644 index 51611f8..0000000 --- a/data/brands/trueview.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Trueview", - "brand_id": "trueview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AHD8C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IPC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/truman.json b/data/brands/truman.json deleted file mode 100644 index 62ac544..0000000 --- a/data/brands/truman.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Truman", - "brand_id": "truman", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/trust.json b/data/brands/trust.json deleted file mode 100644 index 66d15ee..0000000 --- a/data/brands/trust.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "brand": "Trust", - "brand_id": "trust", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9411M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "NW-7100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "NW-7100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "NW-7100", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "NW-7100" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "NW-7500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/video2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "TVB-1102", - "TVD-3102" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "SIP1M" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "TI-E36F13I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "TVC-1102", - "TVC-1201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/truvision.json b/data/brands/truvision.json deleted file mode 100644 index 6056a7d..0000000 --- a/data/brands/truvision.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "brand": "Truvision", - "brand_id": "truvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1225", - "Flexidome HD", - "Other", - "TVA-1101", - "TVB-5506", - "TVB-5603", - "tvc-m5225e-3m-p", - "tvd-1103", - "TVD-5604", - "TVD-M2225V-2-P", - "TVW-3101", - "TVW-5605" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "2232P16", - "22s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Unicast/channels/401" - }, - { - "models": [ - "2232P16", - "22s", - "TVN1008S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "22s", - "Flexidome HD", - "TVB-5506", - "tvc-m5225e-3m-p", - "TVD-3101", - "tvd-6504", - "TVN-10S", - "TVP-1104", - "TVW-3101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "22s", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/902" - }, - { - "models": [ - "22s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/702" - }, - { - "models": [ - "22s", - "22S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1024, - "url": "/Streaming/Unicast/channels/202" - }, - { - "models": [ - "22s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/901" - }, - { - "models": [ - "T17924-16LS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "TVB-5603", - "TVD-1203", - "tvd-5303", - "TVD-5305", - "TVD-N210V-2-N", - "UVP-N120P-36X-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "TVB-5603", - "TVF-3104" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "TVB-5607" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "tvd-5303", - "TVD-5305", - "TVW-5605" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "TVD-5303" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/rtsph2641080p" - }, - { - "models": [ - "TVD-M2225V-2-P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ts4001.json b/data/brands/ts4001.json deleted file mode 100644 index ebfe167..0000000 --- a/data/brands/ts4001.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "brand": "Ts4001", - "brand_id": "ts4001", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8081", - "dvr1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/0/video0" - }, - { - "models": [ - "GM8126", - "h109", - "IP Robot3", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "p720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av1" - } - ] -} \ No newline at end of file diff --git a/data/brands/tseeu.json b/data/brands/tseeu.json deleted file mode 100644 index 741dce6..0000000 --- a/data/brands/tseeu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tseeu", - "brand_id": "tseeu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TS-SD0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/tshicom.json b/data/brands/tshicom.json deleted file mode 100644 index fe931d9..0000000 --- a/data/brands/tshicom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tshicom", - "brand_id": "tshicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VR-300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tsm.json b/data/brands/tsm.json deleted file mode 100644 index e9a868c..0000000 --- a/data/brands/tsm.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Tsm", - "brand_id": "tsm", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipzd500", - "IPZW400" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "IPZW400" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/tucam.json b/data/brands/tucam.json deleted file mode 100644 index 7b011e9..0000000 --- a/data/brands/tucam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tucam", - "brand_id": "tucam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "KK004B" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tuin.json b/data/brands/tuin.json deleted file mode 100644 index 1980a38..0000000 --- a/data/brands/tuin.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Tuin", - "brand_id": "tuin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 17531, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/tungson-ages.json b/data/brands/tungson-ages.json deleted file mode 100644 index bf67737..0000000 --- a/data/brands/tungson-ages.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Tungson Ages", - "brand_id": "tungson-ages", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP71", - "IP72" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/turbo-x.json b/data/brands/turbo-x.json deleted file mode 100644 index 2763d31..0000000 --- a/data/brands/turbo-x.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "brand": "Turbo X", - "brand_id": "turbo-x", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080 Starlight" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "C16S", - "EYEGUARD IIPC 30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "dome", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "endurance 1080 dome 2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "Endurance OIPC-10", - "ENDURANCE OIPC-10", - "IIPC-20", - "IIPC-30", - "inspector II PC 20", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Endurance OIPC-10", - "IIPC-30", - "Inspector IIPC-20", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Endurance OIPC-10", - "Endurance OIPC-10HD", - "Endurance OIPC-15HD", - "iip20-hd", - "IIPC-10HD", - "IIPC-20", - "IIPC-20HD", - "IIPC25HD", - "IIPC-25HD", - "IIPC-35FHD", - "IIPC-35HD", - "oipc-10hd", - "OIPC-10HD", - "OIPC-15HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "Endurance OIPC-10", - "IIPC-30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Endurance OIPC-10", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Endurance OIPC-10", - "IIPC-20", - "Inspector IIPC-20" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "eyeguard", - "eyeguard iipc30" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "EZ10E", - "EZ-10W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "EZ-10W", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.mp4" - }, - { - "models": [ - "IIPC-10HD", - "IIPC-20HD", - "IIPC-35FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 91, - "url": "/videoMain" - }, - { - "models": [ - "IIPC-20HD", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "IIPC-20HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "IIPC-30", - "Inspetor IIPC21", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC-720C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "OIPC-15HD", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/channels/101" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/turing.json b/data/brands/turing.json deleted file mode 100644 index e9e6a49..0000000 --- a/data/brands/turing.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Turing", - "brand_id": "turing", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TP-MED4M28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "TP-MED8M28C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - } - ] -} \ No newline at end of file diff --git a/data/brands/turtle.json b/data/brands/turtle.json deleted file mode 100644 index 3d29d9e..0000000 --- a/data/brands/turtle.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Turtle", - "brand_id": "turtle", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/tutk.json b/data/brands/tutk.json deleted file mode 100644 index 15fed68..0000000 --- a/data/brands/tutk.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Tutk", - "brand_id": "tutk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/tuya.json b/data/brands/tuya.json deleted file mode 100644 index ffa8ac3..0000000 --- a/data/brands/tuya.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Tuya", - "brand_id": "tuya", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AK8743", - "China Spy", - "Kerui", - "lsc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 6554, - "url": "/stream_0" - }, - { - "models": [ - "Fesh", - "LF-C1D", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - }, - { - "models": [ - "smart" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "SRG-007" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/tvc.json b/data/brands/tvc.json deleted file mode 100644 index 202b343..0000000 --- a/data/brands/tvc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tvc", - "brand_id": "tvc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPZ5301C" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/tvpsii.json b/data/brands/tvpsii.json deleted file mode 100644 index b54fa19..0000000 --- a/data/brands/tvpsii.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tvpsii", - "brand_id": "tvpsii", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TP-PTZ08W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/tvt.json b/data/brands/tvt.json deleted file mode 100644 index a044fae..0000000 --- a/data/brands/tvt.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Tvt", - "brand_id": "tvt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2311", - "9000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "2Other", - "TD-2104TS-C", - "TD-2116TS-HC", - "TD-2708TE-HP", - "TD-2708TS-CL", - "TD-2716TS-CL", - "TD-3216H2-C", - "TD-9441E3", - "TD-9525S1", - "tvt1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/?chID=2&streamType=main&linkType=tcp" - }, - { - "models": [ - "Other", - "rer", - "TD-2716TS-CL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/chID=1&streamType=main&linkType=tcpst" - } - ] -} \ No newline at end of file diff --git a/data/brands/tweety-camera.json b/data/brands/tweety-camera.json deleted file mode 100644 index c19d2dc..0000000 --- a/data/brands/tweety-camera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tweety Camera", - "brand_id": "tweety-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N895" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - } - ] -} \ No newline at end of file diff --git a/data/brands/twg.json b/data/brands/twg.json deleted file mode 100644 index fe39a58..0000000 --- a/data/brands/twg.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Twg", - "brand_id": "twg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=3_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=4_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=6_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/tyco.json b/data/brands/tyco.json deleted file mode 100644 index 275dee5..0000000 --- a/data/brands/tyco.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Tyco", - "brand_id": "tyco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DSCi350-D1122", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "Flex", - "ILLUSTRA FLEX 600" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Illustra Flex 600", - "ILLUSTRA FLEX 600" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "NCP 3200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "NCP 3200" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/typhoon.json b/data/brands/typhoon.json deleted file mode 100644 index a1b2c55..0000000 --- a/data/brands/typhoon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Typhoon", - "brand_id": "typhoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "TM013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - } - ] -} \ No newline at end of file diff --git a/data/brands/tysvance.json b/data/brands/tysvance.json deleted file mode 100644 index acac904..0000000 --- a/data/brands/tysvance.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Tysvance", - "brand_id": "tysvance", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B08LGWJD5Z" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "B08LGWJD5Z" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/tzmezon.json b/data/brands/tzmezon.json deleted file mode 100644 index 61399d2..0000000 --- a/data/brands/tzmezon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Tzmezon", - "brand_id": "tzmezon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ubee.json b/data/brands/ubee.json deleted file mode 100644 index bb18421..0000000 --- a/data/brands/ubee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ubee", - "brand_id": "ubee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mini ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ubiquiti.json b/data/brands/ubiquiti.json deleted file mode 100644 index f8927fb..0000000 --- a/data/brands/ubiquiti.json +++ /dev/null @@ -1,300 +0,0 @@ -{ - "brand": "Ubiquiti", - "brand_id": "ubiquiti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aircam", - "Air-Cam", - "Air-CAM", - "AIR-CAM", - "Air-vision", - "AIR-VISION", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "aircam", - "Air-Cam", - "Other", - "UVC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "aircam", - "G4 Pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Aircam", - "Air-Cam", - "Air-vision", - "AIR-VISION", - "Other", - "WCSNET-ACD1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Air-Cam", - "Air-vision" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Air-Cam", - "Other", - "WCSNET-ACD1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "Air-Cam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0[CHANNEL]_0" - }, - { - "models": [ - "Air-Cam", - "AIRCAM", - "air-cam mini", - "aircam2" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "Air-Cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Air-Cam" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?camera=1&resolution=320x240" - }, - { - "models": [ - "AIR-CAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Flex", - "UVC G3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "s0" - }, - { - "models": [ - "Flex", - "G3 Bullet", - "G3 Dome", - "G3 Flex", - "G4 Pro", - "Other", - "unifi g3", - "UVC", - "UVC Dome", - "UVC G3", - "UVC G3 Dome", - "UVC G3 Flex", - "UVC G3 Pro", - "UVC G4 pro", - "UVC G4 PRO", - "uvc gv3 flex", - "UVC-Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s0" - }, - { - "models": [ - "Flex", - "G3 Bullet", - "G3 Flex", - "unifi g3", - "UVC G3", - "UVC G3 Pro", - "uvc g4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s1" - }, - { - "models": [ - "G3 Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/59icRTmMY7RCuJzM?enableSrtp" - }, - { - "models": [ - "G3 Bullet", - "G3 Dome", - "G4 Pro", - "UVC", - "UVC G3", - "UVC G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s2" - }, - { - "models": [ - "G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/5e254c28900822014a06053a_0" - }, - { - "models": [ - "G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch00_0" - }, - { - "models": [ - "G3 Instant" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/2BWx4LD70YdOYaEV?enableSrtp" - }, - { - "models": [ - "G3 Instant" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/ejakpsT9WvWFBynf?enableSrtp" - }, - { - "models": [ - "G3 Micro" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/8Wtty2D3vG2XDa2N?enableSrtp" - }, - { - "models": [ - "G4 Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/v2xYofqne4G4ZT5u?enableSrtp" - }, - { - "models": [ - "G4 Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/7aMpSdYeblv747Bu?enableSrtp" - }, - { - "models": [ - "G4 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/DRELXB66JxT9T4XW" - }, - { - "models": [ - "UVC G3" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/bwf59Q0TPFcTxHek?enableSrtp" - }, - { - "models": [ - "UVC G3" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/A0z19ORRP3pn6p6Y?enableSrtp" - }, - { - "models": [ - "UVC G4 pro" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/osmdk0V84fUhXvll" - } - ] -} \ No newline at end of file diff --git a/data/brands/ubnt.json b/data/brands/ubnt.json deleted file mode 100644 index 1ad935a..0000000 --- a/data/brands/ubnt.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "brand": "Ubnt", - "brand_id": "ubnt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8CH 5MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "aircam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "bbb" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/61875a64848eba80bb89a72d_0" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/61875a64848eba80bb89a72e_0" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/61875a64848eba80bb89a72c_1" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/61875a64848eba80bb89a72c_0" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/61875a64848eba80bb89a72e_1" - }, - { - "models": [ - "DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/61875a64848eba80bb89a72d_1" - }, - { - "models": [ - "mini", - "mini57", - "Mini-jpg" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi" - }, - { - "models": [ - "mini" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch01_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ucam-247.json b/data/brands/ucam-247.json deleted file mode 100644 index 826819a..0000000 --- a/data/brands/ucam-247.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "brand": "Ucam 247", - "brand_id": "ucam-247", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "247" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "247", - "NC308W-IR-1080P", - "NC328SW-IR-1080P", - "NC328W-IR-1080P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "247i", - "NC308SW-1080P", - "NC308W-IR-1080P", - "NC328SW-1080P", - "NC328W-IR", - "NC328W-IR-1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 150, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "IPV68IP_JPEG", - "NC308W-IR", - "NC308W-IR-1080P", - "NC328sw", - "NC328SW-1080P", - "NC328SW-IR-1080P", - "NC328W-IR", - "NC328W-IR-1080P", - "Other", - "UCam247i-1080HD", - "UCAM247I-1080HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "NC308SW-1080P", - "NC308W-IR-1080P", - "NC328W-IR-1080P", - "Other", - "UCAM247i-1080HD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 150, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "NC308W-IR-1080P", - "NC328W-IR-1080P", - "Other", - "UCAM247I-1080HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "NC308W-IR-1080P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "NC308W-IR-1080P", - "NC328W-IR-1080P", - "Other", - "UCAM247I-1080HD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC328SW-1080P" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/uche-camera.json b/data/brands/uche-camera.json deleted file mode 100644 index 852d50f..0000000 --- a/data/brands/uche-camera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Uche Camera", - "brand_id": "uche-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Tecno" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/ucloud.json b/data/brands/ucloud.json deleted file mode 100644 index 8ceedbf..0000000 --- a/data/brands/ucloud.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Ucloud", - "brand_id": "ucloud", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "QC011" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/ucybo.json b/data/brands/ucybo.json deleted file mode 100644 index 5a3a5b7..0000000 --- a/data/brands/ucybo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ucybo", - "brand_id": "ucybo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NM4RT200H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/udp-technology.json b/data/brands/udp-technology.json deleted file mode 100644 index 6c2ce0a..0000000 --- a/data/brands/udp-technology.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Udp Technology", - "brand_id": "udp-technology", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPE-1100M", - "IPE-3500M", - "NVC-1000", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_unicast_firststream" - }, - { - "models": [ - "IPE-1100M", - "IPE-3500M", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_unicast_secondstream" - }, - { - "models": [ - "IPE-3500M", - "IPN302HD", - "NVC-1000", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "IPN", - "IPN302HD", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/udvar.json b/data/brands/udvar.json deleted file mode 100644 index 0cdf574..0000000 --- a/data/brands/udvar.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Udvar", - "brand_id": "udvar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Wanscam 00038" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/uhi.json b/data/brands/uhi.json deleted file mode 100644 index 2afd3ae..0000000 --- a/data/brands/uhi.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Uhi", - "brand_id": "uhi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "755", - "755R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/uipopo.json b/data/brands/uipopo.json deleted file mode 100644 index d1831f9..0000000 --- a/data/brands/uipopo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Uipopo", - "brand_id": "uipopo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "POPO 566" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/uk-plus.json b/data/brands/uk-plus.json deleted file mode 100644 index dacb567..0000000 --- a/data/brands/uk-plus.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Uk-plus", - "brand_id": "uk-plus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc-4032" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ukc.json b/data/brands/ukc.json deleted file mode 100644 index 45da6ba..0000000 --- a/data/brands/ukc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ukc", - "brand_id": "ukc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "B13" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ukiyoo.json b/data/brands/ukiyoo.json deleted file mode 100644 index bab286f..0000000 --- a/data/brands/ukiyoo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ukiyoo", - "brand_id": "ukiyoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ul-tech.json b/data/brands/ul-tech.json deleted file mode 100644 index 8b80eac..0000000 --- a/data/brands/ul-tech.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Ul-tech", - "brand_id": "ul-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CCTV", - "CCTV-4C-4B-BK", - "FP2", - "Other", - "W-NVR", - "XVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "CCTV-WF-CLA-8C-$B", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "EC76-U15", - "EC76-X15", - "FP2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "W-NVR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ular.json b/data/brands/ular.json deleted file mode 100644 index 813637d..0000000 --- a/data/brands/ular.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ular", - "brand_id": "ular", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "S3 Spy Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ulkokamera.json b/data/brands/ulkokamera.json deleted file mode 100644 index ea61d7e..0000000 --- a/data/brands/ulkokamera.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ulkokamera", - "brand_id": "ulkokamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/umanor.json b/data/brands/umanor.json deleted file mode 100644 index 559d030..0000000 --- a/data/brands/umanor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Umanor", - "brand_id": "umanor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PowerBank" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/uniarch.json b/data/brands/uniarch.json deleted file mode 100644 index a2c89e1..0000000 --- a/data/brands/uniarch.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "brand": "Uniarch", - "brand_id": "uniarch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "112" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "114", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast/c1/s0/live" - }, - { - "models": [ - "114", - "IPC-B112-PF28", - "IPC-T122-APF28", - "IPC-T314-APKZ", - "Uho-B2R-M2F4", - "Uho-S2E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "ipc-b222" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "videoMain" - }, - { - "models": [ - "IPC-B222" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsph2641080p" - }, - { - "models": [ - "IPC-B222" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/h264/HD1080P" - }, - { - "models": [ - "IPC-B222" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "IPC-T122-APF28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/videoMain" - }, - { - "models": [ - "IPC-T122-APF28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video2" - } - ] -} \ No newline at end of file diff --git a/data/brands/unicad.json b/data/brands/unicad.json deleted file mode 100644 index 5fbe6a3..0000000 --- a/data/brands/unicad.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Unicad", - "brand_id": "unicad", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/unicorn.json b/data/brands/unicorn.json deleted file mode 100644 index 5b191a6..0000000 --- a/data/brands/unicorn.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Unicorn", - "brand_id": "unicorn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "One plus" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ONE PLUS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "QCAM-3000" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "QCAM-5000N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "QCAM-5000N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "QCAM-5000N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "QCAM-5000N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "QCAM-5000N" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/uniden.json b/data/brands/uniden.json deleted file mode 100644 index 0e7ef6f..0000000 --- a/data/brands/uniden.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "brand": "Uniden", - "brand_id": "uniden", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2MED-3.6", - "2MTD-2.8", - "3AC CAM", - "GNVR8680", - "Other", - "UNVRC65" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch01.264" - }, - { - "models": [ - "2MED-3.6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "2MED-3.6", - "APP CAM XLIGHT", - "GXVR 55880", - "XLight", - "XLight X56" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "AP Cam 36", - "App Cam 24", - "App Cam 35", - "app cam 36", - "App Cam Xlight", - "appcam34", - "appcam35", - "Gcvr4h", - "GDCC10", - "GNC610", - "Gnvr8680", - "Other", - "x56" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "appcam21" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "AppCam21" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "b6440d" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8091, - "url": "/" - }, - { - "models": [ - "G-2720", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "G-2720" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard" - }, - { - "models": [ - "Gardian" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "uc100d/dc", - "udrc14" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "udw155" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Uniden app cam solo" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/unidvr.json b/data/brands/unidvr.json deleted file mode 100644 index 109a8c6..0000000 --- a/data/brands/unidvr.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Unidvr", - "brand_id": "unidvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/unifi.json b/data/brands/unifi.json deleted file mode 100644 index da817e2..0000000 --- a/data/brands/unifi.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "brand": "Unifi", - "brand_id": "unifi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aircam", - "G2 Micro", - "G3 Dome" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "G3 Dome", - "G3 Flex", - "G3Pro", - "G4 BULLET", - "Other", - "pro a3", - "U3 Pro", - "unifi A3PRO", - "UVC", - "UVC G3", - "UVC G3 Dome", - "UVC G3 DOME", - "UVC G3 Flex", - "UVC-G3-Pro", - "UVC-G3-PRO", - "UVG G3 Dome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s0" - }, - { - "models": [ - "G4 Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/Y6LkiH8UDTSbjlyR" - }, - { - "models": [ - "G4 Doorbell" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/7k9wbmWV4capQOJn" - }, - { - "models": [ - "g4 instant" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/ZOeooeCNUzrdEMBB" - }, - { - "models": [ - "G4 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/CfoWfNYSi2Uto1Va" - }, - { - "models": [ - "G4 Pro", - "G4-KM", - "UVC G3", - "UVC G3 Dome", - "UVC G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/s1" - }, - { - "models": [ - "G5 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/gwQPQxLdpAcz83Oy?enableSrtp" - }, - { - "models": [ - "NVR-pro" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7441, - "url": "/FDIahGtqNYurTDpc?enableSrtp" - }, - { - "models": [ - "NVR-pro", - "PRO", - "uvc micro" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/euwkG3hjFjvc4Hgv" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/FWIpiqzfEvvdCAAY" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/bGQUCKWG5my3BRIt" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/G3dyqVoAMRY4sIhg" - }, - { - "models": [ - "UVC G3", - "UVC G3 Flex", - "UVC G3 MICRO", - "UVC-G3-db73.localdomain" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/s2" - }, - { - "models": [ - "UVC G3 BULLET" - ], - "type": "FFMPEG", - "protocol": "rtsps", - "port": 7447, - "url": "/C871oCwtXekmFfOJ" - }, - { - "models": [ - "UVC G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/hQ0t5jE5wP4yYVzD" - }, - { - "models": [ - "UVC G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/jkRzYFwDgmCnVTMB" - }, - { - "models": [ - "UVC G3 Flex" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/87eIzaVpJHI5qkeU" - }, - { - "models": [ - "UVC G3 Micro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 7447, - "url": "/4NifILe1B0uQyMcN?enablertsp" - } - ] -} \ No newline at end of file diff --git a/data/brands/unilook.json b/data/brands/unilook.json deleted file mode 100644 index 587e00e..0000000 --- a/data/brands/unilook.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Unilook", - "brand_id": "unilook", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc-d3a40w-s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/unimo.json b/data/brands/unimo.json deleted file mode 100644 index 9bb8a6b..0000000 --- a/data/brands/unimo.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Unimo", - "brand_id": "unimo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4004", - "Other", - "UDP 7104", - "UDR-708", - "UDR-7104", - "UDR-7108" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webapp.cgi?MODE=8&ID=[USERNAME]&PW=[PASSWORD]&VER=3000&CH=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/unioncam.json b/data/brands/unioncam.json deleted file mode 100644 index 0d2e8c8..0000000 --- a/data/brands/unioncam.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "Unioncam", - "brand_id": "unioncam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A000386" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "UC7007WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/unioptek.json b/data/brands/unioptek.json deleted file mode 100644 index 20c0465..0000000 --- a/data/brands/unioptek.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Unioptek", - "brand_id": "unioptek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "M201F" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/unique-cctv.json b/data/brands/unique-cctv.json deleted file mode 100644 index 673808b..0000000 --- a/data/brands/unique-cctv.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "brand": "Unique-cctv", - "brand_id": "unique-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2212", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "IPC241L-IR-IN", - "U-612W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "IPC6222ER-X20", - "IP-V-200H33P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "PICO2000" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "dsr-cgi/getdsrimage.cgi?camera=[CHANNEL]&username=[USERNAME]&password=[PASSWORD]&adfa=1" - }, - { - "models": [ - "U-611W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "UVIPBH21" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "VNT6656G6A40" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/unitech.json b/data/brands/unitech.json deleted file mode 100644 index ab3fbb7..0000000 --- a/data/brands/unitech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Unitech", - "brand_id": "unitech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/unitoptek.json b/data/brands/unitoptek.json deleted file mode 100644 index 84aa1df..0000000 --- a/data/brands/unitoptek.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Unitoptek", - "brand_id": "unitoptek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "bullet", - "IPCX-BC40272" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "BULLET", - "D977W", - "HX-PC28041080A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/uniue-vision.json b/data/brands/uniue-vision.json deleted file mode 100644 index 35245b4..0000000 --- a/data/brands/uniue-vision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Uniue Vision", - "brand_id": "uniue-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "uv-ipbm21" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/universal.json b/data/brands/universal.json deleted file mode 100644 index 343bf11..0000000 --- a/data/brands/universal.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Universal", - "brand_id": "universal", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/uniview.json b/data/brands/uniview.json deleted file mode 100644 index f711a7d..0000000 --- a/data/brands/uniview.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "brand": "Uniview", - "brand_id": "uniview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234", - "12345", - "720p", - "Bullet Cam", - "BULLETIPCAM", - "ColorHunter", - "daboo2", - "DOME", - "IPC1112060880", - "ipc2121rs3", - "IPC2122SR3-PF36", - "IPC2123LR3-PF28M-F", - "IPC2124ER3-DPF40", - "IPC2124LR3-PF40", - "IPC2124SR3-DPF36", - "IPC2125SR3-ADUPF40", - "IPC2222ER5-DUPF40-C", - "IPC2224SR5-DPF40-B", - "IPC2322EBR-P", - "IPC2324EBR-DP", - "IPC2324EBR-DPZ28", - "ipc2333", - "IPC242ER5-DL", - "IPC252ERA-X22", - "IPC322LR-MLP28-RU", - "ipc322sb", - "IPC3232ER3-DVZ28-C", - "IPC3235ER3-DUVZ", - "IPC3611SR3", - "IPC3614SR3-DPF28M", - "IPC3614SR3-DPF36", - "IPC3615SE-ADF28KM-WL-IO", - "IPC3615SR3-ADF28K-G", - "IPC6252SL-X33UP", - "IPC642E-X22-IN", - "IPC-B112-PF28", - "IPC-B114-P28", - "IPC-B114-PF28", - "IPC-B114-PF40", - "ipcsr", - "Other", - "Speed dome", - "uni", - "UN-IPC3611SR3", - "UNIVIEW_Mini Dome", - "UNIVIEW_MINI DOME", - "unv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video1" - }, - { - "models": [ - "bullet", - "BULLET CAM", - "BULLETIPCAM", - "DOME", - "IPC2121SR3-PF36", - "IPC2122LB-SF40-A", - "IPC2122LR-MLP40-RU", - "IPC2122SR3-PF36", - "IPC2122SR3-PF40", - "IPC2122SR3-UPF40-C-RU", - "ipc2124sr3-dpf36", - "IPC2125SR3-ADUPF40", - "IPC222ER-F36", - "IPC2321", - "IPC2322EBR-P", - "ipc2323s-ir3-f36-dt", - "IPC232S-IR3-HF40-C-D", - "IPC314SR-DVPF28", - "IPC322SB", - "ipc322sr", - "IPC325ER3-DUVPF28", - "IPC3611ER3-PF28", - "IPC3612", - "IPC3612ER3-PF28", - "ipc3612sr3-pf36", - "IPC3614SR3-ADF28K-G", - "IPC3614SR3-DPF28M", - "ipcsr", - "UNV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/videoMain" - }, - { - "models": [ - "bulletIPCam", - "ipc", - "IPC2122SR3-UPF40-C-RU", - "IPC2124SR3-DPF36", - "IPC2324EBR-DPZ28", - "IPC325LR3-VSPF28-D", - "ipc6221ER-X20", - "Other", - "uni" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video2" - }, - { - "models": [ - "dome", - "DVZ28", - "ipc2124sr3-dpf36", - "IPC6252SL-X33-VF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/media/video3" - }, - { - "models": [ - "DOME", - "IPC2122SR3-PF40", - "IPC312SB-ADF28K-I0", - "IPC675LFW", - "IPC-B114-P28", - "NVR201-04LP", - "NVR301-04 P4", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/unicast/c1/s1/live" - }, - { - "models": [ - "DOME", - "ip1200", - "IPC2122SR3-PF40", - "IPC2125SR3-ADUPF40", - "IPC312SR-VPF28-C", - "IPC322ER3-DUVPF28-B", - "IPC322LR3-VSPF28-D", - "IPC3234SR3-DVZ28", - "IPC324ER3-DVPF28", - "IPC324LR3-VSPF28-D", - "IPC3612LR-MLP28-RU", - "IPC3638SR3-DPZ", - "Other", - "UNIVIEW_MINI DOME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/h264_stream" - }, - { - "models": [ - "Dome IPC322LR3-VSPF28", - "IPC2122CR3-PF40-A", - "IPC2122SR3-PF36", - "IPC2123LR3-PF28M-F", - "IPC2224ER6-DSC40-C", - "IPC3612ER3-PF28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IPB4212M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "IPC2124LB-SF28KM-G", - "IPC-D114-PF40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video0/" - }, - { - "models": [ - "IPC2124LR5-DUPF40M-F", - "IPC3614SB-ADF28KM-I0", - "IPC3618LE-ADF40K-G", - "IPC3634SB-ADZK-I0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "IPC2324LBR3-SPZ28-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "IPC322LR3-VSPF40-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast/c1/s0/live" - }, - { - "models": [ - "IPC3232ER3-DVZ28-C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mediavideo" - }, - { - "models": [ - "IPC3232ER-VS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "IPC3638SE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "NVR304-32E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast/c2/s1/live" - }, - { - "models": [ - "PVR08H1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/univision.json b/data/brands/univision.json deleted file mode 100644 index ecdf571..0000000 --- a/data/brands/univision.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Univision", - "brand_id": "univision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC3234SR3-DVZ28", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/univivi.json b/data/brands/univivi.json deleted file mode 100644 index 6367acc..0000000 --- a/data/brands/univivi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Univivi", - "brand_id": "univivi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "U611W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/unotech.json b/data/brands/unotech.json deleted file mode 100644 index 4111307..0000000 --- a/data/brands/unotech.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Unotech", - "brand_id": "unotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-04", - "UNIPB4MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "TP-04" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/unv.json b/data/brands/unv.json deleted file mode 100644 index c873ee3..0000000 --- a/data/brands/unv.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "brand": "Unv", - "brand_id": "unv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "130", - "2324", - "IPC2122LR3-PF60-E", - "IPC2328SBR5", - "IPC321SR-VSPF28", - "IPC6424SR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "HC121", - "IPC2122LB", - "IPC2125LE", - "IPC3618SS-ADF28KM-I0", - "IPC6222ER-X30P-B", - "Other", - "Test 01" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/MediaInput/mpeg4" - }, - { - "models": [ - "IPC", - "IPC2224SR5-DPF40-B", - "IPC2324SS-DZK-I0", - "IPC2A25SA-DZK", - "IPC322LR-MLP40-RU", - "IPC3614LE", - "IPC3614LE-ADF28K-G", - "IPC3615ER3-ADUPF28M", - "IPC3618", - "IPC3618SB", - "IPC6222ER-X30P-B", - "Other", - "UNV3614LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video1" - }, - { - "models": [ - "ipc 232s", - "IPC2122LR3-PF40-A", - "IPC2122LR3-PF40-E", - "IPC2122LR3-PF40M-D", - "ipc2122LR-MLP60-RU", - "IPC2124LR3-PF40", - "IPC2124SR3-DPF36", - "IPC2125LE", - "IPC2224SR5-DPF40-B", - "IPC2A25SA-DZK", - "ipc321sr-vspf28", - "IPC321SR-VSPF28", - "IPC322ER3-DUVPF28-B", - "IPC322LR3-VSPF28-D", - "IPC324LE-DSF28K-G", - "IPC324LR3", - "IPC324LR3-VSPF28-D", - "IPC3612LR", - "IPC3614LE", - "IPC3F12P-RU3", - "ipc6222er-x20-b", - "IPC6222ER-X30P-B", - "IPC6258SR-X22DUP", - "IPC-D112-PF40", - "IPC-T112-PF28", - "Other", - "UNV3614LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IPC2122LR3-PF40-E", - "IPC-B112-F40W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "IPC2124LE-ADF40KM-G", - "IPC2A25SA-DZK", - "IPC321SR-VSPF28", - "IPC3235ER3-DUVZ", - "IPC3618SR3", - "Other", - "UNV3614LE", - "UNVIPC3616LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 555, - "url": "/11" - }, - { - "models": [ - "IPC322LB-DSF28K-G", - "IPC324ER3-DVPF28", - "IPC328LE-ADF28K-G", - "IPC3615ER3-ADUPF28M", - "IPC3F12P-RU3", - "IPC-B112-F40W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast/c1/s0/live" - }, - { - "models": [ - "IPC328LE-ADF28K-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast/c2/s0/live" - }, - { - "models": [ - "IPC3618SB" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video2" - } - ] -} \ No newline at end of file diff --git a/data/brands/unview.json b/data/brands/unview.json deleted file mode 100644 index 523c578..0000000 --- a/data/brands/unview.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "brand": "Unview", - "brand_id": "unview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6415SR", - "IPC2122SR3-F40W-D", - "IPC2324LB-ADZK-G", - "ipc3605sb-adf16km", - "IPC3612ER3-PF28-B", - "IPC3612LR3-PF28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video1" - }, - { - "models": [ - "C1L-2WN", - "IPC2122LR3-PF28M-D", - "IPC2325SB-DZK-I0", - "IPC3235ER3-DUVZ", - "IPC3612LB-ADF28K", - "IPC3612LR3-PF28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 85, - "url": "/videoMain" - }, - { - "models": [ - "DPF36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "IPC2122LR3-PF40-C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 30002, - "url": "/unicast/c1/s1/live" - }, - { - "models": [ - "IPC2122SR3-F40W", - "IPC3615SR3-ADF28K-G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "IPC2122SR3-F40W-D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video3" - }, - { - "models": [ - "ipc2124sr3-dpf36" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "ipc2124sr3-dpf36" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - }, - { - "models": [ - "IPC2324LBR3-SPZ28-D", - "IPC322SR3-DVPF28-MX" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "IPC322SR3-DVPF28-MX", - "UNV ipc2122LB-sf-40-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IPC328LE-ADF28K-G", - "UNV ipc2122LB-sf-40-A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/media/video2" - }, - { - "models": [ - "IPC328SB-ADF28K-I0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/mpeg4" - }, - { - "models": [ - "IPC3614LE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live" - }, - { - "models": [ - "IPC3614SR3-ADPF28-F" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - }, - { - "models": [ - "IPC3F12P-RU3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/unicast/c9/s0/live" - } - ] -} \ No newline at end of file diff --git a/data/brands/unzano.json b/data/brands/unzano.json deleted file mode 100644 index da7d568..0000000 --- a/data/brands/unzano.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Unzano", - "brand_id": "unzano", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HD600" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/p3.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/uokoo.json b/data/brands/uokoo.json deleted file mode 100644 index caf70ec..0000000 --- a/data/brands/uokoo.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "brand": "Uokoo", - "brand_id": "uokoo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "10809", - "1080P IP camera Black 620", - "1080white", - "201", - "309146-TGCHU", - "632kc", - "720", - "720P", - "720P IP CAMERA", - "ard", - "B01MZ14YWP", - "CHINA", - "EMENT", - "HD IP CAM", - "IP 720", - "IP Camera 1080p", - "IP/NETWORK CAMERA", - "mini", - "Mini IP", - "Mini IP Cam", - "Mini IP camera", - "NOA", - "Other", - "pan", - "smartp2p", - "wifi", - "X series", - "x series ip camera", - "X000WFZORD", - "X001AND3PV", - "XSERIES IP CAMERA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/live/ch0" - }, - { - "models": [ - "10809", - "720P IP CAMERA", - "IP 720", - "IP CAMERA 1080P", - "lr pan", - "mini ip camera", - "view-279143-lybbh", - "x series", - "X Series IP Camera", - "X001AND3PV", - "Xseries ip camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/live/ch1" - }, - { - "models": [ - "720p", - "720p IP Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "720P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "H02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ROH/channel/11" - }, - { - "models": [ - "H02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "HD1080p" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "SMARTP2P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "view-30969-RRFR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/upcam.json b/data/brands/upcam.json deleted file mode 100644 index d0a55a3..0000000 --- a/data/brands/upcam.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "brand": "Upcam", - "brand_id": "upcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cyclone", - "Cyclone HD", - "Cyclone HD s+", - "Horizon", - "Hurricane", - "Other", - "Tornado HD", - "Vortex HD Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Cyclone HD", - "TORNADO HD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/upupin.json b/data/brands/upupin.json deleted file mode 100644 index 61df7f1..0000000 --- a/data/brands/upupin.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Upupin", - "brand_id": "upupin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP Xam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "IP Xam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/h264/HD1080" - } - ] -} \ No newline at end of file diff --git a/data/brands/uranium.json b/data/brands/uranium.json deleted file mode 100644 index 1f44864..0000000 --- a/data/brands/uranium.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Uranium", - "brand_id": "uranium", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D1011C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - }, - { - "models": [ - "SIP-10A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/uray-encoder.json b/data/brands/uray-encoder.json deleted file mode 100644 index f5a4433..0000000 --- a/data/brands/uray-encoder.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Uray Encoder", - "brand_id": "uray-encoder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H.264" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/urban-security-group.json b/data/brands/urban-security-group.json deleted file mode 100644 index 4229645..0000000 --- a/data/brands/urban-security-group.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Urban Security Group", - "brand_id": "urban-security-group", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DK-7043S-GP-AF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "USGLBH24T200" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/urmet.json b/data/brands/urmet.json deleted file mode 100644 index 902f2af..0000000 --- a/data/brands/urmet.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Urmet", - "brand_id": "urmet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "M-12", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v01" - }, - { - "models": [ - "M-12" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "M-12", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stremming1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/us-auto.json b/data/brands/us-auto.json deleted file mode 100644 index cf15c2c..0000000 --- a/data/brands/us-auto.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Us Auto", - "brand_id": "us-auto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1123" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "1123" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/usaginc.json b/data/brands/usaginc.json deleted file mode 100644 index 90bbb8e..0000000 --- a/data/brands/usaginc.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Usaginc", - "brand_id": "usaginc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DK-7043GP", - "STIP-7135MH265" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/usavision.json b/data/brands/usavision.json deleted file mode 100644 index 3b651cc..0000000 --- a/data/brands/usavision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Usavision", - "brand_id": "usavision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AD1300" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/usb.json b/data/brands/usb.json deleted file mode 100644 index ee2e389..0000000 --- a/data/brands/usb.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Usb", - "brand_id": "usb", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hub" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/usg.json b/data/brands/usg.json deleted file mode 100644 index 37ff28b..0000000 --- a/data/brands/usg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Usg", - "brand_id": "usg", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P RTSP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ut-alert.json b/data/brands/ut-alert.json deleted file mode 100644 index cf261a6..0000000 --- a/data/brands/ut-alert.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ut Alert", - "brand_id": "ut-alert", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "x series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/utalent.json b/data/brands/utalent.json deleted file mode 100644 index b920f24..0000000 --- a/data/brands/utalent.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Utalent", - "brand_id": "utalent", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Series X", - "Wireless Security Camera 720P", - "X Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/uxdsecurity.json b/data/brands/uxdsecurity.json deleted file mode 100644 index a6ec8f3..0000000 --- a/data/brands/uxdsecurity.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Uxdsecurity", - "brand_id": "uxdsecurity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mos" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other", - "UIB-D50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/v200.json b/data/brands/v200.json deleted file mode 100644 index 53b6193..0000000 --- a/data/brands/v200.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "V200", - "brand_id": "v200", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/v308.json b/data/brands/v308.json deleted file mode 100644 index 89b7ff6..0000000 --- a/data/brands/v308.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "V308", - "brand_id": "v308", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/v360.json b/data/brands/v360.json deleted file mode 100644 index 4af5054..0000000 --- a/data/brands/v360.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "brand": "V360", - "brand_id": "v360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-FH", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/profile0" - }, - { - "models": [ - "nikytech" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "V360 PRO" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/v380.json b/data/brands/v380.json deleted file mode 100644 index b2783d7..0000000 --- a/data/brands/v380.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "brand": "V380", - "brand_id": "v380", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "12431438", - "35600939", - "380S", - "mv26971511", - "MV48665747", - "Other", - "pro", - "q15", - "QST-V/Q16", - "SMart", - "v380 pro", - "WIFI CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "12435058", - "34297560", - "34818929", - "360", - "37673307", - "380s", - "380S", - "38172160", - "ALN", - "BANGOOD", - "C15-4MM", - "e12", - "gener", - "M38520549", - "MV11413653", - "MV20625290", - "MV50531089", - "MV53930730", - "OneW9", - "Other", - "smartcam", - "V-105r", - "v360", - "v380vv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "13283663", - "380", - "62849959", - "bullet", - "MV48665747", - "Other", - "q6S", - "v380 pro", - "xiaovv" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_stream" - }, - { - "models": [ - "22872389" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "1/cif" - }, - { - "models": [ - "22872389", - "380S", - "MV20625290", - "Other", - "PRO", - "q15", - "Q8-C", - "Shenzen", - "USB", - "V380 Pro", - "V380pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "360 fisheye", - "380", - "e21", - "MV45114657", - "Other", - "pro", - "v380 pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "47563328", - "Other", - "v380 pro", - "W7320WW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "c18pro-4mm wifi smart camera", - "IPCAM V380", - "MV45114657" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "ipc-v380-q5sy-1", - "Other", - "q15" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "MV13982138", - "MV48665747", - "Unlisted" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "MV45041718" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other", - "Round", - "W7320WW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/cif" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/v380pro.json b/data/brands/v380pro.json deleted file mode 100644 index 97be0b2..0000000 --- a/data/brands/v380pro.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "brand": "V380pro", - "brand_id": "v380pro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ca29va", - "Other", - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "K803" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other", - "WIFI Smart Net Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "Other", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "Other", - "V380 PRO" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other", - "v380" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "Other", - "PRO", - "V380 PRO", - "White Floodlight with camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - }, - { - "models": [ - "PRO", - "V380 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.h264" - }, - { - "models": [ - "spycam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "v1017" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "live/ch00_0" - }, - { - "models": [ - "v380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "v380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "V380 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/v4l2rtspserver.json b/data/brands/v4l2rtspserver.json deleted file mode 100644 index c7feadc..0000000 --- a/data/brands/v4l2rtspserver.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "V4l2rtspserver", - "brand_id": "v4l2rtspserver", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "raspberrpi3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/unicast" - }, - { - "models": [ - "RTSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/geo/bali1/" - } - ] -} \ No newline at end of file diff --git a/data/brands/v600.json b/data/brands/v600.json deleted file mode 100644 index 20624aa..0000000 --- a/data/brands/v600.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "V600", - "brand_id": "v600", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/v89.json b/data/brands/v89.json deleted file mode 100644 index ace28f7..0000000 --- a/data/brands/v89.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "V89", - "brand_id": "v89", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vacron.json b/data/brands/vacron.json deleted file mode 100644 index fa4a4a5..0000000 --- a/data/brands/vacron.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Vacron", - "brand_id": "vacron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2Mpx", - "5Mpx", - "VIG-DM755VE", - "VIG-M723", - "VIG-UM723" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video0.sdp" - }, - { - "models": [ - "629", - "Other", - "VDH-DXG368", - "VIG-US731VE", - "VIT-UA629" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other", - "VIG-DM755VE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vaddio.json b/data/brands/vaddio.json deleted file mode 100644 index 4299407..0000000 --- a/data/brands/vaddio.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Vaddio", - "brand_id": "vaddio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ConferenceShot 10", - "ConferenceShot AV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/vaddio-conferenceshot-stream" - }, - { - "models": [ - "primeshot" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "roboshot 12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/vaddio-roboshot-usb-stream" - }, - { - "models": [ - "ROBOSHOT 30 HD-SDI WHITE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/vaddio-roboshot-hd-sdi-stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/vahti.json b/data/brands/vahti.json deleted file mode 100644 index a1d8a01..0000000 --- a/data/brands/vahti.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Vahti", - "brand_id": "vahti", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C60L", - "P03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "P03" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/valtronics.json b/data/brands/valtronics.json deleted file mode 100644 index 5da85da..0000000 --- a/data/brands/valtronics.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Valtronics", - "brand_id": "valtronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/valuecam.json b/data/brands/valuecam.json deleted file mode 100644 index ed39242..0000000 --- a/data/brands/valuecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Valuecam", - "brand_id": "valuecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VC-ET04TMG1-IA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=[USERNAME]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vanderbilt.json b/data/brands/vanderbilt.json deleted file mode 100644 index 62432f9..0000000 --- a/data/brands/vanderbilt.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Vanderbilt", - "brand_id": "vanderbilt", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CVMS1310-IR", - "CVMS2011-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "GATOTHER", - "Other", - "STANF OTHER" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/vandersec.json b/data/brands/vandersec.json deleted file mode 100644 index c679e5e..0000000 --- a/data/brands/vandersec.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Vandersec", - "brand_id": "vandersec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QB07" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/ch0_0.264" - }, - { - "models": [ - "QB07" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?size=-1x-1&download=yes" - }, - { - "models": [ - "VN-IKB50s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vandesc.json b/data/brands/vandesc.json deleted file mode 100644 index ecd1b56..0000000 --- a/data/brands/vandesc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vandesc", - "brand_id": "vandesc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP900" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vangold.json b/data/brands/vangold.json deleted file mode 100644 index c33f5d6..0000000 --- a/data/brands/vangold.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Vangold", - "brand_id": "vangold", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P", - "VG-130282HIPC/POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8884, - "url": "/mpeg4" - }, - { - "models": [ - "Fish Eye" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other", - "VG-l610WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VG-l610WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "VGIPY-5002W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stander/livestream/0/0" - }, - { - "models": [ - "VG-l610WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "VG-l610WP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/vantage.json b/data/brands/vantage.json deleted file mode 100644 index 4d3ca15..0000000 --- a/data/brands/vantage.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Vantage", - "brand_id": "vantage", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "VIPC-1431EP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VIPC-1431EP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "VDR-009TC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "api.htm?op.liveimage=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vantech.json b/data/brands/vantech.json deleted file mode 100644 index 563d360..0000000 --- a/data/brands/vantech.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "brand": "Vantech", - "brand_id": "vantech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "180s", - "DVR", - "Other", - "VT-153A", - "VT-6300A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "180s", - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "180S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "6200HV", - "VT6200HV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "DVR", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VT-6200W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other", - "VP-184A" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other", - "VP-8160", - "VT-6300A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "PTZ Camera for Reaching Out" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "VT-6200HV" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/vaste-achter-8mp104.json b/data/brands/vaste-achter-8mp104.json deleted file mode 100644 index 4b9eab3..0000000 --- a/data/brands/vaste-achter-8mp104.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vaste Achter 8mp104", - "brand_id": "vaste-achter-8mp104", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ACHTERRAAM104" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vastsee.json b/data/brands/vastsee.json deleted file mode 100644 index e0c487b..0000000 --- a/data/brands/vastsee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vastsee", - "brand_id": "vastsee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Va1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/vatel.json b/data/brands/vatel.json deleted file mode 100644 index b5afd54..0000000 --- a/data/brands/vatel.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Vatel", - "brand_id": "vatel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "HT-N4K1080P-3919" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "1080P", - "HT-N$K1080P-9313" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vatilon.json b/data/brands/vatilon.json deleted file mode 100644 index 84e3d02..0000000 --- a/data/brands/vatilon.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "brand": "Vatilon", - "brand_id": "vatilon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "h62", - "PB4" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - }, - { - "models": [ - "HD Bullet" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "P03H42", - "PA2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "P05", - "PA2", - "PB4", - "T62", - "YC-W608" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "pb1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "PB4" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/vcam.json b/data/brands/vcam.json deleted file mode 100644 index 31542a4..0000000 --- a/data/brands/vcam.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Vcam", - "brand_id": "vcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "star" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "TL-V5E440W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/vcatch.json b/data/brands/vcatch.json deleted file mode 100644 index 66c21cb..0000000 --- a/data/brands/vcatch.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "brand": "Vcatch", - "brand_id": "vcatch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "VC-MIC720HM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4cif" - }, - { - "models": [ - "Other", - "VC-MIC720HK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "Other", - "VC-IPC02", - "vc-mic1080", - "VC-MIC1080TK", - "VC-MIC720HK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VC-MIC720HK" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "VC-IPC02", - "VC-MIC720HK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VC-IPC03", - "VC-IPC04", - "VMS-8200" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/stream.cgi?stream=MainStream&Audio=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vcenter.json b/data/brands/vcenter.json deleted file mode 100644 index abd595a..0000000 --- a/data/brands/vcenter.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Vcenter", - "brand_id": "vcenter", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NC-1000", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/getimage.cgi?motion=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vchod.json b/data/brands/vchod.json deleted file mode 100644 index e3e4014..0000000 --- a/data/brands/vchod.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vchod", - "brand_id": "vchod", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RTX-IP26H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vcs.json b/data/brands/vcs.json deleted file mode 100644 index 126c8ef..0000000 --- a/data/brands/vcs.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Vcs", - "brand_id": "vcs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "VIP 10" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vea.json b/data/brands/vea.json deleted file mode 100644 index b97e248..0000000 --- a/data/brands/vea.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vea", - "brand_id": "vea", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "aese" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/veevocam.json b/data/brands/veevocam.json deleted file mode 100644 index a29037d..0000000 --- a/data/brands/veevocam.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Veevocam", - "brand_id": "veevocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "JPT3815W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/veezon.json b/data/brands/veezon.json deleted file mode 100644 index 16b37ec..0000000 --- a/data/brands/veezon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Veezon", - "brand_id": "veezon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VZ1", - "Wireless 720P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/veezoom.json b/data/brands/veezoom.json deleted file mode 100644 index 4175b2f..0000000 --- a/data/brands/veezoom.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "brand": "Veezoom", - "brand_id": "veezoom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WS-N151BS", - "WS-N180BS", - "WS-N180HZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "WS-N180BS", - "WS-N180HZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/veho.json b/data/brands/veho.json deleted file mode 100644 index 5cf8dc5..0000000 --- a/data/brands/veho.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Veho", - "brand_id": "veho", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cave" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/veilux.json b/data/brands/veilux.json deleted file mode 100644 index 3df8956..0000000 --- a/data/brands/veilux.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Veilux", - "brand_id": "veilux", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NCB-546W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/velleman.json b/data/brands/velleman.json deleted file mode 100644 index 7e79521..0000000 --- a/data/brands/velleman.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "brand": "Velleman", - "brand_id": "velleman", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CAMIP3", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "CAMIP5N1", - "CAMIP7N", - "IP5cam", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CAMIP7N", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/velpro.json b/data/brands/velpro.json deleted file mode 100644 index 7911a14..0000000 --- a/data/brands/velpro.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Velpro", - "brand_id": "velpro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Res Cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Wifi-212", - "wifi-400" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/velvu.json b/data/brands/velvu.json deleted file mode 100644 index 09df872..0000000 --- a/data/brands/velvu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Velvu", - "brand_id": "velvu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ventech.json b/data/brands/ventech.json deleted file mode 100644 index a0ab929..0000000 --- a/data/brands/ventech.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "brand": "Ventech", - "brand_id": "ventech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "889ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live0.264" - }, - { - "models": [ - "889ip", - "VT898IP", - "VT-DM688IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/live/1" - }, - { - "models": [ - "889ip" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "ip889", - "VT-R889IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "vt-r889ip" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/veo%2fvidi.json b/data/brands/veo%2fvidi.json deleted file mode 100644 index b0e1abe..0000000 --- a/data/brands/veo%2fvidi.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "brand": "Veo/vidi", - "brand_id": "veo%2fvidi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "OBSERVER", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "?action=snapshot" - }, - { - "models": [ - "OBSERVER", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "OBSERVER", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "OBSERVER", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "OBSERVER", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "OBSERVER" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/veravista.json b/data/brands/veravista.json deleted file mode 100644 index 742d2aa..0000000 --- a/data/brands/veravista.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Veravista", - "brand_id": "veravista", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "700" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/verifly.json b/data/brands/verifly.json deleted file mode 100644 index 881d7e3..0000000 --- a/data/brands/verifly.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Verifly", - "brand_id": "verifly", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "lirdnts200", - "Lirdnts200" - ], - "type": "JPEG", - "protocol": "http", - "port": 5554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/verint.json b/data/brands/verint.json deleted file mode 100644 index 5bc3d6d..0000000 --- a/data/brands/verint.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "brand": "Verint", - "brand_id": "verint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3520 fd-dn" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "5620PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other", - "S5003" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "v3320fd", - "v3320fdw" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/verizon.json b/data/brands/verizon.json deleted file mode 100644 index 3fd46ce..0000000 --- a/data/brands/verizon.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "brand": "Verizon", - "brand_id": "verizon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "EL2-8h" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "EZIC-IBRF20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "OC-810V", - "Other", - "RC-8021", - "RC-8021v", - "RC-8021V", - "rc8061", - "RC-8061v", - "RC8201V" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "RC8021", - "RC-8061V" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "RC-8021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/verkada.json b/data/brands/verkada.json deleted file mode 100644 index 1491940..0000000 --- a/data/brands/verkada.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Verkada", - "brand_id": "verkada", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CD62" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/standard" - } - ] -} \ No newline at end of file diff --git a/data/brands/veroyi.json b/data/brands/veroyi.json deleted file mode 100644 index 530d303..0000000 --- a/data/brands/veroyi.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Veroyi", - "brand_id": "veroyi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CloudCam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "X00" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/veskys.json b/data/brands/veskys.json deleted file mode 100644 index bf64e21..0000000 --- a/data/brands/veskys.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Veskys", - "brand_id": "veskys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360Wifi", - "netcam", - "Other", - "WIFICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "360WIFI", - "WIFICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720p", - "Other", - "WIFICAM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "VR360-X2" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vesta-alarms.json b/data/brands/vesta-alarms.json deleted file mode 100644 index 1bfa143..0000000 --- a/data/brands/vesta-alarms.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Vesta Alarms", - "brand_id": "vesta-alarms", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "TMC" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vesta.json b/data/brands/vesta.json deleted file mode 100644 index f00d212..0000000 --- a/data/brands/vesta.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Vesta", - "brand_id": "vesta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1330", - "5240" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "kpvk" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp?real_stream" - }, - { - "models": [ - "VCG340", - "vs-3420" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vevotek.json b/data/brands/vevotek.json deleted file mode 100644 index 72ca5b2..0000000 --- a/data/brands/vevotek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vevotek", - "brand_id": "vevotek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pz7111" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/veyo.json b/data/brands/veyo.json deleted file mode 100644 index 3f13799..0000000 --- a/data/brands/veyo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Veyo", - "brand_id": "veyo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pan tilt" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vgroup.json b/data/brands/vgroup.json deleted file mode 100644 index b6e7a8f..0000000 --- a/data/brands/vgroup.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vgroup", - "brand_id": "vgroup", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VG-S6236TCS-V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/vgsion.json b/data/brands/vgsion.json deleted file mode 100644 index 66484c2..0000000 --- a/data/brands/vgsion.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Vgsion", - "brand_id": "vgsion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720 hd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vguard.json b/data/brands/vguard.json deleted file mode 100644 index f89345f..0000000 --- a/data/brands/vguard.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Vguard", - "brand_id": "vguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VG-200-DF", - "VG7108N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vhod.json b/data/brands/vhod.json deleted file mode 100644 index 7b0b178..0000000 --- a/data/brands/vhod.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vhod", - "brand_id": "vhod", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/vicom.json b/data/brands/vicom.json deleted file mode 100644 index 9c88280..0000000 --- a/data/brands/vicom.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vicom", - "brand_id": "vicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-HFW2200SN-V2-0360B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vicon-security.json b/data/brands/vicon-security.json deleted file mode 100644 index d6d5821..0000000 --- a/data/brands/vicon-security.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "brand": "Vicon Security", - "brand_id": "vicon-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "V920D-N39M-IP", - "SN680D-B-WNIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1/Profile1" - }, - { - "models": [ - "957", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "957", - "V960" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/second" - }, - { - "models": [ - "BULLET", - "Other", - "v960", - "V960", - "V960B", - "v961", - "V962B", - "V992D-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "iq62m", - "iq63m", - "iqm62wr" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/now.jpg?snap=spush" - }, - { - "models": [ - "IQ852" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "now.jpg?snap=spush" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other", - "VND-970IP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "V922D-N39" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - }, - { - "models": [ - "VND-970IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/vicsung.json b/data/brands/vicsung.json deleted file mode 100644 index 76daa4e..0000000 --- a/data/brands/vicsung.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vicsung", - "brand_id": "vicsung", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/victex.json b/data/brands/victex.json deleted file mode 100644 index 72cc58c..0000000 --- a/data/brands/victex.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Victex", - "brand_id": "victex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SYJUJ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Trung Quoc IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/victure.json b/data/brands/victure.json deleted file mode 100644 index 3abcb78..0000000 --- a/data/brands/victure.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "brand": "Victure", - "brand_id": "victure", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "IP360", - "PC240", - "PC530", - "PC540", - "PC730" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "IP360", - "P540", - "PC650" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "IPC360", - "PC660" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "IPC360", - "IPC365", - "PC240", - "PC240-2", - "pc530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "IPC365", - "Other", - "PC540", - "PC650", - "pc730" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "IPC365", - "PC540", - "pc730" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "IPC750", - "PC420", - "PC540", - "PC650", - "pc750" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other", - "PC420", - "PC660", - "pc730" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "Other", - "PC530", - "PC650", - "pc730", - "PC750" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "cam1/mpeg4" - }, - { - "models": [ - "OTHERPC330", - "p370", - "p540", - "PC420", - "PC530", - "PC540", - "PC650", - "PC650b", - "PC730", - "pc750", - "RC530" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "PC240", - "PC420", - "PC540", - "PC650", - "PC730", - "PC750", - "pcm 540" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "PC320" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "PC420", - "PC540", - "PC650", - "pc730", - "pc750" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "PC420", - "PC540", - "pc730", - "pc750" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=00" - }, - { - "models": [ - "pc530" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonit" - }, - { - "models": [ - "PC530", - "PC540", - "PC650" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "h264_2" - }, - { - "models": [ - "PC540", - "PC650" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=1" - }, - { - "models": [ - "PC540", - "PC730" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_2" - }, - { - "models": [ - "PC540", - "PC650", - "PC650b", - "PC730", - "PC750" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "PC650" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00" - }, - { - "models": [ - "PC650" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=1&authBasic=[AUTH]" - }, - { - "models": [ - "PC660", - "sc210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "PC660", - "PC730" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264" - }, - { - "models": [ - "pc730" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=Z3VycmllcmlyZ0BnbWFpbC5jb206MzAwNTc4cmc=" - }, - { - "models": [ - "VS1800" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - } - ] -} \ No newline at end of file diff --git a/data/brands/videoiq.json b/data/brands/videoiq.json deleted file mode 100644 index 516f1eb..0000000 --- a/data/brands/videoiq.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Videoiq", - "brand_id": "videoiq", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VIQ-HD-CRD200-3-8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/videosec-security.json b/data/brands/videosec-security.json deleted file mode 100644 index 3f63f1b..0000000 --- a/data/brands/videosec-security.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "Videosec Security", - "brand_id": "videosec-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ICS-20F" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8008, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IPC-103" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "IPD-3615IQ-28SWAL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1enc1" - }, - { - "models": [ - "IPP-105" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IRD-20W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image.cgi" - }, - { - "models": [ - "MegaPX 1080P-D", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video1enc1" - }, - { - "models": [ - "MegaPX 1080P-D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video1enc1.mjpg" - }, - { - "models": [ - "MegaPX 1080P-D" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video1enc2.mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/videotec.json b/data/brands/videotec.json deleted file mode 100644 index 776f4fe..0000000 --- a/data/brands/videotec.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Videotec", - "brand_id": "videotec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "SK-6008-HT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "ULISSE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT" - }, - { - "models": [ - "ULISSE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "vd6304" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/av0" - }, - { - "models": [ - "vd6304" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/videoteknika.json b/data/brands/videoteknika.json deleted file mode 100644 index 761ed7e..0000000 --- a/data/brands/videoteknika.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "brand": "Videoteknika", - "brand_id": "videoteknika", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/401" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/601" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/Unicast/channels/501" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/301" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/702" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/Streaming/channels/202" - }, - { - "models": [ - "VN2008/8P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8002, - "url": "/Streaming/Unicast/channels/801" - } - ] -} \ No newline at end of file diff --git a/data/brands/videotrend.json b/data/brands/videotrend.json deleted file mode 100644 index 447caf4..0000000 --- a/data/brands/videotrend.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Videotrend", - "brand_id": "videotrend", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/videotronik.json b/data/brands/videotronik.json deleted file mode 100644 index f1e497f..0000000 --- a/data/brands/videotronik.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Videotronik", - "brand_id": "videotronik", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-8470-SFW" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - } - ] -} \ No newline at end of file diff --git a/data/brands/videra.json b/data/brands/videra.json deleted file mode 100644 index 8c764c0..0000000 --- a/data/brands/videra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Videra", - "brand_id": "videra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BL12MV2E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vidiline.json b/data/brands/vidiline.json deleted file mode 100644 index 6ce0238..0000000 --- a/data/brands/vidiline.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Vidiline", - "brand_id": "vidiline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "vidi-ipc-24d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vido.at.json b/data/brands/vido.at.json deleted file mode 100644 index f721a6e..0000000 --- a/data/brands/vido.at.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Vido.at", - "brand_id": "vido.at", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVIR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "HDVIR", - "LVDT45SL200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "LVDT45SL200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264-1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vidstar.json b/data/brands/vidstar.json deleted file mode 100644 index 7f2b646..0000000 --- a/data/brands/vidstar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vidstar", - "brand_id": "vidstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vsc-2121vr-ip" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/viewmax.json b/data/brands/viewmax.json deleted file mode 100644 index 2646065..0000000 --- a/data/brands/viewmax.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "brand": "Viewmax", - "brand_id": "viewmax", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "IP-8332", - "Other", - "VM-1IPPT" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/viewsca.json b/data/brands/viewsca.json deleted file mode 100644 index 0219071..0000000 --- a/data/brands/viewsca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Viewsca", - "brand_id": "viewsca", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vc2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/viewscan.json b/data/brands/viewscan.json deleted file mode 100644 index d113050..0000000 --- a/data/brands/viewscan.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Viewscan", - "brand_id": "viewscan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vewscan" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/vigilant.json b/data/brands/vigilant.json deleted file mode 100644 index 605c88b..0000000 --- a/data/brands/vigilant.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vigilant", - "brand_id": "vigilant", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RGS Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cmd=live&codec=mjpeg&ID=[CHANNEL]/" - } - ] -} \ No newline at end of file diff --git a/data/brands/viking.json b/data/brands/viking.json deleted file mode 100644 index 2824bcc..0000000 --- a/data/brands/viking.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Viking", - "brand_id": "viking", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/vikviz.json b/data/brands/vikviz.json deleted file mode 100644 index 3218034..0000000 --- a/data/brands/vikviz.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Vikviz", - "brand_id": "vikviz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "pg2347c", - "PTZ-3601-IZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/vikylin.json b/data/brands/vikylin.json deleted file mode 100644 index 6ba105b..0000000 --- a/data/brands/vikylin.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Vikylin", - "brand_id": "vikylin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DT087G2", - "VK-PTZ-3601-iZ", - "YC2387C-ISU-28", - "YML_18_STARIRN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=0&subtype=1" - }, - { - "models": [ - "H24M05", - "SD49825XB-HNR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "PG2T87C", - "PTZ-4820-IZT", - "PTZ-4825X-ISZ", - "VK-YC21651-285" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "PG2T87C", - "vk-ptz-3601-IZ", - "YC2387C-ISU-28", - "YC-PTZ-3601-iZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "YC2265I-ISU-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream1?username=admin&password=E10ADC3949BA59ABBE56E057F20F883E" - }, - { - "models": [ - "YC2265I-ISU-28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream0?username=admin&password=E10ADC3949BA59ABBE56E057F20F883E" - } - ] -} \ No newline at end of file diff --git a/data/brands/vilar.json b/data/brands/vilar.json deleted file mode 100644 index 04419a7..0000000 --- a/data/brands/vilar.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Vilar", - "brand_id": "vilar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipc 1002", - "IpCamera_VS-IPC1002", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "IPC1002" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/vimar.json b/data/brands/vimar.json deleted file mode 100644 index b8492c1..0000000 --- a/data/brands/vimar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vimar", - "brand_id": "vimar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "46238.036" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vimicro.json b/data/brands/vimicro.json deleted file mode 100644 index eeee8ff..0000000 --- a/data/brands/vimicro.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "brand": "Vimicro", - "brand_id": "vimicro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1002", - "Other", - "VC0568", - "VS-IPC1002" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VC305", - "VS-IPC1002" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "VIN-IP-L14-96IB36" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "VS-IPC1002" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "VS-IPC1002" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "VS-IPC1002" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/vimtag.json b/data/brands/vimtag.json deleted file mode 100644 index ff90b92..0000000 --- a/data/brands/vimtag.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Vimtag", - "brand_id": "vimtag", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CP1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/h264major" - }, - { - "models": [ - "CP3", - "F300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "VT361" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - } - ] -} \ No newline at end of file diff --git a/data/brands/vimtech.json b/data/brands/vimtech.json deleted file mode 100644 index 73d0bcf..0000000 --- a/data/brands/vimtech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vimtech", - "brand_id": "vimtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "N1010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/viofo.json b/data/brands/viofo.json deleted file mode 100644 index 144544f..0000000 --- a/data/brands/viofo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Viofo", - "brand_id": "viofo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A229 Pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vip-vision.json b/data/brands/vip-vision.json deleted file mode 100644 index 49db2eb..0000000 --- a/data/brands/vip-vision.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "brand": "Vip Vision", - "brand_id": "vip-vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3.2.1.406614", - "B78", - "VIP", - "VSIP1MPFBIRV2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "4MP ZOOM", - "Other", - "VSIPP-4BIRMG" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "cam409" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - }, - { - "models": [ - "VSIP4MPVDIR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vipcam.json b/data/brands/vipcam.json deleted file mode 100644 index 801dae9..0000000 --- a/data/brands/vipcam.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Vipcam", - "brand_id": "vipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C7824WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "D6232" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "GGGG-266601-ACAFE", - "IP-CAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "IP-CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "IP-CAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/viral.json b/data/brands/viral.json deleted file mode 100644 index 691f2b2..0000000 --- a/data/brands/viral.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Viral", - "brand_id": "viral", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/visicom.json b/data/brands/visicom.json deleted file mode 100644 index 4e218e0..0000000 --- a/data/brands/visicom.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Visicom", - "brand_id": "visicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NWK-BDN1005W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "NWK-M9852W" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vision-digi.json b/data/brands/vision-digi.json deleted file mode 100644 index 52e46c8..0000000 --- a/data/brands/vision-digi.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Vision Digi", - "brand_id": "vision-digi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "special/Cam[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264/ch1/sub/" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v2" - } - ] -} \ No newline at end of file diff --git a/data/brands/vision-gs.json b/data/brands/vision-gs.json deleted file mode 100644 index d9bf2fe..0000000 --- a/data/brands/vision-gs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vision Gs", - "brand_id": "vision-gs", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video/pull-[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vision-hi-tech-co.json b/data/brands/vision-hi-tech-co.json deleted file mode 100644 index acf60f9..0000000 --- a/data/brands/vision-hi-tech-co.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Vision Hi-tech Co", - "brand_id": "vision-hi-tech-co", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "727", - "VisionXIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mjpeg&basic_auth=[AUTH]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vision.json b/data/brands/vision.json deleted file mode 100644 index 23d469d..0000000 --- a/data/brands/vision.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Vision", - "brand_id": "vision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "540tvl" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "540tvl" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "VDA101" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264&basic_auth=[AUTH]" - }, - { - "models": [ - "ws-d5538" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/visioncool-cctv.json b/data/brands/visioncool-cctv.json deleted file mode 100644 index 08f6bf2..0000000 --- a/data/brands/visioncool-cctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Visioncool Cctv", - "brand_id": "visioncool-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VC-10IPBL" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/visionhitech-americas.json b/data/brands/visionhitech-americas.json deleted file mode 100644 index b360a6b..0000000 --- a/data/brands/visionhitech-americas.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Visionhitech Americas", - "brand_id": "visionhitech-americas", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/visionite.json b/data/brands/visionite.json deleted file mode 100644 index 6130b42..0000000 --- a/data/brands/visionite.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Visionite", - "brand_id": "visionite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "FR-4020A2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/visionlite.json b/data/brands/visionlite.json deleted file mode 100644 index c8cc6a6..0000000 --- a/data/brands/visionlite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Visionlite", - "brand_id": "visionlite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MCTECH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/visionstar.json b/data/brands/visionstar.json deleted file mode 100644 index 92142e6..0000000 --- a/data/brands/visionstar.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Visionstar", - "brand_id": "visionstar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D3330IR-IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/visionxip.json b/data/brands/visionxip.json deleted file mode 100644 index 9d37d7e..0000000 --- a/data/brands/visionxip.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Visionxip", - "brand_id": "visionxip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9852W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi" - }, - { - "models": [ - "9852W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "image.cgi?type=motion" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam3/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/visiotech.json b/data/brands/visiotech.json deleted file mode 100644 index 1a07110..0000000 --- a/data/brands/visiotech.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Visiotech", - "brand_id": "visiotech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dvr-6008" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "DVR-6008", - "XS-IPDM741-2-LITE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ipc" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "IPC2012I-HIK" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "IPC809I-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "IPC809I-H", - "SF-IPCU 102" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Nivian ONV515" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/visiotys.json b/data/brands/visiotys.json deleted file mode 100644 index cfc856c..0000000 --- a/data/brands/visiotys.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Visiotys", - "brand_id": "visiotys", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "SCT-300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/visonic.json b/data/brands/visonic.json deleted file mode 100644 index fb3c9c5..0000000 --- a/data/brands/visonic.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Visonic", - "brand_id": "visonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3100", - "CAM2000", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "cam2000", - "CAM2000" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/image.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/visortech.json b/data/brands/visortech.json deleted file mode 100644 index d7e1b0a..0000000 --- a/data/brands/visortech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Visortech", - "brand_id": "visortech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR NX-4575-675" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=" - } - ] -} \ No newline at end of file diff --git a/data/brands/vista-cctv.json b/data/brands/vista-cctv.json deleted file mode 100644 index b6f2bc7..0000000 --- a/data/brands/vista-cctv.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "brand": "Vista Cctv", - "brand_id": "vista-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "VK2-1080BIR37E", - "VK2-1080BIR3V9F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "1/stream1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/h264" - }, - { - "models": [ - "Other", - "PT", - "visatcamsd" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "visatcamsd" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "visatcamsd" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VK2L-2MPBIR36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vistacam.json b/data/brands/vistacam.json deleted file mode 100644 index de329a9..0000000 --- a/data/brands/vistacam.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Vistacam", - "brand_id": "vistacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000", - "1101", - "700" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "1101", - "700" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "1101" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - }, - { - "models": [ - "1200", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "700" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "snapshot.cgi" - }, - { - "models": [ - "700" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/visualint.json b/data/brands/visualint.json deleted file mode 100644 index b15d85c..0000000 --- a/data/brands/visualint.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Visualint", - "brand_id": "visualint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6200", - "VI-1400", - "VI-1500", - "VI-4300", - "VL-1500" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - }, - { - "models": [ - "7200", - "VI-7100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "nvc-cgi/operator/snapshot.fcgi?channel=[CHANNEL]&name=snapshot&resolution=custom&quality=70&width=[WIDTH]&height=[HEIGHT]" - }, - { - "models": [ - "Other", - "vim-1550", - "VM-1550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "VI-1400", - "VI-4350", - "VI-4350-VT", - "vim 3140", - "VIM-1250", - "VI-M-1350", - "vim-1550", - "VI-M-1550-VT", - "VIM-4340", - "VIM-4350", - "VIM-7150", - "vim-7650", - "VM-1550" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "vim-1550" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "VideoInput/[CHANNEL]/h264/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vitek-cctv.json b/data/brands/vitek-cctv.json deleted file mode 100644 index e026074..0000000 --- a/data/brands/vitek-cctv.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "brand": "Vitek Cctv", - "brand_id": "vitek-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ELPRISH1VTC-TNT30R3F", - "ELPRISH2", - "Other", - "VTC-TNT30R3F" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/profile1" - }, - { - "models": [ - "MGGBW" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "MGGBW", - "Other", - "VT-EH16", - "VT-EH8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webra_fcgi.fcgi?api=get_jpeg_raw&chno=[CHANNEL]" - }, - { - "models": [ - "Other", - "VTC-C770DNIP2", - "VT-EH8" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Vitek VT-TPTZ18HR-5N" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "VTC-C770DNIP2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch[CHANNEL].sdp" - }, - { - "models": [ - "VTC-IR402" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0_0" - }, - { - "models": [ - "VTD-TND3RFE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "VT-R725" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "VT-R725" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg?res=full&x0=0&y0=0&x1=100%&y1=100%&quality=12&doublescan=0" - }, - { - "models": [ - "VT-R725" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vitek.json b/data/brands/vitek.json deleted file mode 100644 index 78aa9d5..0000000 --- a/data/brands/vitek.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vitek", - "brand_id": "vitek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VTC-IR402" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam0_1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vitorcam.json b/data/brands/vitorcam.json deleted file mode 100644 index 49bee79..0000000 --- a/data/brands/vitorcam.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Vitorcam", - "brand_id": "vitorcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C800" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam0/h264" - }, - { - "models": [ - "CA-04WP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ca23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ca23" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "ca23", - "CA-23WP", - "HD PTZ IP Cam", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "CA-31" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 24422, - "url": "/" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/vivint.json b/data/brands/vivint.json deleted file mode 100644 index 53bcf7b..0000000 --- a/data/brands/vivint.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "brand": "Vivint", - "brand_id": "vivint", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "520ir", - "adc-510", - "ADC-520", - "ADC620", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "adc-v610p", - "ADC-V610PT", - "ADC-V620PT", - "FIXED", - "hdp450", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "520ir", - "ADC-520", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "ADC-V620PT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1032, - "url": "/live3.sdp" - }, - { - "models": [ - "520ir", - "ADC-V520IR", - "Doorbell", - "hdp450" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live.sdp" - }, - { - "models": [ - "520IR", - "520IR-2D2741", - "520IR-2S2741", - "ADC-510", - "ADC-520", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "ADC-V610PT", - "ADC-V620PT", - "adr", - "DBC2", - "FIXED", - "Other", - "V-DBC1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "adc-510", - "ADC-520", - "ADC620", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "ADC-V610", - "adc-v610p", - "ADC-V610PT", - "FIXED", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 1032, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "adc-v510", - "ADC-V510", - "ADC-V610PT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ADC-V510", - "ADC-V520IR", - "ADC-V610PT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ADC-V520IR", - "ADC-V610PT" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "ADC-V610PT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "ADC-V610PT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "ADC-V620PT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "FIXED" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "IPC-117" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/vivitar.json b/data/brands/vivitar.json deleted file mode 100644 index af825dc..0000000 --- a/data/brands/vivitar.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Vivitar", - "brand_id": "vivitar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP 113", - "IPC112N", - "IPC113", - "IPC117", - "IPC222", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "IP-117" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live.sdp" - }, - { - "models": [ - "IPC113" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "cam[CHANNEL]/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/vivotek.json b/data/brands/vivotek.json deleted file mode 100644 index bb9bf0c..0000000 --- a/data/brands/vivotek.json +++ /dev/null @@ -1,1588 +0,0 @@ -{ - "brand": "Vivotek", - "brand_id": "vivotek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0301-G", - "IP-2122", - "Other", - "PT-3112/3122", - "PT-3122", - "PZ-71X1", - "VS2402 Video Server", - "VS2403 Video Server" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "0301-G", - "1027", - "3102", - "3121", - "3127", - "6122", - "7131", - "7133", - "7135", - "7138", - "7330", - "8123", - "8134V", - "8161", - "8362", - "83XX", - "FD-6112V", - "FD-6121V", - "FD61X1", - "FD-81XX", - "IP1731", - "IP-1739", - "IP3111", - "IP3112", - "IP-3121", - "IP-3132", - "IP-3135", - "IP-6122", - "IP-6127", - "IP-61X2", - "IP-622", - "IP-7131", - "IP-7132", - "ip7133", - "IP-7135", - "IP-7137", - "IP-7138", - "IP7139", - "ip7151", - "IP-7151", - "IP-7160", - "IP-7361", - "IP-8332", - "IP-8362", - "Other", - "PT 3114", - "pt 7137", - "PT-3112", - "PT-3112/3122", - "PT-3122", - "PT-7135", - "PT-7137", - "PT-8133", - "PZ-6114", - "pz-6122", - "PZ-6122", - "PZ-6124", - "PZ-61X2", - "PZ-61x4", - "PZ-7122", - "PZ-71X1", - "PZ-71x2", - "PZ-8111W", - "SD-6112", - "SD-7313", - "SD-81X1", - "ST-3402", - "TC-5331", - "TC-5333", - "TC-5631", - "TZ 700 Series", - "v7131", - "VS3100", - "VS-3100P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "0301-G", - "1027", - "1729", - "3102", - "7111", - "7131", - "7132", - "7133", - "7135", - "7138", - "7160", - "7161", - "7330", - "7361", - "8130", - "8130w", - "8132", - "8133", - "8134", - "8134V", - "8154V", - "8161", - "8164", - "8171", - "8172", - "8177-HT", - "8221", - "8331", - "8332", - "8361", - "8362", - "8369", - "83xx", - "83XX", - "8port", - "ab5376", - "ADC-V510", - "ADC-V520IR", - "ADC-V610PT", - "ADC-V620PT", - "ADC-VLAB510", - "BD-5115", - "BINNENCAM", - "cc3160", - "CC-8130", - "cc8160", - "cc8360", - "ds-2cd2132f-1", - "fd46", - "FD-7130", - "FD-7131", - "FD-7132", - "FD-7141", - "FD-8133", - "FD-8134", - "FD8134V", - "FD-8136", - "FD8137H", - "FD-8137VH", - "fd8145", - "FD-8152", - "FD8154", - "FD-8161", - "FD-8162", - "FD-8166", - "FD8167", - "FD8167-T", - "FD8169", - "FD8169A", - "FD816B-HF2", - "FD-81XX", - "FD-8335H", - "FD-8361", - "FD-8362E", - "FD836b-htv", - "FD836B-HVF2", - "FD-8372", - "FE-8171v", - "FE-8172V", - "FE-8174", - "FE8180", - "FE-8181", - "FE9182-h", - "h.264", - "h264", - "House", - "IB-8354", - "IB-8367", - "IB8367A", - "IB-8367-T", - "IB8369A", - "IB836BA-HT", - "IB836B-HT", - "ib8377-eht", - "IB8382 T", - "IB9365-HT", - "IB9367-H", - "IB9381", - "IB9387", - "id10", - "IP 7130P", - "IP3112", - "IP-3122", - "ip3332", - "IP-7130", - "IP7131", - "IP-7131", - "IP-7132", - "IP-7133", - "IP-7134", - "IP-7135", - "IP-7137", - "IP-7138", - "IP-7139", - "IP-7141", - "IP-7142", - "IP-7151", - "IP-7152", - "IP-7154", - "IP-7160", - "IP-7161", - "IP-7330", - "ip7332", - "IP-7361", - "IP-8130", - "IP-8131", - "IP-8131w", - "IP-8133", - "IP-8152", - "IP-8161", - "IP-8162", - "IP-8331", - "IP-8332", - "IP-8332C", - "IP-8335H", - "IP-8336W", - "IP-8362", - "IP-8364-c", - "IP8372", - "MD-7160", - "MD-7560", - "MD-8562", - "MD-8562D", - "MPC", - "MS8392-EV", - "NOT KNOWN", - "NR-8X01NVR", - "oor", - "Other", - "PD-8136", - "PT-3112/3122", - "PT-3122", - "PT-7135", - "PT-7137", - "PT-8133", - "PT-8133W", - "PZ-6114", - "PZ-61x2", - "PZ-7111", - "PZ-7122", - "PZ-7131", - "PZ-7135", - "PZ-7151", - "PZ-71x1", - "PZ-71X1", - "PZ-71x2", - "PZ-8111", - "PZ-8111W", - "PZ-81x1", - "PZ-81X1", - "SD-7151", - "SD-81x1", - "SD-81X1", - "SD-8362", - "SD-8362E", - "SD-8363E", - "SD8364E", - "SD83X1", - "SHJ Counter 1", - "sscam", - "ST-7501", - "TC 5631", - "TC-5331", - "TC5332", - "TV-IP512P", - "V520ir", - "V8201", - "VS2403 VIDEO SERVER", - "VS-7100 Video Server", - "VS-8102 Video Server", - "VS-8401 VIDEO SERVER" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "1027", - "1234", - "1729", - "3127", - "6122", - "7111", - "7131", - "7133", - "7142", - "7151", - "7160", - "720", - "7330", - "7361", - "8000", - "8100", - "8111", - "8130", - "8132", - "8133", - "8133W", - "8134V", - "8135", - "8136", - "8137", - "8151V", - "8161", - "8172", - "8174V", - "8331", - "8332", - "8362", - "8364", - "8369", - "8371", - "83xx", - "8832", - "adc-510", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "adc-v52ir", - "adc-v610pt", - "adc-v700x", - "BINNENCAM", - "CC-8160", - "CC8370-HV", - "FD*196a", - "FD-7130", - "FD-7131", - "FD-7131V", - "FD-7132", - "FD-7361", - "FD8131", - "FD-8133V", - "FD-8134", - "fd8134d", - "fd8134v", - "FD-8135H", - "FD-8136", - "FD8138-H", - "fd8154", - "FD-8154V", - "FD8154V-F2", - "FD8160", - "FD-8161", - "FD-8162", - "FD8164", - "FD-8166", - "FD8167", - "FD-8167-T", - "FD-8168", - "FD-8169", - "FD816BA", - "FD816B-HF2", - "fd816b-ht", - "fd816-ht", - "fd8179-H", - "FD8182-F2", - "FD-81XX", - "FD-8335H", - "FD-8361", - "FD-8361L", - "FD8363", - "FD8367A-V", - "FD8367-V", - "FD8369", - "FD836B-(E)HVF2", - "fd836ba-htv", - "FD8371", - "FD8373-EHV", - "FD-8382", - "FD9182-H", - "FD9367-HV", - "FD9381", - "FD9381-HT", - "FE-8171v", - "FE-8172V", - "FE-8174V", - "FE-8181", - "FE9182-H", - "FT9368-HTV", - "GOOD CAM", - "H.264", - "IB8338-h", - "IB8367", - "ib8369", - "IB-8369", - "IB8369A", - "IB836B", - "ib8381", - "IB8381-E", - "IB9365", - "IB9368-HT", - "IB9371", - "ib9380-h", - "iip8133w", - "ip", - "IP 7330", - "ip 8133w", - "IP Video", - "IP17134", - "ip1734", - "IP-1739", - "IP-3133", - "IP3761", - "IP-7130", - "IP-7131", - "IP-7132", - "IP-7133", - "IP-7134", - "IP-7138", - "ip7139", - "IP-7139", - "IP-7142", - "IP-7142e", - "IP-7151", - "ip7152", - "IP-7152", - "IP-7154", - "IP-7160", - "IP-7161", - "IP-7251", - "IP-7330", - "IP-7361", - "IP-8130", - "IP-8131", - "IP-8131W", - "IP-8133", - "IP-8136W", - "IP-8152", - "ip8160", - "IP-8161", - "IP-8162", - "IP-8331", - "IP-8332", - "IP-8332C", - "ip8335", - "IP-8335H", - "IP-8336W", - "IP8352", - "IP8361", - "IP-8362", - "IP8364-C", - "IP8371E", - "IP8372", - "IPV7361", - "ir520", - "MD-7560", - "MD-8562", - "ndp8322p", - "Other", - "PT-7137", - "PT-8133", - "PT-8133W", - "PTZ7131", - "pz7112", - "PZ-7122", - "PZ-7131", - "PZ71X2", - "PZ-8111W", - "PZ-81x1", - "PZ-81X1", - "pz81x1w", - "SD-7151", - "SD-7313", - "SD-81x1", - "SD8312E", - "sisa", - "ST-7501", - "TC-5331", - "TC5332", - "TC-5333", - "TC-5633", - "tuin", - "v520ir", - "VS7100", - "VS-7100 VIDEO SERVER", - "VS8012", - "VS-8102 Video Server", - "VS-8102 VIDEO SERVER", - "VS-8401 VIDEO SERVER", - "VS-8801 Video Server", - "vws7100" - ], - "type": "JPEG", - "protocol": "http", - "port": 1025, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "1234", - "1B8369A", - "360", - "7151", - "7361", - "8133", - "8332", - "8362", - "8801", - "AD5166A", - "AD5196A", - "ADC-V520IR", - "CC8370-HV", - "DB8332-W", - "DS-2CD2142FWD-I", - "fd46", - "FD-8134", - "FD-8136", - "FD8136-F2", - "FD-8161", - "FD-8166", - "FD-8169", - "FD8169A", - "FD8367-V", - "fd9391-ehtv", - "IB8369", - "IB8369A", - "IP 8361", - "ip7151", - "IP-7161", - "IP8132", - "IP-8332", - "IP9191-HT", - "MS9390-HV", - "novak", - "Other", - "pz71x1", - "SD-8362E", - "SD9361-EHL", - "vs8401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live2.sdp" - }, - { - "models": [ - "2020", - "2022", - "205", - "7142", - "7160", - "7361", - "8133", - "8137", - "8161", - "8172", - "8332", - "83xx", - "BINNENCAM", - "Ca3121061", - "FD-7131", - "FD-7132", - "FD-7141", - "FD-8134", - "FD-8169", - "FD-8362E", - "FE-8172V", - "IP-7130", - "IP-7134", - "IP-7141", - "ip7160", - "IP-7161", - "IP-8130", - "IP-8133", - "IP-8331", - "IP-8332", - "IP-8362", - "Other", - "PZ71x2", - "PZ81X1w", - "SD 9362", - "TC-5333", - "TC-5633" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "/cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "360", - "4XEM", - "7131", - "7135", - "7151", - "7160", - "7xxx", - "8100", - "8113", - "8131", - "8134V", - "8136", - "8172", - "ab5396", - "AD5166A", - "AD5196A", - "Adc-520ir", - "ADC-V510", - "ADC-V520", - "ADC-V520IR", - "ADC-V720W", - "BD-5115", - "BD-5153", - "BD5153H", - "CC8130", - "CC-8160", - "CC8370-HV", - "DBC2-4BC0C0", - "doorbell", - "FCS-1030", - "fd 8134v", - "FD8131", - "FD8131V", - "FD-8136", - "FD8154V-F2", - "FD8160", - "FD-8161", - "FD-8162", - "FD8164", - "FD-8164V", - "FD8169a", - "FD8169A", - "FD816BA", - "FD-816V", - "FD-8177-HT", - "FD8179-H", - "FD-81xx", - "FD-81XX", - "FD8355EHV", - "FD-8361", - "FD-8361L", - "FD8363", - "FD8369A-V", - "FD8371", - "FD8371V", - "FD-8382", - "FD9181-HT", - "FD9365", - "FD9391-EHTV", - "FE 8174", - "FE-8171v", - "FE-8172", - "FE-8172V", - "FE-8174V", - "FE-8181", - "FE8391-V", - "FE9182-h", - "FE9381-EHV", - "fisheye", - "h264", - "HomeCam", - "IB8168", - "ib8360w", - "IB-8367", - "IB-8367-10", - "IB8367A", - "IB-8367-T", - "IB8368", - "IB-8369", - "IB8369A", - "IB8373_EH", - "IB8377-HT", - "IB8379-H", - "IB9360-H", - "IB9371", - "IP7131", - "ip7134", - "IP-7135", - "ip7151", - "IP-7330", - "IP8131", - "IP8131W", - "IP-8133", - "ip8160", - "IP-8162", - "IP8166", - "IP-8330", - "IP-8331", - "IP-8332", - "IP-8335H", - "ip8336w", - "IP8361", - "IP-8362", - "IP-8372", - "ip8xxx", - "IPIP8372", - "IZ9631-EH", - "MD-7560", - "MD-8562", - "MD-8562D", - "mega pixel", - "NGH", - "Other", - "P-8133", - "pt7135", - "PT-7137", - "TC56", - "Vivotek SD9361-EHL", - "VS8100", - "VS8401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live.sdp" - }, - { - "models": [ - "360", - "8113", - "8132", - "8134V", - "8332", - "FD8134", - "FD-8134", - "FD8134V", - "FD8163", - "FD-8166", - "FD816BA", - "FE8171V", - "IB8367A", - "IP-7161", - "IP-8330", - "IP8332", - "IP-8332", - "IP-8362", - "Other", - "vs8401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live4.sdp" - }, - { - "models": [ - "360", - "8130", - "8132", - "8134", - "8136", - "8183w", - "8332", - "8367", - "ADC-V520IR", - "CC8371-HV", - "FD-8134", - "FD8154V-F2", - "FD8164", - "FD-8169", - "FD8366-V", - "FD8371", - "FD9387_HTV", - "FE 8174", - "FE8180", - "IB 8367-T", - "IB8367", - "IB8369", - "ildren main", - "IP7161", - "ip8132", - "IP-8332", - "IP-8372", - "VivintIP", - "vs8401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live3.sdp" - }, - { - "models": [ - "6122", - "7131", - "7135", - "8161", - "ANC-800V", - "FD-6121V", - "FD7131", - "FD8137", - "Good Cam", - "ip 3135", - "IP_6114", - "IP-3105", - "IP3111", - "IP-3122", - "IP-3133", - "IP-3135", - "ip3136", - "IP-3137", - "IP-31x2", - "IP-31X2", - "ip6112", - "IP-6127", - "IP-61x2", - "IP-7131", - "IP-7132", - "IP-7135", - "IP-7137", - "IP-7361", - "Other", - "PT-3112/3122", - "PT-3122", - "PT-7135", - "PT-7137", - "PZ-6112", - "PZ-6114", - "PZ-6122", - "PZ-6124", - "pz61x2", - "PZ-61x2", - "PZ-61X2", - "TC-5331", - "v7131", - "VS-3100P", - "VS-3102" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "7131", - "7132", - "7133", - "7138", - "7160", - "7361", - "8100", - "8130", - "8133", - "8134V", - "8136W", - "8161", - "8172", - "8331", - "8332", - "8361", - "8362", - "8364", - "83XX", - "adc-v700x", - "BB5315", - "CC-8130", - "CC8160", - "CC8370-HV", - "FD7131", - "FD-8134", - "FD-8136", - "FD-8169", - "FD8169A", - "FD-81XX", - "FD-8361", - "FD8367A-V", - "FD8367-TV", - "FD8369", - "FD-8371", - "FD-8372", - "FD8373-EHV", - "fd9380-h", - "FE-8172", - "FE-8181", - "ib8329", - "ib8362", - "IB8365", - "IB8367", - "IB-8369", - "ib8381", - "ib8382 t", - "IB9380-H", - "ip 8130", - "ip 8133w", - "IP 8361", - "IP-7130", - "ip7133", - "IP-7133", - "IP7134", - "IP-7138", - "IP-7160", - "IP-7330", - "IP-7361", - "IP-8130", - "IP-8131W", - "IP-8133", - "ip8133W", - "IP-8136W", - "IP8151", - "ip8332", - "IP-8332", - "IP-8362", - "Not known", - "Other", - "PT-3112/3122", - "PT-8133", - "PZ-6114", - "PZ-61X2", - "PZ-7122", - "PZ-71X1", - "TC5332", - "VIVOTEK IP", - "VS-8401 Video Server", - "VS-8401 VIDEO SERVER" - ], - "type": "JPEG", - "protocol": "http", - "port": 1025, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "7132", - "7138", - "7142", - "7151", - "7160", - "7330", - "7361", - "8130", - "8332", - "8364", - "ADC-V510", - "ADC-V520IR", - "BB5315", - "CC8370-HV", - "FD-7131", - "FD-8133V", - "FD-8134", - "FD-8136", - "FD8169a", - "FD816B-HT", - "IB-8354", - "IP-7130", - "IP-7131", - "IP-7132", - "IP-7133", - "IP-7134", - "ip7151", - "IP-7151", - "IP-7152", - "ip7160", - "IP7330", - "IP-7361", - "ip-8152", - "IP-8161", - "IP-8331", - "IP-8332", - "IP-8337H-C", - "IP-8362", - "IP-8364-c", - "IP8372", - "MD-7560", - "Other", - "PT-8133", - "PZ7111", - "PZ-7122", - "PZ-7151", - "PZ71X2", - "S9C1", - "VS-8401 Video Server", - "VS-8401 VIDEO SERVER", - "VS-8801 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "7135", - "IP-7135", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "7138", - "8332", - "83xx", - "ADC-LABV510", - "adc-v520ir", - "fd 8134v", - "IB-8367", - "IP-7131", - "IP-7133", - "IP-7134", - "IP-7142", - "IP-8330", - "IP-8331", - "IP-8332", - "IP-8336w", - "Other", - "SD8324E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "7138", - "8161", - "8172", - "83XX", - "adc-v520ir", - "FD8134V", - "FD-8162", - "FD-81XX", - "FD-8372", - "ib8369", - "IB836B", - "IP-7131", - "IP-7133", - "IP-7135", - "IP-7137", - "IP7140", - "IP7142", - "IP-7160", - "IP-7161", - "IP-7361", - "IP-8130", - "IP8162", - "IP-8332", - "IP8361", - "MD-7560", - "Other", - "PT-3112/3122", - "PT-8133", - "PZ-6114", - "PZ-61X2", - "PZ-7122", - "PZ-7151", - "PZ-71X1", - "PZ-8111W", - "SD-7151", - "SD-7313", - "VS-7100 VIDEO SERVER" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "8151V", - "8332", - "CC-8130", - "FD8134", - "FD-8136", - "IP8131", - "IP-8331", - "IP8362", - "Other", - "PZ-7122", - "PZ-8111W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video2.mjpg" - }, - { - "models": [ - "8161", - "83xx", - "FD-81xx", - "IP-7160", - "Other", - "SD-81x1", - "VS-8401 Video Server", - "VS-8801 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "8161", - "83xx", - "FD-81xx", - "IP-7160", - "IP-8332C", - "PT-8133", - "PZ-7122", - "PZ-71x1", - "SD-7313", - "SD-81x1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video[CHANNEL].mjpg" - }, - { - "models": [ - "8161", - "83XX", - "FD-81XX", - "IP-7135", - "IP-7138", - "IP-7142", - "IP-7160", - "IP-7361", - "Other", - "PT-3112/3122", - "PT-8133", - "PZ-6114", - "PZ-61X2", - "PZ-71X1", - "PZ-8111W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.jpg" - }, - { - "models": [ - "8364ehv", - "fd816b-ht", - "fd9380-h", - "FD9387-HTV-A", - "IP7161", - "VS8100" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "BD-5115", - "BD-5153", - "ip8332", - "VivintIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/root/stream0" - }, - { - "models": [ - "BD-5153", - "BD5153H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.mp4" - }, - { - "models": [ - "BD5153H", - "IP8332", - "nji" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1.sdp" - }, - { - "models": [ - "BD5153H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "cc8160" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "CC-8160", - "fd6122v" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg" - }, - { - "models": [ - "CC9381-HV", - "FD816BA-HF2", - "fd-816b-ht", - "FD9189-H", - "FD-93280H", - "FD9360-H", - "FD9367-HTV", - "FD9369", - "FD9380-H", - "FD9389-HV", - "FD9391-EHTV", - "FD9830", - "IB9360-H", - "IB9381-HT", - "IT9388-HT", - "MS9390-HV", - "SC9133-RTL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1026, - "url": "/live1s1.sdp" - }, - { - "models": [ - "DB8332-SW", - "FD-816B", - "FD816B-HT", - "FD9381", - "IB9368-HT", - "IP-8332C" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/viewer/video.jpg?channel=0&streamid=1&resolution=1024x768&quality=5" - }, - { - "models": [ - "FD-7132", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "FD-7141", - "FD8134", - "IP8336", - "IP9165-LPR" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/viewer/video.jpg?resolution=640x480" - }, - { - "models": [ - "FD8134", - "IP8361" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4002, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "fd8151v" - ], - "type": "VLC", - "protocol": "mms", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "FD-81XX", - "FD-8362E", - "IB-8369", - "IP-7160", - "IP-7361", - "IP-8133", - "IP-8362", - "MD-8562", - "Other", - "SD-8362E" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "fd836ba-htv", - "Other", - "PT-3112/3122" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "FD8371V", - "IP 7330" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/video.mjpg" - }, - { - "models": [ - "FD9181-HT", - "vs8401" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "FD9189-H", - "FD9369", - "FD9380-H", - "FD9389-HV", - "fd9391-ehtv", - "IB9360-H", - "IB9381-HT", - "IB9391-EHTV-v2", - "IT9380-H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live1s2.sdp" - }, - { - "models": [ - "fd9380-h" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/img/video.sav" - }, - { - "models": [ - "FD9387-HTV-A", - "IP9165-LPR", - "VS7100" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/viewer/video.jpg?resolution=320x240" - }, - { - "models": [ - "H.264", - "IP-8152", - "VS2403 Video Server" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "IB9360-H" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/8080" - }, - { - "models": [ - "IB9380-H", - "IB9381-HT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live1s3.sdp" - }, - { - "models": [ - "IP-7135", - "mega pixel" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?cam=0&quality=3&size=2" - }, - { - "models": [ - "IP7330", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "IP-8335H" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video2.mjpg" - }, - { - "models": [ - "NC-1600", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "NCL-612W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "nji", - "NR-8X01NVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[USERNAME]/stream0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 1025, - "url": "/cgi-bin/video.jpg?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "goform/capture" - }, - { - "models": [ - "Other", - "PT-3112/3122" - ], - "type": "JPEG", - "protocol": "http", - "port": 8554, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "TC5332" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "TC56" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "//stream0" - }, - { - "models": [ - "TC56" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/stream2" - }, - { - "models": [ - "VS2403 Video Server" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video[CHANNEL].jpg?size=2&quality=3" - } - ] -} \ No newline at end of file diff --git a/data/brands/viziuuy.json b/data/brands/viziuuy.json deleted file mode 100644 index e88276a..0000000 --- a/data/brands/viziuuy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Viziuuy", - "brand_id": "viziuuy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vz-3pt3" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "VZ-503" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/102" - } - ] -} \ No newline at end of file diff --git a/data/brands/vlc.json b/data/brands/vlc.json deleted file mode 100644 index 8aef4a0..0000000 --- a/data/brands/vlc.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Vlc", - "brand_id": "vlc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/webcam" - }, - { - "models": [ - "Screen RTSP 554" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Screen RTSP 554" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/stream" - }, - { - "models": [ - "Screen RTSP 554" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/" - }, - { - "models": [ - "Stream" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/stream0" - } - ] -} \ No newline at end of file diff --git a/data/brands/voger.json b/data/brands/voger.json deleted file mode 100644 index f0f00a2..0000000 --- a/data/brands/voger.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Voger", - "brand_id": "voger", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VG360" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.asf" - }, - { - "models": [ - "VG360" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/vonnic.json b/data/brands/vonnic.json deleted file mode 100644 index a76913f..0000000 --- a/data/brands/vonnic.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "brand": "Vonnic", - "brand_id": "vonnic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1000", - "HDCVI", - "NVR", - "VIP B230W-P", - "VIP D230W-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "C-907IP", - "C-909IP", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "C-907IP", - "C-909IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "C-907IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "C-907IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "C-907IP" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C-909IP", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "C-909IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C-909IP", - "VIPB1910W-P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "cip-39218kl" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/vonninc.json b/data/brands/vonninc.json deleted file mode 100644 index b2285d2..0000000 --- a/data/brands/vonninc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Vonninc", - "brand_id": "vonninc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DVR-C5508HMF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "DVR-C5508HMF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/vonnision.json b/data/brands/vonnision.json deleted file mode 100644 index 0726307..0000000 --- a/data/brands/vonnision.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Vonnision", - "brand_id": "vonnision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "7963", - "VS-IP305BRWM5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "VS-IP2082RWMS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/vonz.json b/data/brands/vonz.json deleted file mode 100644 index a776505..0000000 --- a/data/brands/vonz.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Vonz", - "brand_id": "vonz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XZ-14F-R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "XZ-14F-R" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/voor%2fkeuken.json b/data/brands/voor%2fkeuken.json deleted file mode 100644 index 7dcd137..0000000 --- a/data/brands/voor%2fkeuken.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Voor/keuken", - "brand_id": "voor%2fkeuken", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini PTZ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/voordeur.json b/data/brands/voordeur.json deleted file mode 100644 index 44c4a74..0000000 --- a/data/brands/voordeur.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Voordeur", - "brand_id": "voordeur", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Duhua" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0" - } - ] -} \ No newline at end of file diff --git a/data/brands/voyager.json b/data/brands/voyager.json deleted file mode 100644 index 69e77b3..0000000 --- a/data/brands/voyager.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Voyager", - "brand_id": "voyager", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vr-1504", - "VR-IPC*F1AM-IR3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/voycam.json b/data/brands/voycam.json deleted file mode 100644 index b1d9471..0000000 --- a/data/brands/voycam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Voycam", - "brand_id": "voycam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WXH-101375-FAEDD" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/voyo.json b/data/brands/voyo.json deleted file mode 100644 index 1d67c3b..0000000 --- a/data/brands/voyo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Voyo", - "brand_id": "voyo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Imax" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/vpl.json b/data/brands/vpl.json deleted file mode 100644 index d69dcb0..0000000 --- a/data/brands/vpl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vpl", - "brand_id": "vpl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/vr-cam.json b/data/brands/vr-cam.json deleted file mode 100644 index fae9f53..0000000 --- a/data/brands/vr-cam.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "brand": "Vr Cam", - "brand_id": "vr-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.3MP", - "1.5 mp model", - "21007175", - "244", - "360", - "6801234561062", - "954631967", - "AHD Camera", - "eseecloud", - "Fisheye", - "IPC", - "Other", - "P4-S", - "Panoramic", - "QJ77", - "RG-QJ77-IP", - "SP006", - "TP-JA960-3M", - "VR 360", - "VR Camera", - "VR-130", - "VR-130-A5", - "VR-300-H5", - "vr360", - "VR360-D2", - "VR360-WIFI-P2", - "VR360-WIFI-P3", - "VR360-WIFI-P5", - "VR-SN3", - "yvr-130-hs" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "360", - "IPC", - "Other", - "VR 360", - "VR-130", - "VR-130-H5", - "VR360-P2", - "VR360-WIFI-P2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "360", - "ipc", - "IPC-4003", - "Other", - "VR Camera", - "VR-300-H5", - "VR360-WIFI-P2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "360", - "6801234561062", - "ipc", - "P4-S", - "VR360_WIFI-3A", - "VR360-WIFI-P3", - "WS VR160" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "eseecloud D100" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "fish eye" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 80, - "url": "/ch0_0.264" - }, - { - "models": [ - "v380", - "VR360-WIFI-P5" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/vr360.json b/data/brands/vr360.json deleted file mode 100644 index 3285adf..0000000 --- a/data/brands/vr360.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Vr360", - "brand_id": "vr360", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "VR-130-A5" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "VR360-WIFI-A13" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/vsc.json b/data/brands/vsc.json deleted file mode 100644 index 452b08d..0000000 --- a/data/brands/vsc.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Vsc", - "brand_id": "vsc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/vsonic.json b/data/brands/vsonic.json deleted file mode 100644 index b3c48be..0000000 --- a/data/brands/vsonic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vsonic", - "brand_id": "vsonic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/vstarcam.json b/data/brands/vstarcam.json deleted file mode 100644 index 51dd65c..0000000 --- a/data/brands/vstarcam.json +++ /dev/null @@ -1,1135 +0,0 @@ -{ - "brand": "Vstarcam", - "brand_id": "vstarcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C38S-P", - "12345", - "12345678", - "202", - "3 Onvif", - "7204", - "7337", - "7824", - "7824WIP", - "7833", - "7837", - "7837WIP", - "888", - "8888", - "af81", - "Baglokalet", - "beauty", - "bl2602", - "C15S", - "C16S", - "C17s", - "c22q", - "C23", - "C23s", - "c24s", - "C25", - "C26S", - "C29S", - "C33-X4", - "C37A", - "C38S", - "C38S-YG", - "C43s", - "c50s", - "c63s", - "C662DR", - "C7248", - "C7284", - "C7388WIP-X4", - "C78", - "C7815WIP", - "c7816", - "C7816w", - "C7816WIP", - "C7823WIP", - "c7824", - "C7824w", - "C7824WIP", - "C-7824WIP", - "C7824WIP ONV", - "C782WIP", - "C783", - "C-7833", - "C7833WIP", - "C7833WIPx4", - "C7833WIP-X4", - "C-7835wip", - "C7837", - "C-7837WIP", - "C7837WIP PnP IPCAM", - "C7838", - "C7838W", - "C-7838WIP", - "C7862", - "C78833WIP-X4", - "C7893WIP", - "c7983wip", - "C82", - "C8733WIP-X4", - "C8737", - "C8892-RUSS", - "C996DR", - "C99S Pro-X5 AI", - "cccc", - "comspot", - "CS -1", - "CS611Q-X5", - "CS621SR", - "DATHOME1", - "Daves", - "Dom", - "e38s", - "escam", - "Escam QF100", - "Eye4", - "Eye4 C1", - "hdcam", - "HI03518E", - "HI3518E", - "Hi3518eV100", - "Home", - "Icam-608", - "Innovations", - "ip001", - "Ko-Op", - "lollandia", - "Miley", - "mio", - "MP#1", - "Other", - "overmax", - "pt 737", - "PT-737", - "QF100", - "robocam", - "robocam 5", - "Starcam", - "STARCAM", - "Suneyes", - "suneyes-1", - "Sunluxy", - "T-7815WIP", - "T-7838WIP", - "timcam", - "v21s", - "V61S", - "Vip starcam", - "vp-373", - "VST", - "VSTAR", - "VSTARCAM C7824WIP", - "VSTARCAM-HI3518E", - "W7815WIP", - "xxxx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "100", - "29S", - "720", - "7824", - "Af81", - "baby", - "C-16s", - "C16S", - "C18S", - "C23", - "C26S", - "C320", - "c33", - "C33-X4", - "C46S", - "C61S", - "C662DR", - "C7388WIP-X4", - "c7815wip", - "C7815WIP", - "c7816wip", - "C7823", - "C7824", - "c7824wip", - "C7833WIP-X4", - "C7837", - "C7837WIP", - "C7837WIP_101", - "c789", - "c7983wip", - "C82R", - "c991", - "CP782WIP", - "CS52Q", - "CS55", - "cs58q-uv", - "eye4", - "EYE4", - "HI3518E", - "Hi3518eV100", - "Onvif", - "Other", - "PT3538", - "PTZ", - "Sunluxy", - "tcamv", - "UNLISTED", - "V3683", - "Vstarcam C24s", - "vstarcam hd", - "vx25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "100", - "7816WIP", - "c16s", - "C18S", - "C19", - "c24s", - "C24s", - "C26S", - "C29", - "C29S", - "c34s", - "C37S", - "C50S", - "C53S", - "C58HD", - "c63s", - "C7815WIP", - "C-7816WIP", - "C7824WIP", - "C-7833WIP-X4", - "C7837WIP", - "C82R", - "C8892-RUSS", - "C90S", - "Cam360 T720PWIP", - "ESCAM QF100", - "H-6837WIP", - "Other", - "PTZ1", - "T-7833WIP", - "T-7837WIP", - "Vstarcam c21s", - "Vstarcam T Series" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100A", - "222", - "7281", - "7816WIP", - "7824WIP", - "7837WIP", - "C16", - "C16S", - "C17S", - "C18S", - "C24", - "C24S", - "C24Stg", - "C29", - "C29S", - "C320", - "c32s-x4", - "C58HD", - "c63s", - "C-7816WIP", - "C7823WIP", - "C7824", - "C7824WIP", - "C7824WIP ONV", - "C782WIP", - "C7833WiP-X4", - "C-7837WIP", - "C7837WIP(B)", - "C7838", - "C82R", - "C-8716WIP", - "C88S-PLUS", - "C95", - "f24s", - "F-6836W", - "Other", - "t series", - "T6836WP", - "T6836WTP", - "T-7815WIP", - "T7835WIP", - "T-7837WIP", - "T-7838WIP", - "VSTA821059DLHBF", - "VSTA848432JRVJV", - "VSTARCAM C7824WIP", - "yfguyf8" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1080P", - "C26S", - "C7823WIP", - "C7824WIp", - "C8892-RUSS", - "W7815WIP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/udp/av0_1" - }, - { - "models": [ - "1234", - "2222", - "7816wip", - "7837", - "c16s", - "C22S", - "C34", - "C7428", - "C-7837WIP", - "C-7838WIP", - "C-8716WIP", - "CS58", - "CW34S-X4", - "Kar1315", - "Order", - "Other", - "spservice", - "T-6835WIP", - "T6836WP", - "T-6892wp", - "T-7815WIP", - "T-7833wip", - "T-7837WIP", - "T-7838WIP", - "T-7892WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "2222", - "720", - "7824WIP", - "7837", - "7837WIP", - "C=7824WIP", - "c16s", - "C17S", - "C24S", - "C25", - "C50S", - "C7812WIP", - "C7815WIP", - "C7816", - "C7816WIP", - "C-7816WIP", - "C7823WIP", - "c7824", - "C7824WIP", - "C-7824WIP", - "C-7837WIP", - "C7837WIP(B)", - "c-8716wip", - "c90s", - "CB73", - "eye4", - "EYE4", - "H6837WIP", - "Other", - "OTHER2", - "s18", - "SUNEYES", - "T-6835WIP", - "T6836WP", - "T-6836WTP", - "T-7833wip", - "T-7833WIP", - "T-7838WIP", - "v18", - "v18s", - "VSTARCAM C7824WIP", - "VSTARCAM C92S", - "VSTC392356NSVBB" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "6868", - "C=7824WIP", - "EYE4", - "F-6836W", - "H-6837WI", - "H-6850WIP", - "Other", - "T-7837WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "7816WIP", - "7824", - "7837", - "C16S", - "C25", - "C29S", - "c32s-x4", - "C34S", - "C35S", - "C37A", - "C38", - "C38S", - "C58HD", - "C63S", - "C7816WIP", - "C-7816WIP", - "C7824WIP", - "c7833wip", - "c7833wip-x4", - "C7837WIP(B)", - "C93", - "EYE4", - "F-6836W", - "H-6837WI", - "H-6837WIP", - "H-6850wip", - "ICAM-608", - "Other", - "T-6835WIP", - "T-6836WTP", - "T-6892wp", - "T-7815WIP", - "T-7833wip", - "T7837WIP", - "T-7838WIP", - "T-7892WIP", - "VSTARCAM C7824WIP", - "VSTC431871" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "7823", - "C=7824WIP", - "C16S", - "C24S", - "C24S YO", - "c37a", - "C63S", - "c7815wip", - "C7816W", - "C7816wip", - "C7816WIP", - "C7823WIP", - "C-7824WIP", - "C-7833wip", - "C7837WIP", - "C7837WIP PNP IPCAM", - "C7838WIP", - "C7842WIP", - "C93", - "f6815WI", - "ip camera c37s", - "Other", - "T-6892wp", - "T7812IP", - "T-7833WIP", - "T-7838WIP", - "vstc" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "7824", - "7824WIP", - "C=7824WIP", - "C16S", - "C17S", - "C25", - "C29S", - "C38S", - "C38S-JS", - "C7812WIP", - "c7815wap", - "C7815WIP", - "C7816", - "C-7816WIP", - "C7823WIP", - "C-7824WIP", - "C-7833WIP-X4", - "C7837", - "C-7837WIP", - "C7837WIP PNP IPCAM", - "C7842WIP", - "EYE4", - "H-6837WI", - "ONVIF", - "Other", - "s18", - "SUNEYES", - "T-6836W", - "T6836WP", - "T-7815WIP", - "T-7833wip", - "T-7838WIP", - "T-7892WIP", - "v18" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "7824", - "7824WIP", - "7833", - "c16s", - "C24S", - "C7815WIP", - "C7823WIP", - "C7824WIP", - "C7833WIPX4", - "C7837WIP", - "C7838WIP", - "C7842WIP", - "EYE4 C1", - "T-6835WIP", - "T6836WTP PnP IPCAM", - "T-7833WIP", - "T-7892WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "7837WIP", - "C7837WIP", - "C7837WIP PNP IPCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "7837WIP", - "C16S", - "C17S", - "C29S", - "c32s-x4", - "C-7833wip", - "C-7837WIP", - "C-7838WIP", - "c7850wip", - "H-6850", - "H-6850WIP", - "Other", - "T-7833wip", - "T7835WIP", - "T-7838WIP", - "VSTARCAM C7824WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "C=7824WIP", - "C-7838WIP", - "Other", - "T-7833WIP", - "T7835WIP", - "T-7837WIP", - "T-7838WIP", - "T-7892WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi" - }, - { - "models": [ - "C16S", - "C18s", - "C320", - "C38S", - "c63s", - "C-7824WIP", - "EYE4", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "c19s" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c19s", - "C26S", - "C7842WIP", - "C8817WIP(RUSS)", - "C8873B", - "C-8892", - "cs64", - "t series", - "T-6835WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C22S", - "c24s", - "C7837WIP", - "C7837WIP PnP IPCAM", - "G43S", - "ip camera c37s" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 18028, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "C22S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 18028, - "url": "/cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "C25", - "C26S", - "CS55" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8001, - "url": "/videostream.cgi?rate=10&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c25s", - "CS621SR" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "C26S", - "C38S", - "c7815wip", - "c-7816win", - "C7816WIP", - "C-7816WIP", - "c-8716wip", - "F-6836W", - "Other", - "SUNEYES", - "T-6835WIP", - "T-6836W", - "T6836WTP", - "T-7833wip", - "T-7837WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi" - }, - { - "models": [ - "C26S", - "C76824", - "c7824wip", - "C-7838WIP", - "Dual", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/udp/av0_0" - }, - { - "models": [ - "c32s-x4", - "c34s", - "C63S" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8484, - "url": "/11" - }, - { - "models": [ - "c32s-x4" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 8484, - "url": "/12" - }, - { - "models": [ - "c34s" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8004, - "url": "/?action=stream" - }, - { - "models": [ - "C63s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264" - }, - { - "models": [ - "C7815WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "C-7816WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "c7824wip" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c7824wip", - "C7837WIP", - "C7842WIP", - "T7835WIP", - "VSTARCAM C7824WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8484, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c7824wip" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8484, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "C7824WIP", - "H6515WI", - "H-6837WI", - "H-6837WIP", - "hi6815wi_2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "C-7824WIP", - "C7838WIP", - "Other", - "T-7892WIP", - "T-9872WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "C7833-X4" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/livestream.cgi?user=[USERNAME]&pwd=[PASSWORD]&streamid=0&filename=" - }, - { - "models": [ - "C7837WIP", - "C8873B" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "C7837WIP PNP IPCAM", - "H-6837WIP", - "T-7815WIP", - "T-7837WIP", - "T-7838WIP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "C8873B", - "T7835WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 65337, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=1280&rate=1" - }, - { - "models": [ - "CS55", - "VSTARCAM C7824WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8484, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=64" - }, - { - "models": [ - "f628", - "f6836w", - "H-6837WIP", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "F628", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "F-6836W", - "H-6837WI", - "H-6837WIP", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "F-6836W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "F-6836W", - "T-6836W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "F-6836W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "F-6836W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "F-6836W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "F-6836W", - "Other", - "T-6835WIP", - "T6836WTP", - "T-6892wp", - "T-7833wip" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "f8815w ip cam", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "H-6812IP", - "H-6837WI", - "H-6837WIP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "H264" - }, - { - "models": [ - "H-6837WIP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "HI03518E", - "VSTARCAM-HI3518E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "HI3518E", - "Other", - "T-6835WIP", - "T6836WTP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "user/videostream.cgi" - }, - { - "models": [ - "ONVIF", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "T7835WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi" - }, - { - "models": [ - "T7835WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=1280" - }, - { - "models": [ - "VSTARCAM C7824WIP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8888, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]19" - } - ] -} \ No newline at end of file diff --git a/data/brands/vta.json b/data/brands/vta.json deleted file mode 100644 index d7aaca3..0000000 --- a/data/brands/vta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Vta", - "brand_id": "vta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "83701" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "83701" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/vtech.json b/data/brands/vtech.json deleted file mode 100644 index 6eeeec1..0000000 --- a/data/brands/vtech.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Vtech", - "brand_id": "vtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H.264" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/walkertone.json b/data/brands/walkertone.json deleted file mode 100644 index a4446cf..0000000 --- a/data/brands/walkertone.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "brand": "Walkertone", - "brand_id": "walkertone", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3260", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/888888:888888/main" - }, - { - "models": [ - "HI-3512" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0/888888:888888/sub" - }, - { - "models": [ - "HI-3512" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "WT-1536E", - "WT-1536M" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - } - ] -} \ No newline at end of file diff --git a/data/brands/wallcharger.json b/data/brands/wallcharger.json deleted file mode 100644 index 8a7cd39..0000000 --- a/data/brands/wallcharger.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wallcharger", - "brand_id": "wallcharger", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wanscam.json b/data/brands/wanscam.json deleted file mode 100644 index 5388967..0000000 --- a/data/brands/wanscam.json +++ /dev/null @@ -1,2469 +0,0 @@ -{ - "brand": "Wanscam", - "brand_id": "wanscam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "00D6FB013EDE", - "00B8FB015F19", - "AJ-C0WA-C116", - "FR4020A2", - "jw 012" - ], - "type": "JPEG", - "protocol": "http", - "port": 99, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "00021", - "00026", - "00043", - "00045", - "0022HD", - "0029", - "0043", - "00D6FB00B226", - "1080", - "541-W", - "720", - "720P", - "720p bullet", - "Achter_RJK", - "agasio a503w", - "AJ-C2WA-C198", - "bullet", - "C6F0SeZ0N0P3L0", - "C-6F0SgZ3N0P0L0", - "Clone", - "crna", - "For", - "H022", - "HW 0038", - "HW 0042", - "HW 0043", - "HW00021", - "HW00022", - "HW00025", - "HW00027", - "HW-00038", - "hw00043", - "HW-00043", - "HW00043 mvm", - "HW00043_LOZE1_V1", - "HW00045", - "HW-0021", - "HW0021 2", - "hw0021-3", - "HW-0022", - "HW0023", - "HW-0023", - "HW-0024", - "HW0025", - "HW0025 JF1", - "HW0025 v2", - "HW0026", - "HW-0026", - "HW0026720", - "HW-0027", - "HW-0028", - "HW0029", - "HW-0029", - "hw003", - "HW-0031", - "HW-0033", - "HW-0034", - "hw0036", - "HW-0036", - "HW-0038", - "HW004", - "HW-0040", - "HW0042", - "hw0046", - "HW0047", - "HW0048", - "HW0049", - "HW0051", - "HW0052", - "HW0054", - "HW045", - "HW45", - "HW-AA", - "IPCC-025202-NYTRJ", - "IPCC-025203", - "JW0009", - "JWEV-176046-DDFDE", - "k22", - "K22", - "K38D", - "K54", - "M-Series", - "NC-541/W", - "NC-541B", - "NC-621", - "NCB-541W", - "NCH-530W", - "NCM-621KW", - "NCM-621W", - "NCM-623W", - "NCM-624W", - "NCM-625W", - "NCM-627P", - "NCM-628D02", - "NCM-628W", - "NCM-630W", - "onvif", - "Other", - "PTZ", - "Solar IP Camera", - "sud", - "TXUTE1", - "vHus", - "W45", - "wert", - "wxh019283feadf", - "WXH-068909-CFBEF", - "WXH-092422-FDDBD", - "WXH-106169-ECEEE", - "WXH-120273-EFEAA", - "WXH-16722B-FBABB", - "wxh-192459-deaed", - "WXH-217048-ecbdd", - "WXH-222832-EFFFE", - "xha0043", - "ZZZZ", - "zzzz-568016-deeca", - "zzzz-579392-dbebf", - "zzzz-599170-dbfcf" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "00021", - "0022HD", - "0036", - "0046", - "00B8FB015FF5", - "360", - "541-W", - "543", - "610", - "616-W", - "AJ01", - "AJ-C0WA-B116", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C001", - "AJ-C0WA-C0D8", - "AJ-C0WA-C119", - "AJ-C0WA-C128", - "AJ-C2WA-B118", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "AW00004J", - "FR-4020A2", - "HW-00025", - "HW-00038", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0023", - "HW-0024", - "HW-0024-working", - "HW-0025", - "HW-0027", - "HW-0028", - "HW-0033", - "HW0034 works", - "hw0036", - "HW-0036", - "HW-0038", - "HW0045", - "HW-025", - "Jw000008", - "JW-0001", - "JW-00011", - "JW-0003", - "JW-0004", - "JW-0004m", - "JW-0005", - "JW-0006", - "JW-0008", - "JW-0009", - "JW-0010", - "JW-0011", - "JW-0011L", - "JW0017W", - "JW-0019", - "JW-0020", - "JW-0036", - "JW-0038", - "JW008", - "JWEV", - "JWEV-091079-WTFNV", - "JWEV-175635-BEADD", - "JWEV-250390-AADCC", - "JWEV-295625-CAAAE", - "JWEV-340949-DBDFA", - "NC-541", - "NC-543WP", - "NCB-541W", - "NCB-543W", - "NCL-610W", - "Other", - "PTZ", - "VJ64", - "WCO-044805", - "WXO-003660-BCBFE", - "WXO-005887-FABFA", - "wxo-015117-eabfc", - "WXO-037128-BCBDE", - "WXO-042982", - "XHA-041215", - "XHA-4020a2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "00021", - "0036", - "543-W", - "720P", - "AJ-C2WA-C198", - "AJ-COWA-COD8", - "C-7816", - "C-7824WIP", - "HW 0038", - "HW-00025", - "HW00043", - "HW-0021", - "HW0024", - "HW-0025", - "HW-0027", - "HW-0033", - "HW0036", - "HW-0044", - "HW0052", - "IP CAM T-10", - "j11", - "JH0011", - "jw0004", - "JW-0004", - "JW-0005", - "jw0008", - "JW-0009", - "jw0011", - "JW-0011", - "JW0016", - "JW-0019", - "JW-009", - "JWEV", - "JWEV -348176-CDCFD", - "JWEV-057416-FFVHW", - "JWEV-193388-ADDDE", - "JWEV-215174-FDCFC", - "JWEV-258372-DCCAC", - "Jwev-323942-DAFFD", - "JWEV-354356-EECED", - "jwev-354530efaeb", - "JWEV-354530-EFAEB", - "JWEV-374631-ACFCB", - "JWEV-382475", - "JWEV-382475-erc", - "NCL610W", - "Other", - "PTZ", - "WCO-044805", - "WXO-008911-FDCDC", - "XHA-003078-CRVUY", - "XHA-120903181" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "00021", - "00026", - "00043", - "00045", - "0022HD", - "0029", - "0036", - "0043", - "0046", - "620", - "620-W", - "720p bullet", - "AJ-C0WA-B1D8", - "AJ-C2WA-C198", - "AJ-COWA-C126", - "BULLET", - "C50Pro", - "C-6F0SGZ3N0P0L0", - "h 0003", - "h0043", - "hd00043", - "hk0038", - "HW 0038", - "HW 0041", - "HW 0042", - "HW Sereis 2", - "hw00021", - "HW00022", - "HW-00025", - "HW00027", - "HW0003", - "HW00036", - "HW-00038", - "HW-00043", - "HW00043_loze1", - "HW00043_Loze1_v1", - "hw00045", - "HW-0021", - "Hw0021 2", - "hw0021 v2", - "HW-0022", - "HW0022-1", - "HW-0022HD", - "HW-0023", - "HW-0024", - "HW-0024HD", - "HW-0025", - "HW0025 V2", - "HW-0026", - "HW-0027", - "HW-0028", - "hw0029", - "HW-0029", - "HW-0030", - "HW0034", - "HW-0036", - "HW-0038", - "HW-0038A", - "HW-0040", - "hw-0041", - "HW0041-2", - "HW0043", - "HW-0044", - "HW0045", - "hw0046", - "HW0048", - "HW0049", - "HW0050", - "HW0051", - "HW0051-2", - "HW0052", - "HW0054", - "hw-038", - "HW043", - "HW045", - "hw4005", - "hw43", - "HW-AA", - "HWAA-015890-EACFC", - "ip-cam", - "JW-0001", - "JW-0003", - "JW0004", - "JW-0004", - "JW0005", - "JW0008", - "JW-0009", - "jw0018", - "jw11", - "JWEV-011921-RXSXT", - "JWEV-340949-DBDFA", - "K54", - "M-Series", - "NC-530", - "NC-541", - "NC-542W", - "NCB-543W", - "NCH-530MW", - "NCH-530W", - "NCH-531MW", - "NCH-532MW", - "NCH-532W", - "NCH-536MW", - "NCL-610W", - "NCM-621W", - "NCM-623W", - "NCM-624w", - "NCM-625W", - "NCM-627P", - "ONVIF", - "Other", - "Other new", - "outside", - "PIN IP Camera", - "PNP IP", - "PTZ_2", - "wans", - "wanscam 002uejj", - "wf0045", - "WHX-068909-CFBEF", - "WX-617", - "wxh", - "WXH 203158 FCCDC", - "wxh-025138-ecbac", - "WXH-025528-FDBED", - "wxh-039472-faDED", - "WXH-039797-AEBCE", - "WXH-043964-BEEBC", - "wxh-052428-efbae", - "WXH-063314-EDDBF", - "WXH-068909-CFBEF", - "wxh-075491", - "wxh-080520-aaffb", - "wxh-091473-abeca", - "WXH-092422-FDDBD", - "WXH-093890-EEEBD", - "WXH-093891-BBBCF", - "WXH-093892-AABFA", - "WXH-093900-FACBA", - "WXH-093902-CEBDB", - "WXH-093903-EEDEC", - "WXH-093904-ADDDF", - "WXH-093909-BAEEC", - "WXH-099835-FAECC", - "wxh-101556-ea cbf", - "WXH-103232-EACBA", - "WXH-106169-ECEEE", - "WXH-110565-FEDAF", - "WXH-113230-BDFCB", - "WXH-113930-CEEFE", - "WXH-134121-AFEBD", - "WXH-137329-DFCAB", - "WXH-14608-AEDDC", - "WXH-146106-CDBAC", - "WXH-152127-ABABE", - "WXH-160178-ACBAF", - "WXH-170982-AFEDC", - "WXH-187269-AEAFF", - "wxh-202693-bcdbd", - "WXH-222832-EFFFE", - "wxo-015117-eabfc", - "WXO-042982", - "ZZZZ-586162-ACCBE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "00021", - "AJ-C0WA-B116", - "AJ-C0WA-C116", - "JW-0006", - "JW-0011" - ], - "type": "JPEG", - "protocol": "http", - "port": 99, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "00021", - "HW-0024HD", - "HW0028", - "hw0038", - "JW0004", - "JW-0008", - "JW0011", - "JWEV-354356-EECED" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi" - }, - { - "models": [ - "00021", - "002-NEZP", - "610", - "AJ-C0WA-B116", - "AJ-C0WA-B168", - "AJ-C0WA-C116", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "Colour", - "HD-100W", - "HW 0043", - "HW00021", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0024", - "HW-0025", - "HW-0026", - "HW-0028", - "HW-0033", - "HW-0036", - "HW0038", - "HW-0039", - "ip T-10", - "ip T-10 baby cam", - "JW-0004", - "JW-0005", - "JW-0006", - "JW-0008", - "JW0008B", - "JW-0009", - "JW-0011", - "JW0012", - "JW-0018", - "JW-004", - "JW008", - "JWEV", - "JWEV -348176-CDCFD", - "JWEV-011921-RXSXT", - "JWEV-057416-FFVHW", - "JWEV-171082-BFBAD", - "JWEV-380096-CECDB", - "JWEV-PEPLOW", - "Lager", - "NCB-543W", - "NCL-616W", - "Other", - "PTZ", - "Stue-2", - "TG-002", - "ue-2", - "WIFICAM", - "Works", - "WXO-034510-fbcab", - "XHA-120903181" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "00026", - "C-6F0SGZ3N0P0L0", - "NC-530", - "NCH-530MW", - "NCH-530W", - "NCH-532MW", - "NCH-536MW", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "00026", - "0022HD", - "HW-0021", - "HW0022", - "HW-0022HD", - "HW-0026", - "hw0043", - "hw0045", - "JW-0012", - "JWEV", - "NC-530", - "NCH-530W", - "NCH-531MW", - "NCH-532MW", - "NCH-536MW", - "NCH-537MW", - "NCM-625W", - "Other", - "WXH-187269-AEAFF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "00043", - "0022HD", - "0054", - "AJ-COWA-B1D8", - "HW 0043", - "HW-0021", - "HW0054", - "ipc08c24054e001", - "IP-CAM", - "K22", - "K38D", - "K54", - "KD38D", - "Other", - "PTZ", - "Q3S", - "XHA-4020A2" - ], - "type": "JPEG", - "protocol": "http", - "port": 1935, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "00043", - "543-W", - "620-W", - "HW 0041", - "HW00038", - "HW0022", - "HW-0022HD", - "HW0024", - "hw0026", - "HW-0028", - "hw0043", - "HW0043", - "HW-0044", - "HW0045", - "HW0052", - "HWAA-005220-DAACB", - "JW0004", - "M-623W", - "NC-530", - "NC-541", - "NC-543W", - "NCB-541W", - "NCB-543W", - "NCH-530M", - "NCH-530W", - "NCH-531MW", - "NCH-532MW", - "NCH-536MW", - "NCM-621W", - "NCM-624W", - "NCM-625W", - "Other", - "pnp ip", - "WXH-025528-FDBED", - "WXH-192459-DEADD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "11" - }, - { - "models": [ - "00045", - "HW00025", - "hw00045", - "HW0024", - "HW-0024", - "HW0045", - "HW0049", - "M Series" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 89, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "0022HD", - "AJ-Cowa-B1D8", - "HW0054", - "IP-CAM", - "k21", - "k22", - "K22", - "K54", - "Other", - "PGL2AZRGEZJR4HLPJHYA", - "PNP IP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "ch0_0.h264" - }, - { - "models": [ - "0022HD", - "033", - "HW00021", - "HW00022", - "hw00043", - "HW0022", - "HW0025", - "HW0026", - "hw0043", - "HW0045", - "Other", - "wanscam hw00038", - "WXH-153193-FDAAD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/1" - }, - { - "models": [ - "0022HD", - "0036", - "AH-CWA-B168", - "AJ-C2WA-C118", - "ATS", - "FI-18904W", - "HW00027", - "HW00036", - "HW00038", - "HW-0026", - "HW0036", - "J004", - "JW000008", - "jw0004", - "JW-0004", - "jw0005", - "JW0009", - "JW-0009", - "JW0011", - "JW-0011", - "JW-05", - "JWEV", - "JWEV-380096-CECDB", - "nc-003", - "Other", - "PTZ", - "rtsp", - "WXO-003660-BCBFE", - "WXO-005887-FABFA", - "XHA-003078-CRVUY", - "XHA-120903181" - ], - "type": "JPEG", - "protocol": "http", - "port": 81, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "0022HD", - "AJ-C0WA-C116", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "HW 0042", - "HW00025", - "HW00027", - "HW00038", - "HW-00038 (Goed)", - "HW-0022HD", - "HW-0028", - "HW-0033", - "JW-0003", - "JW-0004", - "JW-0006", - "JW-0008", - "jw001", - "JW0011", - "JW-0011", - "JW-0012", - "JW-008", - "JWEV-093897-DVXXV", - "JWEV-331329-DACFA", - "JWEV-380096-CECDB", - "NC-003", - "NC-541w", - "NCB-540W", - "NCB-541W", - "NCL610W", - "NCL-610W", - "NCL-616W", - "Other", - "PTZ", - "WORKS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "0022HD", - "AJ-C2WA-C198", - "HW00022", - "HW0024", - "jw0008" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "0022HD", - "HW-0022HD", - "HW0024", - "HW0045", - "JW-AP1910S" - ], - "type": "FFMPEG", - "protocol": "rtmp", - "port": 554, - "url": "/bcs/channel0_main.bcs?token=[TOKEN]&channel=0&stream=0" - }, - { - "models": [ - "002-NEZP", - "005-BHOD", - "005-EEXQ", - "00B8FB007833", - "00B8FB0147E2", - "118", - "480", - "541-W", - "543-W", - "546-W", - "720P", - "AH-C2WA-B118", - "AH-C2WA-B168", - "AH-CWA-B168", - "AJ-118", - "AJ-C0WA-198", - "AJ-C0WA-B1D8", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C2LA-C198", - "AJ-C2WA-B118", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "aj-cowa-c116", - "AJ-COWA-C128", - "b1d1-1", - "c116", - "FR-4020A2", - "HW 0038", - "HW-0021", - "hw0025", - "HW-0040", - "JW-0004", - "JW-0008", - "JW-0009", - "JW0018", - "jw008", - "JWEV", - "JWEV-057416-FFVHW", - "NC-530", - "NC-541", - "NC-541/W", - "NC-541B", - "NC-541W", - "NC-541wxxx", - "NC-542W", - "NC-543W", - "NC-54X", - "NCB-534W", - "NCB-540W", - "ncb541w", - "NCB-541W", - "NCB-541WB", - "NCB-541WB SERIES", - "NCB-543W", - "NCB-545W", - "NCB-546W", - "NCH-530W", - "NCH-531MW", - "NCH-532MW", - "NCH-532W", - "netwave", - "nscam 1", - "Other", - "ptz", - "PTZ", - "T9-95Q9-97ZF", - "vj80", - "wanscam hw0025", - "XHA-120903181", - "XHA-4020A2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "002uqqm", - "JW0008", - "NCM625GA" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "0036", - "106B", - "118", - "543-W", - "790", - "AJ-C0WA-B116", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C2WA-B118", - "AJ-C2WA-C198", - "AJ-COWA-C126", - "AJ-COWA-C128", - "C-118", - "C-126", - "FR-4020A2", - "HW-0021", - "HW-0022", - "HW-0024", - "HW-0025", - "HW-0028", - "HW-0033", - "HW-0036", - "HW0049", - "IP CAM T-10", - "JW000008", - "JW-0001", - "JW-0003", - "JW-0004", - "JW-0005", - "JW0008", - "JW0009", - "jw0010", - "JW-0011", - "JW-0012", - "JWEV", - "JWEV-340949-DBDFA", - "NBC-543W", - "NC-530", - "NC-541", - "NC-541/W", - "NC-541W", - "NC-543W", - "NCB-534W", - "NCB-541W", - "NCB-543W", - "NCBL-618W", - "Other", - "W45" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "005-EEXQ", - "005-LSZQ", - "00D6FB01980F", - "00D6FBE1BE56", - "118", - "541-W", - "AJ-C0WA-B106", - "AJ-C0WA-B116", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-B606", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C0WA-C119", - "AJ-C2WA-C198", - "AJCOW116", - "AJ-COWA-C116", - "FR-4020A2", - "j11", - "JW-0005", - "JW0008", - "NC-541", - "NC-541W", - "NCB-541W", - "NCB-543W", - "NCB-545w", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "00B8FB007833", - "00B8FB00E25D", - "00B8FB015FF5", - "00D6FB00B226", - "00D6FB01980F", - "00D6FB01BE56", - "106B", - "118", - "543W", - "620-W", - "720P BULLET", - "AJ01", - "AJ118", - "AJ-C0WA-B106", - "AJ-C0WA-B116", - "AJ-C0WA-B168", - "AJ-C0WA-B1D8", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-B606", - "AJ-C0WA-C001", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C0WA-C119", - "AJ-C0WA-C126", - "AJ-C0WA-C128", - "AJ-C0WA-C1D8", - "AJ-C2WA-B118", - "AJ-C2WA-C116", - "AJ-C2WA-C118", - "AJ-C2WA-C18", - "AJ-C2WA-C198", - "AJ-C2WA-C198-RADI", - "AJ-COWA", - "AJ-COWA-B1D8", - "AJCOWA-C0D8", - "AJ-COWA-C116", - "AJ-COWA-C126", - "AJ-COWA-C128", - "AJ-COWA-COD8", - "C0WA-C116", - "C-198", - "cheep", - "D-9046", - "FR-4020A1", - "FR-4020A2", - "HW-0021", - "HW-0022", - "HW-0024", - "HW-0028", - "jw0003", - "JW-0006", - "JW-0009", - "JW-0010", - "JW0011", - "JW-0012", - "JW008", - "JWEV-057416-FFVHW", - "M3065", - "NC-530", - "NC-541", - "NC-541/W", - "NC-541B", - "NC-541w", - "NCB-521W", - "NC-B541W", - "NCB-541WB Series", - "NCB-543W", - "NCL-610W", - "Other", - "PTZ", - "Site", - "Wanscam hw0025", - "WXO-008911-FDCDC", - "XHA-4020A2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "00B8FB015FF5", - "198", - "543-W", - "616-W", - "AJ01", - "AJ-C0WA-B106", - "AJ-C0WA-B116", - "AJ-C0WA-C0D8", - "AJ-C0WA-C126", - "AJ-C2WA-B118", - "AJ-C2WA-C118", - "Aj-c2wa-c118 ptz", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "AJ-COWA-C116", - "AJ-COWA-C126", - "C0WA-C116", - "FR-4020a2", - "FR-4020A2", - "GW-0012", - "HW-0022", - "HW-0023", - "HW-0025", - "HW-0026", - "HW-0028", - "HW-0033", - "HW-0038", - "HW-025", - "JW-0003", - "JW-0004", - "JW-0005", - "JW-0009", - "JW-0011", - "JW-009", - "JWE-059605-GJTFM", - "JWEV", - "JWEV-057562-SFXNH", - "NCL-610W", - "NCL-615W", - "NCL-616W", - "NCL-S616W", - "NCM-630GB", - "Other", - "wanscam: jwev-228980-fffav", - "WJ011", - "WX-617", - "WXO-003660-BCBFE", - "WXO-034510-fbcab", - "XHA-4020a2" - ], - "type": "JPEG", - "protocol": "http", - "port": 1025, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "00D6FB0197FE", - "00D6FB01980F", - "AJ-COWA-COD8", - "HW-0024", - "NC-541W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "00D6FB01980F", - "106B", - "541-W", - "AJ-C0WA-B106", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C2WA-C116", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "AW00004J", - "FI-18904w", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0023", - "HW-0024", - "HW-0025", - "HW-0028", - "HW0030", - "HW-0033", - "HW-0038", - "JW000008", - "JW-0001", - "JW-00011", - "JW0002", - "JW-0004", - "JW-0004m", - "jw0005", - "JW-0006", - "JW-0011", - "JW-0011l", - "JW-0012", - "JW-0018", - "JW-009", - "JW-CD", - "JWEV", - "JWEV-011777-NSRVV", - "JWEV-030748-WMNXS", - "jwev-057416-ffvhw", - "JWEV-360171-BBEAC", - "JWEV-380096-CECDB", - "NC-541", - "NCB-543W", - "Other", - "XHA-4020a2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "00D6FB01980F", - "106B", - "541-W", - "AJ-C0WA-B116", - "AJ-C0WA-B1D8", - "AJ-C0WA-C0D8", - "AJ-C0WA-C126", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "F-18910W", - "FR4020A2", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0023", - "HW-0024", - "HW-0025", - "HW-0028", - "HW-0033", - "HW-0038", - "HW0049", - "IP CAM T-10", - "j11", - "JW-0004", - "JW-0010", - "JW-0012", - "JW-004", - "JW008", - "JWEV", - "JWEV -348176-CDCFD", - "JWEV-023636-VKULD", - "JWEV-380096-CECDB", - "NC-541w", - "NCB-541W", - "NCB-541WB", - "NCB-543W", - "NCL-610W", - "NCL-S616W", - "Other", - "WJ-0004", - "XHA-4020A2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1.56", - "1080", - "543W", - "720", - "720P", - "750GB", - "790", - "AJCA13P7ZHEA29KB", - "BULLET", - "Gaspar", - "IP-CAM", - "NCL-610W", - "NCM-624GA", - "ncm625gb", - "NCM-625W", - "NCM630GB", - "NCM-630W/GB", - "ncm-750gb", - "NCM-750GB", - "ONVIF", - "Other", - "Q3S", - "qr3", - "W4/W5", - "Wanscam 1080", - "WVCA98Q6YC0LFYJI" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "106B", - "543-W", - "AJ-C0WA-B116", - "AJ-C0WA-B1D8", - "AJ-C0WA-B606", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "AJ-COWA-C116", - "AJ-COWA-C126", - "B1D8", - "FR-4020A2", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0028", - "HW-0033", - "HW-0036", - "HW-0038", - "JW-0004", - "JW-0006", - "JW-0008", - "JW-0010", - "JW-0010Z", - "JW-0011", - "jwev", - "JWEV -348176-CDCFD", - "JWEV-114986-RSSKD", - "JWEV-380096-CECDB", - "JWEV-MIXAS", - "NC-520W", - "NC-541", - "NC-541w", - "NC-543W", - "NCB-541W", - "NCB-543W", - "NCB-545w", - "NCBL-618W", - "NCL-161W", - "NCL-610W", - "NCL-616W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "107127396040", - "AJ-C0WA-B1D8", - "AJ-C0WA-B1D8-1", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "HW-0021", - "HW-0022", - "HW0043", - "HW-0044", - "JW-00011", - "JW-0005", - "JW0008", - "JW-0011", - "JW-1100", - "JWEV-174422-DDEEC", - "NCB-543W", - "Other", - "PTZ" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "1080", - "720P", - "720P BULLET", - "bulet", - "H0043", - "HW 0041", - "HW00038", - "HW00045", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0022PG", - "HW-0023", - "HW-0031", - "hw0038", - "HW0038", - "HW-0039", - "HW0041", - "HW0042", - "HW0045", - "HW0049", - "HW0054", - "JW0009", - "NCM-628D02", - "Other", - "WXH-187269-AEAFF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/12" - }, - { - "models": [ - "118", - "AJ-C0WA-B116", - "AJ-C0WA-C0D8", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "JW-0008", - "JW-0011", - "JWEEV-256610-EDBBA", - "NC-541B", - "NCB-541W", - "NCB-543WP", - "NCL-610", - "NCL-610W", - "NCM-621W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "198j", - "AJ-C0WA-B1D8", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C126", - "AJ-C0WA-C128", - "AJ-C2WA-B118", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "AJ-COWA-B1D8-1", - "AJ-COWA-C116", - "AJ-COWA-C126", - "D-9046", - "FR-4020A2", - "j1400", - "JW-0011", - "NC-541w", - "NC-543W", - "NCB-540W", - "NCB-541W", - "NCB-543W", - "NCH-531MW", - "NCL-616W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "250", - "251", - "252", - "541-W", - "543", - "543-W", - "AJ-C0WA-B116", - "AJ-C0WA-B1D8", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C116", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "C0WA-C116", - "FR-4020A1", - "FR-4020A2", - "HW-0022", - "IP-CAM", - "JW0003", - "NC-541", - "NC-543W", - "NCB-521W", - "NCB-534W", - "NCB-540W", - "NCB-541W", - "NCB-541WB", - "NCB-543W", - "NCM-621W", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "4020a2", - "616-W", - "AJ-C0WA-C0D8", - "AJ-C2WA-C198", - "FR-4020A2", - "ip900", - "JWEV -348176-CDCFD", - "JWEV-360171-BBEAC", - "NC-543W", - "NCB-534W", - "NCB-543W", - "NCB-543WP", - "NCBL-618W", - "NCL-616W", - "NCL-B618W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "514-W", - "AJ01", - "AJ-C0WA-B168", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C2WA-B118", - "AJ-C2WA-C118", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "AJ-COWA-C116", - "C0WA-C116", - "F-402", - "F-6935", - "FR-4020A2", - "JW-0004", - "JW-0008", - "m9122", - "NC-541B", - "NCB-541W", - "NCB-543W", - "Other", - "SCAM", - "XHA-4020a2", - "XHA-4020A2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "514-W", - "AJ-C0WA-B106", - "JW0003", - "JW-0005", - "JW0011", - "JWEV", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?img=vga" - }, - { - "models": [ - "514-W", - "541-W", - "541W-Demon", - "610", - "AJ01", - "AJ-C2WA-B118", - "AJ-C2WA-C198", - "FR-4020A2", - "HW-0022HD", - "HW-0025", - "HW-0028", - "JW-0005", - "JW-0008", - "JW-0009", - "JW-0010", - "JW-0011", - "JWEV", - "JWEV-236669-DDCFC", - "NC-541w", - "NC-543W", - "NCB-541W", - "NCL-610W", - "NCL-615w", - "NCM-630GB", - "Other", - "SC521", - "WXO-003660-BCBFE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "541-W", - "616-W", - "JW000008", - "JW-0004", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Image.jpg" - }, - { - "models": [ - "543-W", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C126", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "FR-4020A2", - "HW-0021", - "HW-0028", - "HW-0033", - "JW-0004", - "JW-0008", - "JW-0011", - "JW-004", - "JWEV", - "NC-541", - "NCB-543W", - "NCL-610W", - "NCL-614W", - "NCM-630GB", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "543-W", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C0D8", - "AJ-C2WA-C198", - "FR4020A2", - "HW0038", - "JW0004", - "JW-0004", - "JW0009", - "JW0011", - "JW-004", - "JW008", - "JWEV-157123-FDBCC", - "NC-541", - "NC-541/W", - "NC-541W", - "NC-541w-P", - "NC-542W", - "NCB-41W", - "NCB-540W", - "NCB-541W", - "NCB-543W", - "NCB-545w", - "NCL-610", - "NCL-610W", - "NCL-616W", - "Other", - "WXO-005887-FABFA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "610", - "720P", - "AJ-C0WA-B1D8", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "B1D8", - "FR-4020A2", - "JW-AP713", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "720" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "AHCWA-B168", - "aj", - "AJ-C0WA-C0D8", - "AJ-C0WA-C116", - "AJ-C2WA-C116", - "AJ-C2WA-C198", - "FR-4020A2", - "NC-541", - "NC-541W", - "NCB-541W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "aj116", - "JW-0006", - "JW-0008", - "JWEV-180063-CEEAD" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "AJB-116", - "AJ-C0WA-B1D8", - "AJ-C0WA-B1D8-1", - "AJ-C0WA-C0D8", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "AJ-COWA-C116", - "C2D8", - "FR-4020A2", - "J004", - "JW-0004", - "JW-0008", - "NC-541w", - "NCB-541W", - "NCB-543W", - "Other", - "PTZ", - "TXute1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "AJ-C0WA-198", - "AJ-C0WA-B1D8", - "AJ-C0WA-C0D8", - "AJ-C0WA-C126", - "B1D8-1", - "HW00036", - "HW-0021", - "HW-0022", - "HW-0028", - "HW-0033", - "HW-0038", - "HW-22", - "j11", - "JW-0004", - "JW-0008", - "JW-0009", - "JW-0011", - "JW-004", - "JWEV", - "JWEV-357812-CFBEC", - "JWEV-380096-CECDB", - "liv", - "NCB-540W", - "NCB-541W", - "NCB-543W", - "NCL-612W", - "NCL-616W", - "Other", - "WX-617" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AJ-C0WA-B116", - "AJ-C2WA-B118", - "FR-4020A1", - "FR-4020A2", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "AJ-C0WA-B116", - "AJ-C0WA-B1D8-1", - "AJ-C2WA-C198", - "FR-4020A2", - "NCB-541W", - "NCB-541WB", - "NCB-641w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "AJ-C0WA-B1D8-1" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 28202, - "url": "/video.cgi?resolution=QVGA" - }, - { - "models": [ - "AJ-C0WA-B1D8-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "AJ-C0WA-C0D8", - "AJ-C2WA-C198", - "AJ-COWA-C116", - "FR-4020A2", - "HW-0027", - "hw0038", - "JW0004", - "NC-541w", - "NCB-541W", - "NCB-543W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "AJ-C0WA-C0D8", - "HD00043", - "HW-0023" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "AJ-C0WA-C0D8", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "AJ-C0WA-C0D8", - "F-18910W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "AJ-C0WA-C0D8", - "AJ-C2WA-C198", - "HW0043", - "JW-0001", - "NCH-532MW", - "NCH-532W", - "NCH-536MW", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "AJ-C0WA-C116", - "AJ-C2WA-C198", - "AJ-COWA-B1D8", - "AJ-COWA-C116", - "HW-0021", - "HW-0022", - "HW-0022HD", - "HW-0033", - "HW-0038a", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?" - }, - { - "models": [ - "AJ-C0WA-C116" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "AJ-C0WA-C116", - "AJ-COWA-C116", - "FR4020A2", - "HW00045", - "HW-0021", - "HW-0024", - "HW-0033", - "JW-0004", - "JW001", - "JW-0011", - "JWEV", - "JWEV-134552-NHFBM", - "JWEV-374631-ACFCB", - "NCBL-618W", - "NCH-532MW", - "NCL-610W", - "NCL-616W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "AJ-C0WA-C116" - ], - "type": "JPEG", - "protocol": "http", - "port": 99, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "AJ-C0WA-C116", - "JW0011", - "JW-0011" - ], - "type": "JPEG", - "protocol": "http", - "port": 99, - "url": "/snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AJ-C0WA-C126", - "AJ-COWA-C116", - "AJ-COWA-C126", - "HW0034 WORKS", - "HW-025", - "JW-0011", - "NCL-616W", - "Other", - "WXO-042987-FADCE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "AJ-C2WA-C198-RADI" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "AJCOW116", - "JW-00011", - "JW-0006", - "JW-0008", - "JW0011", - "JW-0011L", - "JW008", - "JWEV", - "JWEV-093897-DVXXV", - "Other", - "WXO-008911-FDCDC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi" - }, - { - "models": [ - "aj-cowa-c116", - "JW0002", - "jw0004", - "JW-0008", - "JWEV-327699-AEFCA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "BL-720C", - "kidcasa", - "M-Series", - "NC-541", - "NCH-532MW", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "" - }, - { - "models": [ - "Camera 4", - "FR4020A2", - "hw0025", - "HW-0028", - "jw0004", - "JW-0005", - "jw0006", - "jw0008", - "jw0011", - "JWEV-074062-YRBMN", - "JWEV-374631-ACFCB", - "Not known", - "Not sure", - "Other", - "Unjown", - "UnknownNknown" - ], - "type": "MJPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "CLONE", - "M-Series", - "NCM-621W", - "Other", - "WXH-208040-EADDB" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "DMX", - "k054", - "k21", - "K54" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "FR4020A2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "FR4020A2", - "HW0028" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "FR-4020A2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play1.sdp" - }, - { - "models": [ - "FR-4020A2" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "play2.sdp" - }, - { - "models": [ - "FR-4020A2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "HW 0041", - "HW0022", - "HW-0024", - "NC-520W", - "NC-530", - "NC-541w", - "NCH-532mw", - "NCH-532MW", - "NCH-536MW", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "HW 0042", - "hw0038", - "HW0043", - "JW-0006" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "HW00021", - "HW-0021", - "HW0022", - "HW-0024", - "HW-0029", - "HW0043", - "NCH-531MW", - "NCH-532MW", - "NCH-536MW", - "Other", - "PTZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "HW-00025", - "HW00036", - "hw0023", - "HW-0025", - "HW-0030", - "HW0036", - "HW-0044", - "j11", - "jh0011", - "JW-0004", - "JW-0008", - "JW-0009", - "jw0011", - "JW-132288-SNMUT", - "JWEV", - "jwev-106043-LYT2C", - "JWEV-241301-CADBD", - "NCL-610", - "Other", - "wanscam1" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "HW00038" - ], - "type": "VLC", - "protocol": "mms", - "port": 81, - "url": "img/video.asf" - }, - { - "models": [ - "HW0024", - "HW-0028", - "HW-0033", - "HW0038", - "Ibramod Security", - "jw005", - "JWEV", - "JWEV-193146-BCCDC", - "JWEV--216791-ACBAC", - "JWEV-294625-EDDCA", - "JWEV-380829-FFBBC" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "HW0024" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 9100, - "url": "/iphone/11?[USERNAME]:[PASWORD]&" - }, - { - "models": [ - "HW-0024HD", - "M-Series", - "NCM-621W", - "NCM-623W", - "NCM-625W", - "NCM-628D02" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "live/h264/ch[CHANNEL]" - }, - { - "models": [ - "HW-0025", - "HW-0040" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "HW-0028" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "HW-0028" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=1280x720" - }, - { - "models": [ - "HW-0028", - "jw0004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 60752, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=1080x1920" - }, - { - "models": [ - "HW-0033", - "hw0036", - "Other", - "WanscamJW0004" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "hw0043", - "NC-530", - "NCH-531MW", - "NCH-532MW", - "NCH-536MW", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snap.jpg?JpegSize=M" - }, - { - "models": [ - "HW0049" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "HW0052", - "JW-0004", - "NC-512" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "J0004" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.cgi?user=[USERNAME]&pwd=Tedicek15%40" - }, - { - "models": [ - "JW0003" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 99, - "url": "/videostream.cgi?user=[USERNAME]&pwd=&resolution=32&rate=0" - }, - { - "models": [ - "jw0004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 60752, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&res=1920x1080" - }, - { - "models": [ - "JW-0004", - "JW-0008" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "JW-0011" - ], - "type": "JPEG", - "protocol": "http", - "port": 3333, - "url": "/snapshot.cgi?camera=0" - }, - { - "models": [ - "JW-0019" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "JW-AP713" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "JWEV -348176-CDCFD" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/img/snapshot.cgi?size=3" - }, - { - "models": [ - "JWEV-327699-AEFCA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/video.cgi?resolution=VGA" - }, - { - "models": [ - "k21" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/wansview.json b/data/brands/wansview.json deleted file mode 100644 index 87e098e..0000000 --- a/data/brands/wansview.json +++ /dev/null @@ -1,988 +0,0 @@ -{ - "brand": "Wansview", - "brand_id": "wansview", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "043825-XXHGP", - "1080", - "1080 Hd", - "1080p", - "1080P HD", - "1080P HD W1", - "1080P HD w2", - "1080p HD W4", - "1080p HD W6", - "1080P HD Wireless Cloud IP Camera Q5", - "1080P K3", - "1080p K5", - "1080P MID RES", - "1080p pro hd", - "1080P Pro HD W2", - "1080P Q5", - "1080P Q6", - "1080P W1", - "1080P w2", - "1080P W3", - "1080p W4", - "1080P W5", - "1080P W5 Cloud", - "1080p W6", - "1080P W6 Cam1", - "1080P W6 Cam1 WLAN", - "1080pw4", - "1080PW4", - "1090", - "121", - "19*", - "192", - "251253", - "2k 3mp g6", - "2K Indoor", - "2K Light Bulb Security Camera", - "2mp", - "459116", - "543NB", - "543W", - "625", - "625W", - "633GBU", - "700GC", - "702p", - "720", - "720P", - "720P IP CAMERA", - "720p W3", - "720p x", - "AME", - "dome", - "g2 dome camera", - "GalaYou G7", - "Galayou Y4", - "Gar", - "IP CAMERA G6", - "IP Camera K2", - "IP Camera Q3", - "IP CAMERA Q5", - "IP Camera W2", - "ismart", - "K2 720P", - "K3 1080", - "k31080p", - "K40", - "kitchen cam", - "Lightbulb G6 IndoorOutdoor Cloud Camera", - "M series", - "Master", - "mcm625ga", - "mma", - "NBC543W", - "NCH537MW", - "NCM", - "NCM 621W", - "ncm 625 ga", - "NCM620GA", - "NCM620W", - "NCM621W", - "NCM622GA", - "NCM622GA Q2", - "NCM623W", - "NCM624W", - "ncm625", - "NCM625 working", - "ncm-625GA", - "NCM625GB", - "NCM-625W", - "NCM630GB", - "NCM725GA", - "NCM750GA", - "NCM751", - "NCM751GA", - "NCM751GA (W1)", - "ncm751vga", - "NCM754GC", - "ncm75aga", - "NGX5444", - "NGX6544", - "Observatory", - "Other", - "Outdoor 1080p W4", - "OUTDOOR 1080P W4paul", - "Outdoor 720p", - "Porch", - "Pro", - "Pro HD 1080P", - "ProHD", - "ProHD W1", - "Q3 (X SERIES)", - "Q3 (X Serires)", - "Q3 1080p", - "Q3 720p", - "Q33", - "Q35", - "q3s", - "Q3-s", - "Q3S", - "qs3", - "Recepcion", - "Series x", - "USA703K2", - "US-W4-B", - "VIEW-587022-NBDUZ", - "VIEW-633583-UFPYB", - "vpxpz", - "W2 1080P", - "W2(1080P)", - "W2(x)", - "W2/1080P)", - "W-3", - "W3 720", - "W3 X series", - "W3720p", - "W4/W5", - "w41080", - "W60", - "w9 1080p", - "Wansview Q5", - "Wansview W5 1080p", - "Wansview W9", - "WaQ3-S", - "WCam 1", - "WhoKnows", - "wide", - "wvc9bdlt308hawuz", - "wvcc418", - "X 1080p", - "X 720p", - "X series", - "X Series", - "x series wifi ip", - "x624w", - "X720", - "xseries" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "002kqkb", - "002qkwj", - "nbc541w", - "nc541", - "NCB541W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 1125, - "url": "/videostream.cgi?resolution=64&rate=30" - }, - { - "models": [ - "1080", - "1080P", - "541", - "541W", - "625", - "720P", - "720P IP CAMERA", - "NBC543W", - "NC541", - "NC541W-P", - "ncb5140", - "NCB-540", - "ncb540w", - "NCB-541W", - "NCB-543W", - "NCL616W", - "Other", - "tchne", - "W2 1080P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "1080", - "541W", - "543W", - "720P IP CAMERA", - "NBC543W", - "NCB-534W", - "ncb541", - "NCB-541W", - "NCB-543W", - "NCB545W", - "NCL615W", - "X SERIES" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "1080", - "541", - "543NB", - "625W", - "720P", - "DCS543W", - "ga/gb/630w rtjp", - "N540W", - "N541", - "NBC543W", - "NCB-534W", - "NCB540W", - "NCB-541w", - "NCB-541W", - "NCB-543W", - "NCB545W", - "nch-530w" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "1080", - "1080p", - "1080P HD", - "1080P HD W1", - "1080p HD W4", - "1080p HD W6", - "1080P K3", - "1080p K5", - "1080p mid res", - "1080P PRO HD", - "1080P PRO HD W2", - "1080P Q5", - "1080P Q6", - "1080P W3", - "1080P W5", - "1080p W6", - "1080PW4", - "2mp", - "541W", - "624W", - "625W", - "702P", - "720", - "720P", - "720P IP CAMERA", - "720p W3", - "720P wireless outlook Camera", - "780GB", - "DCS543W", - "Dilbert", - "IP CAMERA K2", - "IP Camera Q5", - "IP CAMERA W2", - "K2 720P", - "K3 1080", - "NC541W", - "NCM622GA", - "NCM625GA", - "NCM625GB", - "NCM-630GB", - "NCM750GA", - "NCM751GA", - "NCM751GA (W1)", - "Other", - "pro", - "PRO HD", - "Q3S", - "US-W4-B", - "W2 1080P", - "W2(1080P)", - "W-3", - "W3 720", - "W4/W5", - "W5 Cloud", - "W9 1080P", - "wan", - "Wansview W9", - "WVCA6GRVLGUPYl9Z", - "X 720P", - "x series", - "x series K3", - "X SERIES WIFI IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - }, - { - "models": [ - "1080", - "1080P", - "1080P HD", - "1080p HD W6", - "625W", - "720P", - "720P W3", - "780GB", - "Dilbert", - "ncm624w", - "ncm625", - "NCM625GA", - "NCM625W", - "Other", - "Q5", - "X 720P", - "X SERIES" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch2" - }, - { - "models": [ - "1080", - "1080P PRO HD", - "1080P PRO HD W2", - "NCH-530W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "1080 HD", - "1080P HD", - "1080P PRO HD", - "2K W7", - "M Series", - "MCM-627", - "NCB541W", - "NCH536MW", - "NCM625W", - "NCM626w", - "NCM-628", - "NCM751GA", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - }, - { - "models": [ - "1080P HD", - "1080P PRO HD", - "1080P PRO HD W2", - "NC530", - "nch532mkw", - "NCH532MW", - "NCH536MW", - "NCH537MW", - "NCM621W", - "NCM623w", - "NCM-627", - "Other", - "W2 1080P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "1080P HD W1", - "1080P HD W2", - "1080P HD W4", - "1080P W3", - "720P", - "720P IP CAMERA", - "Q3 1080P", - "Q3-s", - "Q3S", - "W2/1080P)", - "W-3", - "X 720P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpeg/stream.cgi?chn=0" - }, - { - "models": [ - "1080p HD W6", - "1080P PRO HD", - "541W", - "625W", - "NBC543W", - "NC541", - "ncm620", - "NCM620W", - "NCM622GA Q2", - "NCM-624W", - "NCM-625", - "NCM626w", - "Other", - "W4/W5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "1080P HD Wireless Cloud IP Camera Q5" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/camera" - }, - { - "models": [ - "1080P PRO HD", - "625W", - "Other", - "Z SERIES" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "1080P Q5", - "Ncb541W s", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "123456", - "541W", - "nc541", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "124", - "NC543W", - "NCB541W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi" - }, - { - "models": [ - "541", - "NCL615W", - "NCS601W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "541", - "543W", - "ncm-620w", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "541W", - "625", - "625W", - "JW0009", - "nc541", - "NCB-534W", - "NCB-541W", - "NCB-543W", - "NCH 530W", - "NCL615W", - "NCM521W", - "NCM620W", - "NCM621W", - "NCM622W", - "NCM625GA", - "NCM-627", - "NCM-628", - "NCM751GA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "541W", - "543NB", - "dcs543w", - "N540w", - "NC541W", - "nc543w", - "NC543W-P", - "NCB-541w", - "NCB541W", - "NCB541W-adt", - "NCB-543W", - "NCB545W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "543w", - "N540w", - "nc543w", - "NCL610W", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "616", - "720P W3", - "JW0011", - "L SERIES", - "N541", - "NBC543W", - "Nc541w-p", - "nc543w", - "NC543W-P", - "NCB-541W", - "NCL615w", - "NCL616W", - "NCM621W", - "ncs543w", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "625W", - "MCM-627", - "N540w", - "nc543w", - "NCB-534W", - "NCB-541W", - "NCB-543W", - "NCL-610W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "673572" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "720P IP CAMERA", - "720P W3", - "nch 530w", - "NCH-530W", - "NCH531MW", - "NCH532MKW", - "Other", - "UNOWN" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Cinnado", - "NCM629W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "G-6" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "live/ch00_0" - }, - { - "models": [ - "L Series", - "NCB1541W", - "NCB-541W", - "NCB-543W", - "NCL610D04", - "NCL-610W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "myCam", - "NC541W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "N540w", - "nc543w", - "NCB-534W", - "NCB-541W", - "NCB-543W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "N540w", - "nc543w", - "NCB541W", - "NCL-610W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "nbc541w", - "NCB541W", - "NCB541W-adt", - "NCL610D04", - "NCL610W", - "NCL614W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "NBC543W", - "NCB541W", - "NCL610W", - "NCL615w", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "NBC543W", - "ncb545w", - "NCB-546W", - "NCB546W3", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "NC512", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg" - }, - { - "models": [ - "NC540W", - "NCB541W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?rate=11" - }, - { - "models": [ - "nc541", - "NC541W", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320*240" - }, - { - "models": [ - "nc543w", - "NCB541W", - "NCL616W", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "nc543w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "NCB-534W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NCB541W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?resolution=8&rate=13" - }, - { - "models": [ - "NCB541W" - ], - "type": "JPEG", - "protocol": "http", - "port": 88, - "url": "/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "NCB-543W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 1025, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "NCH532MW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/web/mobile.html" - }, - { - "models": [ - "NCH532MW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/web/admin.html" - }, - { - "models": [ - "NCH536MW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NCH536MW", - "Unk" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegSize=XL" - }, - { - "models": [ - "NCM625W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264Preview_01_main" - }, - { - "models": [ - "NCM-625W" - ], - "type": "JPEG", - "protocol": "http", - "port": 8887, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "NCS601W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/1/image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.html" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "vdata.v" - }, - { - "models": [ - "Otherncl615" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "PRO HD 1080P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "UNK" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wapa.json b/data/brands/wapa.json deleted file mode 100644 index 81f545d..0000000 --- a/data/brands/wapa.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Wapa", - "brand_id": "wapa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BL-3/5/7/8/9" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "BL-3/5/7/8/9Series" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wardmay-cctv.json b/data/brands/wardmay-cctv.json deleted file mode 100644 index 8f745d9..0000000 --- a/data/brands/wardmay-cctv.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wardmay Cctv", - "brand_id": "wardmay-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WDM-6702AL" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wareshare.json b/data/brands/wareshare.json deleted file mode 100644 index c931e97..0000000 --- a/data/brands/wareshare.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wareshare", - "brand_id": "wareshare", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C923IP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/watashi.json b/data/brands/watashi.json deleted file mode 100644 index 00e2b49..0000000 --- a/data/brands/watashi.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "brand": "Watashi", - "brand_id": "watashi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR", - "wip067", - "XVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "NVR" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ipcam.sdp" - }, - { - "models": [ - "NVR", - "Other", - "WIP-026T", - "WIP288", - "wvr052-4m" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "NVR", - "WIP-026T", - "wrc125" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "NVR-24", - "Other", - "WIP-061T", - "WIP288", - "wrc", - "wrc125", - "wvr002", - "wvr052-4m", - "XVR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other", - "WIP067" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other", - "wip052", - "wip058", - "WIP087" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/watch-bot-camera.json b/data/brands/watch-bot-camera.json deleted file mode 100644 index e61a877..0000000 --- a/data/brands/watch-bot-camera.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "brand": "Watch Bot Camera", - "brand_id": "watch-bot-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Home Security Camera", - "HOME SECURITY CAMERA", - "Other", - "WBOT-30907" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "HOME SECURITY CAMERA", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "HOME SECURITY CAMERA", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "WATCHBOT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other", - "WBOT-30907" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "WATCHBOT 3" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "watchbot" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other", - "Watchbot" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "resup" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "watchbot 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - } - ] -} \ No newline at end of file diff --git a/data/brands/watchdog.json b/data/brands/watchdog.json deleted file mode 100644 index 6b3bda6..0000000 --- a/data/brands/watchdog.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Watchdog", - "brand_id": "watchdog", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/watchguard.json b/data/brands/watchguard.json deleted file mode 100644 index d019f6f..0000000 --- a/data/brands/watchguard.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Watchguard", - "brand_id": "watchguard", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VSIP13B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/watchmeip.json b/data/brands/watchmeip.json deleted file mode 100644 index 4e77216..0000000 --- a/data/brands/watchmeip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Watchmeip", - "brand_id": "watchmeip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Outdoor PRO" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/watchnet-inc.json b/data/brands/watchnet-inc.json deleted file mode 100644 index 29b6f06..0000000 --- a/data/brands/watchnet-inc.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "brand": "Watchnet Inc", - "brand_id": "watchnet-inc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "232" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "still.jpg" - }, - { - "models": [ - "232", - "MPIX", - "MPIX 20", - "MPIX21" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "mpix", - "MPIX", - "MPIX 20", - "MPIX21", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "MPIX", - "MPIX 20", - "Mpix21", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "MPIX21", - "Other", - "Wpix" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "MPIX-40VDVIRV" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/waylens.json b/data/brands/waylens.json deleted file mode 100644 index e7d8779..0000000 --- a/data/brands/waylens.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Waylens", - "brand_id": "waylens", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Secure360" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/waymoon.json b/data/brands/waymoon.json deleted file mode 100644 index e749a7e..0000000 --- a/data/brands/waymoon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Waymoon", - "brand_id": "waymoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hosuku" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wbox.json b/data/brands/wbox.json deleted file mode 100644 index 9a47101..0000000 --- a/data/brands/wbox.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "brand": "Wbox", - "brand_id": "wbox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0E-13DF28", - "0E-21DF28", - "OE-21DF28", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/2" - }, - { - "models": [ - "0E-21BF40", - "0e-40bf40wdr", - "OE-21DF28", - "OE-31DF28", - "oe-clid5r2fs", - "Other", - "WBXIL139RT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 556, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "OE-21BF40WDR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "OE-21BF40WDR", - "OE-31BVF2812", - "OE-31DF28", - "OE-40BF40WDR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "WBXIB28124MW" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/wca.json b/data/brands/wca.json deleted file mode 100644 index 2988eae..0000000 --- a/data/brands/wca.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wca", - "brand_id": "wca", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/webcamxp.json b/data/brands/webcamxp.json deleted file mode 100644 index d5a8229..0000000 --- a/data/brands/webcamxp.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Webcamxp", - "brand_id": "webcamxp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip camera 720p", - "MXDBA" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "minix" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8080, - "url": "/cam_1.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "OVNIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "OVNIF" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ovnif IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "WINDOWS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/webeye.json b/data/brands/webeye.json deleted file mode 100644 index 52c08b5..0000000 --- a/data/brands/webeye.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Webeye", - "brand_id": "webeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HDC730" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg.cgi?refresh=0&channel=[CHANNEL]&id=[USERNAME]&pass=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]&oldbrowser=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/webgate.json b/data/brands/webgate.json deleted file mode 100644 index 5e419ae..0000000 --- a/data/brands/webgate.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Webgate", - "brand_id": "webgate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HTC1610H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 60010, - "url": "/ch5/stream2" - }, - { - "models": [ - "HTC1610H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 60010, - "url": "/ch1/stream2" - }, - { - "models": [ - "HTC1610H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 60010, - "url": "/ch2/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/webo.json b/data/brands/webo.json deleted file mode 100644 index ca9589b..0000000 --- a/data/brands/webo.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Webo", - "brand_id": "webo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "fhd200", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "stream[CHANNEL]" - }, - { - "models": [ - "fhd200", - "webo200p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream1" - }, - { - "models": [ - "Other", - "webo200p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/webvision.json b/data/brands/webvision.json deleted file mode 100644 index 21f05a6..0000000 --- a/data/brands/webvision.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Webvision", - "brand_id": "webvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HOME VISION", - "PPCN453889TMUTT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wecam.json b/data/brands/wecam.json deleted file mode 100644 index d6739ee..0000000 --- a/data/brands/wecam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Wecam", - "brand_id": "wecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "IIII-560941-DBDCC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/weldex.json b/data/brands/weldex.json deleted file mode 100644 index 9af8abf..0000000 --- a/data/brands/weldex.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Weldex", - "brand_id": "weldex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Vision DVR608" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "WDND-35071V" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/wepra.json b/data/brands/wepra.json deleted file mode 100644 index 154a64e..0000000 --- a/data/brands/wepra.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wepra", - "brand_id": "wepra", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4000I" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/westcam.json b/data/brands/westcam.json deleted file mode 100644 index 26be3be..0000000 --- a/data/brands/westcam.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Westcam", - "brand_id": "westcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "301655956206", - "Other", - "WM-351185110", - "WM-35185110", - "WM-35185115" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "365IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/PSIA/Streaming/channels/h264" - }, - { - "models": [ - "Other", - "WM-128339" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "W201", - "W212", - "WM-35185029" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/western-digital.json b/data/brands/western-digital.json deleted file mode 100644 index 0979cfb..0000000 --- a/data/brands/western-digital.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Western Digital", - "brand_id": "western-digital", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WD ReadyView", - "WNAS49" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/westline.json b/data/brands/westline.json deleted file mode 100644 index a4ebf58..0000000 --- a/data/brands/westline.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Westline", - "brand_id": "westline", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XPTO" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/westmile.json b/data/brands/westmile.json deleted file mode 100644 index dd19911..0000000 --- a/data/brands/westmile.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "brand": "Westmile", - "brand_id": "westmile", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "291458155571", - "291899340312", - "292089937456", - "301572748864", - "Other", - "WM35183201", - "WM35183635" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "291639205621", - "291747574301", - "301587838630", - "301850843930", - "302285941753", - "351185110", - "35185001", - "35185468", - "Kinaskit (Ebay)", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "291747574301", - "292281302713", - "301847704118", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "292209965826" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "292281302713", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/wetranstek.json b/data/brands/wetranstek.json deleted file mode 100644 index 8951468..0000000 --- a/data/brands/wetranstek.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Wetranstek", - "brand_id": "wetranstek", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "TR-GIPR143Z-POE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wevo.json b/data/brands/wevo.json deleted file mode 100644 index 7781d91..0000000 --- a/data/brands/wevo.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Wevo", - "brand_id": "wevo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200B", - "200FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8081, - "url": "stream[CHANNEL]" - }, - { - "models": [ - "200-FHD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/stream2" - } - ] -} \ No newline at end of file diff --git a/data/brands/wgcc.json b/data/brands/wgcc.json deleted file mode 100644 index 182b0a7..0000000 --- a/data/brands/wgcc.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "brand": "Wgcc", - "brand_id": "wgcc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2204FWD-IS", - "domet", - "UNIPC-2204FWD-IS", - "UNIPC-3204WD-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "bullet cam", - "unipc-3204wd-i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "domet" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "Other", - "unipc-3204wd-i" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "Other", - "PTZ IP Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "UNIPC-2204FWD-IS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/whfi.json b/data/brands/whfi.json deleted file mode 100644 index e453ef8..0000000 --- a/data/brands/whfi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Whfi", - "brand_id": "whfi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cloudcam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wi-tec.json b/data/brands/wi-tec.json deleted file mode 100644 index dd041a6..0000000 --- a/data/brands/wi-tec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wi-tec", - "brand_id": "wi-tec", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WI-2806BW" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/12" - } - ] -} \ No newline at end of file diff --git a/data/brands/wic.json b/data/brands/wic.json deleted file mode 100644 index 3e983e5..0000000 --- a/data/brands/wic.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wic", - "brand_id": "wic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "P9-SM8-8X-AF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/widix.json b/data/brands/widix.json deleted file mode 100644 index 73baa95..0000000 --- a/data/brands/widix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Widix", - "brand_id": "widix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WDX-IPD4028K3C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wifi-baby.json b/data/brands/wifi-baby.json deleted file mode 100644 index 71ba126..0000000 --- a/data/brands/wifi-baby.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Wifi Baby", - "brand_id": "wifi-baby", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "WFB2015" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/wifi-mi.json b/data/brands/wifi-mi.json deleted file mode 100644 index ba9bd7b..0000000 --- a/data/brands/wifi-mi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wifi Mi", - "brand_id": "wifi-mi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "wifi" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/wifi-smart-net-camera.json b/data/brands/wifi-smart-net-camera.json deleted file mode 100644 index 49d3f8b..0000000 --- a/data/brands/wifi-smart-net-camera.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "brand": "Wifi Smart Net Camera", - "brand_id": "wifi-smart-net-camera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC360", - "ipc-t3810-q6s", - "ork", - "Other", - "SMT529AB", - "SYMT529AB", - "v380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 10554, - "url": "live/ch00_0" - }, - { - "models": [ - "IPC-V380-Q10", - "XM83-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/ch00_0" - }, - { - "models": [ - "WANSCAM" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 10554, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "WANSCAM" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/winbook.json b/data/brands/winbook.json deleted file mode 100644 index fbe659c..0000000 --- a/data/brands/winbook.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "brand": "Winbook", - "brand_id": "winbook", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1234" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "720p", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "720P", - "c1066", - "POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/live1.264" - }, - { - "models": [ - "C-001640", - "DVR", - "Other", - "T-6835", - "WB-N7405JV" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "C-001640", - "FC1405 v2", - "FC1405P", - "FC1405PC v2", - "fc1406p", - "FC1406P", - "FC1415P", - "FC2403P", - "FC2607P", - "FC5415P", - "FC5415P v2", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - }, - { - "models": [ - "C-001640" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "c1066dn2", - "MC 896662", - "POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/live0.264" - }, - { - "models": [ - "C1066DN4-P", - "PoE", - "t7838wip", - "Useful" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "D5708NH-P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "DVR" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "FC1405P", - "FC1405PC", - "FC1405PC V2", - "FC1415P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "T-6835" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "T-6835" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "T-6835" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Special" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/OVProfile02" - }, - { - "models": [ - "T-6835" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - }, - { - "models": [ - "T-6835" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0" - }, - { - "models": [ - "T-6835" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "T-6835WIP", - "T-7838" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "T-7838" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/winic.json b/data/brands/winic.json deleted file mode 100644 index c434a19..0000000 --- a/data/brands/winic.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "brand": "Winic", - "brand_id": "winic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "324-TD", - "HFW-4300S", - "IP66", - "IPCHDB-4300", - "NC-303VD", - "NP-104IR", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor" - }, - { - "models": [ - "NV-303VD" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "NVT-530004" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wintech.json b/data/brands/wintech.json deleted file mode 100644 index 7d39a18..0000000 --- a/data/brands/wintech.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Wintech", - "brand_id": "wintech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C2007DN2", - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wireless-charger-cam.json b/data/brands/wireless-charger-cam.json deleted file mode 100644 index 0cb02b9..0000000 --- a/data/brands/wireless-charger-cam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wireless Charger Cam", - "brand_id": "wireless-charger-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Lizvie" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/wirepath.json b/data/brands/wirepath.json deleted file mode 100644 index dece763..0000000 --- a/data/brands/wirepath.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "brand": "Wirepath", - "brand_id": "wirepath", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "750 dome", - "Other", - "WPS-300-IP-DOM", - "WPS-550", - "wps-550-bul-ip-wh", - "wps-750-bul-IP-Gr" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi" - }, - { - "models": [ - "IP DOME" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/wappaint?camera_no=[CHANNEL]&animation=0&name=[USERNAME]&password=[PASSWORD]&pic_size=2" - }, - { - "models": [ - "WS-109" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wise-group.json b/data/brands/wise-group.json deleted file mode 100644 index 1ba7052..0000000 --- a/data/brands/wise-group.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Wise Group", - "brand_id": "wise-group", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MY-303IP/M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch1_s1" - }, - { - "models": [ - "NVS-365-V01", - "NVS-365-VO1", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "WS-A9R31", - "WS-D9638H" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "ipcam/avc.cgi?audiostream=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wisenet.json b/data/brands/wisenet.json deleted file mode 100644 index 043bfc1..0000000 --- a/data/brands/wisenet.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "brand": "Wisenet", - "brand_id": "wisenet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8080rv", - "XND-6080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile3/media.smp" - }, - { - "models": [ - "ANE-L7012R", - "QNV-8080R", - "SNO-L6013R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/profile2/media.smp" - }, - { - "models": [ - "LND-6020R", - "QND-6070R", - "QND-8011" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/onvif/profile2/media.smp" - }, - { - "models": [ - "LNO-6010R", - "Wisenet LNO-6010R", - "XNF-8010R", - "XNO-6120R", - "XNV-C6083R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/onvif/profile1/media.smp" - }, - { - "models": [ - "Other", - "QND-6070R", - "QNO-6070R", - "QNO-7010R", - "QNO-7080R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 1935, - "url": "cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "pnm-9020", - "QNO-7080R" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "QNP-6230H" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8282, - "url": "/" - }, - { - "models": [ - "QNP-6250H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/HighResolutionVideo" - }, - { - "models": [ - "QNV-7082R", - "SNV-L6083R" - ], - "type": "JPEG", - "protocol": "http", - "port": 10001, - "url": "/stw-cgi/video.cgi?msubmenu=snapshot&action=view" - }, - { - "models": [ - "QNV-7082R" - ], - "type": "MJPEG", - "protocol": "http", - "port": 10001, - "url": "/stw-cgi/video.cgi?msubmenu=mjpg" - }, - { - "models": [ - "SNV-6013" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/mjpg/1/video.mjpg" - }, - { - "models": [ - "SNV-L6083R", - "XNB-8000" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/axis-media/media.amp" - }, - { - "models": [ - "XND-6080RV" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 4554, - "url": "/0/onvif/profile2/media.smp" - } - ] -} \ No newline at end of file diff --git a/data/brands/wisevision.json b/data/brands/wisevision.json deleted file mode 100644 index 748faf3..0000000 --- a/data/brands/wisevision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wisevision", - "brand_id": "wisevision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "777" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/ch01" - } - ] -} \ No newline at end of file diff --git a/data/brands/wish.json b/data/brands/wish.json deleted file mode 100644 index ed78aee..0000000 --- a/data/brands/wish.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Wish", - "brand_id": "wish", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HA-3050" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wistino.json b/data/brands/wistino.json deleted file mode 100644 index 2d5b150..0000000 --- a/data/brands/wistino.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Wistino", - "brand_id": "wistino", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "wifi camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wistron.json b/data/brands/wistron.json deleted file mode 100644 index b568ee0..0000000 --- a/data/brands/wistron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wistron", - "brand_id": "wistron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/witi.json b/data/brands/witi.json deleted file mode 100644 index 3e91f69..0000000 --- a/data/brands/witi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Witi", - "brand_id": "witi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ip320/50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - }, - { - "models": [ - "IP420/50" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/wiwacam.json b/data/brands/wiwacam.json deleted file mode 100644 index 3daa33c..0000000 --- a/data/brands/wiwacam.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "brand": "Wiwacam", - "brand_id": "wiwacam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "mw1", - "MW1Pro", - "MW5", - "Other", - "wm3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "MW1", - "mw5", - "MW5", - "MW8" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "MW3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "MW5", - "MW7" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "MW5K" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/wlw.json b/data/brands/wlw.json deleted file mode 100644 index a8edbd9..0000000 --- a/data/brands/wlw.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wlw", - "brand_id": "wlw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IP-8029C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wodsee.json b/data/brands/wodsee.json deleted file mode 100644 index 34cf3f5..0000000 --- a/data/brands/wodsee.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "brand": "Wodsee", - "brand_id": "wodsee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "H-100/H-200 serie", - "H-100/H-200 SERIE", - "Other", - "WIP100-BB30-150", - "WIP200-DA30" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "Other", - "WIP130-Y12", - "wip200-btb60" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "WIP200-DTA40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/mpeg4" - }, - { - "models": [ - "WIP100-BB30-150", - "WIP130-DA30" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "WIP100-BB30-150" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "WIP100-DTA40", - "WIP130-Y12", - "WIP200-DA30" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "WIP130-Y12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "WT40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/wolulu.json b/data/brands/wolulu.json deleted file mode 100644 index 6c233d2..0000000 --- a/data/brands/wolulu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wolulu", - "brand_id": "wolulu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AS-51227" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/wonsdar.json b/data/brands/wonsdar.json deleted file mode 100644 index 945e06d..0000000 --- a/data/brands/wonsdar.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Wonsdar", - "brand_id": "wonsdar", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XM28s-8MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "XM80" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/woodie-view.json b/data/brands/woodie-view.json deleted file mode 100644 index 53f1aae..0000000 --- a/data/brands/woodie-view.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Woodie View", - "brand_id": "woodie-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "6024PB-HX201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/woonkamer.json b/data/brands/woonkamer.json deleted file mode 100644 index 885e1a7..0000000 --- a/data/brands/woonkamer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Woonkamer", - "brand_id": "woonkamer", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9014" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "c703ip" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "dvc-135IP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8081, - "url": "live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/wouwon.json b/data/brands/wouwon.json deleted file mode 100644 index 160383c..0000000 --- a/data/brands/wouwon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wouwon", - "brand_id": "wouwon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WiFi Smart Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/wsdcam.json b/data/brands/wsdcam.json deleted file mode 100644 index 8d2a286..0000000 --- a/data/brands/wsdcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wsdcam", - "brand_id": "wsdcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "R3 WiFi" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/wtw-tsukamoto.json b/data/brands/wtw-tsukamoto.json deleted file mode 100644 index 3dd8531..0000000 --- a/data/brands/wtw-tsukamoto.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wtw Tsukamoto", - "brand_id": "wtw-tsukamoto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "WTW-IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/wtw.json b/data/brands/wtw.json deleted file mode 100644 index b3a9ed1..0000000 --- a/data/brands/wtw.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wtw", - "brand_id": "wtw", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PRP29HE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/wwgc.json b/data/brands/wwgc.json deleted file mode 100644 index 8ad7195..0000000 --- a/data/brands/wwgc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Wwgc", - "brand_id": "wwgc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "UNIPC-3204WD-I" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/wyzecam.json b/data/brands/wyzecam.json deleted file mode 100644 index e49bb51..0000000 --- a/data/brands/wyzecam.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "brand": "Wyzecam", - "brand_id": "wyzecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam v2", - "Cam V2", - "CAM V2", - "Other", - "Pan", - "V2", - "V2 RTSP", - "Wyze Cam Pan", - "wyze cam v2", - "Wyze cam V2", - "Wyze Cam V2", - "Wyze cam V2 RTSP", - "WYZE CAM V2 RTSP", - "Wyze Cam V3 RTSP" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live" - }, - { - "models": [ - "cam v2", - "Cam V2", - "Pan Cam", - "pan-tilt", - "PTZ", - "V2 Dafang", - "V2 RTSP", - "V2 Webcam Firmware", - "V3", - "V3 RTSP", - "v3 RTSP", - "Wyze Cam Pan RTSP", - "wyze cam v2", - "Wyze Cam V2", - "Wyze cam V2 RTSP", - "wyze cam v3", - "Wyze Cam V3 RTSO", - "Wyze Cam V3 RTSP", - "Wyze Cam-Pan", - "Wyze Cam-Pan RTSP", - "Wyze v2", - "Wyze v3", - "WYZEC1-JZ", - "WYZEC2", - "Wyzecam V3 RTSP", - "Wyze-docker-bridge" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live" - }, - { - "models": [ - "cam V2", - "Cam V2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/mia_cam" - }, - { - "models": [ - "Doorbell" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Doorbell" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/axis-cgi/mjpg/video.cgi?cameraId=59313593&token=[TOKEN]" - }, - { - "models": [ - "Other", - "Wyze Cam Pan", - "Wyze cam V2 RTSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/unicast" - }, - { - "models": [ - "Personal" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8888, - "url": "/1ddc4de6-f48b-484b-995f-a66a98b34af2" - }, - { - "models": [ - "v2 openmiko" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/video3/unicast" - }, - { - "models": [ - "V2 Webcam Firmware" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/webcam/?action=stream" - }, - { - "models": [ - "wyze cam v2", - "Wyze cam V2 RTSP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 36760, - "url": "/" - }, - { - "models": [ - "wyze cam v2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/image.jpg" - }, - { - "models": [ - "Wyze cam V2" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "wyze cam v3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Wyze cam V3 RTSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/wyze-1" - }, - { - "models": [ - "Wyze Cam v3 RTSP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/wyze-2" - }, - { - "models": [ - "Wyze-Bridge" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/living-room-cam" - }, - { - "models": [ - "WYZE-BRIDGE" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8888, - "url": "/living-room-cam/stream.m3u8" - } - ] -} \ No newline at end of file diff --git a/data/brands/x-price.json b/data/brands/x-price.json deleted file mode 100644 index 97b1fe6..0000000 --- a/data/brands/x-price.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "X-price", - "brand_id": "x-price", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "XL-ICA-270M1-28", - "xl-ica-270m1-36" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "xl-ica-270M1-36" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - } - ] -} \ No newline at end of file diff --git a/data/brands/x-security.json b/data/brands/x-security.json deleted file mode 100644 index b5ead88..0000000 --- a/data/brands/x-security.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "X-security", - "brand_id": "x-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipcv828zw", - "XS-IPDM741-3" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "XS-IPT987ZSWH-4P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/x-view.json b/data/brands/x-view.json deleted file mode 100644 index 568bca5..0000000 --- a/data/brands/x-view.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "X-view", - "brand_id": "x-view", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Overwatch" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/x-zhang.json b/data/brands/x-zhang.json deleted file mode 100644 index 9cacc23..0000000 --- a/data/brands/x-zhang.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "X Zhang", - "brand_id": "x-zhang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C25-2" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/x10.json b/data/brands/x10.json deleted file mode 100644 index 864a433..0000000 --- a/data/brands/x10.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "brand": "X10", - "brand_id": "x10", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "34a", - "39A", - "AirSight", - "AIRSIGHT Dome", - "AirSight HD", - "Airsight x40", - "airsight x60", - "Other", - "PTZ PRO", - "xc36a", - "xc38a", - "XC-38A", - "XC-40A", - "XX-34A", - "XX-40A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "39A", - "AirSight", - "AIRSIGHT", - "AIRSIGHT Dome", - "AirSight HD", - "AIRSIGHT OUTSIDE", - "Airsight XX39", - "Other", - "XC-38A", - "XX-39A", - "XX41Ahome", - "XX-56A", - "XX-59A", - "XX-69A", - "xx70a" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "39-A", - "AirSight", - "AIRSIGHT X36A", - "Other", - "XX-52A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "40", - "AirSight", - "AIRSIGHT Dome", - "AirSight HD", - "AirSight Outside", - "Airsight X36A", - "AirSightBIONDI", - "MyCam1", - "Other", - "PTZ PRO", - "XC-38A", - "XX-39A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "40", - "AirSight", - "Other", - "XC-36A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "airsight", - "AirSight", - "Other", - "XX62A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live/av0?user=[USERNAME]&passwd=[PASSWORD]" - }, - { - "models": [ - "AirSight", - "AIRSIGHT B", - "AirSight Dome", - "AIRSIGHT Dome", - "Arcsight", - "Other", - "PTZ PRO", - "XC-36A", - "XC-38A", - "XC-40A", - "XX-36A", - "XX-40A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "AirSight", - "Other", - "XX-34A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "AirSight", - "XX-59A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "AirSight", - "AIRSIGHT X36A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "AirSight", - "AIRSIGHT Dome", - "Other", - "XX-52A", - "XX-59A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "AirSight", - "AIRSIGHT X36A", - "Other", - "XC-36A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "AirSight", - "AirSight Dome", - "AIRSIGHT Dome", - "Other", - "PTZ PRO", - "XX-40A" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Airsight X36A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Jake" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other", - "XX-36A" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "XX-60" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "X-10PT" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "VIDEO.CGI" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "XC-38A" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "XC-38A", - "XX-36C" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?" - }, - { - "models": [ - "XC-38A" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "XX-59A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/xaimoi.json b/data/brands/xaimoi.json deleted file mode 100644 index c1ce1b2..0000000 --- a/data/brands/xaimoi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xaimoi", - "brand_id": "xaimoi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Note 8 pro" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - } - ] -} \ No newline at end of file diff --git a/data/brands/xanboo.json b/data/brands/xanboo.json deleted file mode 100644 index 656aa2f..0000000 --- a/data/brands/xanboo.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "brand": "Xanboo", - "brand_id": "xanboo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8030", - "RC-4030" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "8030", - "Other", - "RC4020", - "RC40200", - "rc4021", - "RC4021", - "RC-8021", - "RC-8030", - "XC4020" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "img/video.asf" - }, - { - "models": [ - "Other", - "rc4021", - "RC4021" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "rc4020", - "RC-8021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.cgi" - }, - { - "models": [ - "Other", - "RC-8021" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "Other", - "RC-8021", - "RC-8030" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/video.sav" - }, - { - "models": [ - "Other", - "RC-8021" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "img/media.sav" - }, - { - "models": [ - "Other", - "rc4021", - "RC-8021", - "RC-8030" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/mjpeg.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "RC-8021" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/xblitz.json b/data/brands/xblitz.json deleted file mode 100644 index d306e21..0000000 --- a/data/brands/xblitz.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xblitz", - "brand_id": "xblitz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "force" - ], - "type": "JPEG", - "protocol": "http", - "port": 10554, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/xblock.json b/data/brands/xblock.json deleted file mode 100644 index 8f7906f..0000000 --- a/data/brands/xblock.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xblock", - "brand_id": "xblock", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "GPCZ-636A1NT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/xdh.json b/data/brands/xdh.json deleted file mode 100644 index 9ab2701..0000000 --- a/data/brands/xdh.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xdh", - "brand_id": "xdh", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XDH-16" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/webapp.cgi?MODE=8&ID=[USERNAME]&PW=[PASSWORD]&VER=3000&CH=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xelpon.json b/data/brands/xelpon.json deleted file mode 100644 index 0cf36f8..0000000 --- a/data/brands/xelpon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xelpon", - "brand_id": "xelpon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "x360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/xenocam.json b/data/brands/xenocam.json deleted file mode 100644 index 2729fc8..0000000 --- a/data/brands/xenocam.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Xenocam", - "brand_id": "xenocam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "A6704NS", - "vs-f6002-4", - "WF62HA" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=admin_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "WF62HA-2.OMP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=0_stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xenta.json b/data/brands/xenta.json deleted file mode 100644 index 3994c8c..0000000 --- a/data/brands/xenta.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "brand": "Xenta", - "brand_id": "xenta", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "909", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - }, - { - "models": [ - "eb8918w", - "fr4020a2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xfinity.json b/data/brands/xfinity.json deleted file mode 100644 index 81f76a9..0000000 --- a/data/brands/xfinity.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Xfinity", - "brand_id": "xfinity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "Xcam", - "xcam2", - "xhc-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "img/video.mjpeg" - }, - { - "models": [ - "xcam" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "xcam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/xgody.json b/data/brands/xgody.json deleted file mode 100644 index feafc47..0000000 --- a/data/brands/xgody.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Xgody", - "brand_id": "xgody", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "QX59", - "y4a-za" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xiaomi.json b/data/brands/xiaomi.json deleted file mode 100644 index 61a8810..0000000 --- a/data/brands/xiaomi.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "brand": "Xiaomi", - "brand_id": "xiaomi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Anits", - "cctv", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - }, - { - "models": [ - "Anits", - "AntCamera", - "ANTCAMERA", - "antis", - "Ants", - "Dome", - "Other", - "Xiaofang", - "XIAOMI DAFANG HACKS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "ANITS", - "ANTCAMERA", - "Mijia", - "Other", - "SXJ01ZM" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "Dafang", - "Dafang Hacks", - "Dafang3", - "defang", - "Other", - "T20", - "Xiaofang", - "Xiaofang RTSP", - "xiaomi dafang Hacks", - "zecoj/fang-hacks-internal" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/unicast" - }, - { - "models": [ - "Dafang" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/cgi-bin/currentpic.cgi?width=1920&height=1080&nightvision=1" - }, - { - "models": [ - "DID" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/video?profile=0" - }, - { - "models": [ - "Imilab Home Security Camera Basic" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=320x240" - }, - { - "models": [ - "M1901F7H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "shot.jpg" - }, - { - "models": [ - "Mi 8", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 4747, - "url": "/video" - }, - { - "models": [ - "Mi Home Security Camera 360", - "Other", - "pro", - "redmi note 3", - "redmi note 8", - "xiaomi dafang Hacks" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "mi mix 3", - "MI-3", - "mi5", - "Note A5", - "Other", - "redmi", - "RedMi 1", - "Redmi Note 3" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Mijia", - "Outdoor 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_0" - }, - { - "models": [ - "MJSXJ02CM" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - }, - { - "models": [ - "MJSXJ02CM", - "MJSXJ05CM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/mainstream" - }, - { - "models": [ - "MJSXJ02HL", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "MJSXJ05CM", - "Other", - "V380" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "MJSXJ05CM", - "zecoj/fang-hacks-internal" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "MJSXJ05CM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/substream" - }, - { - "models": [ - "oma" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "Other", - "redmi", - "Redmi 8T" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Outdoor 1080p", - "XiaoYi" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/xiaovv.json b/data/brands/xiaovv.json deleted file mode 100644 index c85c009..0000000 --- a/data/brands/xiaovv.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "brand": "Xiaovv", - "brand_id": "xiaovv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "8ch 3mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "outdoor360" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - }, - { - "models": [ - "q1 1080p", - "Q10", - "q12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Onvif/live/1/1" - }, - { - "models": [ - "q1 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "q1 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - }, - { - "models": [ - "q12" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch00_1" - }, - { - "models": [ - "q12", - "v380 pro" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "V380" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - }, - { - "models": [ - "xiaovv 8ch 3mp nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/main/av_stream" - }, - { - "models": [ - "xiaovv 8ch 3mp nvr" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264/ch1/sub/av_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xiaoyi.json b/data/brands/xiaoyi.json deleted file mode 100644 index 850b8ff..0000000 --- a/data/brands/xiaoyi.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Xiaoyi", - "brand_id": "xiaoyi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "ch0_0.h264" - }, - { - "models": [ - "PPZ" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/xin-ling.json b/data/brands/xin-ling.json deleted file mode 100644 index 3689d91..0000000 --- a/data/brands/xin-ling.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Xin Ling", - "brand_id": "xin-ling", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xineron.json b/data/brands/xineron.json deleted file mode 100644 index 0f67f5d..0000000 --- a/data/brands/xineron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xineron", - "brand_id": "xineron", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XIN-MPC0110W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "api/mjpegvideo.cgi?InputNumber=1&StreamNumber=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xinfi.json b/data/brands/xinfi.json deleted file mode 100644 index dc65651..0000000 --- a/data/brands/xinfi.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Xinfi", - "brand_id": "xinfi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C008-720POE", - "C013-1080POE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/xingchuang.json b/data/brands/xingchuang.json deleted file mode 100644 index 23cc053..0000000 --- a/data/brands/xingchuang.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xingchuang", - "brand_id": "xingchuang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "DM-SCB405IP-V10-E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xingling.json b/data/brands/xingling.json deleted file mode 100644 index e1036c7..0000000 --- a/data/brands/xingling.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xingling", - "brand_id": "xingling", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "002khhi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xinsan.json b/data/brands/xinsan.json deleted file mode 100644 index 67fe4fa..0000000 --- a/data/brands/xinsan.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Xinsan", - "brand_id": "xinsan", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xsa-7904" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "xsa-7904" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xiongmai-dvr.json b/data/brands/xiongmai-dvr.json deleted file mode 100644 index c2cd4c4..0000000 --- a/data/brands/xiongmai-dvr.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Xiongmai Dvr", - "brand_id": "xiongmai-dvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X6C-WEQ" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "AHB8008R-LME", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=4&stream=1.sdp?" - }, - { - "models": [ - "AHB8008R-LME" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=4&stream=0.sdp?real_stream" - }, - { - "models": [ - "IPC_HI3516D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "IPC_HI3516D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?real_stream" - }, - { - "models": [ - "light bulb", - "nbd6808t-pl", - "Other", - "R80X20-PQL" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - }, - { - "models": [ - "Wish" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=1.sdp?" - } - ] -} \ No newline at end of file diff --git a/data/brands/xipcam.json b/data/brands/xipcam.json deleted file mode 100644 index fa8ee52..0000000 --- a/data/brands/xipcam.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "brand": "Xipcam", - "brand_id": "xipcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "000C5DDC7754", - "Other", - "wifi" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "onbekend" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - } - ] -} \ No newline at end of file diff --git a/data/brands/xka.json b/data/brands/xka.json deleted file mode 100644 index 16a2c21..0000000 --- a/data/brands/xka.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xka", - "brand_id": "xka", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Mini" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xmarto.json b/data/brands/xmarto.json deleted file mode 100644 index b580333..0000000 --- a/data/brands/xmarto.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "brand": "Xmarto", - "brand_id": "xmarto", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "0815" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=" - }, - { - "models": [ - "IP-Camera IPC 1.3.0", - "PE3021-W", - "WW2024" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "IP-Camera IPC 1.3.0", - "mine", - "Other", - "pe3013", - "PE3021-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IP-CAMERA IPC 1.3.0", - "Other", - "pe3013w", - "unk", - "wno18" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "pe3010-w" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/?action=stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xmate.json b/data/brands/xmate.json deleted file mode 100644 index 8dbb439..0000000 --- a/data/brands/xmate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xmate", - "brand_id": "xmate", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "vue" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "MediaInput/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/xmeye.json b/data/brands/xmeye.json deleted file mode 100644 index d1a7ba9..0000000 --- a/data/brands/xmeye.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "brand": "Xmeye", - "brand_id": "xmeye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=0", - "auth_required": true, - "notes": "Bubble Protocol - main stream (works with go2rtc bubble:// source)" - }, - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=1", - "auth_required": true, - "notes": "Bubble Protocol - sub stream (lower quality)" - }, - { - "models": [ - "000", - "1H.265", - "27.", - "3131", - "530", - "7004", - "7008H", - "AI-0017", - "AY-3008SA", - "CCTVDISCOVER Minibullet PTZ", - "DOME_IP", - "H.264 34567", - "H.264 PORT", - "h.265", - "H246DVR", - "HD WIFI IP CAMERA", - "Hykker Wi-Fi 360 Home Secure", - "JRP1-R", - "MOTOR1", - "n3703-720p-3.6mm", - "Other", - "R2-30G", - "R80X50-PQ", - "Top308", - "tv-al0801-lm-xm", - "XMEYE 4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "3MP-2.1", - "8Mp-1.8", - "gw-p2vfd-m4x" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "7005H", - "ahb7840r", - "HD WIFI IP CAMERA", - "ID4-PMM", - "IVG-N8S", - "ncv-jo1w", - "NVR", - "Other", - "R2-30G", - "XMEYE 4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "DOME_IP", - "GWIPC", - "H.264 34567", - "H.264 PORT", - "H.264 Port:34567", - "H.265", - "IPG-83X50PS-WPN", - "IVG-N8S", - "NST-IOH6522", - "Other", - "Top-201" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - }, - { - "models": [ - "DOME_IP", - "H.264 34567", - "H.264 PORT", - "Other", - "X0023HS0VZ" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "DVR NVR 5M-N" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=2&stream=0.sdp?real_stream" - }, - { - "models": [ - "H.264 34567", - "H.265", - "H246DVR", - "Other", - "XMEYE 4MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=[CHANNEL].sdp?" - }, - { - "models": [ - "H246DVR", - "Other", - "XM530_80X50_8M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp?real_stream" - }, - { - "models": [ - "IVG-N8S", - "Lonovoo", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "IVG-N8S", - "R2-30G" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "XM3mpptz(R2-30G)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "XM530" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "XMEYE 4MP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "XMEYE H246DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?real_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/xonz.json b/data/brands/xonz.json deleted file mode 100644 index fe3f027..0000000 --- a/data/brands/xonz.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Xonz", - "brand_id": "xonz", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XZ-14F-R", - "xz-34f-c" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "xz-34f-c" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/xpcam.json b/data/brands/xpcam.json deleted file mode 100644 index 7dc6384..0000000 --- a/data/brands/xpcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xpcam", - "brand_id": "xpcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "XXC-066741-FAAFD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xperia.json b/data/brands/xperia.json deleted file mode 100644 index 5b126f1..0000000 --- a/data/brands/xperia.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Xperia", - "brand_id": "xperia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Sony", - "x10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "x10" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/xpia.json b/data/brands/xpia.json deleted file mode 100644 index c2d52d7..0000000 --- a/data/brands/xpia.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xpia", - "brand_id": "xpia", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/xseries.json b/data/brands/xseries.json deleted file mode 100644 index 1ce7361..0000000 --- a/data/brands/xseries.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "brand": "Xseries", - "brand_id": "xseries", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "630", - "750gb", - "HappyEgg", - "Other", - "tweede", - "X SERIES WIFI IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "Other", - "X SERIES WIFI IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch1" - } - ] -} \ No newline at end of file diff --git a/data/brands/xshcam.json b/data/brands/xshcam.json deleted file mode 100644 index 6e2729c..0000000 --- a/data/brands/xshcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xshcam", - "brand_id": "xshcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M3-X_Cloud" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xtendrobotics.json b/data/brands/xtendrobotics.json deleted file mode 100644 index 2f3c91d..0000000 --- a/data/brands/xtendrobotics.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Xtendrobotics", - "brand_id": "xtendrobotics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "M1B1-IR" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8090, - "url": "/camera.mjpeg" - }, - { - "models": [ - "M1B2" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 11315, - "url": "/stream?topic=/camera/color/image_raw" - } - ] -} \ No newline at end of file diff --git a/data/brands/xtremepro.json b/data/brands/xtremepro.json deleted file mode 100644 index 1e29b8e..0000000 --- a/data/brands/xtremepro.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xtremepro", - "brand_id": "xtremepro", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ipw1-1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/videoMain" - } - ] -} \ No newline at end of file diff --git a/data/brands/xts-corp.json b/data/brands/xts-corp.json deleted file mode 100644 index 88a72bc..0000000 --- a/data/brands/xts-corp.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "brand": "Xts Corp", - "brand_id": "xts-corp", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "MDVP1.3DNVF" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtpvideo1.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "XTS-BU1/2/3", - "XTS-MDI/MDVP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "config/jpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "XTS-NVR16" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xtsy.json b/data/brands/xtsy.json deleted file mode 100644 index b16e5fd..0000000 --- a/data/brands/xtsy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xtsy", - "brand_id": "xtsy", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xtu.json b/data/brands/xtu.json deleted file mode 100644 index c921cb5..0000000 --- a/data/brands/xtu.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xtu", - "brand_id": "xtu", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Doorbell J5" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/Streaming/Channels/101" - } - ] -} \ No newline at end of file diff --git a/data/brands/xvi.json b/data/brands/xvi.json deleted file mode 100644 index a057b07..0000000 --- a/data/brands/xvi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xvi", - "brand_id": "xvi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "E5216CIP-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/xvim.json b/data/brands/xvim.json deleted file mode 100644 index 31eba95..0000000 --- a/data/brands/xvim.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Xvim", - "brand_id": "xvim", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "d8-1t", - "N1010" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "D8-1T", - "N1010", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ONVIF/channel2" - }, - { - "models": [ - "N1010" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/xvision.json b/data/brands/xvision.json deleted file mode 100644 index 302fad7..0000000 --- a/data/brands/xvision.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "brand": "Xvision", - "brand_id": "xvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "100-C", - "1080D", - "Other", - "x100", - "X100", - "X100B", - "X100C", - "X-100d" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "100-C", - "Other", - "X100" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "100-C" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "104p", - "Other", - "X-100D", - "XP3000B" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "1080D", - "720D", - "X-720B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "1080D", - "XCB-N3072" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/onvif-h264-1" - }, - { - "models": [ - "1080-D", - "1080VP2", - "FI-8602W", - "Other", - "X-100C", - "X-720B", - "X-720D", - "XC1080BAP", - "XC-1080BP", - "XC-1080DAP", - "XC-1080P", - "XC1080VP-2", - "XC-1080VVP", - "XC-108BP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - }, - { - "models": [ - "1080-D", - "Other", - "XP3000v", - "Xvision-720D" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "1080-D", - "3000-V", - "Other", - "X-720B", - "x720d", - "XP-1080B" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "1080-D", - "720D", - "Other", - "X-104P", - "X-720B", - "X-720D", - "XCB-N1349", - "XVISION-720D" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "720-D", - "autopan", - "X-100C", - "X-720B", - "x720d" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 554, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "FI-8602W", - "Other", - "X-100C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "FI-8602W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "X2C", - "X2C4000BP", - "x2c400bp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch00/0" - }, - { - "models": [ - "X2C4000BP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch00/1" - }, - { - "models": [ - "XIP3001" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "XP1080S20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/xvr.json b/data/brands/xvr.json deleted file mode 100644 index ddcaf15..0000000 --- a/data/brands/xvr.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Xvr", - "brand_id": "xvr", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "XVR_3521A" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - } - ] -} \ No newline at end of file diff --git a/data/brands/xxcamera.json b/data/brands/xxcamera.json deleted file mode 100644 index 9b10a08..0000000 --- a/data/brands/xxcamera.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "brand": "Xxcamera", - "brand_id": "xxcamera", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "001", - "5030-E", - "53100", - "5330-E", - "Other", - "XXC-098211-EDCFF", - "XXC-50100-T", - "XXC-5030-E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "5030-E", - "5330-E", - "Other", - "XXC-000723-NJFJD", - "xxc-003433-dwpzt", - "XXC-085241-FAEDA", - "XXC5030-E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other", - "XXK41E", - "XXK41E-V1.0" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other", - "sexy", - "XXC-118422-dbabc", - "XXC-50100-T", - "XXC51300-PIR" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "XXC5030-E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - }, - { - "models": [ - "Other", - "XXC-000723-NJFJD", - "XXC-092411-DCAFC", - "XXC52130" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other", - "XXC-50100-H", - "XXC-5030-E", - "XXC-53100-T" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "XXC-099465-EACEA" - ], - "type": "MJPEG", - "protocol": "http", - "port": 1175, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=" - }, - { - "models": [ - "XXC-112813-DFADE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "XXC52130" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "user/videostream.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/xxk.json b/data/brands/xxk.json deleted file mode 100644 index 45a2878..0000000 --- a/data/brands/xxk.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Xxk", - "brand_id": "xxk", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "xxk-100" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/xy-ip.json b/data/brands/xy-ip.json deleted file mode 100644 index ef6f60f..0000000 --- a/data/brands/xy-ip.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Xy-ip", - "brand_id": "xy-ip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cam4007" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "cam4007" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live/ch00_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/xyclop.json b/data/brands/xyclop.json deleted file mode 100644 index bfaffe2..0000000 --- a/data/brands/xyclop.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Xyclop", - "brand_id": "xyclop", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Hal3 Buiten 24", - "XC-BU-34F-IR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/y-cam.json b/data/brands/y-cam.json deleted file mode 100644 index 9cc0e87..0000000 --- a/data/brands/y-cam.json +++ /dev/null @@ -1,407 +0,0 @@ -{ - "brand": "Y-cam", - "brand_id": "y-cam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080", - "Bullet HD 720", - "Cube HD", - "Cube HD 1080", - "Cube-HD-1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/h264.sdp" - }, - { - "models": [ - "4.3", - "black", - "Black", - "Bullet HD", - "Bullet Range", - "Dome Range", - "Knight", - "Other", - "white s" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "4.3", - "Bullet Range", - "Dome Range", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream1.asf" - }, - { - "models": [ - "Black", - "bullet", - "BULLET HD 720", - "Bullet HD720", - "Cube 720p", - "Other", - "VZS5SX5U6L271JBW87ZJ", - "WHITE", - "White Cube 720", - "WHITE CUBE 720", - "WHITE S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Black", - "Bullet HD 1080", - "Y-CAM BLACK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live_mpeg4.sdp" - }, - { - "models": [ - "BLACK", - "Bullet HD", - "BULLET HD 720", - "Bullet Range", - "Cube 1080p", - "Cube HD720", - "CUBE VGA", - "Dome Range", - "HD1080", - "Other", - "White", - "Y-CAM BLACK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream.jpg" - }, - { - "models": [ - "Bullet HD", - "Bullet HD 1080", - "Bullet Range", - "Cube 1080p", - "Cube 720p", - "Cube HD 1080", - "Cube VGA", - "Dome Range", - "HD720", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Bullet HD", - "Bullet Range", - "Dome Range", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264_1.sdp" - }, - { - "models": [ - "Bullet HD", - "Bullet HD 1080", - "Bullet HD 720", - "Cube 1080p", - "Cube 720p", - "Cube HD720", - "Other", - "WHITE" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "Bullet HD" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Bullet HD 1080", - "Bullet HD 720", - "BulletHD1040", - "Cube 1080", - "Cube 1080p", - "Cube 720", - "CUBE 720", - "Cube 720p", - "Cube HD - 720", - "Cube HD 1080", - "Cube HD750", - "HD 720", - "HD 720 Pro", - "Other", - "WHITE CUBE 720", - "Y-CAM BLACK" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/onvif.sdp" - }, - { - "models": [ - "Bullet HD 1080", - "Bullet Range" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Bullet HD 1080", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Bullet HD 1080", - "hd 1080" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v01" - }, - { - "models": [ - "Bullet HD 1080" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v02" - }, - { - "models": [ - "Bullet HD 1080" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "v03" - }, - { - "models": [ - "Bullet Range", - "Dome Range", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_h264.sdp" - }, - { - "models": [ - "Bullet Range", - "Dome Range", - "Other", - "White" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4_1.sdp" - }, - { - "models": [ - "cube" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live/0/mpeg4.sdp" - }, - { - "models": [ - "Cube HD 1080", - "Other", - "WHITE", - "WHITE S" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Homemonitor HD Pro" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/stream.jpg" - }, - { - "models": [ - "Knight", - "Y-CAM BLACK" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/stream.asf" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=3" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=320x240&Quality=Standard" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_video.cgi?channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "video.h264" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "White" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/yale.json b/data/brands/yale.json deleted file mode 100644 index c392a22..0000000 --- a/data/brands/yale.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Yale", - "brand_id": "yale", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720 DVR" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "HD1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=4_stream=0.sdp" - }, - { - "models": [ - "HD1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=2_stream=0.sdp" - }, - { - "models": [ - "HD1080" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=3_stream=0.sdp" - }, - { - "models": [ - "Outdoor All in One", - "Outdoor pro", - "wifi" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "wipc-301w" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/yamla.json b/data/brands/yamla.json deleted file mode 100644 index a24a366..0000000 --- a/data/brands/yamla.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yamla", - "brand_id": "yamla", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "F300" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/yanivision.json b/data/brands/yanivision.json deleted file mode 100644 index b31a383..0000000 --- a/data/brands/yanivision.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Yanivision", - "brand_id": "yanivision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "4MP", - "mini ptz" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4_1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/yarsor.json b/data/brands/yarsor.json deleted file mode 100644 index 688c8cf..0000000 --- a/data/brands/yarsor.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yarsor", - "brand_id": "yarsor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "VR360S2E" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/yatwin.json b/data/brands/yatwin.json deleted file mode 100644 index cc75ebf..0000000 --- a/data/brands/yatwin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yatwin", - "brand_id": "yatwin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C24H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/udp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/yawcam.json b/data/brands/yawcam.json deleted file mode 100644 index 1669399..0000000 --- a/data/brands/yawcam.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "brand": "Yawcam", - "brand_id": "yawcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/out.jpg?q=30&id=0.16474807427079585&r=1612862926465" - }, - { - "models": [ - "1.1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/out.jpg?q=30&id=0.7040952851838247&r=1612863146825" - }, - { - "models": [ - "1.1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8081, - "url": "/out.jpg?q=30&id=0.9649783585624165&r=1612863191778" - }, - { - "models": [ - "1.1", - "HD3300", - "HTTP/1.1", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 8888, - "url": "/out.jpg" - }, - { - "models": [ - "1280", - "HDC-270", - "HTTP", - "LIFECAM", - "Other", - "WIN HTTP", - "WINDOWS", - "YAWCAM-1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "HDC-270", - "Http", - "LIFECAM", - "Other", - "Win HTTP", - "WINDOWS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "out.jpg?id=0.5" - }, - { - "models": [ - "Other", - "windows" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other", - "WIN HTTP" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "?action=stream" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "nphMotionJpeg?Resolution=320x240&Quality=Standard" - }, - { - "models": [ - "WINDOWS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 88, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "WINDOWS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ycc.json b/data/brands/ycc.json deleted file mode 100644 index 0fe0a70..0000000 --- a/data/brands/ycc.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "brand": "Ycc", - "brand_id": "ycc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "288ZD", - "365", - "Other", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other", - "YCC_2", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "y9a-wa", - "YCC365" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/H264/sub" - } - ] -} \ No newline at end of file diff --git a/data/brands/ycc365-plus.json b/data/brands/ycc365-plus.json deleted file mode 100644 index 0b038f1..0000000 --- a/data/brands/ycc365-plus.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "brand": "Ycc365 Plus", - "brand_id": "ycc365-plus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "365PLUS", - "CLOUD CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "365PLUS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "365PLUS", - "UNLISTED" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/H264/sub" - }, - { - "models": [ - "Cloud Cam", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Streaming/Channels/101" - }, - { - "models": [ - "Cloud Cam" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "Cloud Cam", - "UNLISTED" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 554, - "url": "MediaInput/mpeg4" - }, - { - "models": [ - "CLOUD CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/ycc365.json b/data/brands/ycc365.json deleted file mode 100644 index dfb4af4..0000000 --- a/data/brands/ycc365.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "brand": "Ycc365", - "brand_id": "ycc365", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "365", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "365", - "Cloud Cam", - "Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/h264_stream" - }, - { - "models": [ - "365", - "365plus", - "Cloud", - "p05-c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "365plus", - "365PLUS", - "c-p05 en", - "P2P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "365plus", - "365PLUS", - "P2P" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "365PLUS", - "Cloudcam", - "dalmose", - "outdoor PTZ", - "p2p", - "plus", - "Plus", - "torkil" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/0/av0" - }, - { - "models": [ - "Cloud Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "dalmose", - "torkil" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/av1" - }, - { - "models": [ - "GIPC", - "P05-C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/live" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif2" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/H264/sub" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam1/mpeg4" - }, - { - "models": [ - "p05-c" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]" - }, - { - "models": [ - "p05-c" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Plus" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif/device_service" - } - ] -} \ No newline at end of file diff --git a/data/brands/yccplus.json b/data/brands/yccplus.json deleted file mode 100644 index 98e70b6..0000000 --- a/data/brands/yccplus.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "brand": "Yccplus", - "brand_id": "yccplus", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "288ZD" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/videoMain" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 1935, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 8001, - "url": "live_mpeg4.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 1935, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yctechcam.json b/data/brands/yctechcam.json deleted file mode 100644 index 8cb0b2e..0000000 --- a/data/brands/yctechcam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yctechcam", - "brand_id": "yctechcam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-B125-APF40" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/yeekamo.json b/data/brands/yeekamo.json deleted file mode 100644 index 2913348..0000000 --- a/data/brands/yeekamo.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Yeekamo", - "brand_id": "yeekamo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR", - "svi 7193" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/yeesee.json b/data/brands/yeesee.json deleted file mode 100644 index 403176e..0000000 --- a/data/brands/yeesee.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Yeesee", - "brand_id": "yeesee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "dome cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "K8210-3ws-566500917" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yeluor-360-2k.json b/data/brands/yeluor-360-2k.json deleted file mode 100644 index 904c14f..0000000 --- a/data/brands/yeluor-360-2k.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yeluor 360 2k", - "brand_id": "yeluor-360-2k", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yeskam.json b/data/brands/yeskam.json deleted file mode 100644 index f18ee0f..0000000 --- a/data/brands/yeskam.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "brand": "Yeskam", - "brand_id": "yeskam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NK02-1080P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "NK02-1080P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NK02-1080P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/yeskamo.json b/data/brands/yeskamo.json deleted file mode 100644 index bf5d6e3..0000000 --- a/data/brands/yeskamo.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Yeskamo", - "brand_id": "yeskamo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "IPC", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IPC", - "NK03-1080P", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "nvr" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "NVR", - "nvr cam" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/yhdo.json b/data/brands/yhdo.json deleted file mode 100644 index 43b79d1..0000000 --- a/data/brands/yhdo.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Yhdo", - "brand_id": "yhdo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IW-9601" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/4" - } - ] -} \ No newline at end of file diff --git a/data/brands/yi-hack-allwinner-v2.json b/data/brands/yi-hack-allwinner-v2.json deleted file mode 100644 index 14e92ae..0000000 --- a/data/brands/yi-hack-allwinner-v2.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "yi-hack-Allwinner-v2", - "brand_id": "yi-hack-allwinner-v2", - "last_updated": "2025-11-11", - "source": "github.com/roleoroleo/yi-hack-Allwinner-v2", - "website": "https://github.com/roleoroleo/yi-hack-Allwinner-v2", - "entries": [ - { - "models": [ - "ALLWINNER V2 PLATFORM", - "Yi Allwinner v2", - "Different flash layout", - "Tovendor Mini Smart Home Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Allwinner v2 platform (different flash layout) - High resolution" - }, - { - "models": [ - "ALLWINNER V2 PLATFORM", - "Yi Allwinner v2", - "Different flash layout", - "Tovendor Mini Smart Home Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Allwinner v2 platform (different flash layout) - Low resolution" - }, - { - "models": [ - "ALLWINNER V2 PLATFORM", - "Yi Allwinner v2", - "Different flash layout", - "Tovendor Mini Smart Home Camera" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_2.h264", - "notes": "Allwinner v2 platform (different flash layout) - Audio only" - }, - { - "models": [ - "YI HOME CAMERA 3", - "Yi Home Camera 3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Home Camera 3 - HD stream" - }, - { - "models": [ - "YI HOME CAMERA 3", - "Yi Home Camera 3" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Home Camera 3 - SD stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Generic Allwinner v2 camera - HD stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Generic Allwinner v2 camera - SD stream" - } - ] -} diff --git a/data/brands/yi-hack-allwinner.json b/data/brands/yi-hack-allwinner.json deleted file mode 100644 index 7aa36a0..0000000 --- a/data/brands/yi-hack-allwinner.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "brand": "yi-hack-Allwinner", - "brand_id": "yi-hack-allwinner", - "last_updated": "2025-11-11", - "source": "github.com/roleoroleo/yi-hack-Allwinner", - "website": "https://github.com/roleoroleo/yi-hack-Allwinner", - "entries": [ - { - "models": [ - "ALLWINNER PLATFORM", - "Yi 1080p Allwinner", - "Generic Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Allwinner platform - High resolution video" - }, - { - "models": [ - "ALLWINNER PLATFORM", - "Yi 1080p Allwinner", - "Generic Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Allwinner platform - Low resolution video" - }, - { - "models": [ - "ALLWINNER PLATFORM", - "Yi 1080p Allwinner", - "Generic Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_2.h264", - "notes": "Allwinner platform - Audio only" - }, - { - "models": [ - "YI HOME 1080P ALLWINNER", - "Yi Home Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Home 1080p Allwinner - HD stream" - }, - { - "models": [ - "YI HOME 1080P ALLWINNER", - "Yi Home Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Home 1080p Allwinner - SD stream" - }, - { - "models": [ - "YI DOME 1080P ALLWINNER", - "Yi Dome Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Dome 1080p Allwinner - HD stream" - }, - { - "models": [ - "YI DOME 1080P ALLWINNER", - "Yi Dome Allwinner" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Dome 1080p Allwinner - SD stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Generic Allwinner camera - HD stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Generic Allwinner camera - SD stream" - } - ] -} diff --git a/data/brands/yi-hack-mstar.json b/data/brands/yi-hack-mstar.json deleted file mode 100644 index 4b6cb0a..0000000 --- a/data/brands/yi-hack-mstar.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "brand": "yi-hack-MStar", - "brand_id": "yi-hack-mstar", - "last_updated": "2025-11-11", - "source": "github.com/roleoroleo/yi-hack-MStar", - "website": "https://github.com/roleoroleo/yi-hack-MStar", - "entries": [ - { - "models": [ - "MSTAR INFINITY CHIPSET", - "MStar", - "Yi Home MStar", - "Yi Dome MStar", - "Generic MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "MStar Infinity chipset - High resolution video" - }, - { - "models": [ - "MSTAR INFINITY CHIPSET", - "MStar", - "Yi Home MStar", - "Yi Dome MStar", - "Generic MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "MStar Infinity chipset - Low resolution video" - }, - { - "models": [ - "MSTAR INFINITY CHIPSET", - "MStar", - "Yi Home MStar", - "Yi Dome MStar", - "Generic MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_2.h264", - "notes": "MStar Infinity chipset - Audio only" - }, - { - "models": [ - "YI HOME 1080P MSTAR", - "Yi 1080p MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Home 1080p MStar - HD stream" - }, - { - "models": [ - "YI HOME 1080P MSTAR", - "Yi 1080p MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Home 1080p MStar - SD stream" - }, - { - "models": [ - "YI DOME 1080P MSTAR", - "Yi Dome MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Dome 1080p MStar - HD stream" - }, - { - "models": [ - "YI DOME 1080P MSTAR", - "Yi Dome MStar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Dome 1080p MStar - SD stream" - }, - { - "models": [ - "AQARA CAMERA G2H", - "Aqara G2H", - "G2H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Aqara Camera G2H with yi-hack-MStar - HD stream" - }, - { - "models": [ - "AQARA CAMERA G2H", - "Aqara G2H", - "G2H" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Aqara Camera G2H with yi-hack-MStar - SD stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Generic MStar based camera - HD stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Generic MStar based camera - SD stream" - } - ] -} diff --git a/data/brands/yi-hack-v4.json b/data/brands/yi-hack-v4.json deleted file mode 100644 index 257a2a5..0000000 --- a/data/brands/yi-hack-v4.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "brand": "yi-hack-v4", - "brand_id": "yi-hack-v4", - "last_updated": "2025-11-11", - "source": "github.com/TheCrypt0/yi-hack-v4", - "website": "https://github.com/TheCrypt0/yi-hack-v4", - "entries": [ - { - "models": [ - "YI HOME 720P", - "Yi Home 720p", - "17CN", - "27US", - "47CN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Home 720p - Hi3518e chipset - HD stream" - }, - { - "models": [ - "YI HOME 720P", - "Yi Home 720p", - "17CN", - "27US", - "47CN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Home 720p - Hi3518e chipset - SD stream" - }, - { - "models": [ - "YI DOME 720P", - "Yi Dome 720p", - "43US", - "63US", - "Generic Dome 720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Dome 720p - Hi3518e chipset - HD stream" - }, - { - "models": [ - "YI DOME 720P", - "Yi Dome 720p", - "43US", - "63US", - "Generic Dome 720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Dome 720p - Hi3518e chipset - SD stream" - }, - { - "models": [ - "YI HOME 1080P", - "Yi Home 1080p", - "48US", - "Version 1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Home 1080p - Hi3518e chipset - HD stream" - }, - { - "models": [ - "YI HOME 1080P", - "Yi Home 1080p", - "48US", - "Version 1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Home 1080p - Hi3518e chipset - SD stream" - }, - { - "models": [ - "YI DOME 1080P", - "Yi Dome 1080p", - "45US", - "65US", - "Generic Dome 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Dome 1080p - Hi3518e chipset - HD stream" - }, - { - "models": [ - "YI DOME 1080P", - "Yi Dome 1080p", - "45US", - "65US", - "Generic Dome 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Dome 1080p - Hi3518e chipset - SD stream" - }, - { - "models": [ - "YI CLOUD DOME 1080P", - "Yi Cloud Dome 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Cloud Dome 1080p - Hi3518e chipset - HD stream" - }, - { - "models": [ - "YI CLOUD DOME 1080P", - "Yi Cloud Dome 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Cloud Dome 1080p - Hi3518e chipset - SD stream" - }, - { - "models": [ - "YI OUTDOOR 1080P", - "Yi Outdoor 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Yi Outdoor 1080p - Hi3518e chipset - HD stream" - }, - { - "models": [ - "YI OUTDOOR 1080P", - "Yi Outdoor 1080p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Yi Outdoor 1080p - Hi3518e chipset - SD stream" - }, - { - "models": [ - "HI3518E CHIPSET", - "Generic Hi3518e", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Generic Yi camera with Hi3518e chipset - HD stream" - }, - { - "models": [ - "HI3518E CHIPSET", - "Generic Hi3518e", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Generic Yi camera with Hi3518e chipset - SD stream" - } - ] -} diff --git a/data/brands/yi-hack-v5.json b/data/brands/yi-hack-v5.json deleted file mode 100644 index c3afcfe..0000000 --- a/data/brands/yi-hack-v5.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "brand": "yi-hack-v5", - "brand_id": "yi-hack-v5", - "last_updated": "2025-11-11", - "source": "github.com/alienatedsec/yi-hack-v5", - "website": "https://github.com/alienatedsec/yi-hack-v5", - "entries": [ - { - "models": [ - "HI3518EV200 CHIPSET", - "Yi Home", - "Yi Dome", - "Generic Hi3518ev200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Hi3518ev200 chipset - HD video stream" - }, - { - "models": [ - "HI3518EV200 CHIPSET", - "Yi Home", - "Yi Dome", - "Generic Hi3518ev200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Hi3518ev200 chipset - SD video stream" - }, - { - "models": [ - "HI3518EV200 CHIPSET", - "Yi Home", - "Yi Dome", - "Generic Hi3518ev200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_2.h264", - "notes": "Hi3518ev200 chipset - Audio only stream" - }, - { - "models": [ - "HI3518EV200 CHIPSET", - "Yi Home", - "Yi Dome", - "Generic Hi3518ev200" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_3.h264", - "notes": "Hi3518ev200 chipset - Audio only stream (alternative)" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264", - "notes": "Generic - HD video stream" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264", - "notes": "Generic - SD video stream" - } - ] -} diff --git a/data/brands/yi.json b/data/brands/yi.json deleted file mode 100644 index ef6be1b..0000000 --- a/data/brands/yi.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "brand": "Yi", - "brand_id": "yi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Home 2K Pro", - "YI CAM", - "Yi Dome 1080p", - "Yi home", - "Yi Home", - "Yi Home 1080p", - "Yi Home 2k PRO", - "Yi Home Camer 1080", - "yi_dome_1080p", - "Yicam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "Yi Ant", - "Yi Home", - "YICAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0.h264" - }, - { - "models": [ - "YI ANT", - "YI HOME", - "Yi Home 1080p", - "Yicam" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Yi Dome 1080p", - "Yi Home", - "YI Home 1080", - "Yi Home 1080p", - "Yi Home Camer 1080", - "yi_dome_1080p", - "Yicam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264" - }, - { - "models": [ - "YI HOME" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 5544, - "url": "live/ch00_0" - }, - { - "models": [ - "Yi Home Camer 1080" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videofeed" - }, - { - "models": [ - "Yi Home Camer 1080" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/video?profile=0" - }, - { - "models": [ - "Yicam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch1.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yiantime.json b/data/brands/yiantime.json deleted file mode 100644 index 309af67..0000000 --- a/data/brands/yiantime.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Yiantime", - "brand_id": "yiantime", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "5060L", - "YT-5060L" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/yicam.json b/data/brands/yicam.json deleted file mode 100644 index 14c7d00..0000000 --- a/data/brands/yicam.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Yicam", - "brand_id": "yicam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080P", - "Other", - "y21ga Outdoor 1080P", - "YI-HACK 0.15" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/cgi-bin/snapshot.sh?res=low" - }, - { - "models": [ - "1080P", - "Yi Outdoor" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_1.h264" - }, - { - "models": [ - "1080P", - "49CN", - "720p 27US", - "Dome Camera 1080p", - "Modified FW- YI-HACK 0.15", - "Yi Outdoor", - "YYS.2016" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yihack.json b/data/brands/yihack.json deleted file mode 100644 index ea1aa41..0000000 --- a/data/brands/yihack.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Yihack", - "brand_id": "yihack", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Dome", - "OutdoorHome" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yiliao.json b/data/brands/yiliao.json deleted file mode 100644 index d2ca6a8..0000000 --- a/data/brands/yiliao.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Yiliao", - "brand_id": "yiliao", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "y8a-wa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "/videoMain" - }, - { - "models": [ - "y8a-wa" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8001, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/yinxn.json b/data/brands/yinxn.json deleted file mode 100644 index 0799829..0000000 --- a/data/brands/yinxn.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yinxn", - "brand_id": "yinxn", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/yipc.json b/data/brands/yipc.json deleted file mode 100644 index 14a26e2..0000000 --- a/data/brands/yipc.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Yipc", - "brand_id": "yipc", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nc300" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/snapshot.cgi?action=getdata&channel.[CHANNEL].capture=true&channel.[CHANNEL].resolution=1" - }, - { - "models": [ - "Other", - "PTP-332017-DADDE" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - } - ] -} \ No newline at end of file diff --git a/data/brands/yoics.json b/data/brands/yoics.json deleted file mode 100644 index 0d47a00..0000000 --- a/data/brands/yoics.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "brand": "Yoics", - "brand_id": "yoics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9100-A", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?Status=false" - }, - { - "models": [ - "9100-A", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "usr/yoics[CHANNEL].jpg" - }, - { - "models": [ - "mole" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/yoko-tech.json b/data/brands/yoko-tech.json deleted file mode 100644 index 100bb53..0000000 --- a/data/brands/yoko-tech.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "brand": "Yoko Tech", - "brand_id": "yoko-tech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "9228HX029KV" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/net_jpeg.cgi?ch=0" - }, - { - "models": [ - "IP-1800", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "IV-R0422", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other", - "RYK-IP 8/D/H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "3gpp" - }, - { - "models": [ - "Other", - "RYK-9324" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "Jpeg/CamImg.jpg" - }, - { - "models": [ - "RYK-IP 8/D/H" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/yoluke.json b/data/brands/yoluke.json deleted file mode 100644 index 4138a17..0000000 --- a/data/brands/yoluke.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "brand": "Yoluke", - "brand_id": "yoluke", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "3MP PTZ", - "5MP", - "5MP-4X-PTZ", - "C6F0SgZ3N0P6L2", - "dome", - "Other", - "p1-2mp-rwf", - "p1-4x", - "P1-4X-5MP", - "P1-5MP-RWF", - "P2-20X", - "P2-20X5MP", - "P2-20X5MP-WiFi", - "P2-30X-5MPF", - "P3-4X", - "P3-5MP-RWF", - "P4 - 1X", - "PI=5MP-RWF", - "PI-2MP-RWF", - "PI-5MP-RWF", - "Ptz 5mp", - "smp ptz", - "x002bnn5cf" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "B07XRQ8YXV", - "ipcam-900139", - "p1-4x", - "P1-4X-5MP", - "P1-5MP-RWF", - "P1-5mp-wf", - "P2-20X", - "P2-20X5MP-WiFi", - "P3-5MP-WF", - "PI-5MP-RWF", - "ptz", - "Ptz 5mp" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "P1-5MP-RWF", - "P2-20X", - "P3-5MP" - ], - "type": "JPEG", - "protocol": "http", - "port": 5544, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "P2-20X", - "P2-20X5MP", - "P4 - 1X" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "S20-WIFI-T31" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/port8080" - } - ] -} \ No newline at end of file diff --git a/data/brands/yoosee.json b/data/brands/yoosee.json deleted file mode 100644 index 3464de8..0000000 --- a/data/brands/yoosee.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "brand": "Yoosee", - "brand_id": "yoosee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20048", - "25512319", - "2981432", - "8177", - "Dog", - "J1080P", - "meli", - "Other", - "qf502", - "Y-8177", - "Y-8177 1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif2" - }, - { - "models": [ - "2262711" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "25512319", - "29074193", - "2981432", - "34930167", - "360", - "6310", - "8177", - "alal", - "C100E", - "D100", - "dome", - "DOM-J1080P", - "EC9-IPC-JV-3480-F", - "Gadinan Wifi Camera Yoosee APP ONVIF IP Camera", - "GW10", - "gwipc", - "GWIPC", - "HL-100SS", - "IL-HIP292-1M-ZY", - "J1080P", - "meli", - "mercadoLibre", - "Mini Yoosee", - "nao lembro", - "nose", - "ORB776", - "Other", - "P1080", - "Q16-1080-WH", - "Q16-5MP-WH", - "RW-650S", - "W10", - "Y-8177", - "Y-8177 1080P", - "Y-8777", - "YD-D-01", - "YN-8801JW-2MP", - "YN-8807JW-2MP", - "YN-881JW-2MP", - "YooSee 720p", - "Yoosee Generic", - "YYC-XF2+3", - "ZN001" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "29074193", - "C9F0SeZ3N0P6L0", - "c-yz01d2f11e4n", - "Other", - "RC65", - "tony", - "YOSSE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "720p" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]&password=[PASSWORD]&channel=1&stream=0.sdp?" - }, - { - "models": [ - "algo" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "GW4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "GWIPC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "IL-HIP292-1M-ZY" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "J1080P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/live.sdp" - }, - { - "models": [ - "lightbulb" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?oids=1&username=[USERNAME]&password=adminpass&balls=balls5" - }, - { - "models": [ - "Lightbulb", - "YN-8801JW-2MP", - "ys06" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - } - ] -} \ No newline at end of file diff --git a/data/brands/yoteware.json b/data/brands/yoteware.json deleted file mode 100644 index 459cd9a..0000000 --- a/data/brands/yoteware.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Yoteware", - "brand_id": "yoteware", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1.2.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/onvif/live/2" - }, - { - "models": [ - "1.2.1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8080, - "url": "/Onvif/live/1/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/yotex.json b/data/brands/yotex.json deleted file mode 100644 index 8f428ee..0000000 --- a/data/brands/yotex.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Yotex", - "brand_id": "yotex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "200", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/youluke.json b/data/brands/youluke.json deleted file mode 100644 index 56c043f..0000000 --- a/data/brands/youluke.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Youluke", - "brand_id": "youluke", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "p2-20x-5mp-wfat" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "p2-20x-5mp-wfat" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/ysa.json b/data/brands/ysa.json deleted file mode 100644 index f667fe7..0000000 --- a/data/brands/ysa.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ysa", - "brand_id": "ysa", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cipc-gc13h" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/ysee.json b/data/brands/ysee.json deleted file mode 100644 index 579f567..0000000 --- a/data/brands/ysee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ysee", - "brand_id": "ysee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC08C340565E401" - ], - "type": "JPEG", - "protocol": "http", - "port": 8080, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/ysxlite.json b/data/brands/ysxlite.json deleted file mode 100644 index 49b4066..0000000 --- a/data/brands/ysxlite.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ysxlite", - "brand_id": "ysxlite", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BATC" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/yucheng.json b/data/brands/yucheng.json deleted file mode 100644 index c9a5c4e..0000000 --- a/data/brands/yucheng.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "brand": "Yucheng", - "brand_id": "yucheng", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "BULLET", - "C01H1P2", - "C01H1P4", - "C01H1WS2", - "C01H4W2", - "C18H2W3A", - "c20h4w4", - "c26h12", - "C26H1WS4", - "c26h2w2as", - "C26Z5P2AS", - "C26Z5W2AS", - "IPG-8150PSS", - "Other", - "P03Z35LW/P4T20", - "P03Z91LW3", - "P03Z91LWS4A", - "P03Z95LW4", - "P03Z95WT20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "C01H1P2", - "C02H1W4", - "C02H1W4-2", - "C03H4P2", - "C18H1WS2A", - "C18H2W3A", - "c19h6w4", - "C26H2W2AS", - "CL09H1W4", - "D05H12", - "Other", - "P01H9LS4", - "p01h9wl4" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "C02H1W4" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "iphone/11?[USERNAME]:[PASSWORD]&" - }, - { - "models": [ - "C26Z55W2AS", - "P03Z35LW/P4T20", - "p03z35lw4t20", - "P03Z95WT20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/0/MAIN" - }, - { - "models": [ - "IPG-7350PSS-S/W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IPG-7350PSS-S/W", - "P03Z95WT20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "1/h264major" - }, - { - "models": [ - "p03z35lw4t20" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/yucvision.json b/data/brands/yucvision.json deleted file mode 100644 index dfd9969..0000000 --- a/data/brands/yucvision.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Yucvision", - "brand_id": "yucvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C09H4P2", - "IMP-HC8P22W", - "IPG-8150PSS" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/yudor.json b/data/brands/yudor.json deleted file mode 100644 index c8f5020..0000000 --- a/data/brands/yudor.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "brand": "Yudor", - "brand_id": "yudor", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "HM85", - "ON-Hi96RP", - "Other", - "UNK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "GetData.cgi?CH=[CHANNEL]&Codec=jpeg&Size=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "current[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "xyz", - "YUC-K7B89M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "YUC-K7B89M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/v2" - } - ] -} \ No newline at end of file diff --git a/data/brands/yunch.json b/data/brands/yunch.json deleted file mode 100644 index ad05b75..0000000 --- a/data/brands/yunch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "brand": "Yunch", - "brand_id": "yunch", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "yc-110ar", - "YC-110ar", - "yc-11ar" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam2/mpeg4" - } - ] -} \ No newline at end of file diff --git a/data/brands/yunshian.json b/data/brands/yunshian.json deleted file mode 100644 index 983f1e5..0000000 --- a/data/brands/yunshian.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Yunshian", - "brand_id": "yunshian", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "hg71", - "hg72" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/1" - } - ] -} \ No newline at end of file diff --git a/data/brands/yunsye.json b/data/brands/yunsye.json deleted file mode 100644 index e6ff1ed..0000000 --- a/data/brands/yunsye.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Yunsye", - "brand_id": "yunsye", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ptz" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 88, - "url": "cam1/mpeg4" - }, - { - "models": [ - "ysy-3002l-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/yuzun.json b/data/brands/yuzun.json deleted file mode 100644 index b02310e..0000000 --- a/data/brands/yuzun.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Yuzun", - "brand_id": "yuzun", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "YZ-W220T6A" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/z-bravo.json b/data/brands/z-bravo.json deleted file mode 100644 index d422e82..0000000 --- a/data/brands/z-bravo.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Z-bravo", - "brand_id": "z-bravo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Z-IPD790-5M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/z5s.json b/data/brands/z5s.json deleted file mode 100644 index 6229b61..0000000 --- a/data/brands/z5s.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Z5s", - "brand_id": "z5s", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p", - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "1080P" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "1080P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0" - } - ] -} \ No newline at end of file diff --git a/data/brands/zatel.json b/data/brands/zatel.json deleted file mode 100644 index 07127a3..0000000 --- a/data/brands/zatel.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zatel", - "brand_id": "zatel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Fisheye" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/zaunip.json b/data/brands/zaunip.json deleted file mode 100644 index 11e0755..0000000 --- a/data/brands/zaunip.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zaunip", - "brand_id": "zaunip", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "nvr-225" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/zavio.json b/data/brands/zavio.json deleted file mode 100644 index 4045ff8..0000000 --- a/data/brands/zavio.json +++ /dev/null @@ -1,378 +0,0 @@ -{ - "brand": "Zavio", - "brand_id": "zavio", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "312A", - "510", - "5111", - "5210", - "b5210", - "B-5210", - "B6210", - "B-7210", - "B-7510", - "B8520", - "D-3200", - "D-4210", - "D-50E", - "D-510E", - "D-520E", - "D-7110", - "D-7210", - "F-1100", - "F-1105", - "F210A", - "F-3100", - "F-3101", - "F-312", - "F-312A", - "F-3201", - "F-3206", - "F-3210", - "F-3215", - "F511W", - "F-521E", - "F531E", - "f611e", - "f7110", - "F-731E", - "M-511W", - "Other", - "P-5110", - "VT-111" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg" - }, - { - "models": [ - "510", - "b5110", - "B-7110", - "B-7210", - "F210A", - "F-210A", - "F3101", - "F-312A", - "F-3201", - "F-3206", - "f5105", - "F-520IE", - "F-521E", - "F-531E", - "F-721A", - "F-731E", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "510", - "d510e", - "D-510E", - "EZ10W", - "F210A", - "F-3101", - "f312a", - "F-312A", - "F510E", - "F5110", - "f611e", - "M-510 E", - "M-510W", - "M511W", - "V111t" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "url": "/video.mp4" - }, - { - "models": [ - "5111", - "5210", - "7111", - "8520", - "B5010", - "B-5110", - "B-5111", - "B-5210", - "B-5211", - "B6210", - "b6520", - "B-7210", - "B8220", - "b8250", - "B-8820", - "D-3100", - "D-4210", - "D4520", - "D-510E", - "D-5114", - "D6210", - "D6220", - "D6330", - "D7110", - "D-7111", - "D-7210", - "D-7510", - "d8210", - "D-8210", - "d8220", - "F-1100", - "F-1105", - "F-3005", - "F-3102", - "F-3107", - "f3110", - "F-3110", - "F-3115", - "F-3201", - "F-3206", - "F-3210", - "F-3215", - "Other", - "P-5115", - "P5116", - "P-5210" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - }, - { - "models": [ - "5210", - "7111", - "B-5111", - "B-5210", - "b6220", - "B-7510", - "b8210", - "CR19F3206", - "D-3100", - "D-3200", - "D6210", - "D6530", - "D-7111", - "D-7210", - "F3005", - "F-3102", - "F-3110", - "F-3110-15", - "f3210", - "F-3215", - "F3606", - "Other", - "p4320", - "P5210", - "P-6210" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro2" - }, - { - "models": [ - "7111", - "D-7111", - "FD-7131V", - "fe8174" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?channel=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "B4220", - "B-5111", - "B-5210", - "B6210", - "B6330", - "B6520", - "B7210", - "b8210", - "CD6330", - "D-3100", - "D3200", - "D4211", - "D6210", - "D6530", - "D-7111", - "D8210", - "F 3206", - "F3005", - "F-3107", - "F3110", - "F-3115", - "F-3206", - "f3210", - "F-3210", - "F-4215", - "Other", - "p4320", - "P-5111" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video.pro1" - }, - { - "models": [ - "B-5110", - "D-5111", - "F-3101", - "meting" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.h264" - }, - { - "models": [ - "B-5110", - "D5110", - "D-5111", - "D7110", - "F-1100", - "F-1105", - "F-1150", - "F-521E", - "f7110", - "f7115", - "F-731E", - "Other", - "P-5115" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg" - }, - { - "models": [ - "B-5210", - "B6210", - "B6530 5MP", - "B-7110", - "B7210", - "B-7510", - "b8520", - "D-50E", - "d5210", - "F-210A", - "F-3101", - "F312A", - "F-312A", - "F-3206", - "F-520IE", - "F-521E", - "f611e", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "B-7210", - "F-3206" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "stream?uri=video.pro[CHANNEL]" - }, - { - "models": [ - "D-520E", - "DE-20", - "F-1105", - "F-210A", - "F-3101", - "F-3115", - "F-312A", - "F-3206", - "F-511E", - "M-510W", - "M-511E", - "Other", - "P-5110", - "VT-111" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/jpg/image" - }, - { - "models": [ - "F-1100", - "F1105", - "F-3100", - "F-7110", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "F-3210" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "F511W", - "P5115" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/jpg/image.jpg" - }, - { - "models": [ - "F531E" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi" - }, - { - "models": [ - "fe8174" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/viewer/video.jpg?resolution=640x480" - } - ] -} \ No newline at end of file diff --git a/data/brands/zebion.json b/data/brands/zebion.json deleted file mode 100644 index 81d2f4c..0000000 --- a/data/brands/zebion.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zebion", - "brand_id": "zebion", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C918IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zebronics.json b/data/brands/zebronics.json deleted file mode 100644 index 993d481..0000000 --- a/data/brands/zebronics.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Zebronics", - "brand_id": "zebronics", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1MP", - "ZEB-IP1MB18L20M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/zee-cure.json b/data/brands/zee-cure.json deleted file mode 100644 index e8a0341..0000000 --- a/data/brands/zee-cure.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Zee Cure", - "brand_id": "zee-cure", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "121" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "121" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "121" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view/image?pro_[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zee.json b/data/brands/zee.json deleted file mode 100644 index 48edab2..0000000 --- a/data/brands/zee.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zee", - "brand_id": "zee", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "RS 25" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/video.pro1" - } - ] -} \ No newline at end of file diff --git a/data/brands/zeecam.json b/data/brands/zeecam.json deleted file mode 100644 index 9638b38..0000000 --- a/data/brands/zeecam.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zeecam", - "brand_id": "zeecam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "CA-R11A-R" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/zeetopin.json b/data/brands/zeetopin.json deleted file mode 100644 index 5281617..0000000 --- a/data/brands/zeetopin.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zeetopin", - "brand_id": "zeetopin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ZS-GX6S-T" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/zekona.json b/data/brands/zekona.json deleted file mode 100644 index 6aad22c..0000000 --- a/data/brands/zekona.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zekona", - "brand_id": "zekona", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "20c" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/1" - }, - { - "models": [ - "20C" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/zencam.json b/data/brands/zencam.json deleted file mode 100644 index 26c77c3..0000000 --- a/data/brands/zencam.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zencam", - "brand_id": "zencam", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Ranger Cam" - ], - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "url": "/img/video.asf" - }, - { - "models": [ - "Ranger Cam" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=YWRtaW46U1owNFBhcyQ=" - } - ] -} \ No newline at end of file diff --git a/data/brands/zenith-cctv.json b/data/brands/zenith-cctv.json deleted file mode 100644 index 492828c..0000000 --- a/data/brands/zenith-cctv.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "brand": "Zenith Cctv", - "brand_id": "zenith-cctv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "ZN-IPC1" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/sf.cgi" - }, - { - "models": [ - "ZPI-132P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "ZPI-132P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "ZPI-132P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "ZPI-132P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zennox.json b/data/brands/zennox.json deleted file mode 100644 index 36485aa..0000000 --- a/data/brands/zennox.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zennox", - "brand_id": "zennox", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Surveillance IP" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - } - ] -} \ No newline at end of file diff --git a/data/brands/zetronix.json b/data/brands/zetronix.json deleted file mode 100644 index 94460c5..0000000 --- a/data/brands/zetronix.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "brand": "Zetronix", - "brand_id": "zetronix", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "300w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/rtsp_live1" - }, - { - "models": [ - "Nano" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Nano" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/LowResolutionVideo" - }, - { - "models": [ - "zCLOCK-4000w" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/main" - } - ] -} \ No newline at end of file diff --git a/data/brands/zeustech.json b/data/brands/zeustech.json deleted file mode 100644 index a648ef0..0000000 --- a/data/brands/zeustech.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "brand": "Zeustech", - "brand_id": "zeustech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Floodlight Camera", - "floodlightcam", - "UNKOWN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ipr-hd", - "zt_iproHD", - "zt-iprohd" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&" - } - ] -} \ No newline at end of file diff --git a/data/brands/zgwang.json b/data/brands/zgwang.json deleted file mode 100644 index eec0e72..0000000 --- a/data/brands/zgwang.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zgwang", - "brand_id": "zgwang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "X6 hhtp" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "ZGW-X6" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/zhejiang.json b/data/brands/zhejiang.json deleted file mode 100644 index 00b13d6..0000000 --- a/data/brands/zhejiang.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "brand": "Zhejiang", - "brand_id": "zhejiang", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/axis-cgi/mjpg/video.cgi" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "axis-cgi/mjpg/video.cgi" - } - ] -} \ No newline at end of file diff --git a/data/brands/zicom.json b/data/brands/zicom.json deleted file mode 100644 index cbe94c4..0000000 --- a/data/brands/zicom.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "brand": "Zicom", - "brand_id": "zicom", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IC-502W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "IC-502W", - "ZNIP-C01" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "CH00[CHANNEL].sdp" - }, - { - "models": [ - "ZNIP-C01" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image.jpg" - }, - { - "models": [ - "ZNIP-C01" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - } - ] -} \ No newline at end of file diff --git a/data/brands/zigxico.json b/data/brands/zigxico.json deleted file mode 100644 index 779c9b9..0000000 --- a/data/brands/zigxico.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zigxico", - "brand_id": "zigxico", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "W11" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif/stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/zilink.json b/data/brands/zilink.json deleted file mode 100644 index 6040327..0000000 --- a/data/brands/zilink.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "brand": "Zilink", - "brand_id": "zilink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "cobell", - "DH41s", - "DH42S", - "dh43s", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "DH42S", - "HD PTZ IP CAM", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "dh43h", - "DH52H", - "HD PTZ IP CAM" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/snapshot.cgi?size=2" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=01" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - } - ] -} \ No newline at end of file diff --git a/data/brands/zintronic.json b/data/brands/zintronic.json deleted file mode 100644 index 4483153..0000000 --- a/data/brands/zintronic.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "brand": "Zintronic", - "brand_id": "zintronic", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ah5", - "IKPW220V1", - "IKTW530CV1", - "P5LIGHT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "B4 PoE" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/ch0_0.h264" - }, - { - "models": [ - "IKPW330ICSW1", - "Other", - "P5 Lite", - "P5LIGHT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "NVR IP IR9S18MP 9" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - } - ] -} \ No newline at end of file diff --git a/data/brands/zivif.json b/data/brands/zivif.json deleted file mode 100644 index 18aaf74..0000000 --- a/data/brands/zivif.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Zivif", - "brand_id": "zivif", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other", - "P115", - "PR 115" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/zjuxin.json b/data/brands/zjuxin.json deleted file mode 100644 index 3cc74ac..0000000 --- a/data/brands/zjuxin.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "brand": "Zjuxin", - "brand_id": "zjuxin", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "unica", - "zjx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "zjx" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/zkteco.json b/data/brands/zkteco.json deleted file mode 100644 index 4cf6d7e..0000000 --- a/data/brands/zkteco.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "brand": "Zkteco", - "brand_id": "zkteco", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ES-52012H" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam/realmonitor" - }, - { - "models": [ - "Other", - "ZKT" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "Other", - "ZKIP472-W", - "zk-ir372", - "ZKT" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/Streaming/Channels/1" - }, - { - "models": [ - "Other", - "ZKIP472-W", - "ZKT", - "ZTMD470P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "Pl-52D18E" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/media.amp?resolution=640x480" - }, - { - "models": [ - "ZKMD-532" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live_mpeg4.sdp" - } - ] -} \ No newline at end of file diff --git a/data/brands/zmodo.json b/data/brands/zmodo.json deleted file mode 100644 index 42950f0..0000000 --- a/data/brands/zmodo.json +++ /dev/null @@ -1,615 +0,0 @@ -{ - "brand": "Zmodo", - "brand_id": "zmodo", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "cctv", - "Other", - "ZMD-IDV-BFS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "image/[CHANNEL].jpg" - }, - { - "models": [ - "cctv" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/qvga.jpg" - }, - { - "models": [ - "CCTV", - "CMI-11123BK", - "CMI-11133WT", - "CMI-12316gy", - "CNI-11123BK", - "Other", - "ZH-IXA15-WC" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "cm111623gy", - "Other", - "ZMD14G" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "CM111623GY", - "CMI-11123BK", - "CMI-12316gy", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?rate=11" - }, - { - "models": [ - "CMI-11123BK", - "CMI-12316GY", - "zh-ixy10" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMI-11123BK", - "CMI-11123BK R", - "Other", - "ZP-IGH13-W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "CMI-11123BK", - "Other", - "ZHIBH-13W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "CMI-11123BK", - "Other", - "ZMD-IDV-BFS" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "CMI-11123BK", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?camera=[CHANNEL]" - }, - { - "models": [ - "CMI-11123BK", - "CMI-12316GY", - "CNI-11123BK", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMI-11123BK", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi" - }, - { - "models": [ - "CMI-11123BK", - "CMI-12316gy", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi" - }, - { - "models": [ - "CMI-11123BK", - "IP-900", - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMI-11123BK", - "CNI-11123BK" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video.cgi?resolution=VGA" - }, - { - "models": [ - "CMI-11123BK", - "CMI-12316gy", - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "CMI-11123BK", - "CMI-12316GY", - "Other", - "ZH-IXA15-WC", - "ZMD-IDV-BFS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "VideoInput/[CHANNEL]/h264/1" - }, - { - "models": [ - "CMI-11123BK", - "CMI-12316GY", - "Other", - "ZMD-IDV-BFS" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]" - }, - { - "models": [ - "CS-S1T-S", - "IBH15-S1", - "IBI-13", - "IXA15-WAC", - "IXA15-WC", - "Onvif", - "Other", - "Terassi", - "ZHIBH-13W", - "ZH-IBH13-W", - "ZH-IDP15-W", - "ZH-IXA15-WC", - "ZH-IXB15-WC", - "ZH-IXC15-WC", - "ZH-IXD15-WAC", - "ZH-IXD15-WC", - "ZH-IXU1D-WAC", - "ZM-SH721", - "ZP-IBH13-P", - "ZP-IBH13-W", - "ZP-IBH15-S", - "ZP-IBH15-S1", - "ZP-IBI13W", - "ZP-IBI13-W", - "ZP-IBT15-S", - "ZP-IGH13-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/tcp/av0_0" - }, - { - "models": [ - "CS-S1T-S", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mpeg4" - }, - { - "models": [ - "CS-S1T-S", - "IBH15-S1", - "Onvif", - "Other", - "ZH-IBH13-W", - "ZH-IXA15-WC", - "ZH-IXB15-WC", - "ZH-IXC15-WC", - "ZH-IXD15-WC", - "ZP-IBH13-W", - "ZP-KEH104", - "ZP-NE14S", - "zp-ne14s1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_1" - }, - { - "models": [ - "I202W-95-NC8-2T-1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/000100" - }, - { - "models": [ - "Indoor", - "OnVif", - "Other", - "ZH-IXA1D-WAC", - "ZH-IXB1D-WAC", - "ZH-IXC1D-WAC", - "zp-ibt15-s" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "knight" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "stream.asf" - }, - { - "models": [ - "NULL", - "ZMD14G", - "ZM-SS7009D8-S" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/streaming/mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg" - }, - { - "models": [ - "Other", - "ZMD-IDV-BFS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "stillimg[CHANNEL].jpg" - }, - { - "models": [ - "Other", - "ZMD-IDV-BFS" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "/control/faststream.jpg?stream=MxPEG&needlength&fps=6" - }, - { - "models": [ - "Other", - "ZP-IBT15-S" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/h264" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live.sdp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "image.mpg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4/[CHANNEL]/media.amp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "http", - "port": 0, - "url": "cgi-bin/view.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "Other", - "uin", - "ZH-IXD15-WAC", - "ZM-SS718" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "h264" - }, - { - "models": [ - "Other", - "ZMD-IDV-BFS" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "img/video.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 0, - "url": "cam[CHANNEL]/mjpeg" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpg4/rtsp.amp" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "mpeg4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "video.mp4" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "[CHANNEL]/1:1/main" - }, - { - "models": [ - "Other", - "ZH-IXD1D-WAC" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "0/[USERNAME]:[PASSWORD]/main" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/onvif1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/video.jpg?cam=2&quality=3&size=2" - }, - { - "models": [ - "PKD-DK40107" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/video.jpg?cam=[CHANNEL]&quality=3&size=2" - }, - { - "models": [ - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "ptz" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpg/image.jpg?size=3" - }, - { - "models": [ - "ZH-IXA15-WAC", - "ZH-IXA15-WC", - "ZP-IBH13-W", - "ZP-IBH15-S1", - "ZP-IHB13-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/udp/av0_0" - }, - { - "models": [ - "ZH-IXA15-WC", - "ZH-IXD1D-WAC", - "ZP-IBH15-S", - "ZP-IBH15-S1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/udp/av0_1" - }, - { - "models": [ - "zhixy1d" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0/Duane:tittus/main" - }, - { - "models": [ - "ZMD14GIDA231708" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ZMD14GIDA231708" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/videostream.asf" - }, - { - "models": [ - "ZMD-IDV-BFS" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "ZP-IBH15-W" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/img/video.mjpeg?channel=2" - }, - { - "models": [ - "ZP-IBH23-W", - "ZP-IBI15-W" - ], - "type": "FFMPEG", - "protocol": "https", - "port": 443, - "url": "/" - }, - { - "models": [ - "ZP-IBI15-W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "//tcp/av0_0" - } - ] -} \ No newline at end of file diff --git a/data/brands/znv.json b/data/brands/znv.json deleted file mode 100644 index 97a71c1..0000000 --- a/data/brands/znv.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "brand": "Znv", - "brand_id": "znv", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "ZBIE-2020W", - "ZBIE-2151W-N3/4T-A", - "Zdie-2031u-n4t-s", - "ZNV-633" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/H264" - }, - { - "models": [ - "ZBIE-2020W-N4T", - "ZBIE-2151W-N3/4T-A", - "ZDIE-2010W-N3T-3.6" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - } - ] -} \ No newline at end of file diff --git a/data/brands/zodiac-security.json b/data/brands/zodiac-security.json deleted file mode 100644 index f46efea..0000000 --- a/data/brands/zodiac-security.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "brand": "Zodiac Security", - "brand_id": "zodiac-security", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "909" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IP909IW" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 81, - "url": "/videostream.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]&audiostream=1" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zoelink.json b/data/brands/zoelink.json deleted file mode 100644 index 14a32f0..0000000 --- a/data/brands/zoelink.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "brand": "Zoelink", - "brand_id": "zoelink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "720P", - "ite 720p Camera 2", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/zoneminder.json b/data/brands/zoneminder.json deleted file mode 100644 index be1b6a3..0000000 --- a/data/brands/zoneminder.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zoneminder", - "brand_id": "zoneminder", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/nph-zms?mode=jpeg&monitor=[CHANNEL]&scale=100&maxfps=30&buffer=1000&user=[USERNAME]&pass=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zonet.json b/data/brands/zonet.json deleted file mode 100644 index b133149..0000000 --- a/data/brands/zonet.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "brand": "Zonet", - "brand_id": "zonet", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "C198" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - }, - { - "models": [ - "Other", - "ZVC-7610W", - "zvc7630", - "ZVC-7630w", - "ZVC-7630W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other", - "zcv7611", - "ZVC-7610W", - "ZVC7611" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other", - "ZVC-7610W", - "ZVC-7611", - "ZVC7630W" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpg/video.mjpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "LowResolutionVideo" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 8554, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ZVC-7610W", - "ZVC7630W", - "ZVC7810W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "ZVC-7640" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "jpeg/pull" - } - ] -} \ No newline at end of file diff --git a/data/brands/zoneway.json b/data/brands/zoneway.json deleted file mode 100644 index 0351aec..0000000 --- a/data/brands/zoneway.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "brand": "Zoneway", - "brand_id": "zoneway", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "862", - "NC-600", - "NC-620", - "nc-620mw", - "NC-628MWP", - "NC-851", - "NC851MW-P", - "Other", - "ZW-NC530W", - "ZW-NC638MWP", - "ZW-NC857MVP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "862", - "NC625", - "NC-627M", - "NC-628MWP", - "NC630MW-P", - "NC-824", - "NC824MW-P", - "NC-851", - "ZW-NC857MVP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live/ch0" - }, - { - "models": [ - "IPC-1100HA", - "Other", - "ZW-NC649MP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/live0.264" - }, - { - "models": [ - "IPC-1100HA", - "NC638MW-P", - "Other", - "ZW-NC638MWP", - "ZW-NC866M-P", - "ZW-NNC638MW-P" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "NC-600", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "nc-620", - "NC-627M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/cam1/onvif-h264" - }, - { - "models": [ - "NC628MW-P", - "ZW-NC638MW-P" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/tcp/av0_0" - }, - { - "models": [ - "NC638MW-P", - "ZW-NC638MW-P" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/mobile_snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "ZW-NC857MVP" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zonx.json b/data/brands/zonx.json deleted file mode 100644 index f8e531c..0000000 --- a/data/brands/zonx.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "brand": "Zonx", - "brand_id": "zonx", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AM800N2", - "imx415" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" - }, - { - "models": [ - "imx415" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/h264_stream" - }, - { - "models": [ - "IMX415" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch01_sub.264" - } - ] -} \ No newline at end of file diff --git a/data/brands/zoohi.json b/data/brands/zoohi.json deleted file mode 100644 index 0bfecb4..0000000 --- a/data/brands/zoohi.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Zoohi", - "brand_id": "zoohi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "AR-24W", - "N20W1329" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/zosi.json b/data/brands/zosi.json deleted file mode 100644 index a118366..0000000 --- a/data/brands/zosi.json +++ /dev/null @@ -1,542 +0,0 @@ -{ - "brand": "Zosi", - "brand_id": "zosi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=0", - "auth_required": true, - "notes": "Bubble Protocol - main stream (works with go2rtc bubble:// source)" - }, - { - "models": [ - "NVR", - "DVR", - "H.264", - "H.265", - "HiSilicon", - "Other" - ], - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "url": "/bubble/live?ch={channel}&stream=1", - "auth_required": true, - "notes": "Bubble Protocol - sub stream (lower quality)" - }, - { - "models": [ - "1080", - "1080p", - "4AK-1062B-BS-US", - "C199", - "C199 PRO", - "h13518c", - "IPC", - "Other", - "pri", - "ZG2612D", - "zg2612e", - "ZG2622MW", - "ZM4182E", - "ZNC1902F", - "zswnvk-a81300-us" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/11" - }, - { - "models": [ - "1080p", - "1ac-28113m-w", - "1MP bullet ext", - "720p", - "c190", - "Other", - "PTZ Cam", - "zbc288w", - "zbc288w2", - "zg2322m", - "zg2332m", - "zg28110m", - "ZG2822M", - "zg28822m", - "ZG2882M", - "ZND350W", - "ZND350W2", - "zosi ptz camera", - "ZSWNVK-A41001-US", - "ZSWNVK-A81300-eu" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_0.264" - }, - { - "models": [ - "1080p", - "C289", - "ZR08-MN" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/" - }, - { - "models": [ - "1080P", - "720P", - "ZG23213M", - "zswnvk-a41001-us" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot" - }, - { - "models": [ - "1080P", - "1AC", - "1AC-28113M-W", - "1ac-zg28113m-w", - "960P", - "H.264", - "IP66 Bullet 1280p", - "IPC", - "IPC_1150381", - "K906W", - "K9504-W", - "ONVIF", - "Other", - "ZBC-A21", - "ZG23213M", - "ZG2321M", - "zg2332m", - "ZG28110M", - "zswnvk", - "ZSWNVK1600510094", - "zswnvk-a41001-us", - "zswnvk-a81001-us", - "ZWNVK-A81300-US" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "1080P", - "720P", - "960P", - "h.264", - "import cv2", - "K906W", - "K9504-W", - "K9604-W", - "K9608-W", - "NVR", - "Other", - "w8208-w", - "WDC WD10EZEX-21W", - "zg23213m", - "zg23213m23213m", - "ZG2332M", - "zg2zg23213m3213m", - "zr04jb", - "ZR04JB/10", - "zr08kb", - "ZSWNVK", - "ZSWNVK-A41001-US", - "ZSWNVK-B41300-US", - "ZSWNVK-B42000-AU", - "ZWNVK-A81300-US" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "1080P", - "1828", - "2622mg", - "721", - "C180", - "c199", - "C518", - "IP66 BULLET 1280P", - "IPC", - "ND5122M", - "onvif", - "Other", - "ZG1804E", - "ZG2320M-W", - "zg2515E", - "zg2516E", - "ZG-2611M", - "zg2615d", - "ZG2615E", - "zg2622", - "ZG2622MW", - "ZG2812D", - "ZND350W", - "ZND350W232-EU", - "ZND5122M", - "Zosi Bullet", - "zosi ptz", - "ZR321321" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ucast/11" - }, - { - "models": [ - "1080P", - "1NB-2622MW-W-W", - "2622MG", - "H.264", - "ND5122M", - "ONVIF", - "Other", - "zg2622mw", - "ZG-2622mw", - "ZG2622MW", - "znd5122m", - "ZPTZ-B22" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "11" - }, - { - "models": [ - "1080P", - "Other", - "ZG23213M", - "ZND350W", - "ZPTZ-B22" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/ch0_1.264" - }, - { - "models": [ - "1528", - "1828D", - "1883m", - "1NC-2892J-W-EU", - "C190", - "c199", - "C225", - "C289", - "C290", - "C296", - "C298", - "C2982", - "C518", - "C688", - "HDVR", - "IPC", - "IPC_1150381", - "IPC-2965Y-W", - "Other", - "Smart IP Camera", - "ZG1062B", - "ZG1828Y", - "ZG2322M", - "zg2323", - "ZG2323M", - "ZG2965E", - "ZG3023A", - "ZM2258D", - "ZNC1902F", - "ZNC1903Y", - "ZNC2892J", - "ZNC5133V", - "ZOSI PTZ CAMERA", - "ZR08VN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video1" - }, - { - "models": [ - "199", - "720", - "C518", - "Other", - "zg2515E", - "zg2615d", - "zm4181c", - "ZND350W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "url": "/ucast/12" - }, - { - "models": [ - "1wipc", - "K9504-W", - "K9604-W", - "ND5122M", - "ONVIF", - "Other", - "zg2332m", - "zswnvk-a41001-us", - "zswnvk-a81001-us" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "3520DV400 Based Versions (ZR08 MM", - "MN)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video8-x264" - }, - { - "models": [ - "3520DV400 Based Versions (ZR08 MM", - "MN)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video8" - }, - { - "models": [ - "960P", - "zg2332m", - "Zosi Bullet" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot" - }, - { - "models": [ - "C2890F01", - "C298", - "ZG2323M" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video2" - }, - { - "models": [ - "CloudCam", - "IPC_1150381", - "Other", - "ZBC288W2", - "ZND311", - "ZND350W", - "ZND350W232-EU" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif1" - }, - { - "models": [ - "HDVR", - "ZR08-MN (hiSilicon 3520dv400)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video7" - }, - { - "models": [ - "ipc", - "Other", - "zg2612e" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/12" - }, - { - "models": [ - "IPC", - "zg23213m", - "ZG23213M" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=0" - }, - { - "models": [ - "K9064-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=0&u=[USERNAME]&p=" - }, - { - "models": [ - "K9064-W" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/cgi-bin/snapshot.cgi?chn=1&u=[USERNAME]&p=" - }, - { - "models": [ - "NVR", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot/view[CHANNEL].jpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "ZG23213" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg" - }, - { - "models": [ - "zg23213m" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=1" - }, - { - "models": [ - "ZG3062S" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "url": "/video.mjpg?q=30&fps=33&id=0.5" - }, - { - "models": [ - "ZM2258D", - "znc2893Q", - "ZR08MM", - "ZR08MN", - "ZR08WN", - "ZR08MS", - "ZR08AR", - "ZR08MN MN MS AR WN 3520DV400 1.7.2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Video1-x264" - }, - { - "models": [ - "ZR08MM", - "ZR08MN", - "ZR08WN", - "ZR08MS", - "ZR08AR", - "ZR08MN MN MS AR WN 3520DV400 1.7.2" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/Video1" - }, - { - "models": [ - "ZR08-MN", - "ZR08-MN (hiSilicon 3520dv400)" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video7-x264" - }, - { - "models": [ - "ZR08-MN" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/video7-x265" - }, - { - "models": [ - "zswnvk-a81001-us" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snapshot.jpg?user=[USERNAME]&pwd=&strm=1" - } - ] -} \ No newline at end of file diff --git a/data/brands/zsgl.json b/data/brands/zsgl.json deleted file mode 100644 index 6c1803d..0000000 --- a/data/brands/zsgl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zsgl", - "brand_id": "zsgl", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/H264?ch=1&subtype=0&proto=Onvif" - } - ] -} \ No newline at end of file diff --git a/data/brands/ztcolife-mini-wifi.json b/data/brands/ztcolife-mini-wifi.json deleted file mode 100644 index d1958ed..0000000 --- a/data/brands/ztcolife-mini-wifi.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Ztcolife Mini Wifi", - "brand_id": "ztcolife-mini-wifi", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "1080p" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zte.json b/data/brands/zte.json deleted file mode 100644 index 75e8bca..0000000 --- a/data/brands/zte.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "brand": "Zte", - "brand_id": "zte", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "796c", - "830", - "Blade 2T Lite", - "lite", - "N-860", - "Other", - "Z-665G", - "Z-667", - "Z-667G", - "Z-66G", - "Z753G", - "Z768G", - "z820", - "z990", - "zmax pro", - "ZTE-667", - "ZTE-667G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videofeed" - }, - { - "models": [ - "Grand X2", - "z33" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 8080, - "url": "/videofeed" - }, - { - "models": [ - "n9135", - "Other", - "Speed", - "Z-667", - "Z-667G" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?profile=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "video?submenu=mjpg" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=00" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "ch0_0.h264" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zulex.json b/data/brands/zulex.json deleted file mode 100644 index 8001200..0000000 --- a/data/brands/zulex.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "brand": "Zulex", - "brand_id": "zulex", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "IPC-1VB-E1.40", - "IPC-2MD-E1.28" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/onvif-stream1" - } - ] -} \ No newline at end of file diff --git a/data/brands/zuum.json b/data/brands/zuum.json deleted file mode 100644 index 5452f0c..0000000 --- a/data/brands/zuum.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zuum", - "brand_id": "zuum", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "LSE4MPS2-IP-2.8-IR30-WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]" - }, - { - "models": [ - "LSE4MPS2-IP-2.8-IR30-WH" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zvision.json b/data/brands/zvision.json deleted file mode 100644 index e220eb3..0000000 --- a/data/brands/zvision.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zvision", - "brand_id": "zvision", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "zvd-5204hz-h1" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/0" - } - ] -} \ No newline at end of file diff --git a/data/brands/zxtech.json b/data/brands/zxtech.json deleted file mode 100644 index d546530..0000000 --- a/data/brands/zxtech.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "brand": "Zxtech", - "brand_id": "zxtech", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2Mpx", - "3516CV200_IMX323", - "baby bullet", - "Big", - "mc1181n6", - "MC136C3B", - "MCI281D6", - "MCIDG54G Vandalproof IR Dome IPC", - "MCIDP17", - "mcwbw52t", - "MonsterVision", - "Other", - "Premio" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/0" - }, - { - "models": [ - "2MPX", - "Other", - "PREMIO", - "Tropox", - "TROPOX IP" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - }, - { - "models": [ - "2MPX", - "3516CV200_IMX323", - "MCI281O6", - "Other", - "tropox", - "tropox ip", - "WiFi 1080p" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "3516CV200_IMX323", - "mc1181n6", - "MC136C3B", - "MCI-281D6", - "MONSTERVISION", - "nightlife", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegSize=XL" - }, - { - "models": [ - "baby bullet", - "MC136C3B", - "MCI281D6" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "IPC08C34056E401" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "MC1281N6", - "MC136C3B", - "Other", - "premio" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg" - }, - { - "models": [ - "MC1281N6", - "MC128C3D", - "MC136C3B", - "MCI281D6", - "mci281o6", - "mcidp17", - "Other", - "premio" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snap.jpg?JpegCam=[CHANNEL]" - }, - { - "models": [ - "MC1281N6" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "MCI-281D6", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "" - }, - { - "models": [ - "mci281o6" - ], - "type": "JPEG", - "protocol": "http", - "port": 80, - "url": "/snap.jpg?JpegCam=0" - }, - { - "models": [ - "MCIBWR1V" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - }, - { - "models": [ - "mcp2i2a" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "cam1/mpeg4" - }, - { - "models": [ - "MCWBW52A", - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "url": "/1" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "WIFI-002" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - } - ] -} \ No newline at end of file diff --git a/data/brands/zysecurity.json b/data/brands/zysecurity.json deleted file mode 100644 index 9cd00d0..0000000 --- a/data/brands/zysecurity.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zysecurity", - "brand_id": "zysecurity", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "PTZ IP 58" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "url": "/11" - }, - { - "models": [ - "ZY-PEZ40-SNY" - ], - "type": "MJPEG", - "protocol": "rtsp", - "port": 554, - "url": "/" - } - ] -} \ No newline at end of file diff --git a/data/brands/zyxel.json b/data/brands/zyxel.json deleted file mode 100644 index cdc17bc..0000000 --- a/data/brands/zyxel.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "brand": "Zyxel", - "brand_id": "zyxel", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "2605-N", - "4605", - "IPC2605N", - "IPC-3605N", - "IPC36xx/46xx", - "IPC-4605N", - "IPC-4609N", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "2605-N", - "IPC2605n", - "IPC-4605N" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]" - }, - { - "models": [ - "2605-N", - "IPC-3605N", - "IPC36xx/46xx", - "IPC-4605N", - "n454", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]" - }, - { - "models": [ - "2605-N", - "IPC2605N", - "IPC36xx/46xx", - "IPC-4605N", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.jpg" - }, - { - "models": [ - "2605-N", - "4605", - "IPC-3605N", - "IPC36xx/46xx", - "IPC-4605N", - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "medias2" - }, - { - "models": [ - "IPC-3605N", - "IPC36xx/46xx", - "IPC-4605N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]" - }, - { - "models": [ - "IPC36xx/46xx", - "IPC-4605N" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "mjpegStreamer.cgi" - }, - { - "models": [ - "IPC36XX/46XX" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpg.cgi" - }, - { - "models": [ - "IPC-4605N", - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "cgi/mjpg/mjpeg.cgi" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "/goform/video" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]" - }, - { - "models": [ - "Other" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "cgi/jpg/image.cgi" - }, - { - "models": [ - "Other" - ], - "type": "MJPEG", - "protocol": "http", - "port": 0, - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0" - }, - { - "models": [ - "Other" - ], - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "url": "live3.sdp" - }, - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "url": "videostream.asf" - } - ] -} \ No newline at end of file diff --git a/data/brands/zzlink.json b/data/brands/zzlink.json deleted file mode 100644 index 7b20dcb..0000000 --- a/data/brands/zzlink.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "brand": "Zzlink", - "brand_id": "zzlink", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "Other" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/brands/zzmoon.json b/data/brands/zzmoon.json deleted file mode 100644 index dbad7d4..0000000 --- a/data/brands/zzmoon.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "brand": "Zzmoon", - "brand_id": "zzmoon", - "last_updated": "2025-10-17", - "source": "ispyconnect.com", - "entries": [ - { - "models": [ - "D77W" - ], - "type": "JPEG", - "protocol": "http", - "port": 0, - "url": "tmpfs/auto.jpg" - }, - { - "models": [ - "SD27W" - ], - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "url": "/11" - } - ] -} \ No newline at end of file diff --git a/data/camera_oui.json b/data/camera_oui.json deleted file mode 100644 index f08c0a2..0000000 --- a/data/camera_oui.json +++ /dev/null @@ -1,2407 +0,0 @@ -{ - "00:00:95": "Sony", - "00:00:F0": "Samsung", - "00:01:31": "Bosch", - "00:01:4A": "Sony", - "00:02:D1": "Vivotek", - "00:03:22": "IDIS", - "00:03:C5": "Mobotix", - "00:04:1F": "Sony", - "00:04:63": "Bosch", - "00:05:5D": "D-Link", - "00:06:4A": "Honeywell", - "00:06:68": "Vicon", - "00:07:AB": "Samsung", - "00:09:18": "Hanwha", - "00:09:5B": "Netgear", - "00:0A:13": "Honeywell", - "00:0A:D9": "Sony", - "00:0A:EB": "TP-Link", - "00:0B:7F": "Ring", - "00:0B:88": "IDIS", - "00:0C:80": "Pelco", - "00:0D:5C": "Bosch", - "00:0D:88": "D-Link", - "00:0E:07": "Sony", - "00:0F:12": "Panasonic", - "00:0F:3D": "D-Link", - "00:0F:7C": "ACTi", - "00:0F:B5": "Netgear", - "00:0F:DE": "Sony", - "00:10:BE": "March Networks", - "00:11:12": "Honeywell", - "00:11:14": "EverFocus", - "00:11:95": "D-Link", - "00:12:47": "Samsung", - "00:12:67": "Panasonic", - "00:12:81": "March Networks", - "00:12:EE": "Sony", - "00:12:FB": "Samsung", - "00:13:15": "Sony", - "00:13:46": "D-Link", - "00:13:56": "FLIR", - "00:13:77": "Samsung", - "00:13:A9": "Sony", - "00:13:E2": "Geovision", - "00:14:6C": "Netgear", - "00:14:78": "TP-Link", - "00:15:6D": "Ubiquiti", - "00:15:99": "Samsung", - "00:15:B9": "Samsung", - "00:15:C1": "Sony", - "00:15:E9": "D-Link", - "00:16:20": "Sony", - "00:16:32": "Samsung", - "00:16:6B": "Samsung", - "00:16:6C": "Samsung", - "00:16:B8": "Sony", - "00:16:DB": "Samsung", - "00:17:9A": "D-Link", - "00:17:C9": "Samsung", - "00:17:D5": "Samsung", - "00:18:13": "Sony", - "00:18:4D": "Netgear", - "00:18:AE": "TVT", - "00:18:AF": "Samsung", - "00:19:5B": "D-Link", - "00:19:63": "Sony", - "00:19:87": "Panasonic", - "00:19:C5": "Sony", - "00:19:E0": "TP-Link", - "00:19:EE": "Arlo", - "00:1A:11": "Nest", - "00:1A:75": "Sony", - "00:1A:80": "Sony", - "00:1A:8A": "Samsung", - "00:1B:11": "D-Link", - "00:1B:2F": "Netgear", - "00:1B:59": "Sony", - "00:1B:98": "Samsung", - "00:1B:D3": "Panasonic", - "00:1B:D8": "FLIR", - "00:1C:43": "Samsung", - "00:1C:A4": "Sony", - "00:1C:B8": "Ganz", - "00:1C:F0": "D-Link", - "00:1D:0D": "Sony", - "00:1D:0F": "TP-Link", - "00:1D:25": "Samsung", - "00:1D:28": "Sony", - "00:1D:BA": "Sony", - "00:1D:F6": "Samsung", - "00:1E:1E": "Honeywell", - "00:1E:2A": "Netgear", - "00:1E:45": "Sony", - "00:1E:58": "D-Link", - "00:1E:7D": "Samsung", - "00:1E:DC": "Sony", - "00:1E:E1": "Samsung", - "00:1E:E2": "Samsung", - "00:1F:33": "Netgear", - "00:1F:54": "Lorex", - "00:1F:55": "Honeywell", - "00:1F:A7": "Sony", - "00:1F:CC": "Samsung", - "00:1F:CD": "Samsung", - "00:1F:E4": "Sony", - "00:20:04": "Honeywell", - "00:20:3D": "Honeywell", - "00:20:D9": "Panasonic", - "00:21:27": "TP-Link", - "00:21:4C": "Samsung", - "00:21:91": "D-Link", - "00:21:9E": "Sony", - "00:21:D1": "Samsung", - "00:21:D2": "Samsung", - "00:22:3F": "Netgear", - "00:22:6A": "Honeywell", - "00:22:98": "Sony", - "00:22:A6": "Sony", - "00:22:B0": "D-Link", - "00:23:39": "Samsung", - "00:23:3A": "Samsung", - "00:23:45": "Sony", - "00:23:63": "Sannce", - "00:23:99": "Samsung", - "00:23:B6": "Honeywell", - "00:23:C2": "Samsung", - "00:23:CD": "TP-Link", - "00:23:D6": "Samsung", - "00:23:D7": "Samsung", - "00:23:F1": "Sony", - "00:24:01": "D-Link", - "00:24:54": "Samsung", - "00:24:8D": "Sony", - "00:24:90": "Samsung", - "00:24:91": "Samsung", - "00:24:B2": "Netgear", - "00:24:BE": "Sony", - "00:24:E9": "Samsung", - "00:24:EF": "Sony", - "00:25:38": "Samsung", - "00:25:66": "Samsung", - "00:25:67": "Samsung", - "00:25:86": "TP-Link", - "00:25:E7": "Sony", - "00:26:5A": "D-Link", - "00:26:5D": "Samsung", - "00:26:5F": "Samsung", - "00:26:F2": "Netgear", - "00:27:19": "TP-Link", - "00:27:22": "Ubiquiti", - "00:2A:10": "Zmodo", - "00:2B:70": "Samsung", - "00:30:AF": "Honeywell", - "00:31:92": "TP-Link", - "00:40:48": "Amcrest", - "00:40:7F": "FLIR", - "00:40:84": "Honeywell", - "00:40:8C": "Axis", - "00:50:40": "Panasonic", - "00:50:A1": "Arlo", - "00:50:BA": "D-Link", - "00:5F:67": "TP-Link", - "00:60:34": "Bosch", - "00:62:6E": "Reolink", - "00:65:1E": "Amcrest", - "00:6F:64": "Samsung", - "00:71:47": "Ring", - "00:72:04": "Samsung", - "00:73:E0": "Samsung", - "00:7C:2D": "Samsung", - "00:7D:3B": "Samsung", - "00:80:A7": "Honeywell", - "00:80:C8": "D-Link", - "00:80:F0": "Panasonic", - "00:86:21": "Ring", - "00:87:01": "Samsung", - "00:8E:F2": "Netgear", - "00:90:30": "Honeywell", - "00:90:32": "Pelco", - "00:9E:C8": "Xiaomi", - "00:AD:24": "D-Link", - "00:B4:63": "Ring", - "00:B5:D0": "Samsung", - "00:BB:3A": "Ring", - "00:BC:99": "Hikvision", - "00:BF:61": "Samsung", - "00:C0:8F": "Panasonic", - "00:C3:0A": "Xiaomi", - "00:C3:F4": "Samsung", - "00:D0:60": "Panasonic", - "00:D9:D1": "Sony", - "00:E0:64": "Samsung", - "00:E0:F2": "Arlo", - "00:E3:B2": "Samsung", - "00:E4:21": "Sony", - "00:EB:2D": "Sony", - "00:EC:0A": "Xiaomi", - "00:F3:61": "Ring", - "00:F4:6F": "Samsung", - "00:F6:20": "Nest", - "00:FA:21": "Samsung", - "00:FC:8B": "Ring", - "04:00:6E": "Nest", - "04:03:12": "Hikvision", - "04:04:B8": "Panasonic", - "04:0F:66": "TP-Link", - "04:10:6B": "Xiaomi", - "04:18:0F": "Samsung", - "04:18:D6": "Ubiquiti", - "04:1B:BA": "Samsung", - "04:20:9A": "Panasonic", - "04:29:2E": "Samsung", - "04:5C:06": "Zmodo", - "04:5D:4B": "Sony", - "04:67:61": "Xiaomi", - "04:7A:0B": "Xiaomi", - "04:A1:51": "Netgear", - "04:AE:47": "Xiaomi", - "04:B1:67": "Xiaomi", - "04:B1:A1": "Samsung", - "04:B4:29": "Samsung", - "04:B9:E3": "Samsung", - "04:BA:8D": "Samsung", - "04:BA:D6": "D-Link", - "04:BD:BF": "Samsung", - "04:C8:07": "Xiaomi", - "04:C8:45": "TP-Link", - "04:C8:B0": "Nest", - "04:CB:01": "Samsung", - "04:CF:8C": "Xiaomi", - "04:D1:3A": "Xiaomi", - "04:E4:B6": "Samsung", - "04:E5:98": "Xiaomi", - "04:EE:CD": "Hikvision", - "04:F7:78": "Sony", - "04:F9:F8": "TP-Link", - "04:FE:31": "Samsung", - "08:00:23": "Panasonic", - "08:00:46": "Sony", - "08:02:3C": "Samsung", - "08:02:8E": "Netgear", - "08:08:C2": "Samsung", - "08:10:93": "Samsung", - "08:12:A5": "Ring", - "08:15:2F": "Samsung", - "08:1C:6E": "Xiaomi", - "08:1F:71": "TP-Link", - "08:21:EF": "Samsung", - "08:25:25": "Xiaomi", - "08:36:C9": "Netgear", - "08:37:3D": "Samsung", - "08:3B:C1": "Hikvision", - "08:3D:88": "Samsung", - "08:4B:44": "Bosch", - "08:54:11": "Hikvision", - "08:57:00": "TP-Link", - "08:57:FB": "Ring", - "08:5A:11": "D-Link", - "08:6A:E5": "Ring", - "08:78:08": "Samsung", - "08:7C:39": "Ring", - "08:84:9D": "Ring", - "08:8B:C8": "Nest", - "08:8C:2C": "Samsung", - "08:91:15": "Ring", - "08:91:A3": "Ring", - "08:9E:08": "Nest", - "08:A1:89": "Hikvision", - "08:A5:DF": "Samsung", - "08:A6:BC": "Ring", - "08:AE:D6": "Samsung", - "08:B3:39": "Xiaomi", - "08:B4:B1": "Nest", - "08:BD:43": "Netgear", - "08:BF:A0": "Samsung", - "08:C2:24": "Ring", - "08:CC:81": "Hikvision", - "08:D4:2B": "Samsung", - "08:EC:A9": "Samsung", - "08:ED:ED": "Dahua", - "08:EE:8B": "Samsung", - "08:FC:88": "Samsung", - "08:FD:0E": "Samsung", - "0C:02:BD": "Samsung", - "0C:07:DF": "Xiaomi", - "0C:0E:76": "D-Link", - "0C:14:20": "Samsung", - "0C:1D:AF": "Xiaomi", - "0C:23:69": "Honeywell", - "0C:2F:B0": "Samsung", - "0C:32:3A": "Samsung", - "0C:43:F9": "Ring", - "0C:47:C9": "Ring", - "0C:4B:54": "TP-Link", - "0C:65:9A": "Panasonic", - "0C:70:43": "Sony", - "0C:71:5D": "Samsung", - "0C:72:2C": "TP-Link", - "0C:75:D2": "Hikvision", - "0C:80:63": "TP-Link", - "0C:82:68": "TP-Link", - "0C:89:10": "Samsung", - "0C:8D:CA": "Samsung", - "0C:98:38": "Xiaomi", - "0C:A8:A7": "Samsung", - "0C:B3:19": "Samsung", - "0C:B6:D2": "D-Link", - "0C:C4:13": "Nest", - "0C:C6:FD": "Xiaomi", - "0C:DC:91": "Ring", - "0C:DF:A4": "Samsung", - "0C:E0:DC": "Samsung", - "0C:EA:14": "Ubiquiti", - "0C:ED:C8": "Xiaomi", - "0C:EE:99": "Ring", - "0C:EF:15": "TP-Link", - "0C:F3:46": "Xiaomi", - "0C:FE:45": "Sony", - "10:07:B6": "Samsung", - "10:09:F9": "Ring", - "10:0C:6B": "Netgear", - "10:0D:7F": "Netgear", - "10:12:FB": "Hikvision", - "10:1D:C0": "Samsung", - "10:27:F5": "TP-Link", - "10:29:AB": "Samsung", - "10:2A:B3": "Xiaomi", - "10:2B:41": "Samsung", - "10:30:47": "Samsung", - "10:39:17": "Samsung", - "10:3B:59": "Samsung", - "10:3F:44": "Xiaomi", - "10:4F:A8": "Sony", - "10:5A:95": "TP-Link", - "10:62:EB": "D-Link", - "10:66:50": "Bosch", - "10:77:B1": "Samsung", - "10:89:FB": "Samsung", - "10:8E:E0": "Samsung", - "10:92:66": "Samsung", - "10:96:93": "Ring", - "10:AB:C9": "Samsung", - "10:AE:60": "Ring", - "10:BD:43": "Bosch", - "10:BE:F5": "D-Link", - "10:BF:67": "Ring", - "10:C1:97": "Xiaomi", - "10:CE:02": "Ring", - "10:D3:8A": "Samsung", - "10:D5:42": "Samsung", - "10:D9:A2": "Nest", - "10:DA:43": "Netgear", - "10:E4:C2": "Samsung", - "10:EC:81": "Samsung", - "10:FE:ED": "TP-Link", - "14:01:52": "Samsung", - "14:07:08": "CP Plus", - "14:0A:C5": "Ring", - "14:0B:9E": "Samsung", - "14:1F:78": "Samsung", - "14:22:3B": "Nest", - "14:32:D1": "Samsung", - "14:3F:A6": "Sony", - "14:41:46": "Honeywell", - "14:49:D4": "Xiaomi", - "14:56:8E": "Samsung", - "14:59:C0": "Netgear", - "14:75:90": "TP-Link", - "14:86:92": "TP-Link", - "14:89:FD": "Samsung", - "14:90:7A": "Xiaomi", - "14:91:38": "Ring", - "14:96:E5": "Samsung", - "14:99:3E": "Xiaomi", - "14:9F:3C": "Samsung", - "14:A3:64": "Samsung", - "14:A7:8B": "Dahua", - "14:B4:84": "Samsung", - "14:BB:6E": "Samsung", - "14:C1:4E": "Nest", - "14:CC:20": "TP-Link", - "14:CF:92": "TP-Link", - "14:D6:4D": "D-Link", - "14:D8:64": "TP-Link", - "14:D8:81": "Xiaomi", - "14:E0:1D": "Samsung", - "14:E6:E4": "TP-Link", - "14:EB:B6": "TP-Link", - "14:F4:2A": "Samsung", - "14:F6:5A": "Xiaomi", - "18:00:2D": "Sony", - "18:01:F1": "Xiaomi", - "18:0B:1B": "Ring", - "18:0F:76": "D-Link", - "18:16:C9": "Samsung", - "18:19:D6": "Samsung", - "18:1E:B0": "Samsung", - "18:21:95": "Samsung", - "18:22:7E": "Samsung", - "18:26:54": "Samsung", - "18:26:66": "Samsung", - "18:3A:2D": "Samsung", - "18:3F:47": "Samsung", - "18:46:17": "Samsung", - "18:48:BE": "Ring", - "18:4E:16": "Samsung", - "18:4E:CB": "Samsung", - "18:54:CF": "Samsung", - "18:59:36": "Xiaomi", - "18:5B:B3": "Samsung", - "18:67:B0": "Samsung", - "18:68:CB": "Hikvision", - "18:69:45": "TP-Link", - "18:69:D4": "Samsung", - "18:74:2E": "Ring", - "18:7F:88": "Ring", - "18:80:25": "Hikvision", - "18:83:31": "Samsung", - "18:87:40": "Xiaomi", - "18:89:5B": "Samsung", - "18:A6:F7": "TP-Link", - "18:AB:1D": "Samsung", - "18:B4:30": "Nest", - "18:BF:B3": "Samsung", - "18:C2:3C": "Aqara", - "18:CE:94": "Samsung", - "18:D6:C7": "TP-Link", - "18:E2:C2": "Samsung", - "18:E8:29": "Ubiquiti", - "18:F0:E4": "Xiaomi", - "18:F2:2C": "TP-Link", - "1C:0B:8B": "Ubiquiti", - "1C:12:B0": "Ring", - "1C:23:2C": "Samsung", - "1C:2A:B0": "Xiaomi", - "1C:3A:DE": "Samsung", - "1C:3B:F3": "TP-Link", - "1C:44:19": "TP-Link", - "1C:4D:66": "Ring", - "1C:53:F9": "Nest", - "1C:5A:3E": "Samsung", - "1C:5F:2B": "D-Link", - "1C:61:B4": "TP-Link", - "1C:62:B8": "Samsung", - "1C:66:AA": "Samsung", - "1C:6A:1B": "Ubiquiti", - "1C:76:F2": "Samsung", - "1C:7B:21": "Sony", - "1C:7E:E5": "D-Link", - "1C:86:9A": "Samsung", - "1C:8B:EF": "Xiaomi", - "1C:93:C4": "Ring", - "1C:AF:05": "Samsung", - "1C:AF:4A": "Samsung", - "1C:AF:F7": "D-Link", - "1C:BD:B9": "D-Link", - "1C:C3:16": "Milesight", - "1C:CC:D6": "Xiaomi", - "1C:E5:7F": "Samsung", - "1C:E6:1D": "Samsung", - "1C:EA:AC": "Xiaomi", - "1C:F2:9A": "Nest", - "1C:F8:D0": "Samsung", - "1C:FA:68": "TP-Link", - "1C:FE:2B": "Ring", - "20:0C:C8": "Netgear", - "20:0E:0F": "Panasonic", - "20:10:B1": "Ring", - "20:13:E0": "Samsung", - "20:15:DE": "Samsung", - "20:1F:3B": "Nest", - "20:23:51": "TP-Link", - "20:25:CC": "Xiaomi", - "20:2D:07": "Samsung", - "20:32:6C": "Samsung", - "20:33:89": "Nest", - "20:34:62": "Xiaomi", - "20:34:FB": "Xiaomi", - "20:36:26": "TP-Link", - "20:3B:34": "Xiaomi", - "20:3B:67": "Samsung", - "20:47:DA": "Xiaomi", - "20:4E:7F": "Netgear", - "20:54:76": "Sony", - "20:55:31": "Samsung", - "20:5E:F7": "Samsung", - "20:6B:E7": "TP-Link", - "20:6E:9C": "Samsung", - "20:72:A9": "Xiaomi", - "20:82:C0": "Xiaomi", - "20:99:52": "Xiaomi", - "20:A1:71": "Ring", - "20:A6:0C": "Xiaomi", - "20:BE:B8": "Ring", - "20:C6:EB": "Panasonic", - "20:D3:90": "Samsung", - "20:D5:BF": "Samsung", - "20:DB:AB": "Samsung", - "20:DC:E6": "TP-Link", - "20:DE:88": "IC Realtime", - "20:DF:B9": "Nest", - "20:E1:5D": "TP-Link", - "20:E5:2A": "Netgear", - "20:E5:9B": "Panasonic", - "20:F0:94": "Nest", - "20:F4:78": "Xiaomi", - "20:FE:00": "Ring", - "24:05:88": "Nest", - "24:09:35": "Samsung", - "24:0A:3F": "Samsung", - "24:0F:9B": "Hikvision", - "24:11:45": "Xiaomi", - "24:11:53": "Samsung", - "24:21:AB": "Sony", - "24:24:B7": "Samsung", - "24:28:FD": "Hikvision", - "24:29:34": "Nest", - "24:2B:D6": "Ring", - "24:2F:D0": "TP-Link", - "24:32:AE": "Hikvision", - "24:48:45": "Hikvision", - "24:4B:03": "Samsung", - "24:4B:81": "Samsung", - "24:4C:E3": "Ring", - "24:52:6A": "Dahua", - "24:5A:4C": "Ubiquiti", - "24:5A:5F": "TP-Link", - "24:5A:B5": "Samsung", - "24:60:B3": "Samsung", - "24:64:77": "Xiaomi", - "24:68:B0": "Samsung", - "24:69:68": "TP-Link", - "24:78:23": "Panasonic", - "24:92:0E": "Samsung", - "24:95:2F": "Nest", - "24:A4:3C": "Ubiquiti", - "24:A4:52": "Samsung", - "24:A8:7D": "Panasonic", - "24:B1:05": "Hikvision", - "24:C6:13": "Samsung", - "24:C6:96": "Samsung", - "24:CE:33": "Ring", - "24:CF:24": "Xiaomi", - "24:D3:37": "Xiaomi", - "24:DB:ED": "Samsung", - "24:E1:24": "Milesight", - "24:E5:0F": "Nest", - "24:F0:D3": "Samsung", - "24:F4:0A": "Samsung", - "24:F5:AA": "Samsung", - "24:FC:E5": "Samsung", - "28:02:D8": "Samsung", - "28:07:08": "Samsung", - "28:0D:FC": "Sony", - "28:10:7B": "D-Link", - "28:16:7F": "Xiaomi", - "28:18:FD": "CP Plus", - "28:24:C9": "Ring", - "28:27:BF": "Samsung", - "28:2C:B2": "TP-Link", - "28:39:5E": "Samsung", - "28:3B:82": "D-Link", - "28:3D:C2": "Samsung", - "28:3F:69": "Sony", - "28:40:DD": "Sony", - "28:57:BE": "Hikvision", - "28:59:23": "Xiaomi", - "28:6C:07": "Xiaomi", - "28:6D:97": "Aqara", - "28:70:4E": "Ubiquiti", - "28:73:F6": "Ring", - "28:80:88": "Netgear", - "28:83:35": "Samsung", - "28:87:BA": "TP-Link", - "28:94:01": "Netgear", - "28:98:7B": "Samsung", - "28:9F:04": "Samsung", - "28:A1:86": "Blink", - "28:AF:42": "Samsung", - "28:BA:B5": "Samsung", - "28:BD:89": "Nest", - "28:C6:8E": "Netgear", - "28:CC:01": "Samsung", - "28:D1:27": "Xiaomi", - "28:DE:1C": "Samsung", - "28:E3:1F": "Xiaomi", - "28:E6:A9": "Samsung", - "28:EE:52": "TP-Link", - "28:EF:01": "Ring", - "2C:0B:97": "Xiaomi", - "2C:0D:CF": "Xiaomi", - "2C:15:BF": "Samsung", - "2C:19:5C": "Xiaomi", - "2C:30:33": "Netgear", - "2C:40:53": "Samsung", - "2C:44:01": "Samsung", - "2C:71:FF": "Ring", - "2C:79:BE": "TP-Link", - "2C:97:ED": "Sony", - "2C:99:75": "Samsung", - "2C:9E:00": "Sony", - "2C:A5:9C": "Hikvision", - "2C:AA:8E": "Wyze", - "2C:AE:2B": "Samsung", - "2C:B0:5D": "Netgear", - "2C:BA:BA": "Samsung", - "2C:CA:75": "Bosch", - "2C:CC:44": "Sony", - "2C:D0:66": "Xiaomi", - "2C:DA:46": "Samsung", - "2C:FE:4F": "Xiaomi", - "30:17:C8": "Sony", - "30:19:66": "Samsung", - "30:39:26": "Sony", - "30:46:9A": "Netgear", - "30:4C:7E": "Panasonic", - "30:4D:1F": "Ring", - "30:50:CE": "Xiaomi", - "30:68:93": "TP-Link", - "30:6A:85": "Samsung", - "30:74:67": "Samsung", - "30:75:12": "Sony", - "30:96:FB": "Samsung", - "30:A8:DB": "Sony", - "30:B4:9E": "TP-Link", - "30:B5:C2": "TP-Link", - "30:C7:AE": "Samsung", - "30:C9:CC": "Samsung", - "30:CB:F8": "Samsung", - "30:CD:A7": "Samsung", - "30:D5:87": "Samsung", - "30:D6:C9": "Samsung", - "30:DD:AA": "Dahua", - "30:DE:4B": "TP-Link", - "30:E0:44": "Nest", - "30:F9:ED": "Sony", - "30:FC:68": "TP-Link", - "30:FD:38": "Nest", - "34:02:9C": "D-Link", - "34:08:04": "D-Link", - "34:09:62": "Hikvision", - "34:0A:33": "D-Link", - "34:14:5F": "Samsung", - "34:1C:F0": "Xiaomi", - "34:25:BE": "Ring", - "34:2D:0D": "Samsung", - "34:31:11": "Samsung", - "34:31:7F": "Panasonic", - "34:32:E6": "Panasonic", - "34:39:16": "Nest", - "34:3E:A4": "Ring", - "34:60:F9": "TP-Link", - "34:80:B3": "Xiaomi", - "34:82:C5": "Samsung", - "34:8A:7B": "Samsung", - "34:96:72": "TP-Link", - "34:98:B5": "Netgear", - "34:AA:8B": "Samsung", - "34:AF:B3": "Ring", - "34:B9:8D": "Xiaomi", - "34:BE:00": "Samsung", - "34:C3:AC": "Samsung", - "34:C7:E9": "Nest", - "34:CE:00": "Xiaomi", - "34:D2:70": "Ring", - "34:E3:FB": "Samsung", - "34:E8:94": "TP-Link", - "34:F0:15": "Xiaomi", - "34:F0:43": "Samsung", - "34:F6:D2": "Panasonic", - "34:F7:16": "TP-Link", - "34:FA:1C": "Xiaomi", - "38:01:95": "Samsung", - "38:0A:94": "Samsung", - "38:0B:40": "Samsung", - "38:16:D1": "Samsung", - "38:18:4C": "Sony", - "38:2D:D1": "Samsung", - "38:2D:E8": "Samsung", - "38:4A:80": "Samsung", - "38:68:A4": "Samsung", - "38:6A:77": "Samsung", - "38:78:62": "Sony", - "38:83:45": "TP-Link", - "38:86:F7": "Nest", - "38:8A:06": "Samsung", - "38:8B:59": "Nest", - "38:8C:EF": "Samsung", - "38:8F:30": "Samsung", - "38:94:96": "Samsung", - "38:94:ED": "Netgear", - "38:9A:F6": "Samsung", - "38:A4:ED": "Xiaomi", - "38:AF:29": "Dahua", - "38:C6:BD": "Xiaomi", - "38:D4:0B": "Samsung", - "38:E6:0A": "Xiaomi", - "38:EC:E4": "Samsung", - "38:F7:3D": "Ring", - "3C:01:EF": "Sony", - "3C:05:18": "Samsung", - "3C:06:A7": "TP-Link", - "3C:07:71": "Sony", - "3C:0A:7A": "Samsung", - "3C:13:5A": "Xiaomi", - "3C:19:5E": "Samsung", - "3C:1B:F8": "Hikvision", - "3C:1E:04": "D-Link", - "3C:20:F6": "Samsung", - "3C:28:6D": "Nest", - "3C:2C:A6": "Xiaomi", - "3C:31:74": "Nest", - "3C:31:8A": "Samsung", - "3C:33:32": "D-Link", - "3C:37:86": "Netgear", - "3C:38:24": "Xiaomi", - "3C:38:F4": "Sony", - "3C:46:D8": "TP-Link", - "3C:52:A1": "TP-Link", - "3C:57:6C": "Samsung", - "3C:5A:37": "Samsung", - "3C:5A:B4": "Nest", - "3C:5C:C4": "Ring", - "3C:62:00": "Samsung", - "3C:64:CF": "TP-Link", - "3C:6A:48": "TP-Link", - "3C:6A:D2": "TP-Link", - "3C:6F:EA": "Panasonic", - "3C:78:95": "TP-Link", - "3C:7F:6E": "Xiaomi", - "3C:84:6A": "TP-Link", - "3C:8B:FE": "Samsung", - "3C:8D:20": "Nest", - "3C:A0:70": "Blink", - "3C:A1:0D": "Samsung", - "3C:AF:B7": "Xiaomi", - "3C:BB:FD": "Samsung", - "3C:BD:3E": "Xiaomi", - "3C:CD:57": "Xiaomi", - "3C:DA:6D": "Tiandy", - "3C:DC:BC": "Samsung", - "3C:E3:6B": "Dahua", - "3C:E4:41": "Ring", - "3C:EF:8C": "Dahua", - "3C:F7:A4": "Samsung", - "40:08:77": "Xiaomi", - "40:11:C3": "Samsung", - "40:16:3B": "Samsung", - "40:16:9F": "TP-Link", - "40:2B:A1": "Sony", - "40:31:3C": "Xiaomi", - "40:35:E6": "Samsung", - "40:3F:8C": "TP-Link", - "40:40:A7": "Sony", - "40:5D:82": "Netgear", - "40:5E:F6": "Samsung", - "40:7A:A4": "Dahua", - "40:86:CB": "D-Link", - "40:89:C6": "Ring", - "40:95:95": "TP-Link", - "40:9B:CD": "D-Link", - "40:A2:DB": "Ring", - "40:A4:4A": "Nest", - "40:A9:CF": "Ring", - "40:AC:BF": "Hikvision", - "40:AE:30": "TP-Link", - "40:B4:CD": "Ring", - "40:B8:37": "Sony", - "40:D3:AE": "Samsung", - "40:DE:24": "Samsung", - "40:ED:00": "TP-Link", - "40:F6:BC": "Ring", - "44:00:49": "Ring", - "44:07:0B": "Nest", - "44:0C:EE": "Bosch", - "44:10:30": "Nest", - "44:16:FA": "Samsung", - "44:19:B6": "Hikvision", - "44:23:7C": "Xiaomi", - "44:36:59": "Bosch", - "44:3D:54": "Ring", - "44:42:01": "Ring", - "44:47:CC": "Hikvision", - "44:4A:37": "Xiaomi", - "44:4E:1A": "Samsung", - "44:5C:E9": "Samsung", - "44:65:0D": "Ring", - "44:66:90": "TP-Link", - "44:6D:6C": "Samsung", - "44:6D:7F": "Ring", - "44:71:47": "Xiaomi", - "44:74:6C": "Sony", - "44:78:3E": "Samsung", - "44:8F:17": "Samsung", - "44:94:FC": "Netgear", - "44:A5:6E": "Netgear", - "44:A6:42": "Hikvision", - "44:B3:2D": "TP-Link", - "44:B4:23": "Hanwha", - "44:B4:B2": "Ring", - "44:BB:3B": "Nest", - "44:BD:C8": "Xiaomi", - "44:C6:3C": "Samsung", - "44:CB:AD": "Xiaomi", - "44:D4:E0": "Sony", - "44:D5:CC": "Ring", - "44:D7:7E": "Bosch", - "44:D9:E7": "Ubiquiti", - "44:DF:65": "Xiaomi", - "44:EA:30": "Samsung", - "44:F4:59": "Samsung", - "44:F7:70": "Xiaomi", - "48:0E:EC": "TP-Link", - "48:13:7E": "Samsung", - "48:22:54": "TP-Link", - "48:27:EA": "Samsung", - "48:2C:A0": "Xiaomi", - "48:31:33": "Bosch", - "48:43:DD": "Ring", - "48:44:F7": "Samsung", - "48:49:C7": "Samsung", - "48:51:69": "Samsung", - "48:5F:08": "TP-Link", - "48:5F:2D": "Ring", - "48:61:EE": "Samsung", - "48:62:64": "Arlo", - "48:78:5B": "Hikvision", - "48:78:5E": "Ring", - "48:79:4D": "Samsung", - "48:7D:2E": "TP-Link", - "48:87:59": "Xiaomi", - "48:9D:D1": "Samsung", - "48:B4:23": "Ring", - "48:BC:E1": "Samsung", - "48:C3:81": "TP-Link", - "48:C7:96": "Samsung", - "48:D6:D5": "Nest", - "48:EA:63": "Uniview", - "48:EE:0C": "D-Link", - "48:EF:1C": "Samsung", - "48:FD:A3": "Xiaomi", - "4C:02:20": "Xiaomi", - "4C:10:D5": "TP-Link", - "4C:11:BF": "Dahua", - "4C:17:44": "Ring", - "4C:1F:86": "Hikvision", - "4C:21:8C": "Panasonic", - "4C:21:D0": "Sony", - "4C:2E:5E": "Samsung", - "4C:36:4E": "Panasonic", - "4C:39:46": "Samsung", - "4C:3C:16": "Samsung", - "4C:49:E3": "Xiaomi", - "4C:53:FD": "Ring", - "4C:55:B2": "Xiaomi", - "4C:57:39": "Samsung", - "4C:60:AD": "Ring", - "4C:60:DE": "Netgear", - "4C:62:DF": "Hikvision", - "4C:63:71": "Xiaomi", - "4C:66:A6": "Samsung", - "4C:8E:19": "Xiaomi", - "4C:99:E8": "Dahua", - "4C:A5:6D": "Samsung", - "4C:BC:A5": "Samsung", - "4C:BD:8F": "Hikvision", - "4C:C6:4C": "Xiaomi", - "4C:C9:5E": "Samsung", - "4C:DD:31": "Samsung", - "4C:E0:DB": "Xiaomi", - "4C:E2:0F": "Xiaomi", - "4C:EB:B0": "Samsung", - "4C:EF:C0": "Ring", - "4C:F2:02": "Xiaomi", - "4C:F5:DC": "Hikvision", - "50:01:BB": "Samsung", - "50:07:C3": "Ring", - "50:32:75": "Samsung", - "50:3D:A1": "Samsung", - "50:3D:C6": "Xiaomi", - "50:3D:D1": "TP-Link", - "50:3E:AA": "TP-Link", - "50:49:B0": "Samsung", - "50:4A:6E": "Netgear", - "50:4F:3B": "Xiaomi", - "50:50:A4": "Samsung", - "50:56:BF": "Samsung", - "50:64:2B": "Xiaomi", - "50:6A:03": "Netgear", - "50:77:05": "Samsung", - "50:85:69": "Samsung", - "50:88:11": "Xiaomi", - "50:8E:49": "Xiaomi", - "50:8F:4C": "Xiaomi", - "50:91:E3": "TP-Link", - "50:92:6A": "Xiaomi", - "50:92:B9": "Samsung", - "50:98:39": "Xiaomi", - "50:99:5A": "Ring", - "50:9E:A7": "Samsung", - "50:A0:09": "Xiaomi", - "50:A4:C8": "Samsung", - "50:B0:3B": "Sony", - "50:B3:63": "Ring", - "50:B7:C3": "Samsung", - "50:BD:5F": "TP-Link", - "50:C7:BF": "TP-Link", - "50:C8:E5": "Samsung", - "50:D2:F5": "Xiaomi", - "50:D4:5C": "Ring", - "50:D4:F7": "TP-Link", - "50:DA:D6": "Xiaomi", - "50:DC:E7": "Ring", - "50:E5:38": "Hikvision", - "50:EC:50": "Xiaomi", - "50:F0:D3": "Samsung", - "50:F5:20": "Samsung", - "50:F5:DA": "Ring", - "50:FA:84": "TP-Link", - "50:FC:9F": "Samsung", - "50:FE:39": "Xiaomi", - "54:07:7D": "Netgear", - "54:10:4F": "Samsung", - "54:21:9D": "Samsung", - "54:26:3D": "Sony", - "54:2B:1C": "Ring", - "54:2B:57": "Night Owl", - "54:3A:D6": "Samsung", - "54:40:AD": "Samsung", - "54:42:49": "Sony", - "54:44:A3": "Samsung", - "54:48:E6": "Xiaomi", - "54:53:ED": "Sony", - "54:5B:86": "Panasonic", - "54:60:09": "Nest", - "54:67:49": "Nest", - "54:75:95": "TP-Link", - "54:8C:81": "Hikvision", - "54:92:BE": "Samsung", - "54:9B:12": "Samsung", - "54:A7:03": "TP-Link", - "54:AF:97": "TP-Link", - "54:B8:02": "Samsung", - "54:B8:0A": "D-Link", - "54:BD:79": "Samsung", - "54:C4:15": "Hikvision", - "54:C8:0F": "TP-Link", - "54:CD:10": "Panasonic", - "54:D1:7D": "Samsung", - "54:DD:4F": "Samsung", - "54:E0:19": "Ring", - "54:E6:FC": "TP-Link", - "54:E6:FD": "Sony", - "54:EF:44": "Aqara", - "54:F2:01": "Samsung", - "54:FA:3E": "Samsung", - "54:FC:F0": "Samsung", - "58:03:FB": "Hikvision", - "58:04:4F": "TP-Link", - "58:09:87": "Ring", - "58:17:0C": "Sony", - "58:18:62": "Sony", - "58:20:59": "Xiaomi", - "58:20:71": "Samsung", - "58:24:29": "Nest", - "58:41:20": "TP-Link", - "58:44:98": "Xiaomi", - "58:48:22": "Sony", - "58:50:ED": "Hikvision", - "58:5B:69": "TVT", - "58:79:E0": "Samsung", - "58:9A:3E": "Ring", - "58:A6:39": "Samsung", - "58:A8:E8": "Ring", - "58:B1:0F": "Samsung", - "58:B6:23": "Xiaomi", - "58:C3:8B": "Samsung", - "58:C5:CB": "Samsung", - "58:CB:52": "Nest", - "58:D5:6E": "D-Link", - "58:D6:1F": "Ubiquiti", - "58:D8:12": "TP-Link", - "58:E4:88": "Ring", - "58:EA:1F": "Xiaomi", - "58:FC:C8": "Honeywell", - "5C:02:14": "Xiaomi", - "5C:10:C5": "Samsung", - "5C:2E:59": "Samsung", - "5C:33:7B": "Nest", - "5C:34:5B": "Hikvision", - "5C:35:48": "CP Plus", - "5C:3C:27": "Samsung", - "5C:40:71": "Xiaomi", - "5C:41:5A": "Ring", - "5C:47:5E": "Ring", - "5C:49:7D": "Samsung", - "5C:51:36": "Samsung", - "5C:51:81": "Samsung", - "5C:5E:0A": "Samsung", - "5C:62:8B": "TP-Link", - "5C:63:BF": "TP-Link", - "5C:84:3C": "Sony", - "5C:86:5C": "Samsung", - "5C:89:9A": "TP-Link", - "5C:8B:6B": "Ring", - "5C:96:66": "Sony", - "5C:99:60": "Samsung", - "5C:A6:4F": "TP-Link", - "5C:A6:E6": "TP-Link", - "5C:AC:3D": "Samsung", - "5C:B5:24": "Sony", - "5C:C1:D7": "Samsung", - "5C:C9:D3": "Ring", - "5C:CB:99": "Samsung", - "5C:D0:6E": "Xiaomi", - "5C:D3:3D": "Samsung", - "5C:D9:98": "D-Link", - "5C:DC:49": "Samsung", - "5C:E5:0C": "Xiaomi", - "5C:E8:EB": "Samsung", - "5C:E9:31": "TP-Link", - "5C:ED:F4": "Samsung", - "5C:F2:07": "Speco", - "5C:F5:1A": "Dahua", - "5C:F6:DC": "Samsung", - "60:22:32": "Ubiquiti", - "60:29:2B": "TP-Link", - "60:32:B1": "TP-Link", - "60:3A:7C": "TP-Link", - "60:3A:AF": "Samsung", - "60:63:4C": "D-Link", - "60:68:4E": "Samsung", - "60:6B:BD": "Samsung", - "60:6E:E8": "Xiaomi", - "60:70:6C": "Nest", - "60:77:E2": "Samsung", - "60:7F:CB": "Samsung", - "60:83:E7": "TP-Link", - "60:8E:08": "Samsung", - "60:8F:5C": "Samsung", - "60:95:78": "Samsung", - "60:A1:0A": "Samsung", - "60:A3:E3": "TP-Link", - "60:A4:B7": "TP-Link", - "60:A4:D0": "Samsung", - "60:AB:67": "Xiaomi", - "60:AF:6D": "Samsung", - "60:B4:A2": "Samsung", - "60:B7:6E": "Nest", - "60:C5:AD": "Samsung", - "60:C7:27": "Ring", - "60:D0:A9": "Samsung", - "60:E3:27": "TP-Link", - "60:FF:12": "Samsung", - "64:03:7F": "Samsung", - "64:07:F6": "Samsung", - "64:09:80": "Xiaomi", - "64:16:66": "Nest", - "64:17:CD": "Samsung", - "64:1B:2F": "Samsung", - "64:1C:AE": "Samsung", - "64:1C:B0": "Samsung", - "64:29:43": "D-Link", - "64:56:01": "TP-Link", - "64:5D:F4": "Samsung", - "64:63:06": "Xiaomi", - "64:64:4A": "Xiaomi", - "64:66:B3": "TP-Link", - "64:66:D8": "Samsung", - "64:6C:B2": "Samsung", - "64:6E:97": "TP-Link", - "64:70:02": "TP-Link", - "64:77:91": "Samsung", - "64:7B:CE": "Samsung", - "64:89:F1": "Samsung", - "64:90:C1": "Xiaomi", - "64:9A:63": "Ring", - "64:9D:38": "Nest", - "64:9E:31": "Xiaomi", - "64:A2:00": "Xiaomi", - "64:AC:E0": "Samsung", - "64:B3:10": "Samsung", - "64:B4:73": "Xiaomi", - "64:B5:F2": "Samsung", - "64:B8:53": "Samsung", - "64:CC:2E": "Xiaomi", - "64:CD:C2": "Ring", - "64:D0:D6": "Samsung", - "64:DA:A0": "Bosch", - "64:DB:8B": "Hikvision", - "64:DD:E9": "Xiaomi", - "64:E7:D8": "Samsung", - "64:FD:29": "Dahua", - "68:05:71": "Samsung", - "68:13:F3": "Ring", - "68:27:37": "Samsung", - "68:28:6C": "Sony", - "68:37:E9": "Ring", - "68:48:98": "Samsung", - "68:49:B2": "Arlo", - "68:4A:E9": "Samsung", - "68:4D:B6": "Xiaomi", - "68:54:FD": "Ring", - "68:5A:CF": "Samsung", - "68:6D:BC": "Hikvision", - "68:72:51": "Ubiquiti", - "68:72:C3": "Samsung", - "68:76:4F": "Sony", - "68:77:24": "TP-Link", - "68:7D:6B": "Samsung", - "68:7F:F0": "TP-Link", - "68:9A:87": "Ring", - "68:9F:D4": "Ring", - "68:AB:BC": "Xiaomi", - "68:B6:91": "Ring", - "68:B8:BB": "Xiaomi", - "68:BF:C4": "Samsung", - "68:C4:4C": "Xiaomi", - "68:D7:9A": "Ubiquiti", - "68:DB:F5": "Ring", - "68:DD:B7": "TP-Link", - "68:DF:DD": "Xiaomi", - "68:DF:E4": "Samsung", - "68:E7:C2": "Samsung", - "68:EB:AE": "Samsung", - "68:F6:3B": "Ring", - "68:FC:CA": "Samsung", - "68:FF:7B": "TP-Link", - "6C:00:6B": "Samsung", - "6C:0C:9A": "Ring", - "6C:0D:C4": "Xiaomi", - "6C:0E:0D": "Sony", - "6C:19:8F": "D-Link", - "6C:1C:71": "Dahua", - "6C:23:B9": "Sony", - "6C:2F:2C": "Samsung", - "6C:2F:8A": "Samsung", - "6C:48:3F": "Xiaomi", - "6C:4C:BC": "TP-Link", - "6C:55:63": "Samsung", - "6C:55:B1": "Ring", - "6C:56:97": "Ring", - "6C:5A:B0": "TP-Link", - "6C:63:F8": "Ubiquiti", - "6C:70:CB": "Samsung", - "6C:72:20": "D-Link", - "6C:83:36": "Samsung", - "6C:99:9D": "Ring", - "6C:AC:C2": "Samsung", - "6C:B0:CE": "Netgear", - "6C:B1:58": "TP-Link", - "6C:B2:27": "Sony", - "6C:B7:F4": "Samsung", - "6C:CD:D6": "Netgear", - "6C:DD:BC": "Samsung", - "6C:E8:73": "TP-Link", - "6C:F1:7E": "Uniview", - "6C:F3:73": "Samsung", - "6C:F7:84": "Xiaomi", - "70:09:71": "Samsung", - "70:1A:D5": "Avigilon", - "70:1F:3C": "Samsung", - "70:21:7F": "Xiaomi", - "70:26:05": "Sony", - "70:28:8B": "Samsung", - "70:2A:D5": "Samsung", - "70:3A:51": "Xiaomi", - "70:3A:CB": "Nest", - "70:4E:E0": "Samsung", - "70:4F:57": "TP-Link", - "70:58:12": "Panasonic", - "70:5A:AC": "Samsung", - "70:5F:A3": "Xiaomi", - "70:62:B8": "D-Link", - "70:66:2A": "Sony", - "70:70:AA": "Ring", - "70:97:51": "Xiaomi", - "70:9E:29": "Sony", - "70:A7:41": "Ubiquiti", - "70:AD:43": "Blink", - "70:B1:3D": "Samsung", - "70:BB:E9": "Xiaomi", - "70:CE:8C": "Samsung", - "70:F7:4F": "Bosch", - "70:F9:27": "Samsung", - "70:FD:46": "Samsung", - "74:05:A5": "TP-Link", - "74:15:75": "Xiaomi", - "74:19:0A": "Samsung", - "74:1E:B1": "Samsung", - "74:23:44": "Xiaomi", - "74:38:22": "Xiaomi", - "74:39:89": "TP-Link", - "74:3F:C2": "Hikvision", - "74:44:01": "Netgear", - "74:45:8A": "Samsung", - "74:51:BA": "Xiaomi", - "74:58:F3": "Ring", - "74:6D:FA": "Samsung", - "74:74:46": "Nest", - "74:75:48": "Blink", - "74:83:C2": "Ubiquiti", - "74:9E:F5": "Samsung", - "74:A5:7E": "Panasonic", - "74:A7:EA": "Ring", - "74:AB:93": "Blink", - "74:AC:B9": "Ubiquiti", - "74:C2:46": "Ring", - "74:C9:29": "Dahua", - "74:D4:23": "Ring", - "74:D6:37": "Ring", - "74:D7:CA": "Panasonic", - "74:DA:88": "TP-Link", - "74:DA:DA": "D-Link", - "74:E2:0C": "Ring", - "74:EA:3A": "TP-Link", - "74:EB:80": "Samsung", - "74:EC:B2": "Ring", - "74:F2:FA": "Xiaomi", - "74:F4:41": "Samsung", - "74:F6:7A": "Samsung", - "74:F9:2C": "Ubiquiti", - "74:FA:29": "Ubiquiti", - "74:FE:CE": "TP-Link", - "78:00:9E": "Samsung", - "78:02:F8": "Xiaomi", - "78:11:DC": "Xiaomi", - "78:1F:DB": "Samsung", - "78:20:51": "TP-Link", - "78:23:27": "Samsung", - "78:25:AD": "Samsung", - "78:32:1B": "D-Link", - "78:33:C6": "Samsung", - "78:37:16": "Samsung", - "78:40:E4": "Samsung", - "78:44:FD": "TP-Link", - "78:45:58": "Ubiquiti", - "78:46:D4": "Samsung", - "78:47:1D": "Samsung", - "78:52:1A": "Samsung", - "78:53:33": "Xiaomi", - "78:54:2E": "D-Link", - "78:59:5E": "Samsung", - "78:60:5B": "TP-Link", - "78:60:89": "Samsung", - "78:6C:84": "Ring", - "78:84:3C": "Sony", - "78:8A:20": "Ubiquiti", - "78:8C:B5": "TP-Link", - "78:98:E8": "D-Link", - "78:99:87": "Xiaomi", - "78:9E:D0": "Samsung", - "78:A0:3F": "Ring", - "78:A1:06": "TP-Link", - "78:A8:73": "Samsung", - "78:AB:BB": "Samsung", - "78:B6:FE": "Samsung", - "78:BD:BC": "Samsung", - "78:C1:1D": "Samsung", - "78:C3:E9": "Samsung", - "78:C8:81": "Sony", - "78:D2:94": "Netgear", - "78:D8:40": "Xiaomi", - "78:E1:03": "Ring", - "78:F2:38": "Samsung", - "78:F7:BE": "Samsung", - "7C:03:5E": "Xiaomi", - "7C:03:AB": "Xiaomi", - "7C:0A:3F": "Samsung", - "7C:0B:C6": "Samsung", - "7C:1C:68": "Samsung", - "7C:1D:D9": "Xiaomi", - "7C:23:02": "Samsung", - "7C:2A:DB": "Xiaomi", - "7C:2E:BD": "Nest", - "7C:2E:DD": "Samsung", - "7C:38:AD": "Samsung", - "7C:49:EB": "Xiaomi", - "7C:61:66": "Ring", - "7C:63:05": "Ring", - "7C:64:56": "Samsung", - "7C:75:2D": "Samsung", - "7C:78:7E": "Samsung", - "7C:78:B2": "Wyze", - "7C:7B:BF": "Samsung", - "7C:89:56": "Samsung", - "7C:8B:B5": "Samsung", - "7C:8B:CA": "TP-Link", - "7C:91:22": "Samsung", - "7C:A4:49": "Xiaomi", - "7C:B5:9B": "TP-Link", - "7C:C2:25": "Samsung", - "7C:C2:94": "Xiaomi", - "7C:C2:C6": "TP-Link", - "7C:D5:66": "Ring", - "7C:D6:61": "Xiaomi", - "7C:D9:5C": "Nest", - "7C:ED:C6": "Ring", - "7C:F1:7E": "TP-Link", - "7C:F8:54": "Samsung", - "7C:F9:0E": "Samsung", - "7C:FD:6B": "Xiaomi", - "80:07:94": "Samsung", - "80:0C:F9": "Ring", - "80:0D:3F": "Samsung", - "80:18:A7": "Samsung", - "80:19:70": "Samsung", - "80:20:FD": "Samsung", - "80:26:89": "D-Link", - "80:2A:A8": "Ubiquiti", - "80:31:F0": "Samsung", - "80:35:C1": "Xiaomi", - "80:37:73": "Netgear", - "80:39:8C": "Samsung", - "80:3C:04": "TP-Link", - "80:47:86": "Samsung", - "80:48:2C": "Wyze", - "80:48:9F": "Hikvision", - "80:4E:70": "Samsung", - "80:4E:81": "Samsung", - "80:54:2D": "Samsung", - "80:54:9C": "Samsung", - "80:57:19": "Samsung", - "80:65:6D": "Samsung", - "80:6D:71": "Ring", - "80:75:BF": "Samsung", - "80:7B:3E": "Samsung", - "80:7C:62": "Hikvision", - "80:86:D9": "Samsung", - "80:89:17": "TP-Link", - "80:8A:BD": "Samsung", - "80:8F:1D": "TP-Link", - "80:8F:97": "Xiaomi", - "80:99:E7": "Sony", - "80:9F:F5": "Samsung", - "80:AD:16": "Xiaomi", - "80:AE:54": "TP-Link", - "80:BE:AF": "Hikvision", - "80:C7:55": "Panasonic", - "80:CC:9C": "Netgear", - "80:CE:B9": "Samsung", - "80:E6:3C": "Xiaomi", - "80:EA:07": "TP-Link", - "80:F5:AE": "Hikvision", - "80:FF:A8": "IDIS", - "84:00:D2": "Sony", - "84:11:9E": "Samsung", - "84:16:F9": "TP-Link", - "84:1B:5E": "Netgear", - "84:22:89": "Samsung", - "84:25:19": "Samsung", - "84:25:DB": "Samsung", - "84:28:59": "Ring", - "84:2E:27": "Samsung", - "84:37:D5": "Samsung", - "84:3C:4C": "Bosch", - "84:46:93": "Xiaomi", - "84:48:80": "Ring", - "84:51:81": "Samsung", - "84:55:A5": "Samsung", - "84:5F:04": "Samsung", - "84:78:48": "Ubiquiti", - "84:8E:DF": "Sony", - "84:94:59": "Hikvision", - "84:98:66": "Samsung", - "84:9A:40": "Hikvision", - "84:A4:66": "Samsung", - "84:A8:24": "Nest", - "84:AE:DE": "Xiaomi", - "84:B5:41": "Samsung", - "84:B8:90": "TP-Link", - "84:C0:EF": "Samsung", - "84:C7:EA": "Sony", - "84:C9:B2": "D-Link", - "84:D6:D0": "Ring", - "84:D8:1B": "TP-Link", - "84:E6:57": "Sony", - "84:EE:E4": "Samsung", - "88:25:93": "TP-Link", - "88:26:3F": "Uniview", - "88:29:9C": "Samsung", - "88:29:BF": "Ring", - "88:2F:92": "Xiaomi", - "88:3D:24": "Nest", - "88:41:C1": "Ring", - "88:46:04": "Xiaomi", - "88:52:EB": "Xiaomi", - "88:54:1F": "Nest", - "88:5E:54": "Samsung", - "88:6C:60": "Xiaomi", - "88:71:E5": "Ring", - "88:75:98": "Samsung", - "88:76:B9": "D-Link", - "88:83:22": "Samsung", - "88:99:86": "TP-Link", - "88:9B:39": "Samsung", - "88:9F:6F": "Samsung", - "88:A3:03": "Samsung", - "88:AD:D2": "Samsung", - "88:B9:51": "Xiaomi", - "88:BD:45": "Samsung", - "88:C3:97": "Xiaomi", - "88:C9:E8": "Sony", - "88:DE:39": "Hikvision", - "8C:19:52": "Ring", - "8C:1A:BF": "Samsung", - "8C:1D:55": "Hanwha", - "8C:21:0A": "TP-Link", - "8C:22:D2": "Hikvision", - "8C:2A:85": "Ring", - "8C:2E:72": "Samsung", - "8C:30:66": "Ubiquiti", - "8C:3B:AD": "Netgear", - "8C:4E:BB": "Ring", - "8C:53:C3": "Xiaomi", - "8C:5A:F8": "Xiaomi", - "8C:64:22": "Sony", - "8C:6A:3B": "Samsung", - "8C:71:F8": "Samsung", - "8C:77:12": "Samsung", - "8C:79:F5": "Samsung", - "8C:7A:3D": "Xiaomi", - "8C:83:E1": "Samsung", - "8C:86:DD": "TP-Link", - "8C:90:2D": "TP-Link", - "8C:A3:EC": "Samsung", - "8C:A6:DF": "TP-Link", - "8C:AA:CE": "Xiaomi", - "8C:B0:E9": "Samsung", - "8C:BE:BE": "Xiaomi", - "8C:BF:A6": "Samsung", - "8C:C1:21": "Panasonic", - "8C:C5:D0": "Samsung", - "8C:C8:CD": "Samsung", - "8C:D0:B2": "Xiaomi", - "8C:D9:D6": "Xiaomi", - "8C:DE:E6": "Samsung", - "8C:DE:F9": "Xiaomi", - "8C:E5:C0": "Samsung", - "8C:E7:48": "Hikvision", - "8C:E9:B4": "Dahua", - "8C:EA:48": "Samsung", - "8C:ED:E1": "Ubiquiti", - "90:00:DB": "Samsung", - "90:02:A9": "Dahua", - "90:06:28": "Samsung", - "90:0C:C8": "Nest", - "90:11:95": "Ring", - "90:16:C8": "Amcrest", - "90:23:5B": "Ring", - "90:2A:EE": "Xiaomi", - "90:39:5F": "Ring", - "90:41:B2": "Ubiquiti", - "90:47:48": "Sony", - "90:48:6C": "Ring", - "90:63:3B": "Samsung", - "90:78:B2": "Xiaomi", - "90:81:75": "Samsung", - "90:8D:78": "D-Link", - "90:94:E4": "D-Link", - "90:97:F3": "Samsung", - "90:9A:4A": "TP-Link", - "90:A8:22": "Ring", - "90:AE:1B": "TP-Link", - "90:B1:44": "Samsung", - "90:B6:22": "Samsung", - "90:C1:15": "Sony", - "90:CA:FA": "Nest", - "90:EE:C7": "Samsung", - "90:F1:AA": "Samsung", - "90:F6:52": "TP-Link", - "90:F8:2E": "Ring", - "90:FB:5D": "Xiaomi", - "94:01:C2": "Samsung", - "94:05:B6": "Lilin", - "94:0C:6D": "TP-Link", - "94:17:00": "Xiaomi", - "94:18:65": "Netgear", - "94:2A:6F": "Ubiquiti", - "94:2D:DC": "Samsung", - "94:35:0A": "Samsung", - "94:3A:91": "Ring", - "94:3B:22": "Netgear", - "94:45:60": "Nest", - "94:51:03": "Samsung", - "94:52:44": "Samsung", - "94:5A:FC": "Ring", - "94:62:6D": "Xiaomi", - "94:63:D1": "Samsung", - "94:76:B7": "Samsung", - "94:78:06": "Uniview", - "94:7B:AE": "Xiaomi", - "94:7B:E7": "Samsung", - "94:87:E0": "Xiaomi", - "94:8B:93": "Xiaomi", - "94:8B:C1": "Samsung", - "94:95:A0": "Nest", - "94:9D:57": "Panasonic", - "94:A6:7E": "Netgear", - "94:B1:0A": "Samsung", - "94:CA:0F": "Honeywell", - "94:CE:2C": "Sony", - "94:D3:31": "Xiaomi", - "94:D7:71": "Samsung", - "94:D9:B3": "TP-Link", - "94:DB:56": "Sony", - "94:E1:29": "Samsung", - "94:E1:AC": "Hikvision", - "94:E6:BA": "Samsung", - "94:EB:2C": "Nest", - "94:EF:50": "TP-Link", - "98:03:8E": "TP-Link", - "98:06:3C": "Samsung", - "98:0D:6F": "Samsung", - "98:12:E0": "Xiaomi", - "98:17:1A": "Xiaomi", - "98:1D:FA": "Samsung", - "98:22:6E": "Ring", - "98:25:4A": "TP-Link", - "98:2D:68": "Samsung", - "98:39:8E": "Samsung", - "98:3A:1F": "Nest", - "98:3F:E8": "Samsung", - "98:48:27": "TP-Link", - "98:4E:8A": "Samsung", - "98:52:B1": "Samsung", - "98:73:C4": "Ring", - "98:80:EE": "Samsung", - "98:83:89": "Samsung", - "98:8B:0A": "Hikvision", - "98:97:CC": "TP-Link", - "98:98:FB": "Nest", - "98:9D:E5": "Hikvision", - "98:B0:8B": "Samsung", - "98:B8:BC": "Samsung", - "98:BA:5F": "TP-Link", - "98:CC:F3": "Ring", - "98:D2:93": "Nest", - "98:D7:42": "Samsung", - "98:DA:C4": "TP-Link", - "98:DE:D0": "TP-Link", - "98:DF:82": "Hikvision", - "98:E0:81": "Xiaomi", - "98:EE:94": "Xiaomi", - "98:F1:12": "Hikvision", - "98:F6:21": "Xiaomi", - "98:F9:CC": "Dahua", - "98:FA:2E": "Sony", - "98:FA:E3": "Xiaomi", - "98:FB:27": "Samsung", - "9C:02:98": "Samsung", - "9C:05:D6": "Ubiquiti", - "9C:14:63": "Dahua", - "9C:21:6A": "TP-Link", - "9C:25:95": "Samsung", - "9C:28:F7": "Xiaomi", - "9C:2A:83": "Samsung", - "9C:2E:7A": "Samsung", - "9C:2E:A1": "Xiaomi", - "9C:37:CB": "Sony", - "9C:39:28": "Samsung", - "9C:3A:AF": "Samsung", - "9C:3D:CF": "Netgear", - "9C:47:82": "TP-Link", - "9C:4F:5F": "Nest", - "9C:53:22": "TP-Link", - "9C:5A:81": "Xiaomi", - "9C:5C:F9": "Sony", - "9C:5F:B0": "Samsung", - "9C:61:1D": "Panasonic", - "9C:65:B0": "Samsung", - "9C:73:B1": "Samsung", - "9C:76:13": "Ring", - "9C:83:06": "Samsung", - "9C:8C:6E": "Samsung", - "9C:8E:CD": "Amcrest", - "9C:99:A0": "Xiaomi", - "9C:9D:7E": "Xiaomi", - "9C:9E:D5": "Xiaomi", - "9C:A2:F4": "TP-Link", - "9C:A5:13": "Samsung", - "9C:A6:15": "TP-Link", - "9C:BC:F0": "Xiaomi", - "9C:C8:E9": "Ring", - "9C:C9:EB": "Netgear", - "9C:D3:5B": "Samsung", - "9C:D3:6D": "Netgear", - "9C:D6:43": "D-Link", - "9C:E0:63": "Samsung", - "9C:E6:E7": "Samsung", - "A0:02:DC": "Ring", - "A0:03:63": "Bosch", - "A0:04:60": "Netgear", - "A0:07:98": "Samsung", - "A0:10:81": "Samsung", - "A0:1B:9E": "Samsung", - "A0:21:95": "Samsung", - "A0:21:B7": "Netgear", - "A0:27:B6": "Samsung", - "A0:40:A0": "Netgear", - "A0:56:2C": "Samsung", - "A0:60:32": "Amcrest", - "A0:60:90": "Samsung", - "A0:63:91": "Netgear", - "A0:75:91": "Samsung", - "A0:7D:9C": "Samsung", - "A0:82:1F": "Samsung", - "A0:86:C6": "Xiaomi", - "A0:9F:7A": "D-Link", - "A0:A3:F0": "D-Link", - "A0:AB:1B": "D-Link", - "A0:AC:69": "Samsung", - "A0:B0:BD": "Samsung", - "A0:B4:A5": "Samsung", - "A0:BD:1D": "Dahua", - "A0:CB:FD": "Samsung", - "A0:D0:5B": "Samsung", - "A0:D0:DC": "Ring", - "A0:D2:B1": "Ring", - "A0:D7:22": "Samsung", - "A0:D7:F3": "Samsung", - "A0:E0:25": "Provision-ISR", - "A0:E4:53": "Sony", - "A0:F3:C1": "TP-Link", - "A0:FF:0C": "Hikvision", - "A4:02:B7": "Ring", - "A4:07:B6": "Samsung", - "A4:08:01": "Ring", - "A4:11:15": "Bosch", - "A4:11:62": "Arlo", - "A4:14:37": "Hikvision", - "A4:1A:3A": "TP-Link", - "A4:29:02": "Hikvision", - "A4:2A:95": "D-Link", - "A4:2B:8C": "Netgear", - "A4:2B:B0": "TP-Link", - "A4:30:7A": "Samsung", - "A4:39:B3": "Xiaomi", - "A4:45:19": "Xiaomi", - "A4:4B:D5": "Xiaomi", - "A4:4B:D9": "Hikvision", - "A4:50:46": "Xiaomi", - "A4:55:90": "Xiaomi", - "A4:6C:F1": "Samsung", - "A4:75:B9": "Samsung", - "A4:77:33": "Nest", - "A4:84:31": "Samsung", - "A4:9A:58": "Samsung", - "A4:9D:DD": "Samsung", - "A4:9F:E7": "Samsung", - "A4:A4:59": "Hikvision", - "A4:A4:90": "Samsung", - "A4:A9:30": "Xiaomi", - "A4:BA:70": "Xiaomi", - "A4:C3:BE": "Xiaomi", - "A4:C6:9A": "Samsung", - "A4:C7:88": "Xiaomi", - "A4:CC:B3": "Xiaomi", - "A4:CF:12": "ZOSI", - "A4:D5:C2": "Hikvision", - "A4:D9:90": "Samsung", - "A4:E2:87": "Xiaomi", - "A4:EB:D3": "Samsung", - "A4:F8:FF": "Ubiquiti", - "A4:FF:9F": "Xiaomi", - "A8:06:00": "Samsung", - "A8:13:74": "Panasonic", - "A8:15:4D": "TP-Link", - "A8:16:D0": "Samsung", - "A8:29:48": "TP-Link", - "A8:2B:B9": "Samsung", - "A8:2B:D5": "Xiaomi", - "A8:30:BC": "Samsung", - "A8:34:6A": "Samsung", - "A8:42:A1": "TP-Link", - "A8:4B:4D": "Samsung", - "A8:51:5B": "Samsung", - "A8:57:4E": "TP-Link", - "A8:5B:6C": "Bosch", - "A8:63:7D": "D-Link", - "A8:6A:86": "Xiaomi", - "A8:6E:84": "TP-Link", - "A8:76:50": "Samsung", - "A8:79:8D": "Samsung", - "A8:7C:01": "Samsung", - "A8:81:95": "Samsung", - "A8:87:B3": "Samsung", - "A8:9C:6C": "Ubiquiti", - "A8:9C:ED": "Xiaomi", - "A8:9F:BA": "Samsung", - "A8:BA:69": "Samsung", - "A8:CA:77": "Ring", - "A8:CA:87": "Dahua", - "A8:D1:62": "Samsung", - "A8:DC:5A": "Digital Watchdog", - "A8:E3:EE": "Sony", - "A8:E6:21": "Ring", - "A8:EE:67": "Samsung", - "A8:F2:74": "Samsung", - "AC:15:A2": "TP-Link", - "AC:1E:92": "Samsung", - "AC:1E:9E": "Xiaomi", - "AC:36:13": "Samsung", - "AC:3E:B1": "Nest", - "AC:41:6A": "Ring", - "AC:5A:14": "Samsung", - "AC:63:BE": "Ring", - "AC:67:84": "Nest", - "AC:6C:90": "Samsung", - "AC:77:13": "Honeywell", - "AC:80:0A": "Sony", - "AC:80:FB": "Samsung", - "AC:84:C6": "TP-Link", - "AC:8B:A9": "Ubiquiti", - "AC:8C:46": "Xiaomi", - "AC:9B:0A": "Sony", - "AC:9F:C3": "Ring", - "AC:A7:F1": "TP-Link", - "AC:AF:B9": "Samsung", - "AC:B9:2F": "Hikvision", - "AC:C1:EE": "Xiaomi", - "AC:C3:3A": "Samsung", - "AC:CB:51": "Hikvision", - "AC:CC:8E": "Axis", - "AC:CC:FC": "Ring", - "AC:E6:BB": "Nest", - "AC:EE:9E": "Samsung", - "AC:F1:DF": "D-Link", - "AC:F7:F3": "Xiaomi", - "B0:09:DA": "Ring", - "B0:19:21": "TP-Link", - "B0:2A:43": "Nest", - "B0:39:56": "Netgear", - "B0:47:BF": "Samsung", - "B0:48:7A": "TP-Link", - "B0:4A:6A": "Samsung", - "B0:4E:26": "TP-Link", - "B0:54:76": "Samsung", - "B0:6A:41": "Nest", - "B0:6F:E0": "Samsung", - "B0:73:9C": "Ring", - "B0:7F:B9": "Netgear", - "B0:8B:A8": "Ring", - "B0:95:75": "TP-Link", - "B0:95:8E": "TP-Link", - "B0:99:D7": "Samsung", - "B0:9C:63": "Xiaomi", - "B0:A7:B9": "TP-Link", - "B0:B9:8A": "Netgear", - "B0:BE:76": "TP-Link", - "B0:C4:E7": "Samsung", - "B0:C5:54": "D-Link", - "B0:C5:59": "Samsung", - "B0:CF:CB": "Ring", - "B0:D0:9C": "Samsung", - "B0:D5:FB": "Nest", - "B0:D8:88": "Panasonic", - "B0:DF:3A": "Samsung", - "B0:E2:35": "Xiaomi", - "B0:E4:5C": "Samsung", - "B0:E4:D5": "Nest", - "B0:EC:71": "Samsung", - "B0:F2:F6": "Samsung", - "B0:F7:C4": "Ring", - "B0:FC:0D": "Ring", - "B4:05:A1": "Xiaomi", - "B4:0A:D8": "Sony", - "B4:0B:1D": "Samsung", - "B4:10:7A": "Ring", - "B4:13:24": "Nest", - "B4:1A:1D": "Samsung", - "B4:1F:4D": "Sony", - "B4:23:A2": "Nest", - "B4:37:D8": "D-Link", - "B4:3A:28": "Samsung", - "B4:40:DC": "Samsung", - "B4:4C:3B": "Dahua", - "B4:52:7D": "Sony", - "B4:52:7E": "Sony", - "B4:5B:D1": "TP-Link", - "B4:60:ED": "Xiaomi", - "B4:62:93": "Samsung", - "B4:6C:47": "Panasonic", - "B4:70:64": "Samsung", - "B4:74:43": "Samsung", - "B4:7C:9C": "Ring", - "B4:9D:02": "Samsung", - "B4:A3:82": "Hikvision", - "B4:B0:24": "TP-Link", - "B4:B7:42": "Ring", - "B4:BF:F6": "Samsung", - "B4:C0:C3": "TP-Link", - "B4:C4:FC": "Xiaomi", - "B4:CE:40": "Samsung", - "B4:D5:E5": "Samsung", - "B4:E4:54": "Ring", - "B4:EF:39": "Samsung", - "B4:FB:E4": "Ubiquiti", - "B8:20:8E": "Panasonic", - "B8:3B:CC": "Xiaomi", - "B8:50:D8": "Xiaomi", - "B8:52:E0": "Xiaomi", - "B8:53:84": "Xiaomi", - "B8:57:D8": "Samsung", - "B8:5A:73": "Samsung", - "B8:5E:7B": "Samsung", - "B8:5F:98": "Ring", - "B8:6C:E8": "Samsung", - "B8:7B:D4": "Nest", - "B8:94:E7": "Xiaomi", - "B8:A0:B8": "Samsung", - "B8:A3:86": "D-Link", - "B8:A4:4F": "Axis", - "B8:A8:25": "Samsung", - "B8:B4:09": "Samsung", - "B8:BB:AF": "Samsung", - "B8:BC:5B": "Samsung", - "B8:C6:8E": "Samsung", - "B8:D9:CE": "Samsung", - "B8:DB:38": "Nest", - "B8:EA:98": "Xiaomi", - "B8:F4:A4": "Nest", - "B8:F8:83": "TP-Link", - "B8:F9:34": "Sony", - "B8:FB:B3": "TP-Link", - "BC:07:1D": "TP-Link", - "BC:0E:AB": "Samsung", - "BC:0F:9A": "D-Link", - "BC:10:7B": "Samsung", - "BC:14:85": "Samsung", - "BC:20:A4": "Samsung", - "BC:22:28": "D-Link", - "BC:27:7A": "Samsung", - "BC:29:78": "Hikvision", - "BC:32:5F": "Dahua", - "BC:32:B2": "Samsung", - "BC:33:29": "Sony", - "BC:3E:0B": "Panasonic", - "BC:44:86": "Samsung", - "BC:45:5B": "Samsung", - "BC:46:99": "TP-Link", - "BC:47:60": "Samsung", - "BC:51:FE": "Swann", - "BC:52:74": "Samsung", - "BC:54:51": "Samsung", - "BC:5E:33": "Hikvision", - "BC:60:A7": "Sony", - "BC:61:93": "Xiaomi", - "BC:69:CB": "Panasonic", - "BC:6A:D1": "Xiaomi", - "BC:6E:64": "Sony", - "BC:72:B1": "Samsung", - "BC:76:5E": "Samsung", - "BC:79:AD": "Samsung", - "BC:7A:BF": "Samsung", - "BC:7E:8B": "Samsung", - "BC:7F:A4": "Xiaomi", - "BC:85:1F": "Samsung", - "BC:90:3A": "Bosch", - "BC:93:07": "Samsung", - "BC:9B:5E": "Hikvision", - "BC:A0:80": "Samsung", - "BC:A5:11": "Netgear", - "BC:A5:8B": "Samsung", - "BC:AD:28": "Hikvision", - "BC:B1:F3": "Samsung", - "BC:B2:CC": "Samsung", - "BC:BA:C2": "Hikvision", - "BC:C3:42": "Panasonic", - "BC:D1:1F": "Samsung", - "BC:D1:77": "TP-Link", - "BC:DF:58": "Nest", - "BC:E6:3F": "Samsung", - "BC:F6:85": "D-Link", - "BC:F7:30": "Samsung", - "C0:06:C3": "TP-Link", - "C0:11:73": "Samsung", - "C0:15:1B": "Sony", - "C0:16:93": "Xiaomi", - "C0:17:4D": "Samsung", - "C0:1C:6A": "Nest", - "C0:23:8D": "Samsung", - "C0:25:E9": "TP-Link", - "C0:39:5A": "Dahua", - "C0:3A:55": "TP-Link", - "C0:3D:03": "Samsung", - "C0:3F:0E": "Netgear", - "C0:48:E6": "Samsung", - "C0:4A:00": "TP-Link", - "C0:51:7E": "Hikvision", - "C0:56:E3": "Hikvision", - "C0:5B:44": "Xiaomi", - "C0:61:18": "TP-Link", - "C0:65:99": "Samsung", - "C0:6D:ED": "Hikvision", - "C0:7A:D6": "Samsung", - "C0:87:EB": "Samsung", - "C0:89:97": "Samsung", - "C0:8D:51": "Ring", - "C0:91:B9": "Ring", - "C0:95:CF": "Ring", - "C0:A0:BB": "D-Link", - "C0:BD:C8": "Samsung", - "C0:C9:E3": "TP-Link", - "C0:D2:DD": "Samsung", - "C0:D3:C0": "Samsung", - "C0:D5:E2": "Samsung", - "C0:DC:DA": "Samsung", - "C0:E4:2D": "TP-Link", - "C0:FF:D4": "Netgear", - "C4:04:15": "Netgear", - "C4:0B:CB": "Xiaomi", - "C4:12:F5": "D-Link", - "C4:18:E9": "Samsung", - "C4:1C:07": "Samsung", - "C4:2F:90": "Hikvision", - "C4:3A:BE": "Sony", - "C4:3D:C7": "Netgear", - "C4:42:02": "Samsung", - "C4:50:06": "Samsung", - "C4:57:6E": "Samsung", - "C4:5D:83": "Samsung", - "C4:62:EA": "Samsung", - "C4:6A:B7": "Xiaomi", - "C4:6E:1F": "Night Owl", - "C4:71:0F": "Xiaomi", - "C4:71:54": "TP-Link", - "C4:73:1E": "Samsung", - "C4:77:64": "Samsung", - "C4:79:05": "Uniview", - "C4:7D:9F": "Samsung", - "C4:88:E5": "Samsung", - "C4:93:BB": "Xiaomi", - "C4:93:D9": "Samsung", - "C4:95:00": "Ring", - "C4:A8:1D": "D-Link", - "C4:AA:C4": "Dahua", - "C4:AE:12": "Samsung", - "C4:DB:AD": "Ring", - "C4:E9:0A": "D-Link", - "C4:E9:84": "TP-Link", - "C4:EF:3D": "Samsung", - "C4:EF:DA": "Honeywell", - "C8:10:2F": "Netgear", - "C8:12:0B": "Samsung", - "C8:14:79": "Samsung", - "C8:19:F7": "Samsung", - "C8:28:32": "Xiaomi", - "C8:2A:DD": "Nest", - "C8:38:70": "Samsung", - "C8:3D:DC": "Xiaomi", - "C8:41:8A": "Samsung", - "C8:4A:A0": "Sony", - "C8:51:42": "Samsung", - "C8:5C:CC": "Xiaomi", - "C8:63:F1": "Sony", - "C8:6C:3D": "Ring", - "C8:78:7D": "D-Link", - "C8:7E:75": "Samsung", - "C8:90:8A": "Samsung", - "C8:9E:43": "Netgear", - "C8:A6:EF": "Samsung", - "C8:A7:02": "Hikvision", - "C8:A8:23": "Samsung", - "C8:BD:4D": "Samsung", - "C8:BD:69": "Samsung", - "C8:BE:19": "D-Link", - "C8:BF:4C": "Xiaomi", - "C8:D3:A3": "D-Link", - "C8:D7:B0": "Samsung", - "CC:03:3D": "Xiaomi", - "CC:05:1B": "Samsung", - "CC:07:AB": "Samsung", - "CC:08:FB": "TP-Link", - "CC:20:AC": "Samsung", - "CC:21:19": "Samsung", - "CC:22:93": "Ring", - "CC:32:E5": "TP-Link", - "CC:34:29": "TP-Link", - "CC:35:D9": "Ubiquiti", - "CC:3B:FB": "Ring", - "CC:40:D0": "Netgear", - "CC:42:10": "Xiaomi", - "CC:46:4E": "Samsung", - "CC:4D:75": "Xiaomi", - "CC:57:63": "Panasonic", - "CC:68:B6": "TP-Link", - "CC:6E:A4": "Samsung", - "CC:7E:E7": "Panasonic", - "CC:98:8B": "Sony", - "CC:9E:A2": "Ring", - "CC:A7:C1": "Nest", - "CC:AF:E3": "Ring", - "CC:B1:1A": "Samsung", - "CC:B2:55": "D-Link", - "CC:B5:D1": "Xiaomi", - "CC:BA:BD": "TP-Link", - "CC:D8:43": "Xiaomi", - "CC:DA:20": "Xiaomi", - "CC:DD:58": "Bosch", - "CC:E6:86": "Samsung", - "CC:E9:FA": "Samsung", - "CC:EB:5E": "Xiaomi", - "CC:F4:11": "Nest", - "CC:F7:35": "Ring", - "CC:F8:26": "Samsung", - "CC:F9:E8": "Samsung", - "CC:F9:F0": "Samsung", - "CC:FE:3C": "Samsung", - "D0:03:DF": "Samsung", - "D0:04:B0": "Samsung", - "D0:14:11": "Zmodo", - "D0:17:6A": "Samsung", - "D0:1B:49": "Samsung", - "D0:21:F9": "Ubiquiti", - "D0:31:69": "Samsung", - "D0:32:C3": "D-Link", - "D0:37:45": "TP-Link", - "D0:39:FA": "Samsung", - "D0:3F:27": "Wyze", - "D0:51:62": "Sony", - "D0:56:FB": "Samsung", - "D0:59:E4": "Samsung", - "D0:66:7B": "Samsung", - "D0:76:E7": "TP-Link", - "D0:7F:A0": "Samsung", - "D0:87:E2": "Samsung", - "D0:9C:7A": "Xiaomi", - "D0:AE:05": "Xiaomi", - "D0:B1:28": "Samsung", - "D0:B4:98": "Bosch", - "D0:C1:B1": "Samsung", - "D0:C1:BF": "Xiaomi", - "D0:C2:4E": "Samsung", - "D0:C7:C0": "TP-Link", - "D0:CE:C0": "Xiaomi", - "D0:D0:03": "Samsung", - "D0:DF:C7": "Samsung", - "D0:FC:CC": "Samsung", - "D4:01:6D": "TP-Link", - "D4:11:A3": "Samsung", - "D4:17:61": "Xiaomi", - "D4:35:38": "Xiaomi", - "D4:38:9C": "Sony", - "D4:3A:2C": "Nest", - "D4:43:0E": "Dahua", - "D4:43:8A": "Xiaomi", - "D4:53:2A": "Xiaomi", - "D4:5E:EC": "Xiaomi", - "D4:6E:0E": "TP-Link", - "D4:7A:E2": "Samsung", - "D4:87:D8": "Samsung", - "D4:88:90": "Samsung", - "D4:89:C1": "Ubiquiti", - "D4:8A:39": "Samsung", - "D4:91:0F": "Ring", - "D4:97:0B": "Xiaomi", - "D4:9D:C0": "Samsung", - "D4:A3:65": "Xiaomi", - "D4:AE:05": "Samsung", - "D4:DA:21": "Xiaomi", - "D4:E6:B7": "Samsung", - "D4:E8:53": "Hikvision", - "D4:E8:B2": "Samsung", - "D4:F0:EA": "Xiaomi", - "D4:F5:47": "Nest", - "D4:F7:D5": "Sony", - "D8:06:D1": "Honeywell", - "D8:07:B6": "TP-Link", - "D8:08:31": "Samsung", - "D8:0B:9A": "Samsung", - "D8:0D:17": "TP-Link", - "D8:15:0D": "TP-Link", - "D8:31:CF": "Samsung", - "D8:32:E3": "Xiaomi", - "D8:44:89": "TP-Link", - "D8:47:32": "TP-Link", - "D8:55:75": "Samsung", - "D8:57:EF": "Samsung", - "D8:5B:2A": "Samsung", - "D8:5D:4C": "TP-Link", - "D8:63:75": "Xiaomi", - "D8:68:A0": "Samsung", - "D8:68:C3": "Samsung", - "D8:6C:63": "Nest", - "D8:71:54": "Samsung", - "D8:8C:79": "Nest", - "D8:90:E8": "Samsung", - "D8:93:D4": "Xiaomi", - "D8:A3:5C": "Samsung", - "D8:AF:F1": "Panasonic", - "D8:B0:53": "Xiaomi", - "D8:B1:2A": "Panasonic", - "D8:B3:70": "Ubiquiti", - "D8:BE:65": "Ring", - "D8:C4:E9": "Samsung", - "D8:CE:3A": "Xiaomi", - "D8:D4:3C": "Sony", - "D8:E0:E1": "Samsung", - "D8:E3:74": "Xiaomi", - "D8:EB:46": "Nest", - "D8:F1:2E": "TP-Link", - "D8:FB:D6": "Ring", - "D8:FE:E3": "D-Link", - "DC:00:77": "TP-Link", - "DC:07:F8": "Hikvision", - "DC:44:B6": "Samsung", - "DC:54:D7": "Ring", - "DC:62:79": "TP-Link", - "DC:66:72": "Samsung", - "DC:69:E2": "Samsung", - "DC:6A:E7": "Xiaomi", - "DC:74:A8": "Samsung", - "DC:89:83": "Samsung", - "DC:91:BF": "Ring", - "DC:9F:DB": "Ubiquiti", - "DC:A0:D0": "Ring", - "DC:B3:B4": "Honeywell", - "DC:B7:2E": "Xiaomi", - "DC:C4:9C": "Samsung", - "DC:CC:E6": "Samsung", - "DC:CF:96": "Samsung", - "DC:D2:6A": "Hikvision", - "DC:DC:E2": "Samsung", - "DC:E5:5B": "Nest", - "DC:EA:E7": "D-Link", - "DC:ED:83": "Xiaomi", - "DC:EF:09": "Netgear", - "DC:F7:56": "Samsung", - "DC:FE:18": "TP-Link", - "E0:03:6B": "Samsung", - "E0:05:C5": "TP-Link", - "E0:1A:DF": "Nest", - "E0:1C:FC": "D-Link", - "E0:1F:88": "Xiaomi", - "E0:28:0A": "TP-Link", - "E0:2E:FE": "Dahua", - "E0:46:9A": "Netgear", - "E0:46:EE": "Netgear", - "E0:50:8B": "Dahua", - "E0:62:67": "Xiaomi", - "E0:63:DA": "Ubiquiti", - "E0:63:E5": "Sony", - "E0:80:6B": "Xiaomi", - "E0:91:F5": "Netgear", - "E0:99:71": "Samsung", - "E0:9D:13": "Samsung", - "E0:A7:00": "Verkada", - "E0:AA:96": "Samsung", - "E0:B6:55": "Xiaomi", - "E0:BA:AD": "Hikvision", - "E0:C2:50": "Netgear", - "E0:C3:77": "Samsung", - "E0:CA:3C": "Hikvision", - "E0:CB:1D": "Ring", - "E0:CB:EE": "Samsung", - "E0:CC:F8": "Xiaomi", - "E0:D0:83": "Samsung", - "E0:D3:62": "TP-Link", - "E0:DB:10": "Samsung", - "E0:DC:FF": "Xiaomi", - "E0:DF:13": "Hikvision", - "E0:EE:1B": "Panasonic", - "E0:F7:28": "Ring", - "E4:10:88": "Samsung", - "E4:12:1D": "Samsung", - "E4:1B:43": "Xiaomi", - "E4:24:6C": "Dahua", - "E4:30:22": "Hanwha", - "E4:32:CB": "Samsung", - "E4:38:83": "Ubiquiti", - "E4:40:E2": "Samsung", - "E4:45:19": "Xiaomi", - "E4:46:DA": "Xiaomi", - "E4:58:B8": "Samsung", - "E4:58:E7": "Samsung", - "E4:5D:75": "Samsung", - "E4:5E:1B": "Nest", - "E4:6F:13": "D-Link", - "E4:7C:F9": "Samsung", - "E4:7D:BD": "Samsung", - "E4:84:D3": "Xiaomi", - "E4:92:82": "Samsung", - "E4:92:FB": "Samsung", - "E4:9F:7D": "Samsung", - "E4:A4:30": "Samsung", - "E4:AA:E4": "Xiaomi", - "E4:B0:21": "Samsung", - "E4:BC:AA": "Xiaomi", - "E4:C3:2A": "TP-Link", - "E4:D3:32": "TP-Link", - "E4:D5:8B": "Hikvision", - "E4:DB:6D": "Xiaomi", - "E4:E0:C5": "Samsung", - "E4:E6:6C": "Tiandy", - "E4:EC:E8": "Samsung", - "E4:F0:42": "Nest", - "E4:F3:C4": "Samsung", - "E4:F4:C6": "Netgear", - "E4:F8:EF": "Samsung", - "E4:FA:C4": "TP-Link", - "E4:FA:ED": "Samsung", - "E4:FE:43": "Xiaomi", - "E8:03:9A": "Samsung", - "E8:11:32": "Samsung", - "E8:27:25": "Axis", - "E8:3A:12": "Samsung", - "E8:48:B8": "TP-Link", - "E8:4A:54": "Xiaomi", - "E8:4C:4A": "Ring", - "E8:4E:84": "Samsung", - "E8:54:97": "Samsung", - "E8:5A:8B": "Xiaomi", - "E8:5F:B4": "Xiaomi", - "E8:6D:CB": "Samsung", - "E8:6E:3A": "Sony", - "E8:7E:EF": "Xiaomi", - "E8:7F:6B": "Samsung", - "E8:88:43": "Xiaomi", - "E8:93:09": "Samsung", - "E8:94:F6": "TP-Link", - "E8:98:47": "Xiaomi", - "E8:A0:ED": "Hikvision", - "E8:AA:CB": "Samsung", - "E8:B4:C8": "Samsung", - "E8:C9:13": "Samsung", - "E8:CC:18": "D-Link", - "E8:D5:2B": "Nest", - "E8:D8:7E": "Ring", - "E8:DE:27": "TP-Link", - "E8:E5:D6": "Samsung", - "E8:F7:91": "Xiaomi", - "E8:FC:AF": "Netgear", - "EC:08:6B": "TP-Link", - "EC:0D:E4": "Ring", - "EC:10:55": "Xiaomi", - "EC:10:7B": "Samsung", - "EC:17:2F": "TP-Link", - "EC:22:80": "D-Link", - "EC:26:CA": "TP-Link", - "EC:2B:EB": "Ring", - "EC:30:B3": "Xiaomi", - "EC:31:5F": "Ring", - "EC:41:18": "Xiaomi", - "EC:4D:3E": "Xiaomi", - "EC:60:73": "TP-Link", - "EC:65:CC": "Panasonic", - "EC:71:DB": "Reolink", - "EC:74:8C": "Sony", - "EC:75:0C": "TP-Link", - "EC:7C:B6": "Samsung", - "EC:88:8F": "TP-Link", - "EC:8A:C4": "Ring", - "EC:90:C1": "Samsung", - "EC:A1:38": "Ring", - "EC:A9:71": "Hikvision", - "EC:AA:25": "Samsung", - "EC:AD:E0": "D-Link", - "EC:B5:50": "Samsung", - "EC:C8:9C": "Hikvision", - "EC:D0:9F": "Xiaomi", - "EC:E0:9B": "Samsung", - "EC:FA:5C": "Xiaomi", - "F0:05:1B": "Samsung", - "F0:08:F1": "Samsung", - "F0:09:0D": "TP-Link", - "F0:27:2D": "Ring", - "F0:2F:9E": "Ring", - "F0:39:65": "Samsung", - "F0:4F:7C": "Ring", - "F0:54:94": "Honeywell", - "F0:5A:09": "Samsung", - "F0:5B:7B": "Samsung", - "F0:5C:77": "Nest", - "F0:65:AE": "Samsung", - "F0:6B:CA": "Samsung", - "F0:6C:5D": "Xiaomi", - "F0:70:4F": "Samsung", - "F0:72:8C": "Samsung", - "F0:72:EA": "Nest", - "F0:74:C1": "Blink", - "F0:7D:68": "D-Link", - "F0:81:73": "Ring", - "F0:8A:76": "Samsung", - "F0:9F:C2": "Ubiquiti", - "F0:A2:25": "Ring", - "F0:A7:31": "TP-Link", - "F0:B4:29": "Xiaomi", - "F0:B4:D2": "D-Link", - "F0:BF:97": "Sony", - "F0:C8:8B": "Wyze", - "F0:CD:31": "Samsung", - "F0:D2:F1": "Ring", - "F0:E7:7E": "Samsung", - "F0:EE:10": "Samsung", - "F0:EF:86": "Nest", - "F0:F0:A4": "Ring", - "F0:F3:36": "TP-Link", - "F0:F5:64": "Samsung", - "F4:03:04": "Nest", - "F4:03:2A": "Ring", - "F4:0E:22": "Samsung", - "F4:1A:9C": "Xiaomi", - "F4:2A:7D": "TP-Link", - "F4:2B:8C": "Samsung", - "F4:30:8B": "Xiaomi", - "F4:42:8F": "Samsung", - "F4:60:E2": "Xiaomi", - "F4:64:12": "Sony", - "F4:6D:2F": "TP-Link", - "F4:71:90": "Samsung", - "F4:7B:5E": "Samsung", - "F4:7D:EF": "Samsung", - "F4:83:CD": "TP-Link", - "F4:84:8D": "TP-Link", - "F4:8B:32": "Xiaomi", - "F4:8C:EB": "D-Link", - "F4:92:BF": "Ubiquiti", - "F4:9F:54": "Samsung", - "F4:B1:C2": "Dahua", - "F4:C2:48": "Samsung", - "F4:D9:FB": "Samsung", - "F4:DD:06": "Samsung", - "F4:E2:C6": "Ubiquiti", - "F4:EC:38": "TP-Link", - "F4:F2:6D": "TP-Link", - "F4:F3:09": "Samsung", - "F4:F5:0B": "TP-Link", - "F4:F5:D8": "Nest", - "F4:F5:DB": "Xiaomi", - "F4:F5:E8": "Nest", - "F4:FE:FB": "Samsung", - "F8:0F:F9": "Nest", - "F8:1A:2B": "Nest", - "F8:1A:67": "TP-Link", - "F8:20:97": "CP Plus", - "F8:3F:51": "Samsung", - "F8:43:EF": "Xiaomi", - "F8:46:1C": "Sony", - "F8:4D:FC": "Hikvision", - "F8:4E:17": "Sony", - "F8:4E:58": "Samsung", - "F8:54:B8": "Ring", - "F8:5B:6E": "Samsung", - "F8:6F:B0": "TP-Link", - "F8:71:0C": "Xiaomi", - "F8:73:94": "Netgear", - "F8:77:B8": "Samsung", - "F8:83:06": "Xiaomi", - "F8:84:F2": "Samsung", - "F8:8C:21": "TP-Link", - "F8:8F:07": "Samsung", - "F8:8F:CA": "Nest", - "F8:A4:5F": "Xiaomi", - "F8:AB:82": "Xiaomi", - "F8:C9:03": "TP-Link", - "F8:CE:07": "Dahua", - "F8:CE:21": "TP-Link", - "F8:D0:AC": "Sony", - "F8:D0:BD": "Samsung", - "F8:D1:11": "TP-Link", - "F8:E6:1A": "Samsung", - "F8:E9:03": "D-Link", - "F8:F1:E6": "Samsung", - "F8:FC:E1": "Ring", - "FC:02:96": "Xiaomi", - "FC:03:9F": "Samsung", - "FC:0F:E6": "Sony", - "FC:19:10": "Samsung", - "FC:19:99": "Xiaomi", - "FC:1A:46": "Samsung", - "FC:41:16": "Nest", - "FC:42:03": "Samsung", - "FC:43:45": "Xiaomi", - "FC:49:2D": "Ring", - "FC:5B:8C": "Xiaomi", - "FC:5F:49": "Dahua", - "FC:64:3A": "Samsung", - "FC:64:BA": "Xiaomi", - "FC:65:DE": "Ring", - "FC:75:16": "D-Link", - "FC:8F:90": "Samsung", - "FC:91:5D": "Nest", - "FC:93:6B": "Samsung", - "FC:9C:98": "Arlo", - "FC:9F:FD": "Hikvision", - "FC:A1:3E": "Samsung", - "FC:A1:83": "Ring", - "FC:A6:21": "Samsung", - "FC:A6:67": "Ring", - "FC:A9:F5": "Xiaomi", - "FC:AA:B6": "Samsung", - "FC:B6:9D": "Dahua", - "FC:C7:34": "Samsung", - "FC:D6:BD": "Bosch", - "FC:D7:33": "TP-Link", - "FC:D7:49": "Ring", - "FC:D9:08": "Xiaomi", - "FC:DE:90": "Samsung", - "FC:E9:D8": "Ring", - "FC:EC:DA": "Ubiquiti", - "FC:F1:36": "Samsung", - "FC:F1:52": "Sony", - "F0:23:B9": "Trassir", - "00:05:FE": "ZOSI" -} \ No newline at end of file diff --git a/data/popular_stream_patterns.json b/data/popular_stream_patterns.json deleted file mode 100644 index 4557090..0000000 --- a/data/popular_stream_patterns.json +++ /dev/null @@ -1,1698 +0,0 @@ -[ - { - "url": "/ch0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Thingino firmware - main stream channel 0", - "model_count": 10000 - }, - { - "url": "/ch1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Thingino firmware - main stream channel 1", - "model_count": 10000 - }, - { - "url": "/live/main", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Common RTSP main stream for ONVIF cameras", - "model_count": 9999 - }, - { - "url": "/live/sub", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Common RTSP sub stream for ONVIF cameras", - "model_count": 9998 - }, - { - "url": "/Streaming/Channels/[CHANNEL+1]01", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision main stream - 0-based channel input (channel 0 -> 101, 1 -> 201)", - "model_count": 9500 - }, - { - "url": "/Streaming/Channels/[CHANNEL]01", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision main stream - 1-based channel input (channel 1 -> 101, 2 -> 201)", - "model_count": 9490 - }, - { - "url": "/Streaming/Channels/[CHANNEL+1]02", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision sub stream - 0-based channel input (channel 0 -> 102, 1 -> 202)", - "model_count": 9480 - }, - { - "url": "/Streaming/Channels/[CHANNEL]02", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision sub stream - 1-based channel input (channel 1 -> 102, 2 -> 202)", - "model_count": 9470 - }, - { - "url": "/Streaming/Channels/[CHANNEL+1]03", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision third stream - 0-based channel input (channel 0 -> 103, 1 -> 203)", - "model_count": 9460 - }, - { - "url": "/Streaming/Channels/[CHANNEL]03", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision third stream - 1-based channel input (channel 1 -> 103, 2 -> 203)", - "model_count": 9450 - }, - { - "url": "/ch2", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Channel 2 stream", - "model_count": 450 - }, - { - "url": "/ch3", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Channel 3 stream", - "model_count": 400 - }, - { - "url": "/ch4", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Channel 4 stream", - "model_count": 350 - }, - { - "url": "/live/ch1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Live channel 1", - "model_count": 420 - }, - { - "url": "/live/ch2", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Live channel 2", - "model_count": 380 - }, - { - "url": "/live/ch3", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Live channel 3", - "model_count": 340 - }, - { - "url": "/live/0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Numeric channel 0", - "model_count": 360 - }, - { - "url": "/live/1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Numeric channel 1", - "model_count": 330 - }, - { - "url": "/live/2", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Numeric channel 2", - "model_count": 310 - }, - { - "url": "/av0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Audio/Video stream 0", - "model_count": 320 - }, - { - "url": "/av1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Audio/Video stream 1", - "model_count": 280 - }, - { - "url": "/video1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Video stream 1", - "model_count": 410 - }, - { - "url": "/video2", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Video stream 2", - "model_count": 370 - }, - { - "url": "/video3", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Video stream 3", - "model_count": 300 - }, - { - "url": "/main", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Main stream", - "model_count": 390 - }, - { - "url": "/sub", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Sub stream", - "model_count": 360 - }, - { - "url": "/preview", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Preview stream", - "model_count": 290 - }, - { - "url": "/stream", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Generic stream", - "model_count": 330 - }, - { - "url": "/cam0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Camera 0", - "model_count": 295 - }, - { - "url": "/cam1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Camera 1", - "model_count": 270 - }, - { - "url": "/h265", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "H265 codec stream", - "model_count": 260 - }, - { - "url": "/hevc", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "HEVC codec stream", - "model_count": 240 - }, - { - "url": "/unicast", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Unicast stream", - "model_count": 230 - }, - { - "url": "/multicast", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Multicast stream", - "model_count": 220 - }, - { - "url": "/ipcam.h264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Generic IP camera H264", - "model_count": 250 - }, - { - "url": "/image", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Simple image endpoint", - "model_count": 310 - }, - { - "url": "/jpeg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Direct JPEG endpoint", - "model_count": 300 - }, - { - "url": "/snapshot", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Snapshot endpoint", - "model_count": 285 - }, - { - "url": "/image.cgi", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "CGI image endpoint", - "model_count": 275 - }, - { - "url": "image/snapshot.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Snapshot image path", - "model_count": 265 - }, - { - "url": "api/snapshot.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "API snapshot", - "model_count": 245 - }, - { - "url": "tmpfs/snap.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "TMPFS snapshot", - "model_count": 235 - }, - { - "url": "stillimage.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Still image", - "model_count": 225 - }, - { - "url": "capture.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Capture endpoint", - "model_count": 215 - }, - { - "url": "current.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Current frame", - "model_count": 205 - }, - { - "url": "api/v1/snapshot", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "API v1 snapshot", - "model_count": 195 - }, - { - "url": "cgi-bin/image", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "CGI bin image", - "model_count": 185 - }, - { - "url": "live/snapshot.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Live snapshot", - "model_count": 175 - }, - { - "url": "media/snapshot.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Media snapshot", - "model_count": 165 - }, - { - "url": "pic.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "Simple picture", - "model_count": 155 - }, - { - "url": "/video", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "Video endpoint", - "model_count": 255 - }, - { - "url": "/mjpeg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "MJPEG stream", - "model_count": 250 - }, - { - "url": "/stream.mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "MJPEG stream file", - "model_count": 230 - }, - { - "url": "video/stream", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "Video stream path", - "model_count": 220 - }, - { - "url": "mjpeg/video", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "MJPEG video path", - "model_count": 210 - }, - { - "url": "live/stream", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "Live stream", - "model_count": 200 - }, - { - "url": "camera.mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "Camera MJPEG", - "model_count": 190 - }, - { - "url": "/Streaming/Channels/201", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "Hikvision channel 201", - "model_count": 180 - }, - { - "url": "/h264/ch1/main/av_stream", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "H264 main stream", - "model_count": 170 - }, - { - "url": "/h264/ch1/sub/av_stream", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "H264 sub stream", - "model_count": 160 - }, - { - "url": "/11", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 1952 - }, - { - "url": "tmpfs/auto.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 1802 - }, - { - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 1147 - }, - { - "url": "cgi-bin/snapshot.cgi?loginuse=[USERNAME]&loginpas=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 970 - }, - { - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]x[HEIGHT]", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 906 - }, - { - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=64&rate=0", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 901 - }, - { - "url": "/11", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 898 - }, - { - "url": "cgi-bin/snapshot.cgi?chn=[CHANNEL]&u=[USERNAME]&p=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 856 - }, - { - "url": "/Streaming/Channels/101", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 789 - }, - { - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 723 - }, - { - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]&strm=[CHANNEL]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 719 - }, - { - "url": "/Streaming/Channels/1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 696 - }, - { - "url": "cgi-bin/snapshot.cgi?1", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 642 - }, - { - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 635 - }, - { - "url": "/11", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 5544, - "notes": "", - "model_count": 616 - }, - { - "url": "/cam/realmonitor?channel=1&subtype=00&authbasic=[AUTH]", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 596 - }, - { - "url": "videostream.asf", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 536 - }, - { - "url": "snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 527 - }, - { - "url": "/cam/realmonitor", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 509 - }, - { - "url": "/0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 505 - }, - { - "url": "video.cgi?resolution=VGA", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 493 - }, - { - "url": "image/jpeg.cgi", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 490 - }, - { - "url": "/live/ch0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 479 - }, - { - "url": "jpg/image.jpg?size=3", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 462 - }, - { - "url": "img/snapshot.cgi?size=2", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 461 - }, - { - "url": "videofeed", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 459 - }, - { - "url": "snap.jpg?JpegCam=[CHANNEL]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 458 - }, - { - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 402 - }, - { - "url": "videostream.asf?usr=[USERNAME]&pwd=[PASSWORD]", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 390 - }, - { - "url": "/stream1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 390 - }, - { - "url": "/h264_stream", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 385 - }, - { - "url": "/1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 381 - }, - { - "url": "jpg/image.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 379 - }, - { - "url": "videostream.cgi?rate=11", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 377 - }, - { - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]", - "type": "VLC", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 373 - }, - { - "url": "axis-cgi/mjpg/video.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 370 - }, - { - "url": "videostream.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 361 - }, - { - "url": "mjpg/video.mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 361 - }, - { - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 355 - }, - { - "url": "/tcp/av0_0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "notes": "", - "model_count": 355 - }, - { - "url": "/onvif1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 354 - }, - { - "url": "/stream1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 346 - }, - { - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 342 - }, - { - "url": "/12", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 340 - }, - { - "url": "image.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 335 - }, - { - "url": "live.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 316 - }, - { - "url": "video/mjpg.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 308 - }, - { - "url": "/live0.264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 308 - }, - { - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]&", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 306 - }, - { - "url": "img/video.mjpeg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 287 - }, - { - "url": "cgi/mjpg/mjpeg.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 282 - }, - { - "url": "snapshot.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 266 - }, - { - "url": "/", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 266 - }, - { - "url": "cgi-bin/video.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 264 - }, - { - "url": "snapshot.cgi", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 257 - }, - { - "url": "ch0_0.h264", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 254 - }, - { - "url": "mjpg/1/video.mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 253 - }, - { - "url": "axis-cgi/mjpg/video.cgi?camera=[CHANNEL]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 247 - }, - { - "url": "videostream.cgi?rate=0&user=[USERNAME]&pwd=[PASSWORD]", - "type": "MJPEG", - "protocol": "http", - "port": 81, - "notes": "", - "model_count": 245 - }, - { - "url": "mjpeg.cgi?user=[USERNAME]&password=[PASSWORD]&channel=[CHANNEL]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 244 - }, - { - "url": "video.cgi?resolution=[WIDTH]x[HEIGHT]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 240 - }, - { - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 239 - }, - { - "url": "/ucast/11", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 233 - }, - { - "url": "img/snapshot.cgi?size=3", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 232 - }, - { - "url": "videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 228 - }, - { - "url": "/0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 220 - }, - { - "url": "/axis-cgi/mjpg/video.cgi", - "type": "VLC", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 220 - }, - { - "url": "mpeg4", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 218 - }, - { - "url": "video.mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 217 - }, - { - "url": "videostream.cgi?user=[USERNAME]&password=[PASSWORD]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 214 - }, - { - "url": "cgi-bin/net_jpeg.cgi?ch=[CHANNEL]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 214 - }, - { - "url": "snapshot.jpg?account=[USERNAME]&password=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 214 - }, - { - "url": "videostream.asf?user=[USERNAME]&pwd=[PASSWORD]&resolution=[WIDTH]*[HEIGHT]", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 212 - }, - { - "url": "axis-media/media.amp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 212 - }, - { - "url": "/onvif1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 210 - }, - { - "url": "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=1.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 210 - }, - { - "url": "cgi-bin/viewer/video.jpg?resolution=640x480", - "type": "JPEG", - "protocol": "http", - "port": 1025, - "notes": "", - "model_count": 204 - }, - { - "url": "/videoMain", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 204 - }, - { - "url": "/mpeg4", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 203 - }, - { - "url": "videostream.cgi?resolution=8&rate=13", - "type": "FFMPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 200 - }, - { - "url": "/1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 199 - }, - { - "url": "/h264Preview_01_main", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 199 - }, - { - "url": "axis-media/media.amp?videocodec=h264&resolution=640x480", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 198 - }, - { - "url": "video.h264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 194 - }, - { - "url": "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]&count=0", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 193 - }, - { - "url": "h264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 193 - }, - { - "url": "/video.mjpg?q=30&fps=33&id=0.5", - "type": "FFMPEG", - "protocol": "http", - "port": 8090, - "notes": "", - "model_count": 191 - }, - { - "url": "cam1/mpeg4", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 189 - }, - { - "url": "/onvif-media/media.amp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 187 - }, - { - "url": "/h264_stream", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 185 - }, - { - "url": "/media/video1", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 183 - }, - { - "url": "/CH001.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 8554, - "notes": "", - "model_count": 180 - }, - { - "url": "cam[CHANNEL]/h264", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 179 - }, - { - "url": "/cam1/onvif-h264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 177 - }, - { - "url": "cgi-bin/video.cgi?msubmenu=mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 176 - }, - { - "url": "/axis-cgi/mjpg/video.cgi", - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "notes": "", - "model_count": 171 - }, - { - "url": "cgi-bin/video.jpg?size=2", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 170 - }, - { - "url": "videostream.cgi?usr=[USERNAME]&pwd=[PASSWORD]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 168 - }, - { - "url": "mjpeg.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 166 - }, - { - "url": "/H264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 166 - }, - { - "url": "VIDEO.CGI", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 165 - }, - { - "url": "/Streaming/Channels/2", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 163 - }, - { - "url": "videostream.cgi?", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 163 - }, - { - "url": "/video.h264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 162 - }, - { - "url": "MJPEG.CGI", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 161 - }, - { - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&resolution=[WIDTH]x[HEIGHT]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 161 - }, - { - "url": "nphMotionJpeg?Resolution=640x480&Quality=Standard", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 158 - }, - { - "url": "cgi-bin/videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 156 - }, - { - "url": "videoMain", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 155 - }, - { - "url": "video?submenu=mjpg", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 154 - }, - { - "url": "video.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 154 - }, - { - "url": "cgi/jpg/image.cgi", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 153 - }, - { - "url": "/h264Preview_01_sub", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 152 - }, - { - "url": "axis-cgi/mjpg/video.cgi?camera=1&resolution=[WIDTH]x[HEIGHT]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 152 - }, - { - "url": "cgi-bin/encoder?USER=[USERNAME]&PWD=[PASSWORD]&SNAPSHOT", - "type": "JPEG", - "protocol": "http", - "port": 7070, - "notes": "", - "model_count": 147 - }, - { - "url": "snap.jpg?JpegSize=XL", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 144 - }, - { - "url": "/", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 141 - }, - { - "url": "/stream2", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 140 - }, - { - "url": "cgi-bin/guest/Video.cgi?media=JPEG&channel=[CHANNEL]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 140 - }, - { - "url": "snap.jpg?usr=[USERNAME]&pwd=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 137 - }, - { - "url": "/live1.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 137 - }, - { - "url": "cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[USERNAME]&pwd=[PASSWORD]", - "type": "JPEG", - "protocol": "http", - "port": 88, - "notes": "", - "model_count": 136 - }, - { - "url": "axis-cgi/mjpg/video.cgi?date=1&clock=1&camera=[CHANNEL]&resolution=[WIDTH]x[HEIGHT]", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 133 - }, - { - "url": "/HighResolutionVideo", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 132 - }, - { - "url": "/img/video.asf", - "type": "FFMPEG", - "protocol": "mms", - "port": 554, - "notes": "", - "model_count": 129 - }, - { - "url": "img/video.sav", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 129 - }, - { - "url": "SnapshotJPEG?Resolution=320x240", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 128 - }, - { - "url": "play1.sdp", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 127 - }, - { - "url": "/mjpg/1/video.mjpg", - "type": "FFMPEG", - "protocol": "http", - "port": 8082, - "notes": "", - "model_count": 127 - }, - { - "url": "HighResolutionVideo", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 127 - }, - { - "url": "cam/realmonitor?channel=[CHANNEL]&subtype=1", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 125 - }, - { - "url": "/live.sdp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 124 - }, - { - "url": "1/h264major", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "notes": "", - "model_count": 124 - }, - { - "url": "snap.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 123 - }, - { - "url": "/", - "type": "FFMPEG", - "protocol": "http", - "port": 80, - "notes": "", - "model_count": 122 - }, - { - "url": "axis-cgi/jpg/image.cgi?camera=1&resolution=320x240&compression=25", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 121 - }, - { - "url": "MediaInput/h264", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 120 - }, - { - "url": "/ch0_0.264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 119 - }, - { - "url": "videostream.cgi?rate=0", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 119 - }, - { - "url": "/ONVIF/MediaInput", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 118 - }, - { - "url": "/axis-media/media.amp?videocodec=h264&resolution=640x480", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 117 - }, - { - "url": "/ch0_0.h264", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 116 - }, - { - "url": "/12", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 116 - }, - { - "url": "Image.jpg", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 115 - }, - { - "url": "cgi/mjpg/mjpg.cgi", - "type": "MJPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 114 - }, - { - "url": "/Streaming/Channels/102", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 10554, - "notes": "", - "model_count": 114 - }, - { - "url": "live/ch00_0", - "type": "VLC", - "protocol": "rtsp", - "port": 0, - "notes": "", - "model_count": 113 - }, - { - "url": "/axis-media/media.amp", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 112 - }, - { - "url": "cgi-bin/camera", - "type": "JPEG", - "protocol": "http", - "port": 0, - "notes": "", - "model_count": 112 - }, - { - "url": "/cam/realmonitor?channel=1&subtype=0", - "type": "FFMPEG", - "protocol": "rtsp", - "port": 554, - "notes": "", - "model_count": 111 - }, - { - "url": "/bubble/live?ch={channel}&stream=0", - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "notes": "Bubble Protocol main stream (XMeye/HiSilicon NVR/DVR - ZOSI, SANNCE, ANNKE, FLOUREON)", - "model_count": 5000 - }, - { - "url": "/bubble/live?ch={channel}&stream=1", - "type": "BUBBLE", - "protocol": "bubble", - "port": 80, - "notes": "Bubble Protocol sub stream (XMeye/HiSilicon NVR/DVR - lower quality)", - "model_count": 5000 - } -] \ No newline at end of file diff --git a/data/query_parameters.json b/data/query_parameters.json deleted file mode 100644 index 6793a0f..0000000 --- a/data/query_parameters.json +++ /dev/null @@ -1,258 +0,0 @@ -[ - "pwd", - "user", - "resolution", - "rate", - "channel", - "size", - "usr", - "subtype", - "loginuse", - "loginpas", - "chn", - "u", - "p", - "strm", - "password", - "camera", - "authbasic", - "JpegCam", - "cmd", - "clock", - "ch", - "date", - "fps", - "videocodec", - "Resolution", - "id", - "q", - "account", - "count", - "media", - "msubmenu", - "submenu", - "JpegSize", - "Quality", - "USER", - "PWD", - "action", - "compression", - "quality", - "stream", - "res", - "doublescan", - "CH", - "profile", - "audiostream", - "Codec", - "cam", - "Size", - "InputNumber", - "StreamNumber", - "unicast", - "proto", - "Status", - "capture", - "api", - "chno", - "name", - "type", - "videoCodecType", - "img", - "ssn", - "width", - "height", - "passwd", - "username", - "motion", - "nowprofileid", - "authBasic", - "camera_no", - "animation", - "pic_size", - "token", - "STREAM", - "UID", - "imgprof", - "oids", - "AUDIO", - "CHOPIMAGE", - "WANTIMAGE", - "SENDEMPTYIMAGES", - "Audio", - "snap", - "caching", - "Video", - "buffer", - "image_size", - "IDKey", - "time", - "Width", - "Height", - "Fps", - "session_id", - "prio", - "frame", - "page", - "encode", - "THREAD_ID", - "pass", - "streamType", - "balls", - "transportmode", - "Acc", - "Pwd", - "webcamPWD", - "Cookie", - "Camera", - "previewsize", - "refresh", - "oldbrowser", - "audio", - "ServerId", - "AppKey", - "CameraId", - "PortId", - "PauseTime", - "FwCgiVer", - "framerate", - "port", - "app", - "snapshot", - "Channel", - "Live", - "BandWidth", - "connect", - "vmdinfo", - "frame_count", - "mode", - "codec", - "fmt", - "camid", - "chid", - "cnt", - "dsess", - "dsess_nid", - "dsess_sn", - "dtoken", - "liveimage", - "Language", - "si", - "mon", - "r", - "multipart", - "boundary", - "VideoType", - "ds", - "hfrom_handle", - "adfa", - "Sw", - "serverpush", - "CAM", - "sync", - "display_mode", - "Q", - "partnerId", - "Profile", - "streamid", - "format", - "streamprofile", - "download", - "pw", - "streamtype", - "truenph", - "MODE", - "ID", - "PW", - "VER", - "dev", - "profileid", - "chID", - "linkType", - "uri", - "CARD", - "JkMjAyMQ", - "dflag", - "next_file", - "Direction", - "PresetOperation", - "Data", - "Type", - "PanTiltMin", - "RPeriod", - "Sound", - "Mode", - "SendMethod", - "View", - "license", - "jpeg", - "textdisplay", - "displayfontsize", - "rotate", - "version", - "ChannelID", - "ChannelName", - "qp", - "ratelimit", - "monitor", - "scale", - "maxfps", - "CAPTURE", - "COMMAND", - "uuid", - "public", - "fitType", - "oid", - "CodecType", - "topic", - "filename", - "live", - "annotate", - "single", - "cameraId", - "bmljazEyMTk", - "MDExMQ", - "frameRate", - "doc", - "nc", - "deviceid", - "subject", - "ptype", - "RmVlZGIlNDBjazIwMjA", - "VwcDQxMjM", - "maxFrameRate", - "UFAxNTMzMDY", - "transmode", - "ww", - "wh", - "wx", - "wy", - "login", - "command", - "sleep", - "inst", - "lang", - "cmc", - "stream_id", - "sid", - "busid", - "devid", - "chanid", - "MA", - "Y", - "cxMjM", - "MGNrZXIlMjQyMg", - "nightvision", - "video", - "videoResolutionWidth", - "videoResolutionHeight", - "trackID", - "owNFBhcyQ", - "java", - "MTIzNA", - "c", - "JyMjg", - "speed", - "grant", - "channelno" -] \ No newline at end of file diff --git a/docker-compose.full.yml b/docker-compose.full.yml deleted file mode 100644 index 18b7b64..0000000 --- a/docker-compose.full.yml +++ /dev/null @@ -1,90 +0,0 @@ -version: '3.8' - -# Full home automation stack: Strix + go2rtc + Frigate -# This configuration shows how to use Strix together with go2rtc and Frigate - -services: - # Strix - Camera Stream Discovery - strix: - image: eduard256/strix:latest - container_name: strix - restart: unless-stopped - network_mode: host - environment: - - STRIX_LOG_LEVEL=info - - STRIX_LOG_FORMAT=json - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4567/api/v1/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 10s - - # go2rtc - Universal Stream Server - go2rtc: - image: alexxit/go2rtc:latest - container_name: go2rtc - restart: unless-stopped - ports: - - "1984:1984" # Web UI - - "8554:8554" # RTSP - - "8555:8555" # WebRTC - volumes: - - ./go2rtc.yaml:/config/go2rtc.yaml:ro - networks: - - cameras - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:1984"] - interval: 30s - timeout: 10s - retries: 3 - - # Frigate - NVR with Object Detection - frigate: - image: ghcr.io/blakeblackshear/frigate:stable - container_name: frigate - restart: unless-stopped - privileged: true - shm_size: "256mb" - ports: - - "5000:5000" # Web UI - - "8971:8971" # Go2RTC internal - - "1935:1935" # RTMP - volumes: - - ./frigate.yml:/config/config.yml:ro - - frigate-media:/media/frigate - - /etc/localtime:/etc/localtime:ro - environment: - - FRIGATE_RTSP_PASSWORD=password - networks: - - cameras - depends_on: - - go2rtc - -networks: - cameras: - driver: bridge - ipam: - config: - - subnet: 172.25.0.0/24 - -volumes: - frigate-media: - driver: local - -# Usage workflow: -# 1. Use Strix to discover camera streams: http://localhost:4567 -# 2. Copy discovered stream URLs to go2rtc.yaml -# 3. Configure go2rtc streams: http://localhost:1984 -# 4. Add streams to Frigate config: frigate.yml -# 5. View recordings and detections: http://localhost:5000 -# -# Network communication: -# - Strix discovers streams from cameras (external network) -# - go2rtc receives streams from cameras and re-streams -# - Frigate receives streams from go2rtc (internal network) -# -# All services can communicate using container names: -# - http://strix:4567 -# - http://go2rtc:1984 -# - http://frigate:5000 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 8e705a2..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,54 +0,0 @@ -version: '3' - -services: - strix: - image: eduard256/strix:latest - # Or build locally: - # build: . - container_name: strix - restart: unless-stopped - network_mode: host - - environment: - # Logging configuration - - STRIX_LOG_LEVEL=info - - STRIX_LOG_FORMAT=json - - # Optional: Override default port - # - STRIX_API_LISTEN=:4567 - - # Optional: Custom data path - # - STRIX_DATA_PATH=/app/data - - # volumes: - # Optional: Mount custom configuration - # - ./strix.yaml:/app/strix.yaml:ro - - # Optional: Mount custom camera database - # - ./data:/app/data:ro - - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4567/api/v1/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 10s - - # Optional: Resource limits - # deploy: - # resources: - # limits: - # cpus: '1.0' - # memory: 512M - # reservations: - # cpus: '0.5' - # memory: 256M - -# Usage: -# 1. Start: docker-compose up -d -# 2. View logs: docker-compose logs -f strix -# 3. Stop: docker-compose down -# 4. Restart: docker-compose restart strix -# -# Access WebUI: http://localhost:4567 -# Access API: http://localhost:4567/api/v1/health diff --git a/go.mod b/go.mod index 45cb83a..d2aa909 100644 --- a/go.mod +++ b/go.mod @@ -1,40 +1,26 @@ -module github.com/eduard256/Strix +module github.com/eduard256/strix -go 1.24.0 - -toolchain go1.24.9 +go 1.26 require ( github.com/AlexxIT/go2rtc v1.9.14 - github.com/IOTechSystems/onvif v1.2.0 - github.com/go-chi/chi/v5 v5.2.3 - github.com/go-playground/validator/v10 v10.28.0 - github.com/lithammer/fuzzysearch v1.1.8 - gopkg.in/yaml.v3 v3.0.1 + github.com/mattn/go-sqlite3 v1.14.37 + github.com/miekg/dns v1.1.72 + github.com/rs/zerolog v1.34.0 ) require ( - github.com/beevik/etree v1.4.1 // indirect - github.com/clbanning/mxj/v2 v2.7.0 // indirect - github.com/elgs/gostrgen v0.0.0-20220325073726-0c3e00d082f6 // indirect - github.com/gabriel-vasile/mimetype v1.4.10 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/google/go-cmp v0.7.0 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/leodido/go-urn v1.4.0 // indirect - github.com/miekg/dns v1.1.70 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.16 // indirect github.com/pion/rtp v1.10.0 // indirect github.com/pion/sdp/v3 v3.0.17 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/tadglines/go-pkgs v0.0.0-20210623144937-b983b20f54f9 // indirect - golang.org/x/crypto v0.47.0 // indirect + github.com/sigurn/crc16 v0.0.0-20240131213347-83fcde1e29d1 // indirect + github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f // indirect golang.org/x/mod v0.32.0 // indirect golang.org/x/net v0.49.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.40.0 // indirect - golang.org/x/text v0.33.0 // indirect golang.org/x/tools v0.41.0 // indirect - gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) diff --git a/go.sum b/go.sum index 008ce7d..6895456 100644 --- a/go.sum +++ b/go.sum @@ -1,101 +1,54 @@ github.com/AlexxIT/go2rtc v1.9.14 h1:HjaZ2pR64nTkoTZcKM8Zjybg7swyCZbA8Biru1mbqcY= github.com/AlexxIT/go2rtc v1.9.14/go.mod h1:fcN11KXBbIcExYRqMVDlW7amLZ4/z+hpr5+318fBA9U= -github.com/IOTechSystems/onvif v1.2.0 h1:vplyPdhFhMRtIdkEbQIkTlrKjXpeDj+WUTt5UW61ZcI= -github.com/IOTechSystems/onvif v1.2.0/go.mod h1:/dTr5BtFaGojYGJ2rEBIVWh3seGIcSuCJhcK9zwTsk0= -github.com/beevik/etree v1.4.1 h1:PmQJDDYahBGNKDcpdX8uPy1xRCwoCGVUiW669MEirVI= -github.com/beevik/etree v1.4.1/go.mod h1:gPNJNaBGVZ9AwsidazFZyygnd+0pAU38N4D+WemwKNs= -github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= -github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elgs/gostrgen v0.0.0-20220325073726-0c3e00d082f6 h1:x9TA+vnGEyqmWY+eA9HfgxNRkOQqwiEpFE9IPXSGuEA= -github.com/elgs/gostrgen v0.0.0-20220325073726-0c3e00d082f6/go.mod h1:wruC5r2gHdr/JIUs5Rr1V45YtsAzKXZxAnn/5rPC97g= -github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= -github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE= -github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= -github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4= -github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4= -github.com/miekg/dns v1.1.70 h1:DZ4u2AV35VJxdD9Fo9fIWm119BsQL5cZU1cQ9s0LkqA= -github.com/miekg/dns v1.1.70/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.37 h1:3DOZp4cXis1cUIpCfXLtmlGolNLp2VEqhiB/PARNBIg= +github.com/mattn/go-sqlite3 v1.14.37/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= +github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= +github.com/pion/rtcp v1.2.16/go.mod h1:/as7VKfYbs5NIb4h6muQ35kQF/J0ZVNz2Z3xKoCBYOo= github.com/pion/rtp v1.10.0 h1:XN/xca4ho6ZEcijpdF2VGFbwuHUfiIMf3ew8eAAE43w= github.com/pion/rtp v1.10.0/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= github.com/pion/sdp/v3 v3.0.17 h1:9SfLAW/fF1XC8yRqQ3iWGzxkySxup4k4V7yN8Fs8nuo= github.com/pion/sdp/v3 v3.0.17/go.mod h1:9tyKzznud3qiweZcD86kS0ff1pGYB3VX+Bcsmkx6IXo= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/sigurn/crc16 v0.0.0-20240131213347-83fcde1e29d1 h1:NVK+OqnavpyFmUiKfUMHrpvbCi2VFoWTrcpI7aDaJ2I= +github.com/sigurn/crc16 v0.0.0-20240131213347-83fcde1e29d1/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= +github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f h1:1R9KdKjCNSd7F8iGTxIpoID9prlYH8nuNYKt0XvweHA= +github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f/go.mod h1:vQhwQ4meQEDfahT5kd61wLAF5AAeh5ZPLVI4JJ/tYo8= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/tadglines/go-pkgs v0.0.0-20210623144937-b983b20f54f9 h1:aeN+ghOV0b2VCmKKO3gqnDQ8mLbpABZgRR2FVYx4ouI= -github.com/tadglines/go-pkgs v0.0.0-20210623144937-b983b20f54f9/go.mod h1:roo6cZ/uqpwKMuvPG0YmzI5+AmUiMWfjCBZpGXqbTxE= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/api/api.go b/internal/api/api.go new file mode 100644 index 0000000..601f0b4 --- /dev/null +++ b/internal/api/api.go @@ -0,0 +1,126 @@ +package api + +import ( + "embed" + "encoding/json" + "io/fs" + "net" + "net/http" + "time" + + "github.com/eduard256/strix/internal/app" + "github.com/rs/zerolog" +) + +var log zerolog.Logger + +var Handler http.Handler + +func Init() { + listen := app.Env("STRIX_LISTEN", ":4567") + + log = app.GetLogger("api") + + HandleFunc("api", apiHandler) + HandleFunc("api/health", apiHealth) + HandleFunc("api/log", apiLog) + + // serve frontend from embedded web/ directory + if sub, err := fs.Sub(webFS, "web"); err == nil { + http.Handle("/", http.FileServer(http.FS(sub))) + } + + Handler = middlewareCORS(http.DefaultServeMux) + + if log.Trace().Enabled() { + Handler = middlewareLog(Handler) + } + + go listen_serve("tcp", listen) +} + +//go:embed web +var webFS embed.FS + +func listen_serve(network, address string) { + ln, err := net.Listen(network, address) + if err != nil { + log.Error().Err(err).Msg("[api] listen") + return + } + + log.Info().Str("addr", address).Msg("[api] listen") + + server := http.Server{ + Handler: Handler, + ReadTimeout: 5 * time.Second, + WriteTimeout: 5 * time.Minute, // long for test sessions + } + if err = server.Serve(ln); err != nil { + log.Fatal().Err(err).Msg("[api] serve") + } +} + +// HandleFunc registers handler on http.DefaultServeMux with "/" prefix +func HandleFunc(pattern string, handler http.HandlerFunc) { + if len(pattern) == 0 || pattern[0] != '/' { + pattern = "/" + pattern + } + log.Trace().Str("path", pattern).Msg("[api] register") + http.HandleFunc(pattern, handler) +} + +// ResponseJSON writes JSON response with Content-Type header +func ResponseJSON(w http.ResponseWriter, v any) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(v) +} + +// Error logs error and writes HTTP error response +func Error(w http.ResponseWriter, err error, code int) { + log.Error().Err(err).Caller(1).Send() + http.Error(w, err.Error(), code) +} + +func middlewareCORS(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type") + if r.Method == "OPTIONS" { + return + } + next.ServeHTTP(w, r) + }) +} + +func middlewareLog(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + log.Trace().Msgf("[api] %s %s %s", r.Method, r.URL, r.RemoteAddr) + next.ServeHTTP(w, r) + }) +} + +func apiHandler(w http.ResponseWriter, r *http.Request) { + ResponseJSON(w, app.Info) +} + +func apiHealth(w http.ResponseWriter, r *http.Request) { + ResponseJSON(w, map[string]any{ + "version": app.Version, + "uptime": time.Since(app.StartTime).String(), + }) +} + +func apiLog(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case "GET": + w.Header().Set("Content-Type", "application/jsonlines") + app.MemoryLog.WriteTo(w) + case "DELETE": + app.MemoryLog.Reset() + w.WriteHeader(http.StatusNoContent) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} diff --git a/internal/api/handlers/discover.go b/internal/api/handlers/discover.go deleted file mode 100644 index 7a8f58a..0000000 --- a/internal/api/handlers/discover.go +++ /dev/null @@ -1,141 +0,0 @@ -package handlers - -import ( - "encoding/json" - "net/http" - - "github.com/go-playground/validator/v10" - "github.com/eduard256/Strix/internal/camera/discovery" - "github.com/eduard256/Strix/internal/models" - "github.com/eduard256/Strix/internal/utils/logger" - "github.com/eduard256/Strix/pkg/sse" -) - -// DiscoverHandler handles stream discovery requests -type DiscoverHandler struct { - scanner *discovery.Scanner - sseServer *sse.Server - validator *validator.Validate - secrets *logger.SecretStore - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) } -} - -// NewDiscoverHandler creates a new discover handler -func NewDiscoverHandler( - scanner *discovery.Scanner, - sseServer *sse.Server, - secrets *logger.SecretStore, - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) }, -) *DiscoverHandler { - return &DiscoverHandler{ - scanner: scanner, - sseServer: sseServer, - secrets: secrets, - validator: validator.New(), - logger: logger, - } -} - -// ServeHTTP handles discovery requests -func (h *DiscoverHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - - // Parse request body - var req models.StreamDiscoveryRequest - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - h.logger.Error("failed to decode discovery request", err) - h.sendErrorResponse(w, "Invalid request body", http.StatusBadRequest) - return - } - - // Set defaults - if req.ModelLimit <= 0 { - req.ModelLimit = 6 - } - if req.Timeout <= 0 { - req.Timeout = 240 // 4 minutes - } - if req.MaxStreams <= 0 { - req.MaxStreams = 10 - } - - // Validate request - if err := h.validator.Struct(req); err != nil { - h.logger.Error("discovery request validation failed", err) - h.sendErrorResponse(w, "Validation failed: "+err.Error(), http.StatusBadRequest) - return - } - - // Register password as a secret so it gets masked in all log output. - // The secret is automatically unregistered when the request completes. - if req.Password != "" { - h.secrets.Add(req.Password) - defer h.secrets.Remove(req.Password) - } - - h.logger.Info("stream discovery requested", - "target", req.Target, - "model", req.Model, - "timeout", req.Timeout, - "max_streams", req.MaxStreams, - "remote_addr", r.RemoteAddr, - ) - - // Check if SSE is supported - flusher, ok := w.(http.Flusher) - if !ok { - h.logger.Info("SSE not supported by client", "remote_addr", r.RemoteAddr) - h.sendErrorResponse(w, "SSE not supported", http.StatusInternalServerError) - return - } - - // Set SSE headers - w.Header().Set("Content-Type", "text/event-stream") - w.Header().Set("Cache-Control", "no-cache") - w.Header().Set("Connection", "keep-alive") - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("X-Accel-Buffering", "no") // Disable Nginx buffering - - // Flush headers - flusher.Flush() - - // Create SSE stream writer - streamWriter, err := h.sseServer.NewStreamWriter(w, r) - if err != nil { - h.logger.Error("failed to create SSE stream", err) - return - } - defer streamWriter.Close() - - // Perform discovery - result, err := h.scanner.Scan(r.Context(), req, streamWriter) - if err != nil { - h.logger.Error("discovery failed", err) - _ = streamWriter.SendError(err) - return - } - - h.logger.Info("discovery completed", - "target", req.Target, - "tested", result.TotalTested, - "found", result.TotalFound, - "duration", result.Duration, - ) -} - -// sendErrorResponse sends an error response for non-SSE requests -func (h *DiscoverHandler) sendErrorResponse(w http.ResponseWriter, message string, statusCode int) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(statusCode) - - response := map[string]interface{}{ - "error": true, - "message": message, - "code": statusCode, - } - - _ = json.NewEncoder(w).Encode(response) -} \ No newline at end of file diff --git a/internal/api/handlers/health.go b/internal/api/handlers/health.go deleted file mode 100644 index 24fb370..0000000 --- a/internal/api/handlers/health.go +++ /dev/null @@ -1,82 +0,0 @@ -package handlers - -import ( - "encoding/json" - "net/http" - "runtime" - "time" -) - -// HealthResponse represents health check response -type HealthResponse struct { - Status string `json:"status"` - Version string `json:"version"` - Uptime int64 `json:"uptime"` // seconds - Timestamp string `json:"timestamp"` - System SystemInfo `json:"system"` - Services map[string]string `json:"services"` -} - -// SystemInfo contains system information -type SystemInfo struct { - GoVersion string `json:"go_version"` - NumGoroutine int `json:"num_goroutines"` - NumCPU int `json:"num_cpu"` - MemoryMB uint64 `json:"memory_mb"` -} - -var startTime = time.Now() - -// HealthHandler handles health check endpoint -type HealthHandler struct { - version string - logger interface{ Info(string, ...any) } -} - -// NewHealthHandler creates a new health handler -func NewHealthHandler(version string, logger interface{ Info(string, ...any) }) *HealthHandler { - return &HealthHandler{ - version: version, - logger: logger, - } -} - -// ServeHTTP handles health check requests -func (h *HealthHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet && r.Method != http.MethodHead { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - - h.logger.Info("health check requested", "remote_addr", r.RemoteAddr) - - // Get memory stats - var memStats runtime.MemStats - runtime.ReadMemStats(&memStats) - - response := HealthResponse{ - Status: "healthy", - Version: h.version, - Uptime: int64(time.Since(startTime).Seconds()), - Timestamp: time.Now().Format(time.RFC3339), - System: SystemInfo{ - GoVersion: runtime.Version(), - NumGoroutine: runtime.NumGoroutine(), - NumCPU: runtime.NumCPU(), - MemoryMB: memStats.Alloc / 1024 / 1024, - }, - Services: map[string]string{ - "api": "running", - "database": "loaded", - "scanner": "ready", - "sse": "active", - }, - } - - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - - if err := json.NewEncoder(w).Encode(response); err != nil { - h.logger.Info("failed to encode health response", "error", err.Error()) - } -} \ No newline at end of file diff --git a/internal/api/handlers/probe.go b/internal/api/handlers/probe.go deleted file mode 100644 index d4b2190..0000000 --- a/internal/api/handlers/probe.go +++ /dev/null @@ -1,82 +0,0 @@ -package handlers - -import ( - "encoding/json" - "net" - "net/http" - - "github.com/eduard256/Strix/internal/camera/discovery" -) - -// ProbeHandler handles device probe requests. -// GET /api/v1/probe?ip=192.168.1.50 -type ProbeHandler struct { - probeService *discovery.ProbeService - logger interface { - Debug(string, ...any) - Error(string, error, ...any) - Info(string, ...any) - } -} - -// NewProbeHandler creates a new probe handler. -func NewProbeHandler( - probeService *discovery.ProbeService, - logger interface { - Debug(string, ...any) - Error(string, error, ...any) - Info(string, ...any) - }, -) *ProbeHandler { - return &ProbeHandler{ - probeService: probeService, - logger: logger, - } -} - -// ServeHTTP handles probe requests. -func (h *ProbeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodGet { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - - ip := r.URL.Query().Get("ip") - if ip == "" { - h.sendError(w, "Missing required parameter: ip", http.StatusBadRequest) - return - } - - // Validate IP format - if net.ParseIP(ip) == nil { - h.sendError(w, "Invalid IP address: "+ip, http.StatusBadRequest) - return - } - - h.logger.Info("probe requested", "ip", ip, "remote_addr", r.RemoteAddr) - - // Run probe - result := h.probeService.Probe(r.Context(), ip) - - // Send response - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - - if err := json.NewEncoder(w).Encode(result); err != nil { - h.logger.Error("failed to encode probe response", err) - } -} - -// sendError sends a JSON error response. -func (h *ProbeHandler) sendError(w http.ResponseWriter, message string, statusCode int) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(statusCode) - - response := map[string]interface{}{ - "error": true, - "message": message, - "code": statusCode, - } - - _ = json.NewEncoder(w).Encode(response) -} diff --git a/internal/api/handlers/search.go b/internal/api/handlers/search.go deleted file mode 100644 index fec1288..0000000 --- a/internal/api/handlers/search.go +++ /dev/null @@ -1,99 +0,0 @@ -package handlers - -import ( - "encoding/json" - "net/http" - - "github.com/go-playground/validator/v10" - "github.com/eduard256/Strix/internal/camera/database" - "github.com/eduard256/Strix/internal/models" -) - -// SearchHandler handles camera search requests -type SearchHandler struct { - searchEngine *database.SearchEngine - validator *validator.Validate - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) } -} - -// NewSearchHandler creates a new search handler -func NewSearchHandler( - searchEngine *database.SearchEngine, - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) }, -) *SearchHandler { - return &SearchHandler{ - searchEngine: searchEngine, - validator: validator.New(), - logger: logger, - } -} - -// ServeHTTP handles search requests -func (h *SearchHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - - // Parse request body - var req models.CameraSearchRequest - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - h.logger.Error("failed to decode search request", err) - h.sendErrorResponse(w, "Invalid request body", http.StatusBadRequest) - return - } - - // Set default limit if not provided - if req.Limit <= 0 { - req.Limit = 10 - } - - // Validate request - if err := h.validator.Struct(req); err != nil { - h.logger.Error("search request validation failed", err) - h.sendErrorResponse(w, "Validation failed: "+err.Error(), http.StatusBadRequest) - return - } - - h.logger.Info("camera search requested", - "query", req.Query, - "limit", req.Limit, - "remote_addr", r.RemoteAddr, - ) - - // Perform search - response, err := h.searchEngine.Search(req.Query, req.Limit) - if err != nil { - h.logger.Error("search failed", err) - h.sendErrorResponse(w, "Search failed", http.StatusInternalServerError) - return - } - - // Send response - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - - if err := json.NewEncoder(w).Encode(response); err != nil { - h.logger.Error("failed to encode search response", err) - } - - h.logger.Info("search completed", - "query", req.Query, - "returned", response.Returned, - "total", response.Total, - ) -} - -// sendErrorResponse sends an error response -func (h *SearchHandler) sendErrorResponse(w http.ResponseWriter, message string, statusCode int) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(statusCode) - - response := map[string]interface{}{ - "error": true, - "message": message, - "code": statusCode, - } - - _ = json.NewEncoder(w).Encode(response) -} \ No newline at end of file diff --git a/internal/api/routes.go b/internal/api/routes.go deleted file mode 100644 index a014190..0000000 --- a/internal/api/routes.go +++ /dev/null @@ -1,168 +0,0 @@ -package api - -import ( - "net/http" - - "github.com/go-chi/chi/v5" - "github.com/go-chi/chi/v5/middleware" - "github.com/eduard256/Strix/internal/api/handlers" - "github.com/eduard256/Strix/internal/camera/database" - "github.com/eduard256/Strix/internal/camera/discovery" - "github.com/eduard256/Strix/internal/camera/stream" - "github.com/eduard256/Strix/internal/config" - logutil "github.com/eduard256/Strix/internal/utils/logger" - "github.com/eduard256/Strix/pkg/sse" -) - -// Server represents the API server -type Server struct { - router chi.Router - config *config.Config - loader *database.Loader - searchEngine *database.SearchEngine - scanner *discovery.Scanner - probeService *discovery.ProbeService - sseServer *sse.Server - secrets *logutil.SecretStore - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) } -} - -// NewServer creates a new API server -func NewServer( - cfg *config.Config, - secrets *logutil.SecretStore, - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) }, -) (*Server, error) { - // Initialize database loader - loader := database.NewLoader( - cfg.Database.BrandsPath, - cfg.Database.PatternsPath, - cfg.Database.ParametersPath, - logger, - ) - - // Load query parameters for URL builder - queryParams, err := loader.LoadQueryParameters() - if err != nil { - return nil, err - } - - // Initialize search engine - searchEngine := database.NewSearchEngine(loader, logger) - - // Initialize stream components - builder := stream.NewBuilder(queryParams, logger) - tester := stream.NewTester(cfg.Scanner.FFProbeTimeout, logger) - - // Initialize ONVIF discovery - onvif := discovery.NewONVIFDiscovery(logger) - - // Initialize scanner - scannerConfig := discovery.ScannerConfig{ - WorkerPoolSize: cfg.Scanner.WorkerPoolSize, - DefaultTimeout: cfg.Scanner.DefaultTimeout, - MaxStreams: cfg.Scanner.MaxStreams, - ModelSearchLimit: cfg.Scanner.ModelSearchLimit, - FFProbeTimeout: cfg.Scanner.FFProbeTimeout, - } - - scanner := discovery.NewScanner( - loader, - searchEngine, - builder, - tester, - onvif, - scannerConfig, - logger, - ) - - // Initialize SSE server - sseServer := sse.NewServer(logger) - - // Initialize OUI database for vendor identification - ouiDB := discovery.NewOUIDatabase() - if err := ouiDB.LoadFromFile(cfg.Database.OUIPath); err != nil { - logger.Error("failed to load OUI database, vendor lookup will be unavailable", err) - } else { - logger.Info("OUI database loaded", "entries", ouiDB.Size()) - } - - // Initialize ProbeService with all probers - probers := []discovery.Prober{ - &discovery.DNSProber{}, - discovery.NewARPProber(ouiDB), - &discovery.MDNSProber{}, - &discovery.HTTPProber{}, - } - probeService := discovery.NewProbeService(probers, logger) - - // Create server - server := &Server{ - router: chi.NewRouter(), - config: cfg, - loader: loader, - searchEngine: searchEngine, - scanner: scanner, - probeService: probeService, - sseServer: sseServer, - secrets: secrets, - logger: logger, - } - - // Setup routes - server.setupRoutes() - - return server, nil -} - -// setupRoutes configures all routes and middleware -func (s *Server) setupRoutes() { - // Global middleware - s.router.Use(middleware.RequestID) - s.router.Use(middleware.RealIP) - s.router.Use(middleware.Logger) - s.router.Use(middleware.Recoverer) - // Note: No global timeout middleware - endpoints use context-based timeouts from request parameters - - // CORS middleware - s.router.Use(func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") - w.Header().Set("Access-Control-Allow-Headers", "Accept, Authorization, Content-Type, X-Request-ID") - w.Header().Set("Access-Control-Max-Age", "3600") - - if r.Method == "OPTIONS" { - w.WriteHeader(http.StatusNoContent) - return - } - - next.ServeHTTP(w, r) - }) - }) - - // API routes (mounted at /api/v1 in main.go) - // Health check (GET + HEAD for Docker/CasaOS healthcheck compatibility) - healthHandler := handlers.NewHealthHandler(s.config.Version, s.logger).ServeHTTP - s.router.Get("/health", healthHandler) - s.router.Head("/health", healthHandler) - - // Camera search - s.router.Post("/cameras/search", handlers.NewSearchHandler(s.searchEngine, s.logger).ServeHTTP) - - // Stream discovery (SSE) - s.router.Post("/streams/discover", handlers.NewDiscoverHandler(s.scanner, s.sseServer, s.secrets, s.logger).ServeHTTP) - - // Device probe (ping + DNS + ARP/OUI + mDNS) - s.router.Get("/probe", handlers.NewProbeHandler(s.probeService, s.logger).ServeHTTP) -} - -// ServeHTTP implements http.Handler -func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - s.router.ServeHTTP(w, r) -} - -// GetRouter returns the chi router -func (s *Server) GetRouter() chi.Router { - return s.router -} \ No newline at end of file diff --git a/internal/api/web/index.html b/internal/api/web/index.html new file mode 100644 index 0000000..de2ed02 --- /dev/null +++ b/internal/api/web/index.html @@ -0,0 +1,16 @@ + + + + + +Strix + + + +

Strix 2.0

+ + diff --git a/internal/app/app.go b/internal/app/app.go new file mode 100644 index 0000000..34fbe7b --- /dev/null +++ b/internal/app/app.go @@ -0,0 +1,38 @@ +package app + +import ( + "os" + "runtime" + "time" + + "github.com/rs/zerolog" +) + +var Version string + +var Logger zerolog.Logger + +var Info = map[string]any{} + +var StartTime = time.Now() + +// DB is the shared SQLite database path +var DB string + +func Init() { + initLogger() + + Info["version"] = Version + Info["platform"] = runtime.GOARCH + + Logger.Info().Str("version", Version).Str("platform", runtime.GOARCH).Msg("[app] start") + + DB = Env("STRIX_DB_PATH", "cameras.db") +} + +func Env(key, def string) string { + if v := os.Getenv(key); v != "" { + return v + } + return def +} diff --git a/internal/app/log.go b/internal/app/log.go new file mode 100644 index 0000000..4f7effc --- /dev/null +++ b/internal/app/log.go @@ -0,0 +1,138 @@ +package app + +import ( + "io" + "os" + "regexp" + "strings" + "sync" + "time" + + "github.com/rs/zerolog" +) + +var MemoryLog = NewRingLog(16, 64*1024) + +func GetLogger(module string) zerolog.Logger { + return Logger.With().Str("module", module).Logger() +} + +func initLogger() { + level := Env("STRIX_LOG_LEVEL", "info") + lvl, err := zerolog.ParseLevel(level) + if err != nil { + lvl = zerolog.InfoLevel + } + + writer := zerolog.ConsoleWriter{ + Out: os.Stdout, + TimeFormat: time.DateTime, + NoColor: !isTTY(), + } + + multi := io.MultiWriter(&writer, &SecretWriter{w: MemoryLog}) + + Logger = zerolog.New(multi).With().Timestamp().Logger().Level(lvl) +} + +func isTTY() bool { + fi, err := os.Stdout.Stat() + if err != nil { + return false + } + return fi.Mode()&os.ModeCharDevice != 0 +} + +// SecretWriter masks passwords in log output +type SecretWriter struct { + w io.Writer +} + +var reURLPassword = regexp.MustCompile(`://([^:]+):([^@]+)@`) +var reQueryPassword = regexp.MustCompile(`(?i)(pass(?:word)?|pwd)=([^&\s"]+)`) + +func (s *SecretWriter) Write(p []byte) (int, error) { + masked := reURLPassword.ReplaceAll(p, []byte("://$1:***@")) + masked = reQueryPassword.ReplaceAll(masked, []byte("${1}=***")) + return s.w.Write(masked) +} + +// RingLog is a circular buffer for storing log entries in memory +type RingLog struct { + chunks [][]byte + pos int + mu sync.Mutex +} + +func NewRingLog(count, size int) *RingLog { + chunks := make([][]byte, count) + for i := range chunks { + chunks[i] = make([]byte, 0, size) + } + return &RingLog{chunks: chunks} +} + +func (r *RingLog) Write(p []byte) (int, error) { + r.mu.Lock() + + chunk := r.chunks[r.pos] + if len(chunk)+len(p) > cap(chunk) { + r.pos = (r.pos + 1) % len(r.chunks) + r.chunks[r.pos] = r.chunks[r.pos][:0] + chunk = r.chunks[r.pos] + } + r.chunks[r.pos] = append(chunk, p...) + + r.mu.Unlock() + return len(p), nil +} + +func (r *RingLog) WriteTo(w io.Writer) (int64, error) { + r.mu.Lock() + + var total int64 + start := (r.pos + 1) % len(r.chunks) + for i := range r.chunks { + idx := (start + i) % len(r.chunks) + chunk := r.chunks[idx] + if len(chunk) == 0 { + continue + } + n, err := w.Write(chunk) + total += int64(n) + if err != nil { + r.mu.Unlock() + return total, err + } + } + + r.mu.Unlock() + return total, nil +} + +func (r *RingLog) Reset() { + r.mu.Lock() + for i := range r.chunks { + r.chunks[i] = r.chunks[i][:0] + } + r.pos = 0 + r.mu.Unlock() +} + +// MaskURL masks password in a URL string for use in log messages +func MaskURL(rawURL string) string { + s := reURLPassword.ReplaceAllString(rawURL, "://$1:***@") + s = reQueryPassword.ReplaceAllString(s, "${1}=***") + return s +} + +// MaskPlaceholders masks password placeholders like [PASSWORD], [PASS], [PWD] +func MaskPlaceholders(s string) string { + r := strings.NewReplacer( + "[PASSWORD]", "[***]", "[password]", "[***]", + "[PASS]", "[***]", "[pass]", "[***]", + "[PWD]", "[***]", "[pwd]", "[***]", + "[PASWORD]", "[***]", "[pasword]", "[***]", + ) + return r.Replace(s) +} diff --git a/internal/camera/database/loader.go b/internal/camera/database/loader.go deleted file mode 100644 index 1a452f1..0000000 --- a/internal/camera/database/loader.go +++ /dev/null @@ -1,326 +0,0 @@ -package database - -import ( - "encoding/json" - "fmt" - "os" - "path/filepath" - "strings" - "sync" - - "github.com/eduard256/Strix/internal/models" -) - -// Loader handles efficient loading of camera database -type Loader struct { - brandsPath string - patternsPath string - parametersPath string - brandsCache map[string]*models.Camera - patternsCache []models.StreamPattern - paramsCache []string - mu sync.RWMutex - logger interface{ Debug(string, ...any); Error(string, error, ...any) } -} - -// NewLoader creates a new database loader -func NewLoader(brandsPath, patternsPath, parametersPath string, logger interface{ Debug(string, ...any); Error(string, error, ...any) }) *Loader { - return &Loader{ - brandsPath: brandsPath, - patternsPath: patternsPath, - parametersPath: parametersPath, - brandsCache: make(map[string]*models.Camera), - logger: logger, - } -} - -// LoadBrand loads a specific brand's camera data -func (l *Loader) LoadBrand(brandID string) (*models.Camera, error) { - l.mu.RLock() - if cached, ok := l.brandsCache[brandID]; ok { - l.mu.RUnlock() - return cached, nil - } - l.mu.RUnlock() - - // Load from file - filePath := filepath.Join(l.brandsPath, brandID+".json") - file, err := os.Open(filePath) - if err != nil { - if os.IsNotExist(err) { - return nil, fmt.Errorf("brand %s not found", brandID) - } - return nil, fmt.Errorf("failed to open brand file: %w", err) - } - defer func() { _ = file.Close() }() - - var camera models.Camera - decoder := json.NewDecoder(file) - if err := decoder.Decode(&camera); err != nil { - return nil, fmt.Errorf("failed to decode brand data: %w", err) - } - - // Cache the result - l.mu.Lock() - l.brandsCache[brandID] = &camera - l.mu.Unlock() - - return &camera, nil -} - -// ListBrands returns all available brand IDs -func (l *Loader) ListBrands() ([]string, error) { - files, err := os.ReadDir(l.brandsPath) - if err != nil { - return nil, fmt.Errorf("failed to read brands directory: %w", err) - } - - var brands []string - for _, file := range files { - if !file.IsDir() && strings.HasSuffix(file.Name(), ".json") { - // Skip index files - if file.Name() == "index.json" || file.Name() == "indexa.json" { - continue - } - brandID := strings.TrimSuffix(file.Name(), ".json") - brands = append(brands, brandID) - } - } - - return brands, nil -} - -// LoadPopularPatterns loads popular stream patterns -func (l *Loader) LoadPopularPatterns() ([]models.StreamPattern, error) { - l.mu.RLock() - if l.patternsCache != nil { - patterns := l.patternsCache - l.mu.RUnlock() - return patterns, nil - } - l.mu.RUnlock() - - file, err := os.Open(l.patternsPath) - if err != nil { - return nil, fmt.Errorf("failed to open patterns file: %w", err) - } - defer func() { _ = file.Close() }() - - var patterns []models.StreamPattern - decoder := json.NewDecoder(file) - if err := decoder.Decode(&patterns); err != nil { - return nil, fmt.Errorf("failed to decode patterns: %w", err) - } - - l.mu.Lock() - l.patternsCache = patterns - l.mu.Unlock() - - return patterns, nil -} - -// LoadQueryParameters loads supported query parameters -func (l *Loader) LoadQueryParameters() ([]string, error) { - l.mu.RLock() - if l.paramsCache != nil { - params := l.paramsCache - l.mu.RUnlock() - return params, nil - } - l.mu.RUnlock() - - file, err := os.Open(l.parametersPath) - if err != nil { - return nil, fmt.Errorf("failed to open parameters file: %w", err) - } - defer func() { _ = file.Close() }() - - var params []string - decoder := json.NewDecoder(file) - if err := decoder.Decode(¶ms); err != nil { - return nil, fmt.Errorf("failed to decode parameters: %w", err) - } - - l.mu.Lock() - l.paramsCache = params - l.mu.Unlock() - - return params, nil -} - -// StreamingSearch performs memory-efficient search across all brands -func (l *Loader) StreamingSearch(searchFunc func(*models.Camera) bool) ([]*models.Camera, error) { - files, err := os.ReadDir(l.brandsPath) - if err != nil { - return nil, fmt.Errorf("failed to read brands directory: %w", err) - } - - var results []*models.Camera - for _, file := range files { - if file.IsDir() || !strings.HasSuffix(file.Name(), ".json") { - continue - } - - // Skip index.json as it contains brand list, not camera data - if file.Name() == "index.json" || file.Name() == "indexa.json" { - continue - } - - filePath := filepath.Join(l.brandsPath, file.Name()) - camera, err := l.loadCameraFromFile(filePath) - if err != nil { - l.logger.Error("failed to load camera file", err, "file", file.Name()) - continue - } - - if searchFunc(camera) { - results = append(results, camera) - } - } - - return results, nil -} - -// loadCameraFromFile loads a camera from a file without caching -func (l *Loader) loadCameraFromFile(filePath string) (*models.Camera, error) { - file, err := os.Open(filePath) - if err != nil { - return nil, err - } - defer func() { _ = file.Close() }() - - var camera models.Camera - decoder := json.NewDecoder(file) - if err := decoder.Decode(&camera); err != nil { - return nil, err - } - - return &camera, nil -} - -// GetEntriesForModels returns all entries for specific models with similarity threshold -func (l *Loader) GetEntriesForModels(modelNames []string, similarityThreshold float64) ([]models.CameraEntry, error) { - entriesMap := make(map[string]models.CameraEntry) - - for _, modelName := range modelNames { - // Search for similar models across all brands - cameras, err := l.StreamingSearch(func(camera *models.Camera) bool { - for _, entry := range camera.Entries { - for _, model := range entry.Models { - similarity := calculateSimilarity(modelName, model) - if similarity >= similarityThreshold { - return true - } - } - } - return false - }) - - if err != nil { - return nil, err - } - - // Collect unique entries - for _, camera := range cameras { - for _, entry := range camera.Entries { - for _, model := range entry.Models { - similarity := calculateSimilarity(modelName, model) - if similarity >= similarityThreshold { - // Create unique key for deduplication - key := fmt.Sprintf("%s://%d/%s", entry.Protocol, entry.Port, entry.URL) - entriesMap[key] = entry - } - } - } - } - } - - // Convert map to slice - var entries []models.CameraEntry - for _, entry := range entriesMap { - entries = append(entries, entry) - } - - return entries, nil -} - -// calculateSimilarity calculates similarity between two strings (0.0 to 1.0) -func calculateSimilarity(s1, s2 string) float64 { - s1 = strings.ToLower(s1) - s2 = strings.ToLower(s2) - - if s1 == s2 { - return 1.0 - } - - // Simple Levenshtein-based similarity - maxLen := max(len(s1), len(s2)) - if maxLen == 0 { - return 1.0 - } - - distance := levenshteinDistance(s1, s2) - return 1.0 - float64(distance)/float64(maxLen) -} - -// levenshteinDistance calculates the Levenshtein distance between two strings -func levenshteinDistance(s1, s2 string) int { - if len(s1) == 0 { - return len(s2) - } - if len(s2) == 0 { - return len(s1) - } - - matrix := make([][]int, len(s1)+1) - for i := range matrix { - matrix[i] = make([]int, len(s2)+1) - matrix[i][0] = i - } - for j := range matrix[0] { - matrix[0][j] = j - } - - for i := 1; i <= len(s1); i++ { - for j := 1; j <= len(s2); j++ { - cost := 0 - if s1[i-1] != s2[j-1] { - cost = 1 - } - matrix[i][j] = min( - matrix[i-1][j]+1, - matrix[i][j-1]+1, - matrix[i-1][j-1]+cost, - ) - } - } - - return matrix[len(s1)][len(s2)] -} - -func min(values ...int) int { - minVal := values[0] - for _, v := range values[1:] { - if v < minVal { - minVal = v - } - } - return minVal -} - -func max(a, b int) int { - if a > b { - return a - } - return b -} - -// ClearCache clears the internal caches -func (l *Loader) ClearCache() { - l.mu.Lock() - defer l.mu.Unlock() - - l.brandsCache = make(map[string]*models.Camera) - l.patternsCache = nil - l.paramsCache = nil -} \ No newline at end of file diff --git a/internal/camera/database/search.go b/internal/camera/database/search.go deleted file mode 100644 index 03a62d9..0000000 --- a/internal/camera/database/search.go +++ /dev/null @@ -1,408 +0,0 @@ -package database - -import ( - "fmt" - "regexp" - "sort" - "strings" - "sync" - - "github.com/lithammer/fuzzysearch/fuzzy" - "github.com/eduard256/Strix/internal/models" -) - -// SearchEngine handles intelligent camera searching -type SearchEngine struct { - loader *Loader - logger interface{ Debug(string, ...any); Error(string, error, ...any) } -} - -// NewSearchEngine creates a new search engine -func NewSearchEngine(loader *Loader, logger interface{ Debug(string, ...any); Error(string, error, ...any) }) *SearchEngine { - return &SearchEngine{ - loader: loader, - logger: logger, - } -} - -// SearchResult represents a single search result with score -type SearchResult struct { - Camera *models.Camera - Score float64 -} - -// Search performs intelligent camera search -func (s *SearchEngine) Search(query string, limit int) (*models.CameraSearchResponse, error) { - if limit <= 0 { - limit = 10 - } - - // Normalize query - normalizedQuery := s.normalizeQuery(query) - tokens := s.tokenizeQuery(normalizedQuery) - - s.logger.Debug("searching cameras", "query", query, "normalized", normalizedQuery, "tokens", tokens) - - // Extract potential brand and model - brandToken, modelTokens := s.extractBrandModel(tokens) - - // Perform search - results, err := s.performSearch(brandToken, modelTokens, normalizedQuery) - if err != nil { - return nil, fmt.Errorf("search failed: %w", err) - } - - // Sort by score - sort.Slice(results, func(i, j int) bool { - return results[i].Score > results[j].Score - }) - - // Expand each camera into individual model entries with model-specific scores - type ModelResult struct { - Camera models.Camera - Score float64 - } - var modelResults []ModelResult - - for _, result := range results { - camera := result.Camera - - // Collect unique models with their scores - modelScores := make(map[string]float64) - for _, entry := range camera.Entries { - for _, model := range entry.Models { - if model != "" && model != "Other" { - // Calculate model-specific score - modelScore := s.calculateModelScore(model, modelTokens, normalizedQuery) - if modelScore > modelScores[model] { - modelScores[model] = modelScore - } - } - } - } - - // Create a separate camera entry for each unique model - for model, modelScore := range modelScores { - // Combine brand score with model score - finalScore := result.Score*0.3 + modelScore*0.7 - - expandedCamera := models.Camera{ - Brand: camera.Brand, - BrandID: camera.BrandID, - Model: model, - LastUpdated: camera.LastUpdated, - Source: camera.Source, - Website: camera.Website, - Entries: camera.Entries, - MatchScore: finalScore, - } - modelResults = append(modelResults, ModelResult{ - Camera: expandedCamera, - Score: finalScore, - }) - } - } - - // Sort by final score (best matches first) - sort.Slice(modelResults, func(i, j int) bool { - return modelResults[i].Score > modelResults[j].Score - }) - - // Apply limit - if len(modelResults) > limit { - modelResults = modelResults[:limit] - } - - // Convert to camera slice - cameras := make([]models.Camera, len(modelResults)) - for i, result := range modelResults { - cameras[i] = result.Camera - } - - return &models.CameraSearchResponse{ - Cameras: cameras, - Total: len(cameras), - Returned: len(cameras), - }, nil -} - -// normalizeQuery normalizes the search query -func (s *SearchEngine) normalizeQuery(query string) string { - // Convert to lowercase - normalized := strings.ToLower(query) - - // Remove multiple spaces - normalized = regexp.MustCompile(`\s+`).ReplaceAllString(normalized, " ") - - // Remove special characters but keep spaces - normalized = regexp.MustCompile(`[^a-z0-9\s\-]`).ReplaceAllString(normalized, " ") - - // Trim spaces - normalized = strings.TrimSpace(normalized) - - return normalized -} - -// tokenizeQuery splits query into tokens -func (s *SearchEngine) tokenizeQuery(query string) []string { - // Split by spaces and filter empty tokens - tokens := strings.Fields(query) - - var result []string - for _, token := range tokens { - if token != "" { - result = append(result, token) - } - } - - return result -} - -// extractBrandModel attempts to extract brand and model from tokens -func (s *SearchEngine) extractBrandModel(tokens []string) (string, []string) { - if len(tokens) == 0 { - return "", nil - } - - // First token is likely the brand - brandToken := tokens[0] - - // Rest are model tokens - var modelTokens []string - if len(tokens) > 1 { - modelTokens = tokens[1:] - } - - return brandToken, modelTokens -} - -// performSearch executes the actual search -func (s *SearchEngine) performSearch(brandToken string, modelTokens []string, fullQuery string) ([]SearchResult, error) { - var results []SearchResult - var mu sync.Mutex - var wg sync.WaitGroup - - // Get all brands - brands, err := s.loader.ListBrands() - if err != nil { - return nil, err - } - - // Search in parallel with limited concurrency - sem := make(chan struct{}, 10) // Limit to 10 concurrent searches - - for _, brandID := range brands { - wg.Add(1) - go func(brandID string) { - defer wg.Done() - sem <- struct{}{} - defer func() { <-sem }() - - // Calculate brand match score - brandScore := s.calculateBrandScore(brandID, brandToken) - - // Skip if brand score is too low - if brandScore < 0.3 { - return - } - - // Load brand data - camera, err := s.loader.LoadBrand(brandID) - if err != nil { - s.logger.Error("failed to load brand", err, "brand", brandID) - return - } - - // Calculate model scores for entries - maxModelScore := 0.0 - for _, entry := range camera.Entries { - for _, model := range entry.Models { - modelScore := s.calculateModelScore(model, modelTokens, fullQuery) - if modelScore > maxModelScore { - maxModelScore = modelScore - } - } - } - - // Calculate final score - finalScore := s.calculateFinalScore(brandScore, maxModelScore) - - // Add to results if score is high enough - if finalScore >= 0.3 { - mu.Lock() - results = append(results, SearchResult{ - Camera: camera, - Score: finalScore, - }) - mu.Unlock() - } - }(brandID) - } - - wg.Wait() - return results, nil -} - -// calculateBrandScore calculates how well a brand matches -func (s *SearchEngine) calculateBrandScore(brandID, brandToken string) float64 { - brandID = strings.ToLower(brandID) - brandToken = strings.ToLower(brandToken) - - // Exact match - if brandID == brandToken { - return 1.0 - } - - // Remove hyphens for comparison - brandIDClean := strings.ReplaceAll(brandID, "-", "") - brandTokenClean := strings.ReplaceAll(brandToken, "-", "") - - if brandIDClean == brandTokenClean { - return 0.95 - } - - // Check if brand starts with token - if strings.HasPrefix(brandID, brandToken) || strings.HasPrefix(brandIDClean, brandTokenClean) { - return 0.85 - } - - // Check if token is contained in brand - if strings.Contains(brandID, brandToken) || strings.Contains(brandIDClean, brandTokenClean) { - return 0.75 - } - - // Fuzzy match - if fuzzy.Match(brandToken, brandID) { - return 0.6 - } - - // Calculate similarity - similarity := calculateSimilarity(brandID, brandToken) - return similarity * 0.5 -} - -// calculateModelScore calculates how well a model matches -func (s *SearchEngine) calculateModelScore(model string, modelTokens []string, fullQuery string) float64 { - model = strings.ToLower(model) - fullQuery = strings.ToLower(fullQuery) - - // Check if full query matches the model - if model == fullQuery { - return 1.0 - } - - // Check if model contains all tokens - modelNormalized := s.normalizeQuery(model) - allTokensFound := true - tokenMatchScore := 0.0 - - for _, token := range modelTokens { - if strings.Contains(modelNormalized, token) { - tokenMatchScore += 0.2 - } else { - allTokensFound = false - } - } - - if allTokensFound && len(modelTokens) > 0 { - return 0.8 + tokenMatchScore/float64(len(modelTokens))*0.2 - } - - // Fuzzy match on full model - modelCombined := strings.Join(modelTokens, "") - if fuzzy.Match(modelCombined, modelNormalized) { - return 0.6 - } - - // Calculate similarity - similarity := calculateSimilarity(modelNormalized, strings.Join(modelTokens, " ")) - return similarity * 0.5 -} - -// calculateFinalScore combines brand and model scores -func (s *SearchEngine) calculateFinalScore(brandScore, modelScore float64) float64 { - // If we have both brand and model matches - if brandScore > 0 && modelScore > 0 { - // Weighted average: brand 30%, model 70% - return brandScore*0.3 + modelScore*0.7 - } - - // If only brand matches - if brandScore > 0 { - return brandScore * 0.5 - } - - // If only model matches - return modelScore * 0.5 -} - -// SearchByModel searches for cameras by model name with fuzzy matching -func (s *SearchEngine) SearchByModel(modelName string, similarityThreshold float64, limit int) ([]models.Camera, error) { - if similarityThreshold <= 0 { - similarityThreshold = 0.8 - } - if limit <= 0 { - limit = 6 - } - - normalizedModel := s.normalizeQuery(modelName) - var results []SearchResult - - // Search through all brands - cameras, err := s.loader.StreamingSearch(func(camera *models.Camera) bool { - maxScore := 0.0 - for _, entry := range camera.Entries { - for _, model := range entry.Models { - normalizedEntryModel := s.normalizeQuery(model) - similarity := calculateSimilarity(normalizedModel, normalizedEntryModel) - - // Also check fuzzy match - if fuzzy.Match(normalizedModel, normalizedEntryModel) { - if similarity < 0.7 { - similarity = 0.7 - } - } - - if similarity > maxScore { - maxScore = similarity - } - } - } - - if maxScore >= similarityThreshold { - camera.MatchScore = maxScore - return true - } - return false - }) - - if err != nil { - return nil, err - } - - // Convert to SearchResult for sorting - for _, camera := range cameras { - results = append(results, SearchResult{ - Camera: camera, - Score: camera.MatchScore, - }) - } - - // Sort by score - sort.Slice(results, func(i, j int) bool { - return results[i].Score > results[j].Score - }) - - // Apply limit - if len(results) > limit { - results = results[:limit] - } - - // Convert back to Camera slice - var finalCameras []models.Camera - for _, result := range results { - finalCameras = append(finalCameras, *result.Camera) - } - - return finalCameras, nil -} \ No newline at end of file diff --git a/internal/camera/discovery/onvif_simple.go b/internal/camera/discovery/onvif_simple.go deleted file mode 100644 index 8e6ec3e..0000000 --- a/internal/camera/discovery/onvif_simple.go +++ /dev/null @@ -1,455 +0,0 @@ -package discovery - -import ( - "context" - "encoding/xml" - "fmt" - "io" - "net/url" - "strings" - "time" - - "github.com/IOTechSystems/onvif" - "github.com/IOTechSystems/onvif/media" - xsdonvif "github.com/IOTechSystems/onvif/xsd/onvif" - "github.com/eduard256/Strix/internal/models" -) - -// ONVIFDiscovery handles ONVIF device discovery and stream detection -type ONVIFDiscovery struct { - logger interface{ Debug(string, ...any); Error(string, error, ...any) } -} - -// NewONVIFDiscovery creates a new ONVIF discovery instance -func NewONVIFDiscovery(logger interface{ Debug(string, ...any); Error(string, error, ...any) }) *ONVIFDiscovery { - return &ONVIFDiscovery{ - logger: logger, - } -} - -// DiscoverStreamsForIP discovers all possible streams for a given IP -func (o *ONVIFDiscovery) DiscoverStreamsForIP(ctx context.Context, ip, username, password string) ([]models.DiscoveredStream, error) { - o.logger.Debug("=== ONVIF DiscoverStreamsForIP STARTED ===", - "ip", ip, - "username", username, - "password_len", len(password)) - - // Clean IP (remove port if present) - if idx := strings.IndexByte(ip, ':'); idx > 0 { - o.logger.Debug("cleaning IP address", "original", ip, "cleaned", ip[:idx]) - ip = ip[:idx] - } - - var allStreams []models.DiscoveredStream - - // Try real ONVIF discovery first - o.logger.Debug(">>> Starting ONVIF device discovery", "ip", ip) - onvifStreams := o.discoverViaONVIF(ctx, ip, username, password) - o.logger.Debug("<<< ONVIF device discovery completed", "streams_found", len(onvifStreams)) - - if len(onvifStreams) > 0 { - o.logger.Debug("ONVIF streams details:") - for i, stream := range onvifStreams { - o.logger.Debug(" ONVIF stream found", - "index", i, - "url", stream.URL, - "protocol", stream.Protocol, - "port", stream.Port, - "type", stream.Type) - } - } - allStreams = append(allStreams, onvifStreams...) - - // Add common RTSP streams - o.logger.Debug(">>> Adding common RTSP streams", "ip", ip) - commonStreams := o.getCommonRTSPStreams(ip, username, password) - o.logger.Debug("<<< Common RTSP streams added", "count", len(commonStreams)) - allStreams = append(allStreams, commonStreams...) - - o.logger.Debug("=== ONVIF DiscoverStreamsForIP COMPLETED ===", - "onvif_streams", len(onvifStreams), - "common_streams", len(commonStreams), - "total_streams", len(allStreams)) - - return allStreams, nil -} - -// discoverViaONVIF performs real ONVIF discovery -func (o *ONVIFDiscovery) discoverViaONVIF(ctx context.Context, ip, username, password string) []models.DiscoveredStream { - o.logger.Debug(">>> discoverViaONVIF STARTED", "ip", ip) - var streams []models.DiscoveredStream - - // Try standard ONVIF ports - ports := []int{80, 8080, 8000} - o.logger.Debug("Will try ONVIF ports", "ports", ports) - - for portIdx, port := range ports { - o.logger.Debug("--- Trying ONVIF port ---", - "port_index", portIdx+1, - "total_ports", len(ports), - "port", port) - - // Create timeout context for ONVIF connection - onvifCtx, cancel := context.WithTimeout(ctx, 10*time.Second) - defer cancel() - - xaddr := fmt.Sprintf("%s:%d", ip, port) - o.logger.Debug("Creating ONVIF device", - "xaddr", xaddr, - "username", username, - "has_password", password != "") - - // Create ONVIF device - startTime := time.Now() - dev, err := onvif.NewDevice(onvif.DeviceParams{ - Xaddr: xaddr, - Username: username, - Password: password, - }) - elapsed := time.Since(startTime) - - if err != nil { - o.logger.Debug("❌ ONVIF device creation FAILED", - "xaddr", xaddr, - "error", err.Error(), - "elapsed", elapsed.String()) - continue - } - - o.logger.Debug("✅ ONVIF device created successfully", - "xaddr", xaddr, - "elapsed", elapsed.String()) - - // Try to get profiles with context - o.logger.Debug("Getting media profiles...", "xaddr", xaddr) - profileStreams := o.getProfileStreams(onvifCtx, dev, ip) - - if len(profileStreams) > 0 { - // Add ONVIF device service endpoint - deviceServiceURL := fmt.Sprintf("http://%s/onvif/device_service", xaddr) - - // Embed credentials in URL if provided - if username != "" && password != "" { - u, err := url.Parse(deviceServiceURL) - if err == nil { - u.User = url.UserPassword(username, password) - deviceServiceURL = u.String() - } - } - - streams = append(streams, models.DiscoveredStream{ - URL: deviceServiceURL, - Type: "ONVIF", - Protocol: "http", - Port: port, - Working: true, // Mark as working since ONVIF connection succeeded - Metadata: map[string]interface{}{ - "source": "onvif", - "description": "ONVIF Device Service - used for PTZ control and device management", - }, - }) - - // Add profile streams - streams = append(streams, profileStreams...) - - o.logger.Debug("🎉 ONVIF discovery SUCCESSFUL!", - "xaddr", xaddr, - "device_service", deviceServiceURL, - "profiles_found", len(profileStreams)) - - // Log device service - o.logger.Debug(" Device Service", - "url", deviceServiceURL) - - // Log each profile - for i, stream := range profileStreams { - o.logger.Debug(" Profile stream", - "index", i+1, - "url", stream.URL, - "metadata", stream.Metadata) - } - break // Found working port, stop trying - } else { - o.logger.Debug("⚠️ No profiles returned from port", "xaddr", xaddr) - } - } - - o.logger.Debug("<<< discoverViaONVIF COMPLETED", - "total_streams_found", len(streams)) - - return streams -} - -// getProfileStreams gets stream URIs from media profiles -func (o *ONVIFDiscovery) getProfileStreams(ctx context.Context, dev *onvif.Device, ip string) []models.DiscoveredStream { - o.logger.Debug(">>> getProfileStreams STARTED", "ip", ip) - var streams []models.DiscoveredStream - - // Get media profiles - o.logger.Debug("Calling GetProfiles ONVIF method...") - getProfilesReq := media.GetProfiles{} - startTime := time.Now() - profilesResp, err := dev.CallMethod(getProfilesReq) - elapsed := time.Since(startTime) - - if err != nil { - o.logger.Debug("❌ Failed to call GetProfiles", - "error", err.Error(), - "elapsed", elapsed.String()) - return streams - } - defer func() { _ = profilesResp.Body.Close() }() - - o.logger.Debug("✅ GetProfiles call successful", - "elapsed", elapsed.String(), - "status_code", profilesResp.StatusCode) - - // Read and parse XML response - o.logger.Debug("Reading response body...") - body, err := io.ReadAll(profilesResp.Body) - if err != nil { - o.logger.Debug("❌ Failed to read profiles response", - "error", err.Error()) - return streams - } - - o.logger.Debug("Response body read", - "body_length", len(body), - "body_preview", string(body[:min(200, len(body))])) - - // Parse SOAP envelope - o.logger.Debug("Parsing SOAP envelope...") - var envelope struct { - XMLName xml.Name `xml:"Envelope"` - Body struct { - GetProfilesResponse media.GetProfilesResponse `xml:"GetProfilesResponse"` - } `xml:"Body"` - } - - if err := xml.Unmarshal(body, &envelope); err != nil { - o.logger.Debug("❌ Failed to parse profiles response", - "error", err.Error()) - return streams - } - - profileCount := len(envelope.Body.GetProfilesResponse.Profiles) - o.logger.Debug("✅ SOAP envelope parsed successfully", - "profiles_count", profileCount) - - // Get stream URI for each profile - for i, profile := range envelope.Body.GetProfilesResponse.Profiles { - o.logger.Debug("Processing profile", - "index", i+1, - "total", profileCount, - "token", string(profile.Token), - "name", string(profile.Name)) - - streamURI := o.getStreamURI(dev, string(profile.Token)) - if streamURI != "" { - o.logger.Debug("✅ Got stream URI for profile", - "profile_token", string(profile.Token), - "stream_uri", streamURI) - - streams = append(streams, models.DiscoveredStream{ - URL: streamURI, - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - Working: false, // Will be tested later - Metadata: map[string]interface{}{ - "source": "onvif", - "profile_token": string(profile.Token), - "profile_name": string(profile.Name), - }, - }) - } else { - o.logger.Debug("⚠️ Failed to get stream URI for profile", - "profile_token", string(profile.Token)) - } - } - - o.logger.Debug("<<< getProfileStreams COMPLETED", - "streams_collected", len(streams)) - - return streams -} - -func min(a, b int) int { - if a < b { - return a - } - return b -} - -// getStreamURI retrieves stream URI for a profile -func (o *ONVIFDiscovery) getStreamURI(dev *onvif.Device, profileToken string) string { - o.logger.Debug(">>> getStreamURI STARTED", "profile_token", profileToken) - - stream := xsdonvif.StreamType("RTP-Unicast") - protocol := xsdonvif.TransportProtocol("RTSP") - token := xsdonvif.ReferenceToken(profileToken) - - getStreamURIReq := media.GetStreamUri{ - ProfileToken: &token, - StreamSetup: &xsdonvif.StreamSetup{ - Stream: &stream, - Transport: &xsdonvif.Transport{ - Protocol: &protocol, - }, - }, - } - - o.logger.Debug("Calling GetStreamUri ONVIF method...", "profile_token", profileToken) - startTime := time.Now() - resp, err := dev.CallMethod(getStreamURIReq) - elapsed := time.Since(startTime) - - if err != nil { - o.logger.Debug("❌ Failed to get stream URI", - "profile", profileToken, - "error", err.Error(), - "elapsed", elapsed.String()) - return "" - } - defer func() { _ = resp.Body.Close() }() - - o.logger.Debug("✅ GetStreamUri call successful", - "profile", profileToken, - "elapsed", elapsed.String(), - "status_code", resp.StatusCode) - - // Read and parse XML response - body, err := io.ReadAll(resp.Body) - if err != nil { - o.logger.Debug("❌ Failed to read stream URI response", - "error", err.Error()) - return "" - } - - o.logger.Debug("Response body read", - "body_length", len(body), - "body_preview", string(body[:min(200, len(body))])) - - // Parse SOAP envelope - var envelope struct { - XMLName xml.Name `xml:"Envelope"` - Body struct { - GetStreamUriResponse media.GetStreamUriResponse `xml:"GetStreamUriResponse"` - } `xml:"Body"` - } - - if err := xml.Unmarshal(body, &envelope); err != nil { - o.logger.Debug("❌ Failed to parse stream URI response", - "error", err.Error()) - return "" - } - - streamURI := string(envelope.Body.GetStreamUriResponse.MediaUri.Uri) - o.logger.Debug("<<< getStreamURI COMPLETED", - "stream_uri", streamURI) - - return streamURI -} - -// getCommonRTSPStreams returns common RTSP stream URLs -func (o *ONVIFDiscovery) getCommonRTSPStreams(ip, username, password string) []models.DiscoveredStream { - // Common RTSP paths that work with many cameras - commonPaths := []struct { - path string - notes string - }{ - {"/stream1", "Common main stream"}, - {"/stream2", "Common sub stream"}, - {"/ch0", "Thingino main"}, - {"/ch1", "Thingino sub"}, - {"/live/main", "ONVIF standard main"}, - {"/live/sub", "ONVIF standard sub"}, - {"/Streaming/Channels/101", "Hikvision main"}, - {"/Streaming/Channels/102", "Hikvision sub"}, - {"/cam/realmonitor?channel=1&subtype=0", "Dahua main"}, - {"/cam/realmonitor?channel=1&subtype=1", "Dahua sub"}, - {"/h264/main", "Generic H264 main"}, - {"/h264/sub", "Generic H264 sub"}, - {"/media/video1", "Axis main"}, - {"/media/video2", "Axis sub"}, - {"/videoMain", "Foscam main"}, - {"/videoSub", "Foscam sub"}, - {"/11", "Simple numeric main"}, - {"/12", "Simple numeric sub"}, - {"/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp", "Dahua alternative"}, - {"/live.sdp", "Generic live"}, - {"/stream", "Generic stream"}, - {"/video.h264", "Generic H264"}, - {"/live/0/MAIN", "Alternative main"}, - {"/live/0/SUB", "Alternative sub"}, - {"/MediaInput/h264", "Alternative H264"}, - {"/0/video0", "Alternative video0"}, - {"/0/video1", "Alternative video1"}, - } - - var streams []models.DiscoveredStream - - for _, cp := range commonPaths { - var streamURL string - if username != "" && password != "" { - streamURL = fmt.Sprintf("rtsp://%s:%s@%s:554%s", url.QueryEscape(username), url.QueryEscape(password), ip, cp.path) - } else { - streamURL = fmt.Sprintf("rtsp://%s:554%s", ip, cp.path) - } - - streams = append(streams, models.DiscoveredStream{ - URL: streamURL, - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - Working: false, // Will be tested later - Metadata: map[string]interface{}{ - "source": "common", - "notes": cp.notes, - }, - }) - } - - // Add some HTTP snapshot URLs too - httpPaths := []struct { - path string - notes string - }{ - {"/snapshot.jpg", "Common snapshot"}, - {"/snap.jpg", "Alternative snapshot"}, - {"/image/jpeg.cgi", "CGI snapshot"}, - {"/cgi-bin/snapshot.cgi", "CGI bin snapshot"}, - {"/jpg/image.jpg", "JPEG image"}, - {"/tmpfs/auto.jpg", "Tmpfs snapshot"}, - {"/axis-cgi/jpg/image.cgi", "Axis snapshot"}, - {"/cgi-bin/viewer/video.jpg", "Viewer snapshot"}, - {"/Streaming/channels/1/picture", "Hikvision snapshot"}, - {"/onvif/snapshot", "ONVIF snapshot"}, - } - - for _, hp := range httpPaths { - var streamURL string - if username != "" && password != "" { - // For HTTP, we'll rely on Basic Auth instead of URL embedding - streamURL = fmt.Sprintf("http://%s%s", ip, hp.path) - } else { - streamURL = fmt.Sprintf("http://%s%s", ip, hp.path) - } - - streams = append(streams, models.DiscoveredStream{ - URL: streamURL, - Type: "JPEG", - Protocol: "http", - Port: 80, - Working: false, // Will be tested later - Metadata: map[string]interface{}{ - "source": "common", - "notes": hp.notes, - "username": username, - "password": password, - }, - }) - } - - return streams -} \ No newline at end of file diff --git a/internal/camera/discovery/oui.go b/internal/camera/discovery/oui.go deleted file mode 100644 index ec9780c..0000000 --- a/internal/camera/discovery/oui.go +++ /dev/null @@ -1,76 +0,0 @@ -package discovery - -import ( - "encoding/json" - "fmt" - "os" - "strings" - "sync" -) - -// OUIDatabase provides MAC address prefix to vendor name lookup. -// Data is loaded from a JSON file containing camera/surveillance vendor OUI prefixes. -type OUIDatabase struct { - data map[string]string // "C0:56:E3" -> "Hikvision" - mu sync.RWMutex -} - -// NewOUIDatabase creates an empty OUI database. -func NewOUIDatabase() *OUIDatabase { - return &OUIDatabase{ - data: make(map[string]string), - } -} - -// LoadFromFile loads OUI data from a JSON file. -// Expected format: {"C0:56:E3": "Hikvision", "54:EF:44": "Lumi/Aqara", ...} -func (db *OUIDatabase) LoadFromFile(path string) error { - file, err := os.Open(path) - if err != nil { - return fmt.Errorf("failed to open OUI database: %w", err) - } - defer file.Close() - - var data map[string]string - if err := json.NewDecoder(file).Decode(&data); err != nil { - return fmt.Errorf("failed to decode OUI database: %w", err) - } - - // Normalize all keys to uppercase - normalized := make(map[string]string, len(data)) - for k, v := range data { - normalized[strings.ToUpper(k)] = v - } - - db.mu.Lock() - db.data = normalized - db.mu.Unlock() - - return nil -} - -// LookupVendor returns the vendor name for a given MAC address. -// MAC can be in any format: "C0:56:E3:AA:BB:CC", "c0:56:e3:aa:bb:cc", "C0-56-E3-AA-BB-CC". -// Returns empty string if not found. -func (db *OUIDatabase) LookupVendor(mac string) string { - if len(mac) < 8 { - return "" - } - - // Normalize: uppercase and replace dashes with colons - prefix := strings.ToUpper(mac[:8]) - prefix = strings.ReplaceAll(prefix, "-", ":") - - db.mu.RLock() - vendor := db.data[prefix] - db.mu.RUnlock() - - return vendor -} - -// Size returns the number of entries in the database. -func (db *OUIDatabase) Size() int { - db.mu.RLock() - defer db.mu.RUnlock() - return len(db.data) -} diff --git a/internal/camera/discovery/probe.go b/internal/camera/discovery/probe.go deleted file mode 100644 index 7e51713..0000000 --- a/internal/camera/discovery/probe.go +++ /dev/null @@ -1,184 +0,0 @@ -package discovery - -import ( - "context" - "sync" - "time" - - "github.com/eduard256/Strix/internal/models" -) - -const ( - // ProbeTimeout is the overall timeout for all probes combined. - ProbeTimeout = 3 * time.Second - - // ProbeTypeUnreachable indicates the device did not respond to ping. - ProbeTypeUnreachable = "unreachable" - // ProbeTypeStandard indicates a normal IP camera (RTSP/HTTP/ONVIF). - ProbeTypeStandard = "standard" - // ProbeTypeHomeKit indicates an Apple HomeKit camera that needs PIN pairing. - ProbeTypeHomeKit = "homekit" -) - -// Prober is an interface for network probe implementations. -// Each prober discovers specific information about a device at a given IP. -// New probers can be added by implementing this interface and registering -// them with ProbeService. -type Prober interface { - // Name returns a unique identifier for this prober (e.g., "dns", "arp", "mdns"). - Name() string - // Probe runs the probe against the given IP address. - // Must respect context cancellation/timeout. - // Returns nil result if nothing was found (not an error). - Probe(ctx context.Context, ip string) (any, error) -} - -// ProbeService orchestrates multiple probers to gather information about a device. -// It first pings the device, then runs all registered probers in parallel. -type ProbeService struct { - pinger *PingProber - probers []Prober - logger interface { - Debug(string, ...any) - Error(string, error, ...any) - Info(string, ...any) - } -} - -// NewProbeService creates a new ProbeService with the given probers. -// The ping prober is always included and runs first. -func NewProbeService( - probers []Prober, - logger interface { - Debug(string, ...any) - Error(string, error, ...any) - Info(string, ...any) - }, -) *ProbeService { - return &ProbeService{ - pinger: &PingProber{}, - probers: probers, - logger: logger, - } -} - -// Probe runs ping + all registered probers against the given IP. -// Overall timeout is 3 seconds. Results are collected from whatever -// finishes in time; slow probers are omitted (nil in response). -func (s *ProbeService) Probe(ctx context.Context, ip string) *models.ProbeResponse { - ctx, cancel := context.WithTimeout(ctx, ProbeTimeout) - defer cancel() - - response := &models.ProbeResponse{ - IP: ip, - Type: ProbeTypeStandard, - } - - // Step 1: Ping - s.logger.Debug("probing device", "ip", ip) - - pingResult, err := s.pinger.Ping(ctx, ip) - if err != nil || !pingResult.Reachable { - errMsg := "device unreachable" - if err != nil { - errMsg = err.Error() - } - s.logger.Debug("ping failed", "ip", ip, "error", errMsg) - response.Reachable = false - response.Type = ProbeTypeUnreachable - response.Error = errMsg - return response - } - - response.Reachable = true - response.LatencyMs = pingResult.LatencyMs - s.logger.Debug("ping OK", "ip", ip, "latency_ms", pingResult.LatencyMs) - - // Step 2: Run all probers in parallel - type probeResult struct { - name string - data any - err error - } - - results := make(chan probeResult, len(s.probers)) - var wg sync.WaitGroup - - for _, p := range s.probers { - wg.Add(1) - go func(prober Prober) { - defer wg.Done() - data, err := prober.Probe(ctx, ip) - results <- probeResult{ - name: prober.Name(), - data: data, - err: err, - } - }(p) - } - - // Close results channel when all probers finish - go func() { - wg.Wait() - close(results) - }() - - // Collect results - for r := range results { - if r.err != nil { - s.logger.Debug("prober failed", "prober", r.name, "error", r.err.Error()) - continue - } - if r.data == nil { - continue - } - - switch r.name { - case "dns": - if v, ok := r.data.(*models.DNSProbeResult); ok { - response.Probes.DNS = v - } - case "arp": - if v, ok := r.data.(*models.ARPProbeResult); ok { - response.Probes.ARP = v - } - case "mdns": - if v, ok := r.data.(*models.MDNSProbeResult); ok { - response.Probes.MDNS = v - } - case "http": - if v, ok := r.data.(*models.HTTPProbeResult); ok { - response.Probes.HTTP = v - } - } - } - - // Step 3: Determine type based on probe results - response.Type = s.determineType(response) - - s.logger.Info("probe completed", - "ip", ip, - "reachable", response.Reachable, - "type", response.Type, - "latency_ms", response.LatencyMs, - ) - - return response -} - -// determineType decides the device type based on collected probe results. -func (s *ProbeService) determineType(response *models.ProbeResponse) string { - if !response.Reachable { - return ProbeTypeUnreachable - } - - // HomeKit camera that is not yet paired - if response.Probes.MDNS != nil && !response.Probes.MDNS.Paired { - category := response.Probes.MDNS.Category - if category == "camera" || category == "doorbell" { - return ProbeTypeHomeKit - } - } - - return ProbeTypeStandard -} diff --git a/internal/camera/discovery/prober_arp.go b/internal/camera/discovery/prober_arp.go deleted file mode 100644 index ce7968c..0000000 --- a/internal/camera/discovery/prober_arp.go +++ /dev/null @@ -1,80 +0,0 @@ -package discovery - -import ( - "bufio" - "context" - "fmt" - "os" - "strings" - - "github.com/eduard256/Strix/internal/models" -) - -// ARPProber looks up the MAC address from the system ARP table -// and resolves it to a vendor name using the OUI database. -type ARPProber struct { - ouiDB *OUIDatabase -} - -// NewARPProber creates a new ARP prober with the given OUI database. -func NewARPProber(ouiDB *OUIDatabase) *ARPProber { - return &ARPProber{ouiDB: ouiDB} -} - -func (p *ARPProber) Name() string { return "arp" } - -// Probe looks up the MAC address for the given IP in the ARP table. -// Returns nil if the IP is not in the ARP table (e.g., different subnet, VPN). -// This only works on Linux (reads /proc/net/arp). -func (p *ARPProber) Probe(ctx context.Context, ip string) (any, error) { - mac, err := p.lookupARP(ip) - if err != nil || mac == "" { - return nil, nil // Not in ARP table is not an error - } - - vendor := "" - if p.ouiDB != nil { - vendor = p.ouiDB.LookupVendor(mac) - } - - return &models.ARPProbeResult{ - MAC: mac, - Vendor: vendor, - }, nil -} - -// lookupARP reads /proc/net/arp to find the MAC address for the given IP. -// -// Format of /proc/net/arp: -// -// IP address HW type Flags HW address Mask Device -// 192.168.1.1 0x1 0x2 aa:bb:cc:dd:ee:ff * eth0 -func (p *ARPProber) lookupARP(ip string) (string, error) { - file, err := os.Open("/proc/net/arp") - if err != nil { - return "", fmt.Errorf("failed to open ARP table: %w", err) - } - defer file.Close() - - scanner := bufio.NewScanner(file) - scanner.Scan() // Skip header line - - for scanner.Scan() { - fields := strings.Fields(scanner.Text()) - if len(fields) < 4 { - continue - } - - // fields[0] = IP address, fields[3] = HW address - if fields[0] == ip { - mac := fields[3] - // "00:00:00:00:00:00" means incomplete ARP entry - if mac == "00:00:00:00:00:00" { - return "", nil - } - return strings.ToUpper(mac), nil - } - } - - return "", nil -} diff --git a/internal/camera/discovery/prober_dns.go b/internal/camera/discovery/prober_dns.go deleted file mode 100644 index d5abc9e..0000000 --- a/internal/camera/discovery/prober_dns.go +++ /dev/null @@ -1,36 +0,0 @@ -package discovery - -import ( - "context" - "net" - "strings" - - "github.com/eduard256/Strix/internal/models" -) - -// DNSProber performs reverse DNS lookup to find the hostname of a device. -type DNSProber struct{} - -func (p *DNSProber) Name() string { return "dns" } - -// Probe performs a reverse DNS lookup on the given IP. -// Returns nil if no hostname is found (not an error). -func (p *DNSProber) Probe(ctx context.Context, ip string) (any, error) { - resolver := net.DefaultResolver - - names, err := resolver.LookupAddr(ctx, ip) - if err != nil || len(names) == 0 { - return nil, nil // No hostname found is not an error - } - - // LookupAddr returns FQDNs with trailing dot, remove it - hostname := strings.TrimSuffix(names[0], ".") - - if hostname == "" { - return nil, nil - } - - return &models.DNSProbeResult{ - Hostname: hostname, - }, nil -} diff --git a/internal/camera/discovery/prober_http.go b/internal/camera/discovery/prober_http.go deleted file mode 100644 index fa3e66f..0000000 --- a/internal/camera/discovery/prober_http.go +++ /dev/null @@ -1,87 +0,0 @@ -package discovery - -import ( - "context" - "crypto/tls" - "fmt" - "net/http" - - "github.com/eduard256/Strix/internal/models" -) - -// HTTPProber identifies the device by checking HTTP server headers. -// It sends HEAD and GET requests in parallel to port 80 (some devices -// like XMEye/JAWS don't respond to HEAD), and returns whichever -// responds first. -type HTTPProber struct{} - -func (p *HTTPProber) Name() string { return "http" } - -// Probe sends parallel HEAD+GET to port 80 and extracts Server header. -// Returns nil if no HTTP server is found. -func (p *HTTPProber) Probe(ctx context.Context, ip string) (any, error) { - ports := []int{80, 8080} - - client := &http.Client{ - // Don't follow redirects -- we want the original response headers - CheckRedirect: func(req *http.Request, via []*http.Request) error { - return http.ErrUseLastResponse - }, - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - }, - } - - type result struct { - resp *http.Response - port int - err error - } - - for _, port := range ports { - url := fmt.Sprintf("http://%s:%d/", ip, port) - ch := make(chan result, 2) - - // HEAD and GET in parallel -- take whichever responds first - for _, method := range []string{"HEAD", "GET"} { - go func(method string) { - req, err := http.NewRequestWithContext(ctx, method, url, nil) - if err != nil { - ch <- result{err: err} - return - } - req.Header.Set("User-Agent", "Strix/1.0") - resp, err := client.Do(req) - ch <- result{resp: resp, port: port, err: err} - }(method) - } - - // Wait for first success - for i := 0; i < 2; i++ { - select { - case <-ctx.Done(): - return nil, ctx.Err() - case r := <-ch: - if r.err != nil { - continue - } - if r.resp.Body != nil { - r.resp.Body.Close() - } - - server := r.resp.Header.Get("Server") - if server == "" && r.resp.StatusCode == 0 { - continue - } - - return &models.HTTPProbeResult{ - Port: r.port, - StatusCode: r.resp.StatusCode, - Server: server, - }, nil - } - } - } - - return nil, nil -} diff --git a/internal/camera/discovery/prober_mdns.go b/internal/camera/discovery/prober_mdns.go deleted file mode 100644 index afd743d..0000000 --- a/internal/camera/discovery/prober_mdns.go +++ /dev/null @@ -1,95 +0,0 @@ -package discovery - -import ( - "context" - "time" - - "github.com/AlexxIT/go2rtc/pkg/hap" - "github.com/AlexxIT/go2rtc/pkg/mdns" - "github.com/eduard256/Strix/internal/models" -) - -const ( - // mdnsTimeout is the maximum time to wait for mDNS response. - // HomeKit devices respond in 2-10ms. If no response in 100ms, - // the device is definitely not a HomeKit camera. - // The underlying mdns.Query has a 1s internal timeout, but we - // cut it short with this context-based wrapper. - mdnsTimeout = 100 * time.Millisecond -) - -// MDNSProber performs mDNS unicast query to detect HomeKit devices. -// It sends a DNS query to ip:5353 for the _hap._tcp.local. service -// and parses TXT records to extract device information. -// Uses a 100ms timeout wrapper around go2rtc's mdns.Query to avoid -// waiting the full 1s on non-HomeKit devices. -type MDNSProber struct{} - -func (p *MDNSProber) Name() string { return "mdns" } - -// Probe queries the device for HomeKit (HAP) mDNS service. -// Returns nil if the device does not advertise HomeKit or is not a camera/doorbell. -func (p *MDNSProber) Probe(ctx context.Context, ip string) (any, error) { - // Run mdns.Query in a goroutine with 100ms timeout. - // mdns.Query has an internal 1s timeout and doesn't accept context, - // so we wrap it. The background goroutine will clean up on its own - // after the internal timeout expires (~1s, negligible resource cost). - type queryResult struct { - entry *mdns.ServiceEntry - err error - } - - ch := make(chan queryResult, 1) - go func() { - entry, err := mdns.Query(ip, mdns.ServiceHAP) - ch <- queryResult{entry, err} - }() - - // Wait for result or timeout - timer := time.NewTimer(mdnsTimeout) - defer timer.Stop() - - var entry *mdns.ServiceEntry - - select { - case r := <-ch: - if r.err != nil || r.entry == nil { - return nil, nil - } - entry = r.entry - case <-timer.C: - return nil, nil // No response within 100ms -- not a HomeKit device - case <-ctx.Done(): - return nil, nil - } - - // Check if it's complete (has IP, port, and TXT records) - if !entry.Complete() { - return nil, nil - } - - // Check if it's a camera or doorbell - category := entry.Info[hap.TXTCategory] - if category != hap.CategoryCamera && category != hap.CategoryDoorbell { - return nil, nil // Not a camera/doorbell, ignore - } - - // Map category ID to human-readable name - categoryName := "camera" - if category == hap.CategoryDoorbell { - categoryName = "doorbell" - } - - // Determine paired status: sf=0 means paired, sf=1 means not paired - paired := entry.Info[hap.TXTStatusFlags] == hap.StatusPaired - - return &models.MDNSProbeResult{ - Name: entry.Name, - DeviceID: entry.Info[hap.TXTDeviceID], - Model: entry.Info[hap.TXTModel], - Category: categoryName, - Paired: paired, - Port: int(entry.Port), - Feature: entry.Info[hap.TXTFeatureFlags], - }, nil -} diff --git a/internal/camera/discovery/prober_ping.go b/internal/camera/discovery/prober_ping.go deleted file mode 100644 index 4e00118..0000000 --- a/internal/camera/discovery/prober_ping.go +++ /dev/null @@ -1,127 +0,0 @@ -package discovery - -import ( - "context" - "fmt" - "net" - "time" -) - -// PingResult contains the result of a ping probe. -type PingResult struct { - Reachable bool - LatencyMs float64 -} - -// PingProber checks if a device is reachable on the network. -// It tries ICMP ping first (requires root/CAP_NET_RAW), then falls back -// to TCP connect on common camera ports (80, 554, 443, 8080). -type PingProber struct{} - -// Ping checks if the device at the given IP is reachable. -func (p *PingProber) Ping(ctx context.Context, ip string) (*PingResult, error) { - // Try ICMP first (works if running as root or with CAP_NET_RAW) - result, err := p.tryICMP(ctx, ip) - if err == nil { - return result, nil - } - - // Fallback: TCP connect on common camera ports - result, err = p.tryTCP(ctx, ip) - if err == nil { - return result, nil - } - - return &PingResult{Reachable: false}, fmt.Errorf("device unreachable: %s", ip) -} - -// tryICMP attempts an ICMP ping using raw socket. -func (p *PingProber) tryICMP(ctx context.Context, ip string) (*PingResult, error) { - deadline, ok := ctx.Deadline() - if !ok { - deadline = time.Now().Add(2 * time.Second) - } - - timeout := time.Until(deadline) - if timeout <= 0 { - return nil, context.DeadlineExceeded - } - // Cap ICMP timeout to 2 seconds to leave time for other probes - if timeout > 2*time.Second { - timeout = 2 * time.Second - } - - start := time.Now() - conn, err := net.DialTimeout("ip4:icmp", ip, timeout) - if err != nil { - return nil, err - } - conn.Close() - - return &PingResult{ - Reachable: true, - LatencyMs: float64(time.Since(start).Microseconds()) / 1000.0, - }, nil -} - -// tryTCP attempts TCP connect on common camera ports as a ping fallback. -// This works without root privileges and is reliable for cameras since -// they almost always have at least one of these ports open. -func (p *PingProber) tryTCP(ctx context.Context, ip string) (*PingResult, error) { - commonPorts := []int{80, 554, 443, 8080, 8443, 34567, 5353} - - deadline, ok := ctx.Deadline() - if !ok { - deadline = time.Now().Add(2 * time.Second) - } - - timeout := time.Until(deadline) - if timeout <= 0 { - return nil, context.DeadlineExceeded - } - // Cap per-port timeout - perPortTimeout := timeout / time.Duration(len(commonPorts)) - if perPortTimeout > 500*time.Millisecond { - perPortTimeout = 500 * time.Millisecond - } - - type tcpResult struct { - latency time.Duration - err error - } - - results := make(chan tcpResult, len(commonPorts)) - - for _, port := range commonPorts { - go func(port int) { - addr := fmt.Sprintf("%s:%d", ip, port) - start := time.Now() - conn, err := net.DialTimeout("tcp", addr, perPortTimeout) - if err != nil { - results <- tcpResult{err: err} - return - } - conn.Close() - results <- tcpResult{latency: time.Since(start)} - }(port) - } - - // Wait for first success or all failures - var lastErr error - for range commonPorts { - select { - case <-ctx.Done(): - return nil, ctx.Err() - case r := <-results: - if r.err == nil { - return &PingResult{ - Reachable: true, - LatencyMs: float64(r.latency.Microseconds()) / 1000.0, - }, nil - } - lastErr = r.err - } - } - - return nil, fmt.Errorf("all TCP ports closed: %w", lastErr) -} diff --git a/internal/camera/discovery/scanner.go b/internal/camera/discovery/scanner.go deleted file mode 100644 index 81b4bb7..0000000 --- a/internal/camera/discovery/scanner.go +++ /dev/null @@ -1,539 +0,0 @@ -package discovery - -import ( - "context" - "fmt" - "net/url" - "sync" - "sync/atomic" - "time" - - "github.com/eduard256/Strix/internal/camera/database" - "github.com/eduard256/Strix/internal/camera/stream" - "github.com/eduard256/Strix/internal/models" - "github.com/eduard256/Strix/pkg/sse" -) - -// Scanner orchestrates stream discovery -type Scanner struct { - loader *database.Loader - searchEngine *database.SearchEngine - builder *stream.Builder - tester *stream.Tester - onvif *ONVIFDiscovery - config ScannerConfig - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) } -} - -// ScannerConfig contains scanner configuration -type ScannerConfig struct { - WorkerPoolSize int - DefaultTimeout time.Duration - MaxStreams int - ModelSearchLimit int - FFProbeTimeout time.Duration -} - -// NewScanner creates a new stream scanner -func NewScanner( - loader *database.Loader, - searchEngine *database.SearchEngine, - builder *stream.Builder, - tester *stream.Tester, - onvif *ONVIFDiscovery, - config ScannerConfig, - logger interface{ Debug(string, ...any); Error(string, error, ...any); Info(string, ...any) }, -) *Scanner { - return &Scanner{ - loader: loader, - searchEngine: searchEngine, - builder: builder, - tester: tester, - onvif: onvif, - config: config, - logger: logger, - } -} - -// ScanResult contains the scan results -type ScanResult struct { - Streams []models.DiscoveredStream - TotalTested int - TotalFound int - Duration time.Duration - Error error -} - -// Scan performs stream discovery -func (s *Scanner) Scan(ctx context.Context, req models.StreamDiscoveryRequest, streamWriter *sse.StreamWriter) (*ScanResult, error) { - startTime := time.Now() - result := &ScanResult{} - - // Set defaults - if req.Timeout <= 0 { - req.Timeout = int(s.config.DefaultTimeout.Seconds()) - } - if req.MaxStreams <= 0 { - req.MaxStreams = s.config.MaxStreams - } - if req.ModelLimit <= 0 { - req.ModelLimit = s.config.ModelSearchLimit - } - - // Create context with timeout - scanCtx, cancel := context.WithTimeout(ctx, time.Duration(req.Timeout)*time.Second) - defer cancel() - - s.logger.Info("starting stream discovery", - "target", req.Target, - "model", req.Model, - "timeout", req.Timeout, - "max_streams", req.MaxStreams, - ) - - // Send initial message - _ = streamWriter.SendJSON("scan_started", map[string]interface{}{ - "target": req.Target, - "model": req.Model, - "max_streams": req.MaxStreams, - "timeout": req.Timeout, - }) - - // Check if target is a direct stream URL - if s.isDirectStreamURL(req.Target) { - return s.scanDirectStream(scanCtx, req, streamWriter, result) - } - - // Extract IP from target - ip := s.extractIP(req.Target) - if ip == "" { - err := fmt.Errorf("invalid target IP: %s", req.Target) - _ = streamWriter.SendError(err) - result.Error = err - return result, err - } - - // Collect all streams to test (includes metadata like type) - streams, err := s.collectStreams(scanCtx, req, ip) - if err != nil { - _ = streamWriter.SendError(err) - result.Error = err - return result, err - } - - s.logger.Info("collected streams for testing", "count", len(streams)) - - // Send progress update - _ = streamWriter.SendJSON("progress", models.ProgressMessage{ - Tested: 0, - Found: 0, - Remaining: len(streams), - }) - - // Test streams concurrently - s.testStreamsConcurrently(scanCtx, streams, req, streamWriter, result) - - // Calculate duration - result.Duration = time.Since(startTime) - - // Send completion message - _ = streamWriter.SendJSON("complete", models.CompleteMessage{ - TotalTested: result.TotalTested, - TotalFound: result.TotalFound, - Duration: result.Duration.Seconds(), - }) - - // Send final done event to signal proper stream closure - _ = streamWriter.SendJSON("done", map[string]interface{}{ - "message": "Stream discovery finished", - }) - - // Small delay to ensure all data is flushed to client - time.Sleep(100 * time.Millisecond) - - s.logger.Info("stream discovery completed", - "tested", result.TotalTested, - "found", result.TotalFound, - "duration", result.Duration, - ) - - return result, nil -} - -// isDirectStreamURL checks if target is a direct stream URL -func (s *Scanner) isDirectStreamURL(target string) bool { - u, err := url.Parse(target) - if err != nil { - return false - } - return u.Scheme == "rtsp" || u.Scheme == "http" || u.Scheme == "https" -} - -// scanDirectStream scans a direct stream URL -func (s *Scanner) scanDirectStream(ctx context.Context, req models.StreamDiscoveryRequest, streamWriter *sse.StreamWriter, result *ScanResult) (*ScanResult, error) { - s.logger.Debug("testing direct stream URL", "url", req.Target) - - testResult := s.tester.TestStream(ctx, req.Target) - result.TotalTested = 1 - - if testResult.Working { - result.TotalFound = 1 - - discoveredStream := models.DiscoveredStream{ - URL: testResult.URL, - Type: testResult.Type, - Protocol: testResult.Protocol, - Working: true, - Resolution: testResult.Resolution, - Codec: testResult.Codec, - FPS: testResult.FPS, - Bitrate: testResult.Bitrate, - HasAudio: testResult.HasAudio, - TestTime: testResult.TestTime, - Metadata: testResult.Metadata, - } - - result.Streams = append(result.Streams, discoveredStream) - - // Send to SSE - _ = streamWriter.SendJSON("stream_found", map[string]interface{}{ - "stream": discoveredStream, - }) - } else { - _ = streamWriter.SendJSON("stream_failed", map[string]interface{}{ - "url": req.Target, - "error": testResult.Error, - }) - } - - return result, nil -} - -// extractIP extracts IP address from target -func (s *Scanner) extractIP(target string) string { - // Remove protocol if present - if u, err := url.Parse(target); err == nil && u.Host != "" { - target = u.Host - } - - // Remove port if present - if idx := len(target) - 1; idx >= 0 && target[idx] == ']' { - // IPv6 address - return target - } - - for i := len(target) - 1; i >= 0; i-- { - if target[i] == ':' { - return target[:i] - } - } - - return target -} - - -// collectStreams collects all streams to test with their metadata -func (s *Scanner) collectStreams(ctx context.Context, req models.StreamDiscoveryRequest, ip string) ([]models.DiscoveredStream, error) { - var allStreams []models.DiscoveredStream - urlMap := make(map[string]bool) // For deduplication - var onvifCount, modelCount, popularCount int - - s.logger.Debug("collectStreams started", - "ip", ip, - "model", req.Model, - "username", req.Username, - "channel", req.Channel) - - // Build context for URL generation - buildCtx := stream.BuildContext{ - IP: ip, - Username: req.Username, - Password: req.Password, - Channel: req.Channel, - } - - // 1. ONVIF discovery (always first) - s.logger.Debug("========================================") - s.logger.Debug("PHASE 1: STARTING ONVIF DISCOVERY") - s.logger.Debug("========================================") - s.logger.Debug("ONVIF parameters", - "ip", ip, - "username", req.Username, - "password_len", len(req.Password), - "channel", req.Channel) - - startTime := time.Now() - onvifStreams, err := s.onvif.DiscoverStreamsForIP(ctx, ip, req.Username, req.Password) - elapsed := time.Since(startTime) - - if err != nil { - s.logger.Error("❌ ONVIF discovery FAILED", err, - "elapsed", elapsed.String()) - } else { - s.logger.Debug("✅ ONVIF discovery returned", - "streams_count", len(onvifStreams), - "elapsed", elapsed.String()) - - for i, stream := range onvifStreams { - s.logger.Debug("ONVIF stream returned", - "index", i+1, - "url", stream.URL, - "type", stream.Type, - "source", stream.Metadata["source"]) - - if !urlMap[stream.URL] { - allStreams = append(allStreams, stream) - urlMap[stream.URL] = true - onvifCount++ - s.logger.Debug(" ✓ Added to stream list (unique)") - } else { - s.logger.Debug(" ✗ Skipped (duplicate)") - } - } - s.logger.Debug("ONVIF phase completed", - "total_streams_returned", len(onvifStreams), - "unique_streams_added", onvifCount) - } - s.logger.Debug("========================================\n") - - // 2. Model-specific patterns - if req.Model != "" { - s.logger.Debug("phase 2: searching model-specific patterns", - "model", req.Model, - "limit", req.ModelLimit) - - // Search for cameras using intelligent brand+model search - searchResp, err := s.searchEngine.Search(req.Model, req.ModelLimit) - if err != nil { - s.logger.Error("model search failed", err) - } else { - cameras := searchResp.Cameras - - // Collect entries from all matching cameras - var entries []models.CameraEntry - for _, camera := range cameras { - entries = append(entries, camera.Entries...) - } - - s.logger.Debug("model entries collected", - "cameras_matched", len(cameras), - "total_entries", len(entries)) - - // Build streams from entries - for _, entry := range entries { - buildCtx.Port = entry.Port - buildCtx.Protocol = entry.Protocol - - urls := s.builder.BuildURLsFromEntry(entry, buildCtx) - for _, url := range urls { - if !urlMap[url] { - allStreams = append(allStreams, models.DiscoveredStream{ - URL: url, - Type: entry.Type, - Protocol: entry.Protocol, - Port: entry.Port, - Working: false, // Will be tested - }) - urlMap[url] = true - modelCount++ - } - } - } - - s.logger.Debug("model patterns streams built", - "total_unique_model_streams", modelCount) - } - } - - // 3. Popular patterns (always add as fallback) - s.logger.Debug("phase 3: adding popular patterns") - patterns, err := s.loader.LoadPopularPatterns() - if err != nil { - s.logger.Error("failed to load popular patterns", err) - } else { - s.logger.Debug("popular patterns loaded", "count", len(patterns)) - - for _, pattern := range patterns { - entry := models.CameraEntry{ - Type: pattern.Type, - Protocol: pattern.Protocol, - Port: pattern.Port, - URL: pattern.URL, - } - - buildCtx.Port = pattern.Port - buildCtx.Protocol = pattern.Protocol - - // Generate all URL variants for this pattern - urls := s.builder.BuildURLsFromEntry(entry, buildCtx) - for _, url := range urls { - if !urlMap[url] { - allStreams = append(allStreams, models.DiscoveredStream{ - URL: url, - Type: pattern.Type, - Protocol: pattern.Protocol, - Port: pattern.Port, - Working: false, // Will be tested - }) - urlMap[url] = true - popularCount++ - } - } - } - } - - totalBeforeDedup := onvifCount + modelCount + popularCount - duplicatesRemoved := totalBeforeDedup - len(allStreams) - - s.logger.Debug("stream collection complete", - "total_unique_streams", len(allStreams), - "from_onvif", onvifCount, - "from_model_patterns", modelCount, - "from_popular_patterns", popularCount, - "total_before_dedup", totalBeforeDedup, - "duplicates_removed", duplicatesRemoved) - - return allStreams, nil -} - -// testStreamsConcurrently tests streams concurrently -func (s *Scanner) testStreamsConcurrently(ctx context.Context, streams []models.DiscoveredStream, req models.StreamDiscoveryRequest, streamWriter *sse.StreamWriter, result *ScanResult) { - var wg sync.WaitGroup - var tested int32 - var found int32 - - // Create worker pool - sem := make(chan struct{}, s.config.WorkerPoolSize) - streamsChan := make(chan models.DiscoveredStream, 100) - - // Start periodic progress updates - progressCtx, cancelProgress := context.WithCancel(ctx) - defer cancelProgress() - - go func() { - // Use longer interval for Ingress mode to reduce traffic (padding is ~64KB per event) - // Normal mode: 1 second, Ingress mode: 3 seconds - progressInterval := 1 * time.Second - if streamWriter.IsIngress() { - progressInterval = 3 * time.Second - } - - ticker := time.NewTicker(progressInterval) - defer ticker.Stop() - - for { - select { - case <-progressCtx.Done(): - return - case <-ticker.C: - // Send progress to prevent WriteTimeout and show scanning activity - _ = streamWriter.SendJSON("progress", models.ProgressMessage{ - Tested: int(atomic.LoadInt32(&tested)), - Found: int(atomic.LoadInt32(&found)), - Remaining: len(streams) - int(atomic.LoadInt32(&tested)), - }) - } - } - }() - - // Start result collector - var collectorWg sync.WaitGroup - collectorWg.Add(1) - go func() { - defer collectorWg.Done() - for stream := range streamsChan { - result.Streams = append(result.Streams, stream) - - s.logger.Info("sending stream_found event", "url", stream.URL, "type", stream.Type) - - // Send to SSE - _ = streamWriter.SendJSON("stream_found", map[string]interface{}{ - "stream": stream, - }) - - // Send progress (immediate update when stream is found) - _ = streamWriter.SendJSON("progress", models.ProgressMessage{ - Tested: int(atomic.LoadInt32(&tested)), - Found: int(atomic.LoadInt32(&found)), - Remaining: len(streams) - int(atomic.LoadInt32(&tested)), - }) - - // Check if we've found enough streams - if int(atomic.LoadInt32(&found)) >= req.MaxStreams { - s.logger.Debug("max streams reached", "count", req.MaxStreams) - } - } - }() - - // Test each stream -TestLoop: - for _, streamToTest := range streams { - // Check if context is done or max streams reached - select { - case <-ctx.Done(): - s.logger.Debug("scan cancelled or timeout") - break TestLoop - default: - } - - if int(atomic.LoadInt32(&found)) >= req.MaxStreams { - break - } - - wg.Add(1) - go func(stream models.DiscoveredStream) { - defer wg.Done() - - // Acquire semaphore - sem <- struct{}{} - defer func() { <-sem }() - - // Special handling for ONVIF device service - skip testing, already verified - if stream.Type == "ONVIF" && stream.Working { - atomic.AddInt32(&tested, 1) - atomic.AddInt32(&found, 1) - streamsChan <- stream - s.logger.Debug("ONVIF device service added without testing", "url", stream.URL) - return - } - - // Test the stream - testResult := s.tester.TestStream(ctx, stream.URL) - atomic.AddInt32(&tested, 1) - - if testResult.Working { - atomic.AddInt32(&found, 1) - - discoveredStream := models.DiscoveredStream{ - URL: testResult.URL, - Type: testResult.Type, - Protocol: testResult.Protocol, - Port: 0, // Will be extracted from URL if needed - Working: true, - Resolution: testResult.Resolution, - Codec: testResult.Codec, - FPS: testResult.FPS, - Bitrate: testResult.Bitrate, - HasAudio: testResult.HasAudio, - TestTime: testResult.TestTime, - Metadata: testResult.Metadata, - } - - streamsChan <- discoveredStream - } else { - s.logger.Debug("stream test failed", "url", stream.URL, "error", testResult.Error) - } - }(streamToTest) - } - - // Wait for all tests to complete - wg.Wait() - close(streamsChan) - - // Wait for result collector to finish processing all streams - collectorWg.Wait() - - // Update final counts - result.TotalTested = int(atomic.LoadInt32(&tested)) - result.TotalFound = int(atomic.LoadInt32(&found)) -} \ No newline at end of file diff --git a/internal/camera/stream/builder.go b/internal/camera/stream/builder.go deleted file mode 100644 index 94749ff..0000000 --- a/internal/camera/stream/builder.go +++ /dev/null @@ -1,518 +0,0 @@ -package stream - -import ( - "encoding/base64" - "fmt" - "net/url" - "strconv" - "strings" - - "github.com/eduard256/Strix/internal/models" -) - -// Builder handles stream URL construction -type Builder struct { - queryParams []string - logger interface{ Debug(string, ...any) } -} - -// NewBuilder creates a new stream URL builder -func NewBuilder(queryParams []string, logger interface{ Debug(string, ...any) }) *Builder { - return &Builder{ - queryParams: queryParams, - logger: logger, - } -} - -// BuildContext contains parameters for URL building -type BuildContext struct { - IP string - Port int - Username string - Password string - Channel int - Width int - Height int - Protocol string - Path string -} - -// BuildURL builds a complete URL from an entry and context -func (b *Builder) BuildURL(entry models.CameraEntry, ctx BuildContext) string { - b.logger.Debug("BuildURL called", - "entry_type", entry.Type, - "entry_url", entry.URL, - "entry_port", entry.Port, - "entry_protocol", entry.Protocol, - "ctx_ip", ctx.IP, - "ctx_port", ctx.Port, - "ctx_username", ctx.Username, - "ctx_channel", ctx.Channel) - - // Set defaults - if ctx.Width == 0 { - ctx.Width = 640 - } - if ctx.Height == 0 { - ctx.Height = 480 - } - // NOTE: Channel default is 0 - will only be used for [CHANNEL] placeholder replacement - // Literal channel values in URLs (like "channel=1") are preserved as-is - - // Use entry's port if not specified - if ctx.Port == 0 { - ctx.Port = entry.Port - - // If entry port is also 0, use default port for the protocol - if ctx.Port == 0 { - // Use entry's protocol if not specified for port determination - protocol := ctx.Protocol - if protocol == "" { - protocol = entry.Protocol - } - - switch protocol { - case "http": - ctx.Port = 80 - case "https": - ctx.Port = 443 - case "rtsp", "rtsps": - ctx.Port = 554 - default: - ctx.Port = 80 // Default to 80 if unknown - } - - b.logger.Debug("using default port for protocol", - "protocol", protocol, - "default_port", ctx.Port) - } - } - - // Use entry's protocol if not specified - if ctx.Protocol == "" { - ctx.Protocol = entry.Protocol - } - - // Replace placeholders in URL path (credentials are handled separately - // to ensure proper encoding depending on their position in the URL). - path := b.replacePlaceholders(entry.URL, ctx) - b.logger.Debug("placeholders replaced", "original", entry.URL, "after_replacement", path) - - // Build the complete URL using url.URL struct for correct encoding - var fullURL string - - // Check if the URL already contains authentication parameters - hasAuthInURL := b.hasAuthenticationParams(path) - b.logger.Debug("auth params detection", "has_auth_in_url", hasAuthInURL, "path", path) - - // Determine host string (omit default port for cleaner URLs) - host := b.buildHost(ctx.IP, ctx.Port, ctx.Protocol) - - // Split path and query for url.URL (it expects them separately) - pathPart, queryPart := b.splitPathQuery(path) - - // Ensure path starts with exactly one slash - if !strings.HasPrefix(pathPart, "/") { - pathPart = "/" + pathPart - } - - u := &url.URL{ - Scheme: ctx.Protocol, - Host: host, - Path: pathPart, - RawQuery: queryPart, - } - - switch ctx.Protocol { - case "rtsp", "rtsps": - if ctx.Username != "" && ctx.Password != "" && !hasAuthInURL { - u.User = url.UserPassword(ctx.Username, ctx.Password) - } - - case "http", "https": - // For HTTP, credentials are NOT embedded in the URL by BuildURL. - // BuildURLsFromEntry handles auth variants (userinfo, query params, etc.) - // separately with url.UserPassword for proper encoding. - - default: - // Generic: no credentials in URL - } - - fullURL = u.String() - - b.logger.Debug("BuildURL complete", - "final_url", fullURL, - "entry_type", entry.Type, - "entry_url_pattern", entry.URL, - "protocol", ctx.Protocol, - "port", ctx.Port, - "has_auth_in_url", hasAuthInURL) - - return fullURL -} - -// credentialPlaceholders lists all placeholder strings that represent -// username or password values. These must NOT be replaced via simple string -// substitution because they require context-aware encoding (different for -// query parameters, path segments, and userinfo). -var credentialPlaceholders = []string{ - "[USERNAME]", "[username]", "[USER]", "[user]", - "[PASSWORD]", "[password]", "[PASWORD]", "[pasword]", - "[PASS]", "[pass]", "[PWD]", "[pwd]", -} - -// replacePlaceholders replaces all placeholders in the URL. -// -// Credential placeholders ([USERNAME], [PASSWORD], etc.) are handled in two -// phases to ensure correct encoding: -// 1. Non-credential placeholders (channel, resolution, IP, etc.) are replaced -// first — these contain only safe characters. -// 2. Credential placeholders are then replaced with proper encoding: -// - In query strings: via url.Values.Set + Encode (automatic encoding) -// - In path segments: via url.PathEscape -func (b *Builder) replacePlaceholders(urlPath string, ctx BuildContext) string { - result := urlPath - - // Generate base64 auth for [AUTH] placeholder (already safe — base64 has no - // characters that need URL encoding) - auth := "" - if ctx.Username != "" && ctx.Password != "" { - auth = base64.StdEncoding.EncodeToString([]byte(ctx.Username + ":" + ctx.Password)) - } - - // Phase 1: Replace non-credential placeholders (all values are safe strings) - safeReplacements := map[string]string{ - "[CHANNEL]": strconv.Itoa(ctx.Channel), - "[channel]": strconv.Itoa(ctx.Channel), - "[CHANNEL+1]": strconv.Itoa(ctx.Channel + 1), - "[channel+1]": strconv.Itoa(ctx.Channel + 1), - "{CHANNEL}": strconv.Itoa(ctx.Channel), - "{channel}": strconv.Itoa(ctx.Channel), - "{CHANNEL+1}": strconv.Itoa(ctx.Channel + 1), - "{channel+1}": strconv.Itoa(ctx.Channel + 1), - "[WIDTH]": strconv.Itoa(ctx.Width), - "[width]": strconv.Itoa(ctx.Width), - "[HEIGHT]": strconv.Itoa(ctx.Height), - "[height]": strconv.Itoa(ctx.Height), - "[IP]": ctx.IP, - "[ip]": ctx.IP, - "[PORT]": strconv.Itoa(ctx.Port), - "[port]": strconv.Itoa(ctx.Port), - "[AUTH]": auth, - "[auth]": auth, - "[TOKEN]": "", - "[token]": "", - } - - for placeholder, value := range safeReplacements { - result = strings.ReplaceAll(result, placeholder, value) - } - - // Phase 2: Replace credential placeholders with proper encoding. - // First handle query parameters (via url.Values for safe encoding), - // then handle any remaining credential placeholders in the path. - result = b.replaceQueryCredentials(result, ctx) - result = b.replacePathCredentials(result, ctx) - - return result -} - -// replaceQueryCredentials handles credential replacement in query parameters. -// It parses the query string while credential placeholders are still intact -// (safe ASCII strings like "[PASSWORD]"), replaces them with real values via -// url.Values.Set, and re-encodes. This ensures special characters in passwords -// are always properly percent-encoded. -func (b *Builder) replaceQueryCredentials(urlPath string, ctx BuildContext) string { - parts := strings.SplitN(urlPath, "?", 2) - if len(parts) < 2 { - return urlPath - } - - basePath := parts[0] - queryString := parts[1] - - // Parse the query string — placeholders like [PASSWORD] are safe to parse - // because they contain no special URL characters. - params, err := url.ParseQuery(queryString) - if err != nil { - return urlPath - } - - // Username placeholder values that should be replaced - usernamePlaceholders := map[string]bool{ - "[USERNAME]": true, "[username]": true, - "[USER]": true, "[user]": true, - } - - // Password placeholder values that should be replaced - passwordPlaceholders := map[string]bool{ - "[PASSWORD]": true, "[password]": true, - "[PASWORD]": true, "[pasword]": true, - "[PASS]": true, "[pass]": true, - "[PWD]": true, "[pwd]": true, - } - - changed := false - for key, values := range params { - for _, val := range values { - if usernamePlaceholders[val] { - params.Set(key, ctx.Username) - changed = true - } else if passwordPlaceholders[val] { - params.Set(key, ctx.Password) - changed = true - } - } - - // Also handle auth-named keys whose values are still placeholders - // or already contain the raw value from a previous step. - // This covers patterns like "?user=admin&pwd=12345" that come from - // replaceQueryParams in the old code. - lowerKey := strings.ToLower(key) - switch lowerKey { - case "user", "username", "usr", "loginuse": - if params.Get(key) == "" || isCredentialPlaceholder(params.Get(key)) { - params.Set(key, ctx.Username) - changed = true - } - case "password", "pass", "pwd", "loginpas", "passwd": - if params.Get(key) == "" || isCredentialPlaceholder(params.Get(key)) { - params.Set(key, ctx.Password) - changed = true - } - } - } - - if !changed { - return urlPath - } - - // params.Encode() automatically percent-encodes all values - return basePath + "?" + params.Encode() -} - -// replacePathCredentials replaces any remaining credential placeholders in the -// path portion of the URL using url.PathEscape for safe encoding. -func (b *Builder) replacePathCredentials(urlPath string, ctx BuildContext) string { - // Map of credential placeholders to their escaped values for use in paths - pathReplacements := map[string]string{ - "[USERNAME]": url.PathEscape(ctx.Username), - "[username]": url.PathEscape(ctx.Username), - "[USER]": url.PathEscape(ctx.Username), - "[user]": url.PathEscape(ctx.Username), - "[PASSWORD]": url.PathEscape(ctx.Password), - "[password]": url.PathEscape(ctx.Password), - "[PASWORD]": url.PathEscape(ctx.Password), - "[pasword]": url.PathEscape(ctx.Password), - "[PASS]": url.PathEscape(ctx.Password), - "[pass]": url.PathEscape(ctx.Password), - "[PWD]": url.PathEscape(ctx.Password), - "[pwd]": url.PathEscape(ctx.Password), - } - - for placeholder, value := range pathReplacements { - urlPath = strings.ReplaceAll(urlPath, placeholder, value) - } - - return urlPath -} - -// isCredentialPlaceholder checks if a string is one of the known credential -// placeholder tokens. -func isCredentialPlaceholder(s string) bool { - for _, p := range credentialPlaceholders { - if s == p { - return true - } - } - return false -} - - -// hasAuthenticationParams checks if URL contains auth parameters -func (b *Builder) hasAuthenticationParams(urlPath string) bool { - authParams := []string{ - "user=", "username=", "usr=", "loginuse=", - "password=", "pass=", "pwd=", "loginpas=", "passwd=", - } - - lowerPath := strings.ToLower(urlPath) - for _, param := range authParams { - if strings.Contains(lowerPath, param) { - return true - } - } - - return false -} - -// buildHost returns the host:port string, omitting the port when it matches -// the default for the given protocol. -func (b *Builder) buildHost(ip string, port int, protocol string) string { - isDefault := (protocol == "http" && port == 80) || - (protocol == "https" && port == 443) || - (protocol == "rtsp" && port == 554) || - (protocol == "rtsps" && port == 322) - - if isDefault || port == 0 { - return ip - } - return fmt.Sprintf("%s:%d", ip, port) -} - -// splitPathQuery splits a path string into path and raw query components. -// The input may contain "?" separating the path from the query string. -func (b *Builder) splitPathQuery(path string) (string, string) { - if idx := strings.IndexByte(path, '?'); idx >= 0 { - return path[:idx], path[idx+1:] - } - return path, "" -} - -// BuildURLsFromEntry generates all possible URLs from a camera entry -func (b *Builder) BuildURLsFromEntry(entry models.CameraEntry, ctx BuildContext) []string { - urlMap := make(map[string]bool) - var urls []string - - // Helper to add unique URLs - addURL := func(url string) { - if !urlMap[url] { - urls = append(urls, url) - urlMap[url] = true - } - } - - switch entry.Protocol { - case "bubble": - // BUBBLE protocol: proprietary Chinese NVR/DVR protocol - // Always use HTTP with embedded credentials - if ctx.Username != "" && ctx.Password != "" { - // Build HTTP URL with credentials embedded - ctxHTTP := ctx - ctxHTTP.Protocol = "http" - - baseURL := b.BuildURL(entry, ctxHTTP) - - // Parse and add credentials to URL - if u, err := url.Parse(baseURL); err == nil { - u.User = url.UserPassword(ctx.Username, ctx.Password) - addURL(u.String()) - } - } else { - // No credentials - try anyway (some cameras might work) - ctxHTTP := ctx - ctxHTTP.Protocol = "http" - addURL(b.BuildURL(entry, ctxHTTP)) - } - - case "rtsp", "rtsps": - // For RTSP: generate ONLY with credentials if provided, otherwise without - if ctx.Username != "" && ctx.Password != "" { - // Credentials provided - generate ONLY URL with auth - addURL(b.BuildURL(entry, ctx)) - } else { - // No credentials - generate ONLY URL without auth - ctxNoAuth := ctx - ctxNoAuth.Username = "" - ctxNoAuth.Password = "" - addURL(b.BuildURL(entry, ctxNoAuth)) - } - - case "http", "https": - // For HTTP/HTTPS: ALWAYS generate 4 authentication variants - if ctx.Username != "" && ctx.Password != "" { - // 1. No authentication - ctxNoAuth := ctx - ctxNoAuth.Username = "" - ctxNoAuth.Password = "" - urlNoAuth := b.BuildURL(entry, ctxNoAuth) - addURL(urlNoAuth) - - // 2. Basic Auth only (embedded credentials) - urlBasic := b.BuildURL(entry, ctxNoAuth) // Use clean URL - if u, err := url.Parse(urlBasic); err == nil { - u.User = url.UserPassword(ctx.Username, ctx.Password) - addURL(u.String()) - } - - // 3. Query parameters only - urlWithParams := b.BuildURL(entry, ctx) // This will replace placeholders if any - - // If URL has auth placeholders, they're already replaced - if strings.Contains(entry.URL, "[USERNAME]") || strings.Contains(entry.URL, "[PASSWORD]") { - addURL(urlWithParams) - } else { - // No placeholders - add query params for auth (don't overwrite existing params) - if u, err := url.Parse(urlWithParams); err == nil { - q := u.Query() - - // Add user/pwd if not already present - if !q.Has("user") && !q.Has("usr") && !q.Has("username") { - q.Set("user", ctx.Username) - } - if !q.Has("pwd") && !q.Has("password") && !q.Has("pass") { - q.Set("pwd", ctx.Password) - } - u.RawQuery = q.Encode() - addURL(u.String()) - - // Try alternative names too - q2 := url.Values{} - for k, v := range u.Query() { - q2[k] = v - } - if !q2.Has("username") && !q2.Has("user") && !q2.Has("usr") { - q2.Set("username", ctx.Username) - } - if !q2.Has("password") && !q2.Has("pwd") && !q2.Has("pass") { - q2.Set("password", ctx.Password) - } - u.RawQuery = q2.Encode() - addURL(u.String()) - } - } - - // 4. Basic Auth + Query parameters (combined) - if strings.Contains(entry.URL, "[USERNAME]") || strings.Contains(entry.URL, "[PASSWORD]") { - // URL has placeholders - add Basic Auth to the URL with replaced params - if u, err := url.Parse(urlWithParams); err == nil { - u.User = url.UserPassword(ctx.Username, ctx.Password) - addURL(u.String()) - } - } else { - // No placeholders - add both Basic Auth and query params (without overwriting existing) - if u, err := url.Parse(urlNoAuth); err == nil { - u.User = url.UserPassword(ctx.Username, ctx.Password) - q := u.Query() - - // Add auth params only if not already present - if !q.Has("user") && !q.Has("usr") && !q.Has("username") { - q.Set("user", ctx.Username) - } - if !q.Has("pwd") && !q.Has("password") && !q.Has("pass") { - q.Set("pwd", ctx.Password) - } - u.RawQuery = q.Encode() - addURL(u.String()) - } - } - } else { - // No credentials provided - just one URL - addURL(b.BuildURL(entry, ctx)) - } - - default: - // Other protocols - single URL - addURL(b.BuildURL(entry, ctx)) - } - - - b.logger.Debug("BuildURLsFromEntry complete", - "entry_url_pattern", entry.URL, - "entry_type", entry.Type, - "entry_protocol", entry.Protocol, - "total_urls_generated", len(urls), - "urls", urls) - - return urls -} \ No newline at end of file diff --git a/internal/camera/stream/builder_dedup_test.go b/internal/camera/stream/builder_dedup_test.go deleted file mode 100644 index bab20f7..0000000 --- a/internal/camera/stream/builder_dedup_test.go +++ /dev/null @@ -1,369 +0,0 @@ -package stream - -import ( - "strings" - "testing" - - "github.com/eduard256/Strix/internal/models" -) - -// mockLogger implements the logger interface for testing -type mockLogger struct{} - -func (m *mockLogger) Debug(msg string, args ...any) {} -func (m *mockLogger) Error(msg string, err error, args ...any) {} - -// TestCurrentDeduplicationProblems демонстрирует проблемы текущей дедупликации -func TestCurrentDeduplicationProblems(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - tests := []struct { - name string - entry models.CameraEntry - ctx BuildContext - expectedURLCount int // Сколько Builder генерирует - realUniqueCount int // Сколько реально уникальных - description string - }{ - { - name: "HTTP auth variants - same endpoint, 4 different URLs", - entry: models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.jpg", - }, - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 80, - }, - expectedURLCount: 4, // Builder генерирует 4 варианта - realUniqueCount: 1, // Но это ОДИН поток - description: "PROBLEM: 4 authentication variants of the same HTTP endpoint", - }, - { - name: "HTTP with auth placeholders - generates duplicates", - entry: models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]", - }, - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 80, - }, - expectedURLCount: 4, - realUniqueCount: 1, - description: "PROBLEM: Placeholder replacement + auth variants = duplicates", - }, - { - name: "RTSP with credentials - now FIXED", - entry: models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/main", - }, - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 554, - }, - expectedURLCount: 1, // FIXED: только с credentials - realUniqueCount: 1, // Это один поток - description: "FIXED: RTSP with credentials generates ONLY auth URL", - }, - { - name: "RTSP without credentials - only one URL", - entry: models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/main", - }, - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "", - Password: "", - Port: 554, - }, - expectedURLCount: 1, - realUniqueCount: 1, - description: "OK: No credentials = only one URL", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - urls := builder.BuildURLsFromEntry(tt.entry, tt.ctx) - - t.Logf("\n=== %s ===", tt.description) - t.Logf("Entry: %s://%s", tt.entry.Protocol, tt.entry.URL) - t.Logf("Expected URL count: %d", tt.expectedURLCount) - t.Logf("Real unique streams: %d", tt.realUniqueCount) - t.Logf("Generated URLs:") - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - if len(urls) != tt.expectedURLCount { - t.Errorf("FAILED: Expected %d URLs, got %d", tt.expectedURLCount, len(urls)) - } - - // Демонстрация проблемы - if len(urls) > tt.realUniqueCount { - duplicateCount := len(urls) - tt.realUniqueCount - t.Logf("\n⚠️ PROBLEM: %d semantic duplicates generated", duplicateCount) - t.Logf("These are different URL strings pointing to the SAME stream!") - t.Logf("Waste: %d unnecessary tests", duplicateCount) - } else if len(urls) == tt.realUniqueCount && tt.expectedURLCount == tt.realUniqueCount { - t.Logf("\n✓ NO DUPLICATES: All URLs are unique (FIXED!)") - } - - // Показать канонические URL - canonicalURLs := make(map[string][]string) - for _, url := range urls { - canonical := makeCanonical(url) - canonicalURLs[canonical] = append(canonicalURLs[canonical], url) - } - - t.Logf("\nCanonical URL analysis:") - for canonical, variants := range canonicalURLs { - t.Logf(" Canonical: %s", canonical) - if len(variants) > 1 { - t.Logf(" ⚠️ Has %d variants (DUPLICATES!):", len(variants)) - for _, v := range variants { - t.Logf(" - %s", v) - } - } else { - t.Logf(" ✓ Unique") - } - } - }) - } -} - -// TestMultipleSourcesDuplication тестирует дубликаты от разных источников -func TestMultipleSourcesDuplication(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - // Симуляция: один и тот же паттерн из двух источников - entry1 := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/Streaming/Channels/101", - } - - entry2 := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/Streaming/Channels/101", - } - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 554, - } - - urls1 := builder.BuildURLsFromEntry(entry1, ctx) - urls2 := builder.BuildURLsFromEntry(entry2, ctx) - - t.Logf("\n=== Multiple Sources Generate Same URLs ===") - t.Logf("Source 1 (e.g., Popular Patterns):") - for i, url := range urls1 { - t.Logf(" [%d] %s", i+1, url) - } - - t.Logf("\nSource 2 (e.g., Model Patterns):") - for i, url := range urls2 { - t.Logf(" [%d] %s", i+1, url) - } - - // Симуляция текущей дедупликации (простое сравнение строк) - urlMap := make(map[string]bool) - var combined []string - - for _, url := range urls1 { - if !urlMap[url] { - combined = append(combined, url) - urlMap[url] = true - } - } - - detectedDuplicates := 0 - for _, url := range urls2 { - if !urlMap[url] { - combined = append(combined, url) - urlMap[url] = true - } else { - detectedDuplicates++ - } - } - - t.Logf("\nCurrent deduplication results:") - t.Logf(" Source 1 URLs: %d", len(urls1)) - t.Logf(" Source 2 URLs: %d", len(urls2)) - t.Logf(" Combined URLs: %d", len(combined)) - t.Logf(" Duplicates detected by string comparison: %d", detectedDuplicates) - - // Канонический анализ - canonicalMap := make(map[string][]string) - for _, url := range combined { - canonical := makeCanonical(url) - canonicalMap[canonical] = append(canonicalMap[canonical], url) - } - - realUnique := len(canonicalMap) - semanticDuplicates := len(combined) - realUnique - - t.Logf("\nCanonical URL analysis:") - t.Logf(" Real unique streams: %d", realUnique) - t.Logf(" Semantic duplicates: %d", semanticDuplicates) - t.Logf(" Current dedup effectiveness: %.1f%%", - float64(detectedDuplicates)/float64(len(urls1)+len(urls2))*100) - t.Logf(" Should be dedup effectiveness: %.1f%%", - float64(semanticDuplicates+detectedDuplicates)/float64(len(urls1)+len(urls2))*100) - - if semanticDuplicates > 0 { - t.Logf("\n⚠️ PROBLEM: %d semantic duplicates NOT detected", semanticDuplicates) - } -} - -// TestWorstCaseScenario показывает худший сценарий -func TestWorstCaseScenario(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - // Паттерн, который есть везде: Popular + Model + ONVIF - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.jpg", - } - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 80, - } - - // Симуляция 3 источников - popularURLs := builder.BuildURLsFromEntry(entry, ctx) - modelURLs := builder.BuildURLsFromEntry(entry, ctx) - - // ONVIF может вернуть URL без credentials - onvifURL := "http://192.168.1.100/snapshot.jpg" - - t.Logf("\n=== WORST CASE: Same pattern from 3 sources ===") - t.Logf("Popular patterns generates: %d URLs", len(popularURLs)) - t.Logf("Model patterns generates: %d URLs", len(modelURLs)) - t.Logf("ONVIF returns: 1 URL") - - // Текущая дедупликация - urlMap := make(map[string]bool) - var all []string - - add := func(url string) { - if !urlMap[url] { - all = append(all, url) - urlMap[url] = true - } - } - - for _, url := range popularURLs { - add(url) - } - for _, url := range modelURLs { - add(url) - } - add(onvifURL) - - t.Logf("\nAfter current deduplication:") - t.Logf(" Total URLs to test: %d", len(all)) - - for i, url := range all { - t.Logf(" [%d] %s", i+1, url) - } - - // Канонический анализ - canonicalMap := make(map[string][]string) - for _, url := range all { - canonical := makeCanonical(url) - canonicalMap[canonical] = append(canonicalMap[canonical], url) - } - - t.Logf("\nCanonical analysis:") - t.Logf(" Real unique streams: %d", len(canonicalMap)) - t.Logf(" URLs being tested: %d", len(all)) - t.Logf(" Waste: %d unnecessary tests (%.1f%%)", - len(all)-len(canonicalMap), - float64(len(all)-len(canonicalMap))/float64(len(all))*100) - - if len(all) > 1 { - t.Logf("\n⚠️ CRITICAL: Testing the same stream %d times!", len(all)) - t.Logf("Expected time waste: ~%d seconds (assuming 2s per test)", (len(all)-1)*2) - } -} - -// makeCanonical - упрощенная нормализация URL для теста -func makeCanonical(rawURL string) string { - url := rawURL - - // 1. Убрать credentials (user:pass@) - if idx := strings.Index(url, "://"); idx >= 0 { - protocol := url[:idx+3] - rest := url[idx+3:] - - if atIdx := strings.Index(rest, "@"); atIdx >= 0 { - rest = rest[atIdx+1:] - } - - url = protocol + rest - } - - // 2. Убрать auth query параметры - authParams := []string{ - "user=", "username=", "usr=", - "pwd=", "password=", "pass=", - } - - for _, param := range authParams { - if idx := strings.Index(url, "?"+param); idx >= 0 { - // Найти конец параметра - endIdx := strings.Index(url[idx+1:], "&") - if endIdx >= 0 { - url = url[:idx+1] + url[idx+1+endIdx+1:] - } else { - url = url[:idx] - } - } - - if idx := strings.Index(url, "&"+param); idx >= 0 { - endIdx := strings.Index(url[idx+1:], "&") - if endIdx >= 0 { - url = url[:idx] + url[idx+1+endIdx:] - } else { - url = url[:idx] - } - } - } - - // 3. Убрать trailing ? - url = strings.TrimSuffix(url, "?") - - return url -} diff --git a/internal/camera/stream/deduplication_real_test.go b/internal/camera/stream/deduplication_real_test.go deleted file mode 100644 index 822a179..0000000 --- a/internal/camera/stream/deduplication_real_test.go +++ /dev/null @@ -1,420 +0,0 @@ -package stream - -import ( - "testing" - - "github.com/eduard256/Strix/internal/models" -) - -// TestRealWorldDeduplication тестирует реальный сценарий: -// 5 одинаковых URL из 3 разных источников (ONVIF, Model patterns, Popular patterns) -func TestRealWorldDeduplication(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Channel: 1, - Port: 554, - } - - t.Log("\n========================================") - t.Log("REAL WORLD SCENARIO: Same stream from 3 sources") - t.Log("========================================\n") - - // === SOURCE 1: ONVIF Discovery === - t.Log("=== SOURCE 1: ONVIF Discovery ===") - onvifStreams := []models.DiscoveredStream{ - { - URL: "rtsp://192.168.1.100:554/Streaming/Channels/101", - Type: "ONVIF", - Protocol: "rtsp", - Port: 554, - Working: true, // ONVIF streams are pre-verified - }, - } - t.Logf("ONVIF discovered: %d URLs", len(onvifStreams)) - for i, s := range onvifStreams { - t.Logf(" [ONVIF-%d] %s", i+1, s.URL) - } - - // === SOURCE 2: Model-specific patterns (Hikvision) === - t.Log("\n=== SOURCE 2: Model-specific patterns (Hikvision DS-2CD2086) ===") - modelEntry := models.CameraEntry{ - Models: []string{"DS-2CD2086G2-I", "DS-2CD2042WD"}, - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/Streaming/Channels/101", - } - modelURLs := builder.BuildURLsFromEntry(modelEntry, ctx) - t.Logf("Model patterns generated: %d URLs", len(modelURLs)) - for i, url := range modelURLs { - t.Logf(" [MODEL-%d] %s", i+1, url) - } - - // === SOURCE 3: Popular patterns === - t.Log("\n=== SOURCE 3: Popular patterns (generic RTSP) ===") - popularEntry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/Streaming/Channels/101", - } - popularURLs := builder.BuildURLsFromEntry(popularEntry, ctx) - t.Logf("Popular patterns generated: %d URLs", len(popularURLs)) - for i, url := range popularURLs { - t.Logf(" [POPULAR-%d] %s", i+1, url) - } - - // === CURRENT DEDUPLICATION (как в scanner.go:235-395) === - t.Log("\n=== CURRENT DEDUPLICATION (string comparison) ===") - urlMap := make(map[string]bool) - var allStreams []models.DiscoveredStream - - // Add ONVIF streams - for _, stream := range onvifStreams { - if !urlMap[stream.URL] { - allStreams = append(allStreams, stream) - urlMap[stream.URL] = true - t.Logf("✓ Added: %s (from ONVIF)", stream.URL) - } else { - t.Logf("✗ Skipped: %s (duplicate from ONVIF)", stream.URL) - } - } - - // Add Model URLs - for _, url := range modelURLs { - if !urlMap[url] { - allStreams = append(allStreams, models.DiscoveredStream{ - URL: url, - Type: modelEntry.Type, - Protocol: modelEntry.Protocol, - Port: modelEntry.Port, - }) - urlMap[url] = true - t.Logf("✓ Added: %s (from Model)", url) - } else { - t.Logf("✗ Skipped: %s (duplicate from Model)", url) - } - } - - // Add Popular URLs - for _, url := range popularURLs { - if !urlMap[url] { - allStreams = append(allStreams, models.DiscoveredStream{ - URL: url, - Type: popularEntry.Type, - Protocol: popularEntry.Protocol, - Port: popularEntry.Port, - }) - urlMap[url] = true - t.Logf("✓ Added: %s (from Popular)", url) - } else { - t.Logf("✗ Skipped: %s (duplicate from Popular)", url) - } - } - - // === RESULTS === - t.Log("\n========================================") - t.Log("DEDUPLICATION RESULTS") - t.Log("========================================") - - totalGenerated := len(onvifStreams) + len(modelURLs) + len(popularURLs) - t.Logf("Total URLs generated: %d", totalGenerated) - t.Logf(" - From ONVIF: %d", len(onvifStreams)) - t.Logf(" - From Model: %d", len(modelURLs)) - t.Logf(" - From Popular: %d", len(popularURLs)) - t.Logf("\nURLs after deduplication: %d", len(allStreams)) - t.Logf("Duplicates removed: %d", totalGenerated-len(allStreams)) - - // List final URLs - t.Log("\nFinal URLs to test:") - for i, stream := range allStreams { - t.Logf(" [%d] %s (type: %s)", i+1, stream.URL, stream.Type) - } - - // === CANONICAL ANALYSIS (показывает реальные дубликаты) === - t.Log("\n========================================") - t.Log("CANONICAL ANALYSIS (semantic duplicates)") - t.Log("========================================") - - canonicalMap := make(map[string][]string) - for _, stream := range allStreams { - canonical := normalizeURLForComparison(stream.URL) - canonicalMap[canonical] = append(canonicalMap[canonical], stream.URL) - } - - realUnique := len(canonicalMap) - semanticDuplicates := len(allStreams) - realUnique - - t.Logf("Real unique streams: %d", realUnique) - t.Logf("Semantic duplicates: %d", semanticDuplicates) - - if semanticDuplicates > 0 { - t.Log("\n⚠️ PROBLEM: Multiple URLs point to the SAME stream:") - for canonical, variants := range canonicalMap { - if len(variants) > 1 { - t.Logf("\n Canonical: %s", canonical) - t.Logf(" Variants (%d):", len(variants)) - for _, v := range variants { - t.Logf(" - %s", v) - } - t.Logf(" ⚠️ This stream will be tested %d times!", len(variants)) - } - } - - t.Logf("\n⚠️ WASTE: %d unnecessary tests", semanticDuplicates) - t.Logf("Time waste: ~%d seconds (assuming 2s per test)", semanticDuplicates*2) - t.Logf("Bandwidth waste: ~%d KB (assuming 100KB per test)", semanticDuplicates*100) - } else { - t.Log("\n✓ No semantic duplicates found") - } - - // === ASSERTION === - if semanticDuplicates > 0 { - t.Errorf("DEDUPLICATION FAILED: %d semantic duplicates not removed", semanticDuplicates) - } -} - -// TestHTTPAuthVariantsDuplication проверяет дубликаты от HTTP auth вариантов -func TestHTTPAuthVariantsDuplication(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 80, - } - - t.Log("\n========================================") - t.Log("HTTP AUTHENTICATION VARIANTS TEST") - t.Log("========================================\n") - - // Один entry для HTTP - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.cgi", - } - - t.Log("Entry: http://192.168.1.100/snapshot.cgi") - t.Log("\nBuilder generates auth variants:") - - urls := builder.BuildURLsFromEntry(entry, ctx) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - t.Logf("\nTotal URLs generated: %d", len(urls)) - - // Canonical analysis - canonicalMap := make(map[string][]string) - for _, url := range urls { - canonical := normalizeURLForComparison(url) - canonicalMap[canonical] = append(canonicalMap[canonical], url) - } - - t.Logf("Real unique endpoints: %d", len(canonicalMap)) - semanticDuplicates := len(urls) - len(canonicalMap) - t.Logf("Semantic duplicates: %d", semanticDuplicates) - - if semanticDuplicates > 0 { - t.Log("\n⚠️ PROBLEM: Multiple auth variants for the SAME endpoint:") - for canonical, variants := range canonicalMap { - if len(variants) > 1 { - t.Logf("\n Endpoint: %s", canonical) - t.Logf(" Auth variants (%d):", len(variants)) - for j, v := range variants { - t.Logf(" [%d] %s", j+1, v) - } - } - } - - t.Logf("\n⚠️ All %d variants will be tested, but only 1 will likely work", len(urls)) - t.Logf("Expected success rate: ~25%% (1 out of 4)") - t.Logf("Expected failures: ~%d", len(urls)-1) - } - - // Note: это НЕ ошибка - это feature для повышения шансов найти рабочий вариант auth - t.Log("\nNOTE: This is intentional - trying multiple auth methods increases success rate") - t.Log("But it does mean testing the same stream multiple times with different credentials") -} - -// TestFiveIdenticalURLsFromThreeSources - главный тест: ровно 5 одинаковых URL -func TestFiveIdenticalURLsFromThreeSources(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "password123", - Port: 554, - } - - t.Log("\n========================================") - t.Log("TEST: 5 IDENTICAL URLs from 3 SOURCES") - t.Log("========================================\n") - - // SOURCE 1: ONVIF - returns 1 URL without auth - onvifURL := "rtsp://192.168.1.100:554/live/ch0" - t.Log("SOURCE 1 - ONVIF Discovery:") - t.Logf(" Returns: %s", onvifURL) - - // SOURCE 2: Model patterns - generates 2 URLs (with/without auth) - modelEntry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/ch0", - } - modelURLs := builder.BuildURLsFromEntry(modelEntry, ctx) - t.Log("\nSOURCE 2 - Model Patterns (Hikvision):") - t.Logf(" Generates: %d URLs", len(modelURLs)) - for i, url := range modelURLs { - t.Logf(" [%d] %s", i+1, url) - } - - // SOURCE 3: Popular patterns - generates 2 URLs (with/without auth) - popularEntry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/ch0", - } - popularURLs := builder.BuildURLsFromEntry(popularEntry, ctx) - t.Log("\nSOURCE 3 - Popular Patterns:") - t.Logf(" Generates: %d URLs", len(popularURLs)) - for i, url := range popularURLs { - t.Logf(" [%d] %s", i+1, url) - } - - // Simulate current deduplication - urlMap := make(map[string]bool) - var combined []string - - // Add ONVIF - if !urlMap[onvifURL] { - combined = append(combined, onvifURL) - urlMap[onvifURL] = true - } - - // Add Model - for _, url := range modelURLs { - if !urlMap[url] { - combined = append(combined, url) - urlMap[url] = true - } - } - - // Add Popular - for _, url := range popularURLs { - if !urlMap[url] { - combined = append(combined, url) - urlMap[url] = true - } - } - - t.Log("\n========================================") - t.Log("RESULTS") - t.Log("========================================") - - totalGenerated := 1 + len(modelURLs) + len(popularURLs) - t.Logf("Total URLs from all sources: %d", totalGenerated) - t.Logf(" ONVIF: 1") - t.Logf(" Model: %d", len(modelURLs)) - t.Logf(" Popular: %d", len(popularURLs)) - - t.Logf("\nAfter string-based deduplication: %d URLs", len(combined)) - t.Logf("Removed by string comparison: %d", totalGenerated-len(combined)) - - t.Log("\nFinal URLs to test:") - for i, url := range combined { - t.Logf(" [%d] %s", i+1, url) - } - - // Canonical analysis - canonicalMap := make(map[string][]string) - for _, url := range combined { - canonical := normalizeURLForComparison(url) - canonicalMap[canonical] = append(canonicalMap[canonical], url) - } - - realUnique := len(canonicalMap) - semanticDuplicates := len(combined) - realUnique - - t.Log("\n========================================") - t.Log("SEMANTIC ANALYSIS") - t.Log("========================================") - t.Logf("Real unique streams: %d", realUnique) - t.Logf("Semantic duplicates: %d", semanticDuplicates) - - if semanticDuplicates > 0 { - t.Log("\n⚠️ CRITICAL ISSUE:") - t.Logf("The same stream will be tested %d times!", len(combined)) - t.Log("\nBreakdown:") - for canonical, variants := range canonicalMap { - t.Logf("\n Stream: %s", canonical) - t.Logf(" Will be tested %d times as:", len(variants)) - for i, v := range variants { - t.Logf(" [%d] %s", i+1, v) - } - } - - t.Log("\n⚠️ IMPACT:") - t.Logf(" - Wasted tests: %d", semanticDuplicates) - t.Logf(" - Wasted time: ~%d seconds", semanticDuplicates*2) - t.Logf(" - Efficiency: %.1f%% (should be 100%%)", - float64(realUnique)/float64(len(combined))*100) - - t.Errorf("\nDEDUPLICATION FAILED: %d duplicates not detected", semanticDuplicates) - } else { - t.Log("\n✓ SUCCESS: All duplicates properly detected") - } -} - -// normalizeURLForComparison убирает различия в auth для сравнения -func normalizeURLForComparison(rawURL string) string { - // Простая нормализация: убираем user:pass@ из URL - url := rawURL - - // Найти protocol:// - protocolEnd := 0 - for i := 0; i < len(url)-3; i++ { - if url[i:i+3] == "://" { - protocolEnd = i + 3 - break - } - } - - if protocolEnd == 0 { - return url - } - - protocol := url[:protocolEnd] - rest := url[protocolEnd:] - - // Убрать user:pass@ - atIndex := -1 - for i := 0; i < len(rest); i++ { - if rest[i] == '@' { - atIndex = i - break - } - if rest[i] == '/' { - break - } - } - - if atIndex >= 0 { - rest = rest[atIndex+1:] - } - - return protocol + rest -} diff --git a/internal/camera/stream/protocol_comparison_test.go b/internal/camera/stream/protocol_comparison_test.go deleted file mode 100644 index 036342b..0000000 --- a/internal/camera/stream/protocol_comparison_test.go +++ /dev/null @@ -1,351 +0,0 @@ -package stream - -import ( - "strings" - "testing" - - "github.com/eduard256/Strix/internal/models" -) - -// TestProtocolAuthBehaviorComparison проверяет разницу в генерации auth вариантов -// между RTSP и HTTP протоколами -func TestProtocolAuthBehaviorComparison(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 0, // Will use default for protocol - } - - t.Log("\n" + strings.Repeat("=", 80)) - t.Log("PROTOCOL AUTH BEHAVIOR COMPARISON") - t.Log(strings.Repeat("=", 80)) - - // === RTSP === - t.Log("\n### RTSP Protocol ###") - rtspEntry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/ch0", - } - - rtspURLs := builder.BuildURLsFromEntry(rtspEntry, ctx) - - t.Logf("\nRTSP with credentials (user=%s, pass=%s):", "admin", "***") - t.Logf("Generated: %d URL(s)", len(rtspURLs)) - for i, url := range rtspURLs { - t.Logf(" [%d] %s", i+1, url) - } - - // Check RTSP behavior - if len(rtspURLs) != 1 { - t.Errorf("❌ RTSP: Expected 1 URL, got %d", len(rtspURLs)) - } - - hasRTSPAuth := false - hasRTSPNoAuth := false - for _, url := range rtspURLs { - if strings.Contains(url, "@") { - hasRTSPAuth = true - } else { - hasRTSPNoAuth = true - } - } - - if !hasRTSPAuth { - t.Error("❌ RTSP: Should have URL WITH auth") - } - if hasRTSPNoAuth { - t.Error("❌ RTSP: Should NOT have URL without auth when credentials provided") - } - - if len(rtspURLs) == 1 && hasRTSPAuth && !hasRTSPNoAuth { - t.Log("✅ RTSP: Correctly generates ONLY auth URL") - } - - // === HTTP === - t.Log("\n### HTTP Protocol ###") - httpEntry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.cgi", - } - - httpURLs := builder.BuildURLsFromEntry(httpEntry, ctx) - - t.Logf("\nHTTP with credentials (user=%s, pass=%s):", "admin", "***") - t.Logf("Generated: %d URL(s)", len(httpURLs)) - for i, url := range httpURLs { - t.Logf(" [%d] %s", i+1, url) - } - - // Check HTTP behavior - if len(httpURLs) != 4 { - t.Errorf("❌ HTTP: Expected 4 URLs, got %d", len(httpURLs)) - } - - // Analyze HTTP URLs - type authVariant struct { - name string - found bool - url string - } - - variants := []authVariant{ - {name: "No auth", found: false}, - {name: "Basic auth only", found: false}, - {name: "Query params only", found: false}, - {name: "Basic auth + Query params", found: false}, - } - - for _, url := range httpURLs { - hasBasicAuth := strings.Contains(url, "@") - hasQueryParams := strings.Contains(url, "?") - - if !hasBasicAuth && !hasQueryParams { - variants[0].found = true - variants[0].url = url - } else if hasBasicAuth && !hasQueryParams { - variants[1].found = true - variants[1].url = url - } else if !hasBasicAuth && hasQueryParams { - variants[2].found = true - variants[2].url = url - } else if hasBasicAuth && hasQueryParams { - variants[3].found = true - variants[3].url = url - } - } - - t.Log("\nHTTP Auth variants breakdown:") - allFound := true - for i, v := range variants { - if v.found { - t.Logf(" ✅ [%d] %s: %s", i+1, v.name, v.url) - } else { - t.Errorf(" ❌ [%d] %s: MISSING", i+1, v.name) - allFound = false - } - } - - if allFound { - t.Log("\n✅ HTTP: Correctly generates ALL 4 auth variants") - } else { - t.Error("\n❌ HTTP: Missing some auth variants") - } - - // === COMPARISON SUMMARY === - t.Log("\n" + strings.Repeat("=", 80)) - t.Log("SUMMARY") - t.Log(strings.Repeat("=", 80)) - t.Log("\nRTSP behavior:") - t.Log(" • With credentials → 1 URL (WITH auth only)") - t.Log(" • Without credentials → 1 URL (NO auth only)") - t.Log(" • Rationale: RTSP auth is binary (works or doesn't)") - t.Log("") - t.Log("HTTP behavior:") - t.Log(" • With credentials → 4 URLs:") - t.Log(" 1. No auth (try public access)") - t.Log(" 2. Basic auth only (user:pass@host)") - t.Log(" 3. Query params only (?user=X&pwd=Y)") - t.Log(" 4. Both methods combined") - t.Log(" • Rationale: Different cameras support different auth methods") - t.Log(strings.Repeat("=", 80)) -} - -// TestRTSPNoAuthWhenNoCredentials проверяет что RTSP без credentials НЕ генерирует auth URL -func TestRTSPNoAuthWhenNoCredentials(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - rtspEntry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/main", - } - - // Without credentials - ctxNoAuth := BuildContext{ - IP: "192.168.1.100", - Username: "", - Password: "", - Port: 554, - } - - urls := builder.BuildURLsFromEntry(rtspEntry, ctxNoAuth) - - t.Log("\n=== RTSP WITHOUT credentials ===") - t.Logf("Generated: %d URL(s)", len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - if len(urls) != 1 { - t.Errorf("Expected 1 URL, got %d", len(urls)) - } - - if len(urls) > 0 { - if strings.Contains(urls[0], "@") { - t.Error("❌ Should NOT have auth when no credentials provided") - } else { - t.Log("✅ Correctly generates URL without auth") - } - } -} - -// TestHTTPNoAuthWhenNoCredentials проверяет что HTTP без credentials генерирует ТОЛЬКО 1 URL -func TestHTTPNoAuthWhenNoCredentials(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - httpEntry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.jpg", - } - - // Without credentials - ctxNoAuth := BuildContext{ - IP: "192.168.1.100", - Username: "", - Password: "", - Port: 80, - } - - urls := builder.BuildURLsFromEntry(httpEntry, ctxNoAuth) - - t.Log("\n=== HTTP WITHOUT credentials ===") - t.Logf("Generated: %d URL(s)", len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - if len(urls) != 1 { - t.Errorf("Expected 1 URL, got %d", len(urls)) - } - - if len(urls) > 0 { - if strings.Contains(urls[0], "@") || strings.Contains(urls[0], "?") { - t.Error("❌ Should NOT have auth when no credentials provided") - } else { - t.Log("✅ Correctly generates URL without auth") - } - } -} - -// TestCompleteProtocolMatrix проверяет полную матрицу протоколов и credentials -func TestCompleteProtocolMatrix(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - type testCase struct { - protocol string - port int - url string - withCreds bool - expectedURLs int - description string - } - - tests := []testCase{ - // RTSP - { - protocol: "rtsp", - port: 554, - url: "/live/ch0", - withCreds: true, - expectedURLs: 1, - description: "RTSP with credentials", - }, - { - protocol: "rtsp", - port: 554, - url: "/live/ch0", - withCreds: false, - expectedURLs: 1, - description: "RTSP without credentials", - }, - // HTTP - { - protocol: "http", - port: 80, - url: "snapshot.cgi", - withCreds: true, - expectedURLs: 4, - description: "HTTP with credentials", - }, - { - protocol: "http", - port: 80, - url: "snapshot.cgi", - withCreds: false, - expectedURLs: 1, - description: "HTTP without credentials", - }, - // HTTPS - { - protocol: "https", - port: 443, - url: "snapshot.cgi", - withCreds: true, - expectedURLs: 4, - description: "HTTPS with credentials", - }, - { - protocol: "https", - port: 443, - url: "snapshot.cgi", - withCreds: false, - expectedURLs: 1, - description: "HTTPS without credentials", - }, - } - - t.Log("\n" + strings.Repeat("=", 80)) - t.Log("COMPLETE PROTOCOL MATRIX") - t.Log(strings.Repeat("=", 80)) - - for _, tc := range tests { - t.Run(tc.description, func(t *testing.T) { - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: tc.protocol, - Port: tc.port, - URL: tc.url, - } - - ctx := BuildContext{ - IP: "192.168.1.100", - Port: tc.port, - } - - if tc.withCreds { - ctx.Username = "admin" - ctx.Password = "12345" - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - - t.Logf("Protocol: %s, Creds: %v → Generated: %d URL(s)", - tc.protocol, tc.withCreds, len(urls)) - - if len(urls) != tc.expectedURLs { - t.Errorf("❌ Expected %d URLs, got %d", tc.expectedURLs, len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - } else { - t.Logf("✅ Correct: %d URL(s)", len(urls)) - } - }) - } - - t.Log(strings.Repeat("=", 80)) -} diff --git a/internal/camera/stream/rtsp_auth_logic_test.go b/internal/camera/stream/rtsp_auth_logic_test.go deleted file mode 100644 index 4406b0b..0000000 --- a/internal/camera/stream/rtsp_auth_logic_test.go +++ /dev/null @@ -1,449 +0,0 @@ -package stream - -import ( - "testing" - - "github.com/eduard256/Strix/internal/models" -) - -// TestRTSPAuthLogic проверяет логику генерации RTSP URL с авторизацией -func TestRTSPAuthLogic(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/ch0", - } - - tests := []struct { - name string - ctx BuildContext - expectedURLCount int - shouldHaveNoAuth bool - shouldHaveAuth bool - description string - }{ - { - name: "RTSP with credentials - should generate ONLY with auth", - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 554, - }, - expectedURLCount: 1, - shouldHaveNoAuth: false, - shouldHaveAuth: true, - description: "When credentials provided, generate ONLY URL with auth", - }, - { - name: "RTSP without credentials - should generate ONLY without auth", - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "", - Password: "", - Port: 554, - }, - expectedURLCount: 1, - shouldHaveNoAuth: true, - shouldHaveAuth: false, - description: "When NO credentials provided, generate ONLY URL without auth", - }, - { - name: "RTSP with only username (no password) - should generate without auth", - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "", - Port: 554, - }, - expectedURLCount: 1, - shouldHaveNoAuth: true, - shouldHaveAuth: false, - description: "Username without password = no credentials", - }, - { - name: "RTSP with only password (no username) - should generate without auth", - ctx: BuildContext{ - IP: "192.168.1.100", - Username: "", - Password: "12345", - Port: 554, - }, - expectedURLCount: 1, - shouldHaveNoAuth: true, - shouldHaveAuth: false, - description: "Password without username = no credentials", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - urls := builder.BuildURLsFromEntry(entry, tt.ctx) - - t.Logf("\n=== %s ===", tt.description) - t.Logf("Context: IP=%s, User=%s, Pass=%s", - tt.ctx.IP, - maskString(tt.ctx.Username), - maskString(tt.ctx.Password)) - t.Logf("Generated URLs: %d", len(urls)) - - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - // Check count - if len(urls) != tt.expectedURLCount { - t.Errorf("FAILED: Expected %d URLs, got %d", tt.expectedURLCount, len(urls)) - } - - // Check for auth presence - hasNoAuth := false - hasAuth := false - - for _, url := range urls { - if containsAuth(url) { - hasAuth = true - } else { - hasNoAuth = true - } - } - - if tt.shouldHaveNoAuth && !hasNoAuth { - t.Errorf("FAILED: Expected URL without auth, but none found") - } - if !tt.shouldHaveNoAuth && hasNoAuth { - t.Errorf("FAILED: Expected NO URL without auth, but found one") - } - if tt.shouldHaveAuth && !hasAuth { - t.Errorf("FAILED: Expected URL with auth, but none found") - } - if !tt.shouldHaveAuth && hasAuth { - t.Errorf("FAILED: Expected NO URL with auth, but found one") - } - - t.Logf("✓ Test passed") - }) - } -} - -// TestHTTPAuthLogic проверяет что HTTP НЕ изменился (все 4 варианта) -func TestHTTPAuthLogic(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.cgi", - } - - t.Log("\n=== HTTP should generate ALL 4 auth variants (unchanged behavior) ===") - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 80, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - - t.Logf("Generated URLs: %d", len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - expectedCount := 4 - if len(urls) != expectedCount { - t.Errorf("FAILED: Expected %d URLs for HTTP, got %d", expectedCount, len(urls)) - t.Errorf("HTTP auth variant generation should NOT be changed!") - } else { - t.Log("✓ HTTP still generates 4 auth variants (correct)") - } - - // Verify we have different auth methods - hasNoAuth := false - hasBasicAuth := false - hasQueryAuth := false - hasBothAuth := false - - for _, url := range urls { - hasAuth := containsAuth(url) - hasQuery := containsString(url, "?") - - if !hasAuth && !hasQuery { - hasNoAuth = true - } else if hasAuth && !hasQuery { - hasBasicAuth = true - } else if !hasAuth && hasQuery { - hasQueryAuth = true - } else if hasAuth && hasQuery { - hasBothAuth = true - } - } - - if !hasNoAuth || !hasBasicAuth || !hasQueryAuth || !hasBothAuth { - t.Error("FAILED: HTTP should have all 4 auth variants:") - t.Logf(" No auth: %v", hasNoAuth) - t.Logf(" Basic auth: %v", hasBasicAuth) - t.Logf(" Query auth: %v", hasQueryAuth) - t.Logf(" Both: %v", hasBothAuth) - } else { - t.Log("✓ All 4 HTTP auth variants present (correct)") - } -} - -// TestHTTPSAuthLogic проверяет что HTTPS работает как HTTP -func TestHTTPSAuthLogic(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "https", - Port: 443, - URL: "snapshot.cgi", - } - - t.Log("\n=== HTTPS should generate ALL 4 auth variants (same as HTTP) ===") - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 443, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - - t.Logf("Generated URLs: %d", len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - expectedCount := 4 - if len(urls) != expectedCount { - t.Errorf("FAILED: Expected %d URLs for HTTPS, got %d", expectedCount, len(urls)) - } else { - t.Log("✓ HTTPS generates 4 auth variants (correct)") - } -} - -// TestBUBBLEProtocolUnchanged проверяет что BUBBLE протокол не изменился -func TestBUBBLEProtocolUnchanged(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "BUBBLE", - Protocol: "bubble", - Port: 34567, - URL: "/{channel}?stream=0", - } - - t.Log("\n=== BUBBLE protocol should remain unchanged ===") - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 34567, - Channel: 1, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - - t.Logf("Generated URLs: %d", len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - if len(urls) < 1 { - t.Error("FAILED: BUBBLE should generate at least 1 URL") - } else { - t.Log("✓ BUBBLE protocol works") - } -} - -// TestRTSPDeduplicationAcrossSources проверяет дедупликацию между источниками -func TestRTSPDeduplicationAcrossSources(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "12345", - Port: 554, - } - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/ch0", - } - - t.Log("\n=== RTSP Deduplication: Each source generates ONLY auth URL ===") - - // Source 1: Model patterns - modelURLs := builder.BuildURLsFromEntry(entry, ctx) - t.Logf("Model patterns: %d URLs", len(modelURLs)) - for i, url := range modelURLs { - t.Logf(" [%d] %s", i+1, url) - } - - // Source 2: Popular patterns - popularURLs := builder.BuildURLsFromEntry(entry, ctx) - t.Logf("Popular patterns: %d URLs", len(popularURLs)) - for i, url := range popularURLs { - t.Logf(" [%d] %s", i+1, url) - } - - // Source 3: ONVIF (manual simulation - without auth) - onvifURL := "rtsp://192.168.1.100:554/live/ch0" - t.Logf("ONVIF: 1 URL") - t.Logf(" [1] %s", onvifURL) - - // Current deduplication - urlMap := make(map[string]bool) - var combined []string - - for _, url := range modelURLs { - if !urlMap[url] { - combined = append(combined, url) - urlMap[url] = true - } - } - - for _, url := range popularURLs { - if !urlMap[url] { - combined = append(combined, url) - urlMap[url] = true - } - } - - if !urlMap[onvifURL] { - combined = append(combined, onvifURL) - urlMap[onvifURL] = true - } - - t.Logf("\nAfter deduplication: %d URLs", len(combined)) - for i, url := range combined { - t.Logf(" [%d] %s", i+1, url) - } - - // Verify: should have exactly 2 URLs - // 1. From Model/Popular (with auth): rtsp://admin:12345@192.168.1.100/live/ch0 - // 2. From ONVIF (without auth, with port): rtsp://192.168.1.100:554/live/ch0 - expectedCount := 2 - if len(combined) != expectedCount { - t.Errorf("FAILED: Expected %d unique URLs, got %d", expectedCount, len(combined)) - t.Log("Expected:") - t.Log(" 1. rtsp://admin:12345@192.168.1.100/live/ch0 (from Model/Popular)") - t.Log(" 2. rtsp://192.168.1.100:554/live/ch0 (from ONVIF)") - } else { - t.Log("✓ Deduplication works correctly") - t.Log(" Model/Popular URLs are identical → deduplicated to 1") - t.Log(" ONVIF URL is different (has :554 port) → kept as separate") - t.Log(" Total: 2 unique URLs (correct!)") - } -} - -// TestRTSPWithoutCredentialsSingleURL проверяет что без credentials генерируется 1 URL -func TestRTSPWithoutCredentialsSingleURL(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/main", - } - - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "", - Password: "", - Port: 554, - } - - t.Log("\n=== RTSP without credentials should generate SINGLE URL ===") - - urls := builder.BuildURLsFromEntry(entry, ctx) - - t.Logf("Generated URLs: %d", len(urls)) - for i, url := range urls { - t.Logf(" [%d] %s", i+1, url) - } - - if len(urls) != 1 { - t.Errorf("FAILED: Expected 1 URL without credentials, got %d", len(urls)) - } - - if len(urls) > 0 && containsAuth(urls[0]) { - t.Error("FAILED: URL should NOT contain auth when no credentials provided") - } - - t.Log("✓ Single URL without auth generated (correct)") -} - -// Helper functions - -func containsAuth(url string) bool { - // Check for user:pass@ pattern - for i := 0; i < len(url)-3; i++ { - if url[i:i+3] == "://" { - // Found protocol, check for @ - for j := i + 3; j < len(url); j++ { - if url[j] == '@' { - return true - } - if url[j] == '/' { - break - } - } - break - } - } - return false -} - -func containsString(s, substr string) bool { - return len(s) >= len(substr) && findSubstring(s, substr) -} - -func findSubstring(s, substr string) bool { - if len(substr) == 0 { - return true - } - if len(s) < len(substr) { - return false - } - for i := 0; i <= len(s)-len(substr); i++ { - match := true - for j := 0; j < len(substr); j++ { - if s[i+j] != substr[j] { - match = false - break - } - } - if match { - return true - } - } - return false -} - -func maskString(s string) string { - if s == "" { - return "(empty)" - } - return "***" -} diff --git a/internal/camera/stream/special_chars_test.go b/internal/camera/stream/special_chars_test.go deleted file mode 100644 index a32e81d..0000000 --- a/internal/camera/stream/special_chars_test.go +++ /dev/null @@ -1,559 +0,0 @@ -package stream - -import ( - "net/url" - "strings" - "testing" - - "github.com/eduard256/Strix/internal/models" -) - -// Passwords with various special characters that real users might use. -// Each one exercises a different URL-parsing edge case. -var specialPasswords = []struct { - name string - password string - breaking string // which URL component this character breaks without escaping -}{ - {"at sign", "p@ssword", "userinfo delimiter — splits user:pass from host"}, - {"colon", "p:ssword", "userinfo separator — splits username from password"}, - {"hash", "p#ssword", "fragment delimiter — truncates everything after it"}, - {"ampersand", "p&ssword", "query param separator — splits password into two params"}, - {"equals", "p=ssword", "query value delimiter — corrupts key=value parsing"}, - {"question mark", "p?ssword", "query start — creates phantom query string"}, - {"slash", "p/ssword", "path separator — changes URL path structure"}, - {"percent", "p%ssword", "escape prefix — creates invalid percent-encoding"}, - {"space", "p ssword", "whitespace — breaks URL parsing entirely"}, - {"plus", "p+ssword", "query space encoding — decoded as space in query strings"}, - {"dollar", "p$ssword", "shell/URI special character"}, - {"exclamation", "p!ssword", "sub-delimiter in RFC 3986"}, - {"mixed special", "p@ss:w#rd$1&2", "multiple special characters combined"}, - {"all dangerous", "P@:?#&=+$ !", "all URL-breaking characters at once"}, - {"url-like", "http://evil", "password that looks like a URL"}, - {"chinese", "密码test", "unicode characters in password"}, -} - -// --------------------------------------------------------------------------- -// RTSP URL tests -// --------------------------------------------------------------------------- - -// TestRTSP_SpecialCharsInPassword_URLMustBeParseable verifies that RTSP URLs -// built with special-character passwords can be parsed back by url.Parse -// without losing or corrupting the host, scheme, or userinfo. -func TestRTSP_SpecialCharsInPassword_URLMustBeParseable(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/live/main", - } - - for _, sp := range specialPasswords { - t.Run(sp.name, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: sp.password, - Port: 554, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) == 0 { - t.Fatal("no URLs generated") - } - - for i, rawURL := range urls { - u, err := url.Parse(rawURL) - if err != nil { - t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) - continue - } - - // Scheme must be rtsp - if u.Scheme != "rtsp" { - t.Errorf("[%d] wrong scheme %q, want \"rtsp\"\n raw URL: %s", i, u.Scheme, rawURL) - } - - // Host must be the camera IP, not garbage from a mis-parsed password - host := u.Hostname() - if host != "192.168.1.100" { - t.Errorf("[%d] wrong host %q, want \"192.168.1.100\"\n raw URL: %s", i, host, rawURL) - } - - // Password must round-trip correctly - if u.User != nil { - got, ok := u.User.Password() - if !ok { - t.Errorf("[%d] password not present in parsed URL\n raw URL: %s", i, rawURL) - } else if got != sp.password { - t.Errorf("[%d] password mismatch: got %q, want %q\n raw URL: %s", i, got, sp.password, rawURL) - } - } - - // Path must start with /live/main - if !strings.HasPrefix(u.Path, "/live/main") { - t.Errorf("[%d] wrong path %q, want prefix \"/live/main\"\n raw URL: %s", i, u.Path, rawURL) - } - - // Fragment must be empty (# in password must not leak) - if u.Fragment != "" { - t.Errorf("[%d] unexpected fragment %q — '#' in password leaked\n raw URL: %s", i, u.Fragment, rawURL) - } - } - }) - } -} - -// TestRTSP_SpecialCharsInPassword_CountUnchanged verifies that the number -// of generated URLs does not change based on password content. -// A simple password and a complex one should produce the same URL count. -func TestRTSP_SpecialCharsInPassword_CountUnchanged(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/stream1", - } - - // Baseline: simple password - baseCtx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "simple123", - Port: 554, - } - baseURLs := builder.BuildURLsFromEntry(entry, baseCtx) - baseCount := len(baseURLs) - - for _, sp := range specialPasswords { - t.Run(sp.name, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: sp.password, - Port: 554, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) != baseCount { - t.Errorf("URL count changed: simple password produces %d, %q produces %d", - baseCount, sp.password, len(urls)) - t.Logf(" simple URLs: %v", baseURLs) - t.Logf(" special URLs: %v", urls) - } - }) - } -} - -// TestRTSP_NormalPassword_NoChange ensures that encoding does not alter URLs -// when the password contains only safe characters (letters, digits, - . _ ~). -func TestRTSP_NormalPassword_NoChange(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/Streaming/Channels/101", - } - - normalPasswords := []string{ - "admin", - "Admin123", - "test-password", - "hello_world", - "dots.in.password", - "tilde~ok", - "UPPERCASE", - "1234567890", - } - - for _, pass := range normalPasswords { - t.Run(pass, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: pass, - Port: 554, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) == 0 { - t.Fatal("no URLs generated") - } - - for _, rawURL := range urls { - // Normal passwords must NOT contain any percent-encoding - // because all their characters are unreserved. - if strings.Contains(rawURL, "%") { - t.Errorf("normal password %q was percent-encoded in URL: %s", pass, rawURL) - } - - // Must contain the literal password string - if !strings.Contains(rawURL, pass) { - t.Errorf("URL does not contain literal password %q: %s", pass, rawURL) - } - } - }) - } -} - -// --------------------------------------------------------------------------- -// HTTP query string tests -// --------------------------------------------------------------------------- - -// TestHTTP_SpecialCharsInPassword_QueryPlaceholders tests URLs where -// the password goes into a query parameter via [PASSWORD] placeholder. -// These are patterns like "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]". -func TestHTTP_SpecialCharsInPassword_QueryPlaceholders(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]", - } - - for _, sp := range specialPasswords { - t.Run(sp.name, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: sp.password, - Port: 80, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) == 0 { - t.Fatal("no URLs generated") - } - - for i, rawURL := range urls { - u, err := url.Parse(rawURL) - if err != nil { - t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) - continue - } - - // Host must be correct - if u.Hostname() != "192.168.1.100" { - t.Errorf("[%d] wrong host %q\n raw URL: %s", i, u.Hostname(), rawURL) - } - - // Fragment must be empty - if u.Fragment != "" { - t.Errorf("[%d] fragment leak %q — '#' in password broke URL\n raw URL: %s", - i, u.Fragment, rawURL) - } - - // If URL has query params, check pwd round-trips - q := u.Query() - if pwd := q.Get("pwd"); pwd != "" { - if pwd != sp.password { - t.Errorf("[%d] pwd param mismatch: got %q, want %q\n raw URL: %s", - i, pwd, sp.password, rawURL) - } - } - - // Ampersand in password must NOT create extra query params - // e.g. password "p&ssword" must not produce key "ssword" - if strings.Contains(sp.password, "&") { - // Extract the part after & as potential rogue key - parts := strings.SplitN(sp.password, "&", 2) - rogueKey := strings.SplitN(parts[1], "&", 2)[0] - rogueKey = strings.SplitN(rogueKey, "=", 2)[0] - if rogueKey != "" && q.Has(rogueKey) { - t.Errorf("[%d] ampersand in password created rogue query param %q\n raw URL: %s", - i, rogueKey, rawURL) - } - } - } - }) - } -} - -// TestHTTP_SpecialCharsInPassword_PathPlaceholders tests patterns where -// credentials appear in the URL path, e.g. -// "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp" -func TestHTTP_SpecialCharsInPassword_PathPlaceholders(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/user=[USERNAME]_password=[PASSWORD]_channel=1_stream=0.sdp", - } - - for _, sp := range specialPasswords { - t.Run(sp.name, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: sp.password, - Port: 554, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) == 0 { - t.Fatal("no URLs generated") - } - - for i, rawURL := range urls { - u, err := url.Parse(rawURL) - if err != nil { - t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) - continue - } - - // Host must be correct - if u.Hostname() != "192.168.1.100" { - t.Errorf("[%d] wrong host %q, want \"192.168.1.100\"\n raw URL: %s", - i, u.Hostname(), rawURL) - } - - // Scheme must be rtsp - if u.Scheme != "rtsp" { - t.Errorf("[%d] wrong scheme %q, want \"rtsp\"\n raw URL: %s", - i, u.Scheme, rawURL) - } - - // Fragment must be empty - if u.Fragment != "" { - t.Errorf("[%d] fragment leak %q\n raw URL: %s", i, u.Fragment, rawURL) - } - } - }) - } -} - -// TestHTTP_SpecialCharsInPassword_UserInfo tests HTTP URLs where -// credentials are embedded in the userinfo part (user:pass@host). -func TestHTTP_SpecialCharsInPassword_UserInfo(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.jpg", - } - - for _, sp := range specialPasswords { - t.Run(sp.name, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: sp.password, - Port: 80, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) == 0 { - t.Fatal("no URLs generated") - } - - for i, rawURL := range urls { - u, err := url.Parse(rawURL) - if err != nil { - t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) - continue - } - - // Host must be correct - if u.Hostname() != "192.168.1.100" { - t.Errorf("[%d] wrong host %q\n raw URL: %s", i, u.Hostname(), rawURL) - } - - // If userinfo present, password must round-trip - if u.User != nil { - if got, ok := u.User.Password(); ok { - if got != sp.password { - t.Errorf("[%d] userinfo password mismatch: got %q, want %q\n raw URL: %s", - i, got, sp.password, rawURL) - } - } - } - - // Fragment must be empty - if u.Fragment != "" { - t.Errorf("[%d] fragment leak %q\n raw URL: %s", i, u.Fragment, rawURL) - } - } - }) - } -} - -// TestHTTP_SpecialCharsInPassword_CountUnchanged ensures HTTP URL count -// stays the same regardless of password content. -func TestHTTP_SpecialCharsInPassword_CountUnchanged(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.jpg", - } - - baseCtx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: "simple123", - Port: 80, - } - baseURLs := builder.BuildURLsFromEntry(entry, baseCtx) - baseCount := len(baseURLs) - - for _, sp := range specialPasswords { - t.Run(sp.name, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: sp.password, - Port: 80, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) != baseCount { - t.Errorf("URL count changed: simple=%d, special(%q)=%d", - baseCount, sp.password, len(urls)) - } - }) - } -} - -// --------------------------------------------------------------------------- -// Username special char tests -// --------------------------------------------------------------------------- - -// TestSpecialCharsInUsername verifies that usernames with special characters -// are also handled correctly (less common but possible). -func TestSpecialCharsInUsername(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "FFMPEG", - Protocol: "rtsp", - Port: 554, - URL: "/stream1", - } - - specialUsernames := []string{ - "user@domain", - "user:name", - "user#1", - "admin&root", - } - - for _, username := range specialUsernames { - t.Run(username, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: username, - Password: "password123", - Port: 554, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - if len(urls) == 0 { - t.Fatal("no URLs generated") - } - - for i, rawURL := range urls { - u, err := url.Parse(rawURL) - if err != nil { - t.Errorf("[%d] url.Parse failed: %v\n raw URL: %s", i, err, rawURL) - continue - } - - if u.Hostname() != "192.168.1.100" { - t.Errorf("[%d] wrong host %q\n raw URL: %s", i, u.Hostname(), rawURL) - } - - if u.User != nil { - if got := u.User.Username(); got != username { - t.Errorf("[%d] username mismatch: got %q, want %q\n raw URL: %s", - i, got, username, rawURL) - } - } - } - }) - } -} - -// --------------------------------------------------------------------------- -// Regression: normal passwords must not be affected -// --------------------------------------------------------------------------- - -// TestHTTP_NormalPassword_NoPercentEncoding ensures that simple passwords -// do not get percent-encoded in the userinfo part, so we don't break -// cameras that might do byte-level comparison. -func TestHTTP_NormalPassword_NoPercentEncoding(t *testing.T) { - logger := &mockLogger{} - builder := NewBuilder([]string{}, logger) - - entry := models.CameraEntry{ - Type: "JPEG", - Protocol: "http", - Port: 80, - URL: "snapshot.cgi?user=[USERNAME]&pwd=[PASSWORD]", - } - - normalPasswords := []string{ - "admin123", - "Password", - "test-pass", - "hello_world", - "dots.dots", - "tilde~ok", - } - - for _, pass := range normalPasswords { - t.Run(pass, func(t *testing.T) { - ctx := BuildContext{ - IP: "192.168.1.100", - Username: "admin", - Password: pass, - Port: 80, - } - - urls := builder.BuildURLsFromEntry(entry, ctx) - - for _, rawURL := range urls { - u, err := url.Parse(rawURL) - if err != nil { - t.Errorf("url.Parse failed: %v\n URL: %s", err, rawURL) - continue - } - - // Check query params: value must match exactly. - // Skip URLs where pwd is empty (the no-auth variant). - q := u.Query() - if pwd := q.Get("pwd"); pwd != "" && pwd != pass { - t.Errorf("pwd param %q != expected %q\n URL: %s", pwd, pass, rawURL) - } - - // Only check raw query encoding on URLs that actually have - // the password in query params (skip no-auth and userinfo-only variants). - if q.Get("pwd") != "" && !strings.Contains(u.RawQuery, pass) { - t.Errorf("safe password %q was percent-encoded in query: %s\n URL: %s", - pass, u.RawQuery, rawURL) - } - } - }) - } -} diff --git a/internal/camera/stream/tester.go b/internal/camera/stream/tester.go deleted file mode 100644 index 49347f3..0000000 --- a/internal/camera/stream/tester.go +++ /dev/null @@ -1,447 +0,0 @@ -package stream - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net/http" - "net/url" - "os/exec" - "strings" - "time" -) - - -// Tester validates stream URLs -type Tester struct { - httpClient *http.Client - ffprobeTimeout time.Duration - logger interface{ Debug(string, ...any); Error(string, error, ...any) } -} - -// NewTester creates a new stream tester -func NewTester(ffprobeTimeout time.Duration, logger interface{ Debug(string, ...any); Error(string, error, ...any) }) *Tester { - return &Tester{ - httpClient: &http.Client{ - Timeout: 30 * time.Second, - }, - ffprobeTimeout: ffprobeTimeout, - logger: logger, - } -} - -// TestResult contains the test results for a stream -type TestResult struct { - URL string - Working bool - Protocol string - Type string - Resolution string - Codec string - FPS int - Bitrate int - HasAudio bool - Error string - TestTime time.Duration - Metadata map[string]interface{} -} - - - -// validateHTTPStream validates the HTTP response as a valid stream -func (t *Tester) validateHTTPStream(resp *http.Response, result *TestResult) { - contentType := resp.Header.Get("Content-Type") - result.Metadata["content_type"] = contentType - urlPath := strings.ToLower(resp.Request.URL.Path) - - t.logger.Debug("validating HTTP stream", - "url", resp.Request.URL.String(), - "content_type", contentType, - "status_code", resp.StatusCode) - - // Read first bytes to check magic bytes (up to 512 bytes for MJPEG boundary detection) - buffer := make([]byte, 512) - n, _ := resp.Body.Read(buffer) - - // Check for JPEG magic bytes (FF D8 FF) - hasJPEGMagic := n >= 3 && buffer[0] == 0xFF && buffer[1] == 0xD8 && buffer[2] == 0xFF - // Check for MJPEG boundary - hasMJPEGBoundary := n > 0 && bytes.Contains(buffer[:n], []byte("--")) - - t.logger.Debug("stream content analysis", - "bytes_read", n, - "has_jpeg_magic", hasJPEGMagic, - "has_mjpeg_boundary", hasMJPEGBoundary) - - // 1. Check for BUBBLE protocol (highest priority for this specific type) - if contentType == "video/bubble" { - result.Type = "BUBBLE" - result.Working = true - - // Extract stream type from full URL (not just path) for metadata - fullURL := resp.Request.URL.String() - if strings.Contains(fullURL, "stream=1") { - result.Metadata["stream_type"] = "sub" - } else { - result.Metadata["stream_type"] = "main" - } - - t.logger.Debug("detected BUBBLE stream", "stream_type", result.Metadata["stream_type"], "url", fullURL) - return - } - - // 2. Check Content-Type for multipart (MJPEG) - if strings.Contains(contentType, "multipart") { - result.Type = "MJPEG" - result.Working = hasMJPEGBoundary - if !hasMJPEGBoundary { - result.Error = "no MJPEG boundary found" - } - t.logger.Debug("detected MJPEG by content-type", "working", result.Working) - return - } - - // 3. Check for JPEG by magic bytes (most reliable) - if hasJPEGMagic { - // Verify it's not MJPEG - if hasMJPEGBoundary { - result.Type = "MJPEG" - result.Working = true - t.logger.Debug("detected MJPEG by magic bytes and boundary") - } else { - result.Type = "JPEG" - result.Working = true - t.logger.Debug("detected JPEG by magic bytes") - } - return - } - - // 4. Check Content-Type for image/jpeg - if strings.Contains(contentType, "image/jpeg") || strings.Contains(contentType, "image/jpg") { - result.Type = "JPEG" - result.Working = true - t.logger.Debug("detected JPEG by content-type") - return - } - - // 5. Check URL patterns for JPEG (fallback for cameras with wrong Content-Type) - jpegPatterns := []string{".jpg", ".jpeg", "snapshot", "image", "picture", "snap", "photo", "capture"} - for _, pattern := range jpegPatterns { - if strings.Contains(urlPath, pattern) { - result.Type = "JPEG" - result.Working = true - t.logger.Debug("detected JPEG by URL pattern", "pattern", pattern, "url", urlPath) - result.Metadata["detection_method"] = "url_pattern" - return - } - } - - // 6. Check for MJPEG by extension - if strings.Contains(urlPath, ".mjpg") || strings.Contains(urlPath, ".mjpeg") { - result.Type = "MJPEG" - result.Working = true - t.logger.Debug("detected MJPEG by URL extension") - return - } - - // 7. Check for HLS - if strings.Contains(urlPath, ".m3u8") || - strings.Contains(contentType, "application/vnd.apple.mpegurl") || - strings.Contains(contentType, "application/x-mpegurl") { - result.Type = "HLS" - result.Working = true - return - } - - // 8. Check for MPEG-DASH - if strings.Contains(urlPath, ".mpd") || strings.Contains(contentType, "application/dash+xml") { - result.Type = "MPEG-DASH" - result.Working = true - return - } - - // 9. Check for video content type - if strings.Contains(contentType, "video") { - result.Type = "HTTP_VIDEO" - result.Working = true - return - } - - // 10. Check for web interface - if strings.Contains(contentType, "text/html") || strings.Contains(contentType, "text/plain") { - result.Working = false - result.Error = "web interface, not a video stream" - return - } - - // 11. Unknown - but still working if we got 200 OK - result.Type = "HTTP_UNKNOWN" - result.Working = true - result.Metadata["note"] = "unknown content type, may still be valid" -} - -// TestStream tests if a stream URL is working -func (t *Tester) TestStream(ctx context.Context, streamURL string) TestResult { - startTime := time.Now() - - result := TestResult{ - URL: streamURL, - Metadata: make(map[string]interface{}), - } - - // Parse URL to determine protocol - u, err := url.Parse(streamURL) - if err != nil { - result.Error = fmt.Sprintf("invalid URL: %v", err) - result.TestTime = time.Since(startTime) - return result - } - - result.Protocol = u.Scheme - - // Test based on protocol - switch u.Scheme { - case "rtsp", "rtsps": - t.testRTSP(ctx, streamURL, &result) - case "http", "https": - t.testHTTP(ctx, streamURL, &result) - default: - result.Error = fmt.Sprintf("unsupported protocol: %s", u.Scheme) - } - - result.TestTime = time.Since(startTime) - return result -} - -// testRTSP tests an RTSP stream using ffprobe -func (t *Tester) testRTSP(ctx context.Context, streamURL string, result *TestResult) { - // Build ffprobe command - cmdCtx, cancel := context.WithTimeout(ctx, t.ffprobeTimeout) - defer cancel() - - // Use URL as-is - credentials already embedded if needed - args := []string{ - "-v", "quiet", - "-print_format", "json", - "-show_streams", - "-show_format", - "-rtsp_transport", "tcp", - streamURL, - } - - cmd := exec.CommandContext(cmdCtx, "ffprobe", args...) - - // Capture output - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - - t.logger.Debug("testing RTSP stream", "url", streamURL) - - // Execute command - err := cmd.Run() - if err != nil { - if cmdCtx.Err() == context.DeadlineExceeded { - result.Error = "timeout while testing stream" - } else { - result.Error = fmt.Sprintf("ffprobe failed: %v", err) - if stderr.Len() > 0 { - result.Error += fmt.Sprintf(" (stderr: %s)", stderr.String()) - } - } - return - } - - // Parse ffprobe output - var probeResult struct { - Streams []struct { - CodecName string `json:"codec_name"` - CodecType string `json:"codec_type"` - Width int `json:"width"` - Height int `json:"height"` - AvgFrameRate string `json:"avg_frame_rate"` - BitRate string `json:"bit_rate"` - } `json:"streams"` - Format struct { - BitRate string `json:"bit_rate"` - } `json:"format"` - } - - if err := json.Unmarshal(stdout.Bytes(), &probeResult); err != nil { - result.Error = fmt.Sprintf("failed to parse ffprobe output: %v", err) - return - } - - // Extract stream information - result.Working = len(probeResult.Streams) > 0 - result.Type = "FFMPEG" - - for _, stream := range probeResult.Streams { - switch stream.CodecType { - case "video": - result.Codec = stream.CodecName - result.Resolution = fmt.Sprintf("%dx%d", stream.Width, stream.Height) - - // Parse frame rate - if stream.AvgFrameRate != "" { - parts := strings.Split(stream.AvgFrameRate, "/") - if len(parts) == 2 { - // Calculate FPS from fraction - var num, den int - if n, _ := fmt.Sscanf(parts[0], "%d", &num); n == 1 { - if n, _ := fmt.Sscanf(parts[1], "%d", &den); n == 1 && den > 0 { - result.FPS = num / den - } - } - } - } - - // Parse bitrate - if stream.BitRate != "" { - _, _ = fmt.Sscanf(stream.BitRate, "%d", &result.Bitrate) - } - case "audio": - result.HasAudio = true - } - } - - // Use format bitrate if stream bitrate not available - if result.Bitrate == 0 && probeResult.Format.BitRate != "" { - _, _ = fmt.Sscanf(probeResult.Format.BitRate, "%d", &result.Bitrate) - } - - if !result.Working { - result.Error = "no streams found" - } -} - -// testHTTP tests an HTTP stream -func (t *Tester) testHTTP(ctx context.Context, streamURL string, result *TestResult) { - // Create request - req, err := http.NewRequestWithContext(ctx, "GET", streamURL, nil) - if err != nil { - result.Error = fmt.Sprintf("failed to create request: %v", err) - return - } - - // Extract credentials from URL if present - u, _ := url.Parse(streamURL) - if u.User != nil { - username := u.User.Username() - password, _ := u.User.Password() - if username != "" && password != "" { - req.SetBasicAuth(username, password) - // Remove credentials from URL for logging - u.User = nil - streamURL = u.String() - } - } - - // Add headers - req.Header.Set("User-Agent", "Strix/1.0") - - t.logger.Debug("testing HTTP stream", "url", streamURL) - - // Send request - resp, err := t.httpClient.Do(req) - if err != nil { - result.Error = fmt.Sprintf("HTTP request failed: %v", err) - return - } - defer func() { _ = resp.Body.Close() }() - - // Check status code - if resp.StatusCode != http.StatusOK { - result.Error = fmt.Sprintf("HTTP %d: %s", resp.StatusCode, resp.Status) - - // Special handling for 401 - if resp.StatusCode == http.StatusUnauthorized { - result.Error = "authentication required" - } - return - } - - // Use validateHTTPStream to determine stream type - t.validateHTTPStream(resp, result) - - // Try to probe with ffprobe for HTTP_VIDEO type for more details - if result.Type == "HTTP_VIDEO" && result.Working { - t.probeHTTPVideo(ctx, streamURL, result) - } -} - -// probeHTTPVideo uses ffprobe to get more details about HTTP video stream -func (t *Tester) probeHTTPVideo(ctx context.Context, streamURL string, result *TestResult) { - cmdCtx, cancel := context.WithTimeout(ctx, t.ffprobeTimeout) - defer cancel() - - // Use URL as-is - credentials already in URL if needed - - args := []string{ - "-v", "quiet", - "-print_format", "json", - "-show_streams", - streamURL, - } - - cmd := exec.CommandContext(cmdCtx, "ffprobe", args...) - var stdout bytes.Buffer - cmd.Stdout = &stdout - - if err := cmd.Run(); err == nil { - var probeResult struct { - Streams []struct { - CodecName string `json:"codec_name"` - CodecType string `json:"codec_type"` - Width int `json:"width"` - Height int `json:"height"` - } `json:"streams"` - } - - if json.Unmarshal(stdout.Bytes(), &probeResult) == nil { - for _, stream := range probeResult.Streams { - if stream.CodecType == "video" { - result.Codec = stream.CodecName - result.Resolution = fmt.Sprintf("%dx%d", stream.Width, stream.Height) - break - } - } - } - } -} - -// TestMultiple tests multiple URLs concurrently -func (t *Tester) TestMultiple(ctx context.Context, urls []string, maxConcurrent int) []TestResult { - if maxConcurrent <= 0 { - maxConcurrent = 10 - } - - results := make([]TestResult, len(urls)) - sem := make(chan struct{}, maxConcurrent) - - for i, url := range urls { - i, url := i, url // Capture for goroutine - - sem <- struct{}{} // Acquire semaphore - go func() { - defer func() { <-sem }() // Release semaphore - - results[i] = t.TestStream(ctx, url) - }() - } - - // Wait for all to complete - for i := 0; i < maxConcurrent; i++ { - sem <- struct{}{} - } - - return results -} - -// IsFFProbeAvailable checks if ffprobe is available -func (t *Tester) IsFFProbeAvailable() bool { - cmd := exec.Command("ffprobe", "-version") - err := cmd.Run() - return err == nil -} \ No newline at end of file diff --git a/internal/config/config.go b/internal/config/config.go deleted file mode 100644 index 4e1c56c..0000000 --- a/internal/config/config.go +++ /dev/null @@ -1,292 +0,0 @@ -package config - -import ( - "encoding/json" - "fmt" - "log/slog" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/eduard256/Strix/internal/utils/logger" - "gopkg.in/yaml.v3" -) - -// Config holds application configuration -type Config struct { - Version string // Application version, set by caller after Load() - Server ServerConfig - Database DatabaseConfig - Scanner ScannerConfig - Logger LoggerConfig -} - -// ServerConfig contains HTTP server settings -type ServerConfig struct { - Listen string // Address to listen on (e.g., ":4567" or "0.0.0.0:4567") - ReadTimeout time.Duration - WriteTimeout time.Duration -} - -// DatabaseConfig contains database settings -type DatabaseConfig struct { - DataPath string - BrandsPath string - PatternsPath string - ParametersPath string - OUIPath string - CacheEnabled bool - CacheTTL time.Duration -} - -// ScannerConfig contains stream scanner settings -type ScannerConfig struct { - DefaultTimeout time.Duration - MaxStreams int - ModelSearchLimit int - WorkerPoolSize int - FFProbeTimeout time.Duration - RetryAttempts int - RetryDelay time.Duration - // Validation settings - StrictValidation bool // Enable strict validation mode - MinImageSize int // Minimum bytes for valid image (JPEG/PNG) - MinVideoStreams int // Minimum video streams required -} - -// LoggerConfig contains logging settings -type LoggerConfig struct { - Level string - Format string // "text" or "json" -} - -// yamlConfig represents the structure of strix.yaml -type yamlConfig struct { - API struct { - Listen string `yaml:"listen"` - } `yaml:"api"` -} - -// Load returns configuration with defaults. The provided logger is used for -// all startup messages so that output format stays consistent (JSON or text) -// with the rest of the application logs. -func Load(log *slog.Logger) *Config { - dataPath := getEnv("STRIX_DATA_PATH", "./data") - - cfg := &Config{ - Server: ServerConfig{ - Listen: ":4567", // Default listen address - ReadTimeout: 30 * time.Second, - WriteTimeout: 5 * time.Minute, // Increased for SSE long-polling - }, - Database: DatabaseConfig{ - DataPath: dataPath, - BrandsPath: filepath.Join(dataPath, "brands"), - PatternsPath: filepath.Join(dataPath, "popular_stream_patterns.json"), - ParametersPath: filepath.Join(dataPath, "query_parameters.json"), - OUIPath: filepath.Join(dataPath, "camera_oui.json"), - CacheEnabled: true, - CacheTTL: 5 * time.Minute, - }, - Scanner: ScannerConfig{ - DefaultTimeout: 4 * time.Minute, - MaxStreams: 10, - ModelSearchLimit: 6, - WorkerPoolSize: 20, - FFProbeTimeout: 30 * time.Second, - RetryAttempts: 2, - RetryDelay: 500 * time.Millisecond, - // Strict validation enabled by default - StrictValidation: true, - MinImageSize: 5120, // 5KB minimum for valid images - MinVideoStreams: 1, // At least 1 video stream required - }, - Logger: LoggerConfig{ - Level: getEnv("STRIX_LOG_LEVEL", "info"), - Format: getEnv("STRIX_LOG_FORMAT", "json"), - }, - } - - // Load from Home Assistant options.json if running as HA add-on - // Priority: defaults < HA options < strix.yaml < ENV - configSource := "default" - if err := loadHAOptions(cfg); err == nil { - configSource = "/data/options.json (Home Assistant)" - } - - // Load from strix.yaml if exists (overrides HA options) - if err := loadYAML(cfg); err == nil { - configSource = "strix.yaml" - } - - // Environment variable overrides everything - if envListen := os.Getenv("STRIX_API_LISTEN"); envListen != "" { - cfg.Server.Listen = envListen - configSource = "environment variable STRIX_API_LISTEN" - } - - // Validate listen address - if err := validateListen(cfg.Server.Listen); err != nil { - log.Error("invalid listen address, using default :4567", - slog.String("address", cfg.Server.Listen), - slog.String("error", err.Error()), - ) - cfg.Server.Listen = ":4567" - configSource = "default (validation failed)" - } - - // Log configuration source - log.Info("configuration loaded", - slog.String("listen", cfg.Server.Listen), - slog.String("source", configSource), - ) - - return cfg -} - -// loadYAML attempts to load configuration from strix.yaml -func loadYAML(cfg *Config) error { - data, err := os.ReadFile("./strix.yaml") - if err != nil { - return err - } - - var yamlCfg yamlConfig - if err := yaml.Unmarshal(data, &yamlCfg); err != nil { - return fmt.Errorf("failed to parse strix.yaml: %w", err) - } - - // Apply yaml configuration - if yamlCfg.API.Listen != "" { - cfg.Server.Listen = yamlCfg.API.Listen - } - - return nil -} - -// haOptions represents the structure of Home Assistant /data/options.json. -// When Strix runs as a Home Assistant add-on, HA creates this file from the -// add-on configuration UI. Fields are optional -- zero values are ignored. -type haOptions struct { - LogLevel string `json:"log_level"` - Port int `json:"port"` -} - -// loadHAOptions loads configuration from Home Assistant's /data/options.json. -// This file only exists when running inside the HA add-on environment. -// Returns an error if the file doesn't exist or can't be parsed (callers -// should treat errors as "not running in HA" and silently continue). -func loadHAOptions(cfg *Config) error { - data, err := os.ReadFile("/data/options.json") - if err != nil { - return err - } - - var opts haOptions - if err := json.Unmarshal(data, &opts); err != nil { - return fmt.Errorf("failed to parse /data/options.json: %w", err) - } - - if opts.LogLevel != "" { - cfg.Logger.Level = opts.LogLevel - } - if opts.Port > 0 { - cfg.Server.Listen = fmt.Sprintf(":%d", opts.Port) - } - - // Home Assistant add-on always uses JSON logging for the HA log viewer - cfg.Logger.Format = "json" - - return nil -} - -// validateListen validates the listen address format and port range -func validateListen(listen string) error { - if listen == "" { - return fmt.Errorf("listen address cannot be empty") - } - - // Parse the listen address - parts := strings.Split(listen, ":") - if len(parts) < 2 { - return fmt.Errorf("invalid format, expected ':port' or 'host:port', got '%s'", listen) - } - - // Get port (last part) - portStr := parts[len(parts)-1] - if portStr == "" { - return fmt.Errorf("port cannot be empty") - } - - // Validate port number - port, err := strconv.Atoi(portStr) - if err != nil { - return fmt.Errorf("invalid port number '%s': %w", portStr, err) - } - - if port < 1 || port > 65535 { - return fmt.Errorf("port %d out of valid range (1-65535)", port) - } - - return nil -} - -// SetupLogger creates the application logger by reading log configuration -// from environment variables and Home Assistant options. It must be called -// before Load() so that all startup messages use a consistent output format. -// -// Configuration priority: defaults < HA options < environment variables. -func SetupLogger() (*slog.Logger, *logger.SecretStore) { - // Read log settings from environment (same defaults as Config) - logLevel := getEnv("STRIX_LOG_LEVEL", "info") - logFormat := getEnv("STRIX_LOG_FORMAT", "json") - - // Apply Home Assistant overrides if running as HA add-on - if data, err := os.ReadFile("/data/options.json"); err == nil { - var opts haOptions - if err := json.Unmarshal(data, &opts); err == nil { - if opts.LogLevel != "" { - logLevel = opts.LogLevel - } - // Home Assistant add-on always uses JSON logging for the HA log viewer - logFormat = "json" - } - } - - var level slog.Level - switch logLevel { - case "debug": - level = slog.LevelDebug - case "warn": - level = slog.LevelWarn - case "error": - level = slog.LevelError - default: - level = slog.LevelInfo - } - - handlerOpts := &slog.HandlerOptions{ - Level: level, - } - - var handler slog.Handler - if logFormat == "json" { - handler = slog.NewJSONHandler(os.Stdout, handlerOpts) - } else { - handler = slog.NewTextHandler(os.Stdout, handlerOpts) - } - - secrets := logger.NewSecretStore() - maskedHandler := logger.NewSecretMaskingHandler(handler, secrets) - - return slog.New(maskedHandler), secrets -} - -func getEnv(key, defaultValue string) string { - if value := os.Getenv(key); value != "" { - return value - } - return defaultValue -} diff --git a/internal/generate/generate.go b/internal/generate/generate.go new file mode 100644 index 0000000..64f4960 --- /dev/null +++ b/internal/generate/generate.go @@ -0,0 +1,40 @@ +package generate + +import ( + "encoding/json" + "net/http" + + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + gen "github.com/eduard256/strix/pkg/generate" + "github.com/rs/zerolog" +) + +var log zerolog.Logger + +func Init() { + log = app.GetLogger("generate") + + api.HandleFunc("api/generate", apiGenerate) +} + +func apiGenerate(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + var req gen.Request + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json: "+err.Error(), http.StatusBadRequest) + return + } + + resp, err := gen.Generate(&req) + if err != nil { + http.Error(w, err.Error(), http.StatusUnprocessableEntity) + return + } + + api.ResponseJSON(w, resp) +} diff --git a/internal/models/camera.go b/internal/models/camera.go deleted file mode 100644 index 9a284f6..0000000 --- a/internal/models/camera.go +++ /dev/null @@ -1,100 +0,0 @@ -package models - -import "time" - -// Camera represents a camera model from the database -type Camera struct { - Brand string `json:"brand"` - BrandID string `json:"brand_id"` - Model string `json:"model"` - LastUpdated string `json:"last_updated"` - Source string `json:"source"` - Website string `json:"website,omitempty"` - Entries []CameraEntry `json:"entries"` - MatchScore float64 `json:"match_score,omitempty"` -} - -// CameraEntry represents a URL pattern entry for a camera -type CameraEntry struct { - Models []string `json:"models"` - Type string `json:"type"` // FFMPEG, MJPEG, JPEG, VLC, H264 - Protocol string `json:"protocol"` // rtsp, http, https - Port int `json:"port"` - URL string `json:"url"` - AuthRequired bool `json:"auth_required,omitempty"` - Notes string `json:"notes,omitempty"` -} - -// StreamPattern represents a popular stream pattern -type StreamPattern struct { - URL string `json:"url"` - Type string `json:"type"` - Protocol string `json:"protocol"` - Port int `json:"port"` - Notes string `json:"notes"` - ModelCount int `json:"model_count"` -} - -// CameraSearchRequest represents a search request for cameras -type CameraSearchRequest struct { - Query string `json:"query" validate:"required,min=1"` - Limit int `json:"limit" validate:"min=1,max=100"` -} - -// CameraSearchResponse represents the response for camera search -type CameraSearchResponse struct { - Cameras []Camera `json:"cameras"` - Total int `json:"total"` - Returned int `json:"returned"` -} - -// StreamDiscoveryRequest represents a request to discover streams -type StreamDiscoveryRequest struct { - Model string `json:"model"` // Camera model name - ModelLimit int `json:"model_limit" validate:"min=1,max=20"` // Max models to search - Timeout int `json:"timeout" validate:"min=10,max=600"` // Timeout in seconds - MaxStreams int `json:"max_streams" validate:"min=1,max=50"` // Max streams to find - Target string `json:"target" validate:"required"` // IP or stream URL - Channel int `json:"channel" validate:"min=0,max=255"` // Channel number - Username string `json:"username"` // Optional username - Password string `json:"password"` // Optional password -} - -// DiscoveredStream represents a discovered stream -type DiscoveredStream struct { - URL string `json:"url"` - Type string `json:"type"` // RTSP, HTTP, MJPEG, etc - Protocol string `json:"protocol"` - Port int `json:"port"` - Working bool `json:"working"` - Resolution string `json:"resolution,omitempty"` - Codec string `json:"codec,omitempty"` - FPS int `json:"fps,omitempty"` - Bitrate int `json:"bitrate,omitempty"` - HasAudio bool `json:"has_audio"` - Error string `json:"error,omitempty"` - TestTime time.Duration `json:"test_time_ms"` - Metadata map[string]interface{} `json:"metadata,omitempty"` -} - -// SSEMessage represents a Server-Sent Event message -type SSEMessage struct { - Type string `json:"type"` // stream_found, progress, error, complete - Data interface{} `json:"data,omitempty"` - Stream *DiscoveredStream `json:"stream,omitempty"` - Message string `json:"message,omitempty"` -} - -// ProgressMessage for SSE progress updates -type ProgressMessage struct { - Tested int `json:"tested"` - Found int `json:"found"` - Remaining int `json:"remaining"` -} - -// CompleteMessage for SSE completion -type CompleteMessage struct { - TotalTested int `json:"total_tested"` - TotalFound int `json:"total_found"` - Duration float64 `json:"duration"` // seconds -} \ No newline at end of file diff --git a/internal/models/probe.go b/internal/models/probe.go deleted file mode 100644 index ebe43cf..0000000 --- a/internal/models/probe.go +++ /dev/null @@ -1,53 +0,0 @@ -package models - -// ProbeResponse represents the result of probing an IP address. -// The Type field determines which UI flow the frontend should use: -// - "unreachable" -- device did not respond to ping -// - "standard" -- normal IP camera (RTSP/HTTP/ONVIF) -// - "homekit" -- Apple HomeKit camera (needs PIN pairing) -type ProbeResponse struct { - IP string `json:"ip"` - Reachable bool `json:"reachable"` - LatencyMs float64 `json:"latency_ms,omitempty"` - Type string `json:"type"` - Error string `json:"error,omitempty"` - Probes ProbeResults `json:"probes"` -} - -// ProbeResults contains results from all parallel probers. -// Nil fields mean the prober did not find anything or timed out. -type ProbeResults struct { - DNS *DNSProbeResult `json:"dns"` - ARP *ARPProbeResult `json:"arp"` - MDNS *MDNSProbeResult `json:"mdns"` - HTTP *HTTPProbeResult `json:"http"` -} - -// HTTPProbeResult contains HTTP server identification from port 80. -type HTTPProbeResult struct { - Port int `json:"port"` - StatusCode int `json:"status_code"` - Server string `json:"server"` -} - -// DNSProbeResult contains reverse DNS lookup result. -type DNSProbeResult struct { - Hostname string `json:"hostname"` -} - -// ARPProbeResult contains ARP table lookup + OUI vendor identification. -type ARPProbeResult struct { - MAC string `json:"mac"` - Vendor string `json:"vendor"` -} - -// MDNSProbeResult contains mDNS service discovery result (HomeKit). -type MDNSProbeResult struct { - Name string `json:"name"` - DeviceID string `json:"device_id"` - Model string `json:"model"` - Category string `json:"category"` // "camera", "doorbell" - Paired bool `json:"paired"` - Port int `json:"port"` - Feature string `json:"feature"` -} diff --git a/internal/probe/probe.go b/internal/probe/probe.go new file mode 100644 index 0000000..f56e679 --- /dev/null +++ b/internal/probe/probe.go @@ -0,0 +1,193 @@ +package probe + +import ( + "context" + "database/sql" + "net" + "net/http" + "sync" + "time" + + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + "github.com/eduard256/strix/pkg/probe" + "github.com/rs/zerolog" + + _ "github.com/mattn/go-sqlite3" +) + +const probeTimeout = 100 * time.Millisecond + +var log zerolog.Logger +var db *sql.DB +var ports []int +var hasICMP bool + +var detectors []func(*probe.Response) string + +func Init() { + log = app.GetLogger("probe") + + var err error + db, err = sql.Open("sqlite3", app.DB+"?mode=ro") + if err != nil { + log.Error().Err(err).Msg("[probe] db open") + } + + ports = loadPorts() + hasICMP = probe.CanICMP() + + if hasICMP { + log.Info().Msg("[probe] ICMP available") + } else { + log.Info().Msg("[probe] ICMP not available, using port scan only") + } + + // HomeKit detector + detectors = append(detectors, func(r *probe.Response) string { + if r.Probes.MDNS != nil && !r.Probes.MDNS.Paired { + if r.Probes.MDNS.Category == "camera" || r.Probes.MDNS.Category == "doorbell" { + return "homekit" + } + } + return "" + }) + + api.HandleFunc("api/probe", apiProbe) +} + +func apiProbe(w http.ResponseWriter, r *http.Request) { + ip := r.URL.Query().Get("ip") + if ip == "" { + http.Error(w, "missing ip parameter", http.StatusBadRequest) + return + } + + if net.ParseIP(ip) == nil { + http.Error(w, "invalid ip: "+ip, http.StatusBadRequest) + return + } + + result := runProbe(r.Context(), ip) + api.ResponseJSON(w, result) +} + +func runProbe(parent context.Context, ip string) *probe.Response { + ctx, cancel := context.WithTimeout(parent, probeTimeout) + defer cancel() + + resp := &probe.Response{IP: ip} + var mu sync.Mutex + var wg sync.WaitGroup + + run := func(fn func()) { + wg.Add(1) + go func() { + defer wg.Done() + fn() + }() + } + + run(func() { + r, _ := probe.ScanPorts(ctx, ip, ports) + mu.Lock() + resp.Probes.Ports = r + mu.Unlock() + }) + run(func() { + r, _ := probe.ReverseDNS(ctx, ip) + mu.Lock() + resp.Probes.DNS = r + mu.Unlock() + }) + run(func() { + mac := probe.LookupARP(ip) + if mac == "" { + return + } + vendor := probe.LookupOUI(db, mac) + mu.Lock() + resp.Probes.ARP = &probe.ARPResult{MAC: mac, Vendor: vendor} + mu.Unlock() + }) + run(func() { + r, _ := probe.QueryHAP(ctx, ip) + mu.Lock() + resp.Probes.MDNS = r + mu.Unlock() + }) + run(func() { + r, _ := probe.ProbeHTTP(ctx, ip, nil) + mu.Lock() + resp.Probes.HTTP = r + mu.Unlock() + }) + + if hasICMP { + run(func() { + r, _ := probe.Ping(ctx, ip) + mu.Lock() + resp.Probes.Ping = r + mu.Unlock() + }) + } + + wg.Wait() + + // determine reachable + resp.Reachable = resp.Probes.Ports != nil && len(resp.Probes.Ports.Open) > 0 + if !resp.Reachable && resp.Probes.Ping != nil { + resp.Reachable = true + } + + if resp.Reachable && resp.Probes.Ping != nil { + resp.LatencyMs = resp.Probes.Ping.LatencyMs + } + + // determine type + resp.Type = "standard" + if !resp.Reachable { + resp.Type = "unreachable" + } else { + for _, detect := range detectors { + if t := detect(resp); t != "" { + resp.Type = t + break + } + } + } + + return resp +} + +func loadPorts() []int { + if db == nil { + return defaultPorts() + } + + rows, err := db.Query("SELECT DISTINCT port FROM streams WHERE port > 0 UNION SELECT DISTINCT port FROM preset_streams WHERE port > 0") + if err != nil { + log.Warn().Err(err).Msg("[probe] failed to load ports from db, using defaults") + return defaultPorts() + } + defer rows.Close() + + var result []int + for rows.Next() { + var port int + if err = rows.Scan(&port); err == nil { + result = append(result, port) + } + } + + if len(result) == 0 { + return defaultPorts() + } + + log.Info().Int("count", len(result)).Msg("[probe] loaded ports from db") + return result +} + +func defaultPorts() []int { + return []int{554, 80, 8080, 443, 8554, 5544, 10554, 1935, 81, 88, 8090, 8001, 8081, 7070, 7447, 34567} +} diff --git a/internal/search/search.go b/internal/search/search.go new file mode 100644 index 0000000..00a8d70 --- /dev/null +++ b/internal/search/search.go @@ -0,0 +1,108 @@ +package search + +import ( + "database/sql" + "net/http" + "strconv" + "strings" + + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + "github.com/eduard256/strix/pkg/camdb" + "github.com/rs/zerolog" + + _ "github.com/mattn/go-sqlite3" +) + +var log zerolog.Logger +var db *sql.DB + +func Init() { + log = app.GetLogger("search") + + var err error + db, err = sql.Open("sqlite3", app.DB+"?mode=ro") + if err != nil { + log.Fatal().Err(err).Msg("[search] db open") + } + + // verify DB is readable + var count int + if err = db.QueryRow("SELECT COUNT(*) FROM brands").Scan(&count); err != nil { + log.Fatal().Err(err).Msg("[search] db verify") + } + log.Info().Int("brands", count).Msg("[search] loaded") + + api.HandleFunc("api/search", apiSearch) + api.HandleFunc("api/streams", apiStreams) +} + +func apiSearch(w http.ResponseWriter, r *http.Request) { + q := strings.TrimSpace(r.URL.Query().Get("q")) + + var results []camdb.Result + var err error + + if q == "" { + results, err = camdb.SearchAll(db) + } else { + results, err = camdb.SearchQuery(db, q) + } + + if err != nil { + api.Error(w, err, http.StatusInternalServerError) + return + } + + api.ResponseJSON(w, map[string]any{"results": results}) +} + +func apiStreams(w http.ResponseWriter, r *http.Request) { + q := r.URL.Query() + + ids := q.Get("ids") + if ids == "" { + http.Error(w, "ids required", http.StatusBadRequest) + return + } + + ip := q.Get("ip") + if ip == "" { + http.Error(w, "ip required", http.StatusBadRequest) + return + } + + channel, _ := strconv.Atoi(q.Get("channel")) + + var portFilter map[int]bool + if ps := q.Get("ports"); ps != "" { + portFilter = map[int]bool{} + for _, p := range strings.Split(ps, ",") { + if v, err := strconv.Atoi(strings.TrimSpace(p)); err == nil { + portFilter[v] = true + } + } + } + + streams, err := camdb.BuildStreams(db, &camdb.StreamParams{ + IDs: ids, + IP: ip, + User: q.Get("user"), + Pass: q.Get("pass"), + Channel: channel, + Ports: portFilter, + }) + + if err != nil { + status := http.StatusInternalServerError + if strings.Contains(err.Error(), "not found") { + status = http.StatusNotFound + } else if strings.Contains(err.Error(), "invalid") || strings.Contains(err.Error(), "unknown") { + status = http.StatusBadRequest + } + http.Error(w, err.Error(), status) + return + } + + api.ResponseJSON(w, map[string]any{"streams": streams}) +} diff --git a/internal/test/test.go b/internal/test/test.go new file mode 100644 index 0000000..cc0524c --- /dev/null +++ b/internal/test/test.go @@ -0,0 +1,199 @@ +package test + +import ( + "crypto/rand" + "encoding/hex" + "encoding/json" + "net/http" + "strconv" + "sync" + "time" + + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + "github.com/eduard256/strix/pkg/tester" + "github.com/rs/zerolog" +) + +var log zerolog.Logger + +var sessions = map[string]*tester.Session{} +var sessionsMu sync.Mutex + +func Init() { + log = app.GetLogger("test") + + api.HandleFunc("api/test", apiTest) + api.HandleFunc("api/test/screenshot", apiScreenshot) + + // cleanup expired sessions + go func() { + for { + time.Sleep(time.Minute) + + sessionsMu.Lock() + for id, s := range sessions { + s.Lock() + expired := s.Status == "done" && time.Since(s.ExpiresAt) > 0 + s.Unlock() + if expired { + delete(sessions, id) + } + } + sessionsMu.Unlock() + } + }() +} + +func apiTest(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case "GET": + id := r.URL.Query().Get("id") + if id == "" { + apiTestList(w) + return + } + apiTestGet(w, id) + + case "POST": + apiTestCreate(w, r) + + case "DELETE": + id := r.URL.Query().Get("id") + if id == "" { + http.Error(w, "id required", http.StatusBadRequest) + return + } + apiTestDelete(w, id) + + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} + +func apiTestList(w http.ResponseWriter) { + type summary struct { + ID string `json:"session_id"` + Status string `json:"status"` + Total int `json:"total"` + Tested int `json:"tested"` + Alive int `json:"alive"` + WithScreen int `json:"with_screenshot"` + } + + sessionsMu.Lock() + items := make([]summary, 0, len(sessions)) + for _, s := range sessions { + s.Lock() + items = append(items, summary{ + ID: s.ID, + Status: s.Status, + Total: s.Total, + Tested: s.Tested, + Alive: s.Alive, + WithScreen: s.WithScreen, + }) + s.Unlock() + } + sessionsMu.Unlock() + + api.ResponseJSON(w, map[string]any{"sessions": items}) +} + +func apiTestGet(w http.ResponseWriter, id string) { + sessionsMu.Lock() + s := sessions[id] + sessionsMu.Unlock() + + if s == nil { + http.Error(w, "session not found", http.StatusNotFound) + return + } + + s.Lock() + api.ResponseJSON(w, s) + s.Unlock() +} + +func apiTestCreate(w http.ResponseWriter, r *http.Request) { + var req struct { + Sources struct { + Streams []string `json:"streams"` + } `json:"sources"` + } + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + if len(req.Sources.Streams) == 0 { + http.Error(w, "sources.streams required", http.StatusBadRequest) + return + } + + id := randID() + s := tester.NewSession(id, len(req.Sources.Streams)) + + sessionsMu.Lock() + sessions[id] = s + sessionsMu.Unlock() + + log.Debug().Str("id", id).Int("urls", len(req.Sources.Streams)).Msg("[test] session created") + + go tester.RunWorkers(s, req.Sources.Streams) + + api.ResponseJSON(w, map[string]string{"session_id": id}) +} + +func apiTestDelete(w http.ResponseWriter, id string) { + sessionsMu.Lock() + if s, ok := sessions[id]; ok { + s.Cancel() + delete(sessions, id) + } + sessionsMu.Unlock() + + api.ResponseJSON(w, map[string]string{"status": "deleted"}) +} + +func apiScreenshot(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + q := r.URL.Query() + id := q.Get("id") + idx, err := strconv.Atoi(q.Get("i")) + if id == "" || err != nil { + http.Error(w, "id and i required", http.StatusBadRequest) + return + } + + sessionsMu.Lock() + s := sessions[id] + sessionsMu.Unlock() + + if s == nil { + http.Error(w, "session not found", http.StatusNotFound) + return + } + + data := s.GetScreenshot(idx) + if data == nil { + http.Error(w, "screenshot not found", http.StatusNotFound) + return + } + + w.Header().Set("Content-Type", "image/jpeg") + w.Header().Set("Content-Length", strconv.Itoa(len(data))) + w.Header().Set("Cache-Control", "no-cache") + w.Write(data) +} + +func randID() string { + b := make([]byte, 8) + rand.Read(b) + return hex.EncodeToString(b) +} diff --git a/internal/utils/logger/adapter.go b/internal/utils/logger/adapter.go deleted file mode 100644 index 37a339f..0000000 --- a/internal/utils/logger/adapter.go +++ /dev/null @@ -1,35 +0,0 @@ -package logger - -import "log/slog" - -// Adapter wraps slog.Logger to match our interface -type Adapter struct { - *slog.Logger - Secrets *SecretStore -} - -// NewAdapter creates a new logger adapter -func NewAdapter(logger *slog.Logger, secrets *SecretStore) *Adapter { - return &Adapter{Logger: logger, Secrets: secrets} -} - -// Debug logs a debug message -func (a *Adapter) Debug(msg string, args ...any) { - a.Logger.Debug(msg, args...) -} - -// Info logs an info message -func (a *Adapter) Info(msg string, args ...any) { - a.Logger.Info(msg, args...) -} - -// Error logs an error message -func (a *Adapter) Error(msg string, err error, args ...any) { - allArgs := append([]any{"error", err}, args...) - a.Logger.Error(msg, allArgs...) -} - -// Warn logs a warning message -func (a *Adapter) Warn(msg string, args ...any) { - a.Logger.Warn(msg, args...) -} \ No newline at end of file diff --git a/internal/utils/logger/masking_handler.go b/internal/utils/logger/masking_handler.go deleted file mode 100644 index 1a4c937..0000000 --- a/internal/utils/logger/masking_handler.go +++ /dev/null @@ -1,199 +0,0 @@ -package logger - -import ( - "context" - "fmt" - "log/slog" - "net/url" - "strings" - "sync" -) - -// SecretStore holds a set of secret strings that should be masked in log output. -// It is safe for concurrent use by multiple goroutines. Multiple concurrent scans -// can register different passwords; all are masked simultaneously. -type SecretStore struct { - mu sync.RWMutex - secrets map[string]struct{} -} - -// NewSecretStore creates a new empty secret store. -func NewSecretStore() *SecretStore { - return &SecretStore{ - secrets: make(map[string]struct{}), - } -} - -// Add registers a secret string to be masked in all future log output. -// Empty strings are ignored. Both the plain text and URL-encoded forms -// are registered, because credentials may appear percent-encoded in URLs -// (e.g. "p@ss" becomes "p%40ss" via url.QueryEscape or url.UserPassword). -func (s *SecretStore) Add(secret string) { - if secret == "" { - return - } - s.mu.Lock() - s.secrets[secret] = struct{}{} - encoded := url.QueryEscape(secret) - if encoded != secret { - s.secrets[encoded] = struct{}{} - } - s.mu.Unlock() -} - -// Remove unregisters a secret string so it is no longer masked. -func (s *SecretStore) Remove(secret string) { - if secret == "" { - return - } - s.mu.Lock() - delete(s.secrets, secret) - encoded := url.QueryEscape(secret) - if encoded != secret { - delete(s.secrets, encoded) - } - s.mu.Unlock() -} - -// Mask replaces all registered secret strings in text with "***". -// Returns the original string unchanged if no secrets are registered. -func (s *SecretStore) Mask(text string) string { - s.mu.RLock() - defer s.mu.RUnlock() - - if len(s.secrets) == 0 { - return text - } - - for secret := range s.secrets { - if strings.Contains(text, secret) { - text = strings.ReplaceAll(text, secret, "***") - } - } - return text -} - -// SecretMaskingHandler wraps a slog.Handler and replaces registered secrets -// with "***" in all log record messages and attribute values before passing -// them to the inner handler. This ensures credentials never appear in log -// output regardless of where they originate in the code. -type SecretMaskingHandler struct { - inner slog.Handler - secrets *SecretStore -} - -// NewSecretMaskingHandler creates a handler that masks secrets in log output. -func NewSecretMaskingHandler(inner slog.Handler, secrets *SecretStore) *SecretMaskingHandler { - return &SecretMaskingHandler{ - inner: inner, - secrets: secrets, - } -} - -// Enabled reports whether the inner handler handles records at the given level. -func (h *SecretMaskingHandler) Enabled(ctx context.Context, level slog.Level) bool { - return h.inner.Enabled(ctx, level) -} - -// Handle masks secrets in the record message and all attributes, then -// delegates to the inner handler. -func (h *SecretMaskingHandler) Handle(ctx context.Context, record slog.Record) error { - // Fast path: no secrets registered - h.secrets.mu.RLock() - hasSecrets := len(h.secrets.secrets) > 0 - h.secrets.mu.RUnlock() - - if !hasSecrets { - return h.inner.Handle(ctx, record) - } - - // Mask the message - record.Message = h.secrets.Mask(record.Message) - - // Mask all attributes by collecting, masking, and replacing them - maskedAttrs := make([]slog.Attr, 0, record.NumAttrs()) - record.Attrs(func(a slog.Attr) bool { - maskedAttrs = append(maskedAttrs, h.maskAttr(a)) - return true - }) - - // Create a new record without the old attrs and add the masked ones. - // slog.Record doesn't have a method to clear attrs, so we build a new one. - newRecord := slog.NewRecord(record.Time, record.Level, record.Message, record.PC) - newRecord.AddAttrs(maskedAttrs...) - - return h.inner.Handle(ctx, newRecord) -} - -// WithAttrs returns a new handler with the given pre-masked attributes. -func (h *SecretMaskingHandler) WithAttrs(attrs []slog.Attr) slog.Handler { - masked := make([]slog.Attr, len(attrs)) - for i, a := range attrs { - masked[i] = h.maskAttr(a) - } - return &SecretMaskingHandler{ - inner: h.inner.WithAttrs(masked), - secrets: h.secrets, - } -} - -// WithGroup returns a new handler with the given group name. -func (h *SecretMaskingHandler) WithGroup(name string) slog.Handler { - return &SecretMaskingHandler{ - inner: h.inner.WithGroup(name), - secrets: h.secrets, - } -} - -// maskAttr masks secrets in an attribute value. Handles string values, -// error values, and recursively handles group attributes. -func (h *SecretMaskingHandler) maskAttr(a slog.Attr) slog.Attr { - switch a.Value.Kind() { - case slog.KindString: - a.Value = slog.StringValue(h.secrets.Mask(a.Value.String())) - - case slog.KindGroup: - attrs := a.Value.Group() - masked := make([]slog.Attr, len(attrs)) - for i, ga := range attrs { - masked[i] = h.maskAttr(ga) - } - a.Value = slog.GroupValue(masked...) - - case slog.KindAny: - v := a.Value.Any() - - // Handle error values (Go's http.Client embeds full URLs in errors) - if err, ok := v.(error); ok { - masked := h.secrets.Mask(err.Error()) - a.Value = slog.StringValue(masked) - return a - } - - // Handle fmt.Stringer (e.g. time.Duration, url.URL, etc.) - if stringer, ok := v.(fmt.Stringer); ok { - masked := h.secrets.Mask(stringer.String()) - a.Value = slog.StringValue(masked) - return a - } - - // Handle string slices (used in BuildURLsFromEntry logging) - if ss, ok := v.([]string); ok { - maskedSlice := make([]string, len(ss)) - for i, s := range ss { - maskedSlice[i] = h.secrets.Mask(s) - } - a.Value = slog.AnyValue(maskedSlice) - return a - } - - // For other Any values, convert to string and mask - str := fmt.Sprintf("%v", v) - masked := h.secrets.Mask(str) - if masked != str { - a.Value = slog.StringValue(masked) - } - } - - return a -} diff --git a/internal/utils/logger/masking_handler_test.go b/internal/utils/logger/masking_handler_test.go deleted file mode 100644 index 2eb2c44..0000000 --- a/internal/utils/logger/masking_handler_test.go +++ /dev/null @@ -1,262 +0,0 @@ -package logger - -import ( - "bytes" - "context" - "errors" - "log/slog" - "strings" - "sync" - "testing" -) - -func TestSecretStore_AddRemoveMask(t *testing.T) { - store := NewSecretStore() - - // No secrets: text unchanged - if got := store.Mask("password=secret123"); got != "password=secret123" { - t.Errorf("expected unchanged text, got %q", got) - } - - // Add a secret - store.Add("secret123") - if got := store.Mask("password=secret123"); got != "password=***" { - t.Errorf("expected masked, got %q", got) - } - - // Remove the secret - store.Remove("secret123") - if got := store.Mask("password=secret123"); got != "password=secret123" { - t.Errorf("expected unmasked after remove, got %q", got) - } -} - -func TestSecretStore_EmptyString(t *testing.T) { - store := NewSecretStore() - store.Add("") - if got := store.Mask("test"); got != "test" { - t.Errorf("empty secret should be ignored, got %q", got) - } - store.Remove("") // should not panic -} - -func TestSecretStore_MultipleSecrets(t *testing.T) { - store := NewSecretStore() - store.Add("pass1") - store.Add("pass2") - - got := store.Mask("url=rtsp://user:pass1@host and also pwd=pass2&rate=0") - if strings.Contains(got, "pass1") || strings.Contains(got, "pass2") { - t.Errorf("both passwords should be masked, got %q", got) - } -} - -func TestSecretStore_ConcurrentAccess(t *testing.T) { - store := NewSecretStore() - var wg sync.WaitGroup - - // Simulate concurrent scans adding/removing/masking - for i := 0; i < 100; i++ { - wg.Add(3) - secret := "secret" + string(rune('A'+i%26)) - - go func(s string) { - defer wg.Done() - store.Add(s) - }(secret) - - go func() { - defer wg.Done() - _ = store.Mask("some text with secretA in it") - }() - - go func(s string) { - defer wg.Done() - store.Remove(s) - }(secret) - } - - wg.Wait() -} - -func TestSecretMaskingHandler_MasksStringAttrs(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("mypassword") - - inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - log.Debug("testing stream", "url", "rtsp://admin:mypassword@192.168.1.10/stream") - - output := buf.String() - if strings.Contains(output, "mypassword") { - t.Errorf("password should be masked in output: %s", output) - } - if !strings.Contains(output, "***") { - t.Errorf("expected *** in output: %s", output) - } -} - -func TestSecretMaskingHandler_MasksMessage(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("secretpwd") - - inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - log.Debug("failed with secretpwd in message") - - output := buf.String() - if strings.Contains(output, "secretpwd") { - t.Errorf("password should be masked in message: %s", output) - } -} - -func TestSecretMaskingHandler_MasksErrorValues(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("r6wnm0wlix") - - inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - err := errors.New(`Get "http://10.0.20.111/cgi-bin/encoder?PWD=r6wnm0wlix&USER=admin": dial tcp`) - log.Debug("request failed", "error", err) - - output := buf.String() - if strings.Contains(output, "r6wnm0wlix") { - t.Errorf("password should be masked in error: %s", output) - } -} - -func TestSecretMaskingHandler_NoSecretsPassthrough(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - - inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - log.Debug("normal message", "key", "value") - - output := buf.String() - if !strings.Contains(output, "normal message") || !strings.Contains(output, "value") { - t.Errorf("output should pass through unchanged: %s", output) - } -} - -func TestSecretMaskingHandler_MasksMultipleOccurrences(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("secret123") - - inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - log.Debug("test", - "url1", "rtsp://user:secret123@host1/stream", - "url2", "http://host2/snap?pwd=secret123", - "path", "/user=admin_password=secret123_channel=1", - ) - - output := buf.String() - if strings.Contains(output, "secret123") { - t.Errorf("all occurrences should be masked: %s", output) - } -} - -func TestSecretMaskingHandler_Enabled(t *testing.T) { - store := NewSecretStore() - inner := slog.NewTextHandler(&bytes.Buffer{}, &slog.HandlerOptions{Level: slog.LevelInfo}) - handler := NewSecretMaskingHandler(inner, store) - - if handler.Enabled(context.Background(), slog.LevelDebug) { - t.Error("debug should be disabled when level is info") - } - if !handler.Enabled(context.Background(), slog.LevelInfo) { - t.Error("info should be enabled") - } -} - -func TestSecretMaskingHandler_SpecialCharsPassword(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("p@ss:w0rd#1") - - inner := slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - // Simulate URLs built by builder.go and onvif_simple.go - // 1. RTSP with url.QueryEscape (onvif_simple.go:395) - log.Debug("testing RTSP stream", "url", "rtsp://admin:p%40ss%3Aw0rd%231@192.168.1.10:554/stream1") - - // 2. HTTP with url.UserPassword (builder.go:355) -- Go encodes special chars - log.Debug("testing HTTP stream", "url", "http://admin:p%40ss%3Aw0rd%231@192.168.1.10/snap.jpg") - - // 3. Query params with url.Values.Encode (builder.go:377) - log.Debug("testing HTTP stream", "url", "http://192.168.1.10/snap.jpg?pwd=p%40ss%3Aw0rd%231&user=admin") - - // 4. Error from Go http.Client (contains encoded URL) - log.Debug("stream test failed", - "url", "http://admin:p%40ss%3Aw0rd%231@192.168.1.10/camera", - "error", `HTTP request failed: Get "http://admin:***@192.168.1.10/camera": connection refused`) - - output := buf.String() - t.Logf("Output:\n%s", output) - - if strings.Contains(output, "p@ss:w0rd#1") { - t.Errorf("plain text password should be masked: %s", output) - } - if strings.Contains(output, "p%40ss%3Aw0rd%231") { - t.Errorf("URL-encoded password should be masked: %s", output) - } -} - -func TestSecretMaskingHandler_PlainPassword(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("simplepass123") - - inner := slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - log := slog.New(handler) - - // Plain password without special chars -- no encoding difference - log.Debug("testing RTSP stream", "url", "rtsp://admin:simplepass123@192.168.1.10:554/stream") - log.Debug("testing HTTP stream", "url", "http://192.168.1.10/snap.jpg?pwd=simplepass123&user=admin") - log.Debug("stream test failed", - "url", "http://admin:simplepass123@192.168.1.10/camera", - "error", `HTTP request failed: Get "http://192.168.1.10/snap.jpg?pwd=simplepass123&user=admin": connection refused`) - - output := buf.String() - t.Logf("Output:\n%s", output) - - if strings.Contains(output, "simplepass123") { - t.Errorf("password should be masked everywhere: %s", output) - } -} - -func TestSecretMaskingHandler_WithAttrs(t *testing.T) { - var buf bytes.Buffer - store := NewSecretStore() - store.Add("secretval") - - inner := slog.NewTextHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - handler := NewSecretMaskingHandler(inner, store) - child := handler.WithAttrs([]slog.Attr{slog.String("static", "has secretval inside")}) - log := slog.New(child) - - log.Debug("test") - - output := buf.String() - if strings.Contains(output, "secretval") { - t.Errorf("pre-set attr should be masked: %s", output) - } -} diff --git a/main.go b/main.go new file mode 100644 index 0000000..499e0de --- /dev/null +++ b/main.go @@ -0,0 +1,34 @@ +package main + +import ( + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + "github.com/eduard256/strix/internal/generate" + "github.com/eduard256/strix/internal/probe" + "github.com/eduard256/strix/internal/search" + "github.com/eduard256/strix/internal/test" +) + +func main() { + app.Version = "2.0.0" + + type module struct { + name string + init func() + } + + modules := []module{ + {"", app.Init}, + {"api", api.Init}, + {"search", search.Init}, + {"test", test.Init}, + {"probe", probe.Init}, + {"generate", generate.Init}, + } + + for _, m := range modules { + m.init() + } + + select {} +} diff --git a/pkg/camdb/search.go b/pkg/camdb/search.go new file mode 100644 index 0000000..6cd142e --- /dev/null +++ b/pkg/camdb/search.go @@ -0,0 +1,137 @@ +package camdb + +import ( + "database/sql" + "strings" +) + +type Result struct { + Type string `json:"type"` + ID string `json:"id"` + Name string `json:"name"` +} + +// SearchAll returns all presets + all brands, no models +func SearchAll(db *sql.DB) ([]Result, error) { + var results []Result + + rows, err := db.Query("SELECT preset_id, name FROM presets ORDER BY preset_id") + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var id, name string + if err = rows.Scan(&id, &name); err != nil { + return nil, err + } + results = append(results, Result{Type: "preset", ID: "p:" + id, Name: name}) + } + + rows, err = db.Query("SELECT brand_id, brand FROM brands ORDER BY brand LIMIT ?", 50-len(results)) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var id, name string + if err = rows.Scan(&id, &name); err != nil { + return nil, err + } + results = append(results, Result{Type: "brand", ID: "b:" + id, Name: name}) + } + + return results, nil +} + +// SearchQuery searches presets, brands, models by query string (limit 50 total). +// Supports: "model", "brand model", "model brand" -- each word matches independently. +func SearchQuery(db *sql.DB, q string) ([]Result, error) { + var results []Result + like := "%" + q + "%" + + // presets + rows, err := db.Query( + "SELECT preset_id, name FROM presets WHERE preset_id LIKE ? OR name LIKE ? ORDER BY preset_id", + like, like, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var id, name string + if err = rows.Scan(&id, &name); err != nil { + return nil, err + } + results = append(results, Result{Type: "preset", ID: "p:" + id, Name: name}) + } + + // brands + rows, err = db.Query( + "SELECT brand_id, brand FROM brands WHERE brand_id LIKE ? OR brand LIKE ? ORDER BY brand LIMIT ?", + like, like, 50-len(results), + ) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var id, name string + if err = rows.Scan(&id, &name); err != nil { + return nil, err + } + results = append(results, Result{Type: "brand", ID: "b:" + id, Name: name}) + } + + if len(results) >= 50 { + return results, nil + } + + // models -- each word must match brand or model + words := strings.Fields(q) + where := "" + args := make([]any, 0, len(words)+1) + for i, w := range words { + if i > 0 { + where += " AND " + } + where += "(b.brand LIKE ? OR b.brand_id LIKE ? OR sm.model LIKE ?)" + p := "%" + w + "%" + args = append(args, p, p, p) + } + args = append(args, 50-len(results)) + + rows, err = db.Query( + `SELECT DISTINCT b.brand_id, b.brand, sm.model + FROM stream_models sm + JOIN streams s ON s.id = sm.stream_id + JOIN brands b ON b.brand_id = s.brand_id + WHERE `+where+` + ORDER BY b.brand, sm.model + LIMIT ?`, + args..., + ) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var brandID, brand, model string + if err = rows.Scan(&brandID, &brand, &model); err != nil { + return nil, err + } + results = append(results, Result{ + Type: "model", + ID: "m:" + brandID + ":" + model, + Name: brand + ": " + model, + }) + } + + return results, nil +} diff --git a/pkg/camdb/streams.go b/pkg/camdb/streams.go new file mode 100644 index 0000000..251adb3 --- /dev/null +++ b/pkg/camdb/streams.go @@ -0,0 +1,202 @@ +package camdb + +import ( + "database/sql" + "encoding/base64" + "errors" + "fmt" + "strconv" + "strings" +) + +var defaultPorts = map[string]int{ + "rtsp": 554, "rtsps": 322, "http": 80, "https": 443, + "rtmp": 1935, "mms": 554, "rtp": 5004, +} + +type StreamParams struct { + IDs string + IP string + User string + Pass string + Channel int + Ports map[int]bool // nil = no filter +} + +type raw struct { + url, protocol string + port int +} + +// BuildStreams resolves IDs to full stream URLs with credentials and placeholders substituted +func BuildStreams(db *sql.DB, p *StreamParams) ([]string, error) { + var raws []raw + + for _, id := range strings.Split(p.IDs, ",") { + id = strings.TrimSpace(id) + if id == "" { + continue + } + + var rows *sql.Rows + var err error + + switch { + case strings.HasPrefix(id, "b:"): + brandID := id[2:] + rows, err = db.Query( + "SELECT url, protocol, port FROM streams WHERE brand_id = ?", brandID, + ) + + case strings.HasPrefix(id, "m:"): + parts := strings.SplitN(id[2:], ":", 2) + if len(parts) != 2 { + return nil, fmt.Errorf("camdb: invalid model id: %s", id) + } + rows, err = db.Query( + `SELECT s.url, s.protocol, s.port + FROM stream_models sm + JOIN streams s ON s.id = sm.stream_id + WHERE s.brand_id = ? AND sm.model = ?`, + parts[0], parts[1], + ) + + case strings.HasPrefix(id, "p:"): + presetID := id[2:] + rows, err = db.Query( + "SELECT url, protocol, port FROM preset_streams WHERE preset_id = ?", presetID, + ) + + default: + return nil, fmt.Errorf("camdb: unknown id prefix: %s", id) + } + + if err != nil { + return nil, err + } + + found := false + for rows.Next() { + var r raw + if err = rows.Scan(&r.url, &r.protocol, &r.port); err != nil { + rows.Close() + return nil, err + } + raws = append(raws, r) + found = true + } + rows.Close() + + if !found { + return nil, fmt.Errorf("camdb: not found: %s", id) + } + } + + // build full URLs, deduplicate + seen := map[string]bool{} + var streams []string + + for _, r := range raws { + if len(streams) >= 20000 { + break + } + + port := r.port + if port == 0 { + if p, ok := defaultPorts[r.protocol]; ok { + port = p + } else { + port = 80 + } + } + + if p.Ports != nil && !p.Ports[port] { + continue + } + + u := buildURL(r.protocol, r.url, p.IP, port, p.User, p.Pass, p.Channel) + if seen[u] { + continue + } + seen[u] = true + streams = append(streams, u) + } + + return streams, nil +} + +// ValidateID checks if id format is valid +func ValidateID(id string) error { + switch { + case strings.HasPrefix(id, "b:"): + if len(id) < 3 { + return errors.New("camdb: empty brand id") + } + case strings.HasPrefix(id, "m:"): + if strings.Count(id, ":") < 2 { + return fmt.Errorf("camdb: invalid model id: %s", id) + } + case strings.HasPrefix(id, "p:"): + if len(id) < 3 { + return errors.New("camdb: empty preset id") + } + default: + return fmt.Errorf("camdb: unknown prefix: %s", id) + } + return nil +} + +// internals + +func buildURL(protocol, path, ip string, port int, user, pass string, channel int) string { + path = replacePlaceholders(path, ip, port, user, pass, channel) + + var auth string + if user != "" { + auth = user + ":" + pass + "@" + } + + host := ip + if p, ok := defaultPorts[protocol]; !ok || p != port { + host = ip + ":" + strconv.Itoa(port) + } + + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + + return protocol + "://" + auth + host + path +} + +func replacePlaceholders(s, ip string, port int, user, pass string, channel int) string { + auth := "" + if user != "" && pass != "" { + auth = base64.StdEncoding.EncodeToString([]byte(user + ":" + pass)) + } + + pairs := []string{ + "[CHANNEL]", strconv.Itoa(channel), + "[channel]", strconv.Itoa(channel), + "{CHANNEL}", strconv.Itoa(channel), + "{channel}", strconv.Itoa(channel), + "[CHANNEL+1]", strconv.Itoa(channel + 1), + "[channel+1]", strconv.Itoa(channel + 1), + "{CHANNEL+1}", strconv.Itoa(channel + 1), + "{channel+1}", strconv.Itoa(channel + 1), + "[USERNAME]", user, "[username]", user, + "[USER]", user, "[user]", user, + "[PASSWORD]", pass, "[password]", pass, + "[PASWORD]", pass, "[pasword]", pass, + "[PASS]", pass, "[pass]", pass, + "[PWD]", pass, "[pwd]", pass, + "[WIDTH]", "640", "[width]", "640", + "[HEIGHT]", "480", "[height]", "480", + "[IP]", ip, "[ip]", ip, + "[PORT]", strconv.Itoa(port), "[port]", strconv.Itoa(port), + "[AUTH]", auth, "[auth]", auth, + "[TOKEN]", "", "[token]", "", + } + + r := strings.NewReplacer(pairs...) + return r.Replace(s) +} diff --git a/pkg/generate/config.go b/pkg/generate/config.go new file mode 100644 index 0000000..1296a87 --- /dev/null +++ b/pkg/generate/config.go @@ -0,0 +1,168 @@ +package generate + +import ( + "fmt" + "net/url" + "regexp" + "strings" +) + +var needMP4 = map[string]bool{"bubble": true} + +var reIPv4 = regexp.MustCompile(`\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}`) + +func Generate(req *Request) (*Response, error) { + if req.MainStream == "" { + return nil, fmt.Errorf("generate: mainStream required") + } + + info := buildInfo(req) + + if len(req.Objects) > 0 && (req.Detect == nil || !req.Detect.Enabled) { + if req.Detect == nil { + req.Detect = &DetectConfig{Enabled: true} + } else { + req.Detect.Enabled = true + } + } + + if strings.TrimSpace(req.ExistingConfig) == "" { + config := newConfig(info, req) + return &Response{Config: config, Diff: fullDiff(config)}, nil + } + + return addToConfig(req.ExistingConfig, info, req) +} + +func buildInfo(req *Request) *cameraInfo { + mainScheme := urlScheme(req.MainStream) + ip := extractIP(req.MainStream) + sanitized := strings.NewReplacer(".", "_", ":", "_").Replace(ip) + + base := "camera" + streamBase := "stream" + if ip != "" { + base = "camera_" + sanitized + streamBase = sanitized + } + + info := &cameraInfo{ + CameraName: base, + MainStreamName: streamBase + "_main", + MainSource: req.MainStream, + } + + if req.Name != "" { + info.CameraName = req.Name + info.MainStreamName = req.Name + "_main" + } + + if req.Go2RTC != nil { + if req.Go2RTC.MainStreamName != "" { + info.MainStreamName = req.Go2RTC.MainStreamName + } + if req.Go2RTC.MainStreamSource != "" { + info.MainSource = req.Go2RTC.MainStreamSource + } + } + + info.MainPath = "rtsp://127.0.0.1:8554/" + info.MainStreamName + if needMP4[mainScheme] { + info.MainPath += "?mp4" + } + info.MainInputArgs = "preset-rtsp-restream" + + if req.Frigate != nil { + if req.Frigate.MainStreamPath != "" { + info.MainPath = req.Frigate.MainStreamPath + } + if req.Frigate.MainStreamInputArgs != "" { + info.MainInputArgs = req.Frigate.MainStreamInputArgs + } + } + + if req.SubStream != "" { + subScheme := urlScheme(req.SubStream) + subName := streamBase + "_sub" + if req.Name != "" { + subName = req.Name + "_sub" + } + subSource := req.SubStream + subPath := "rtsp://127.0.0.1:8554/" + subName + if needMP4[subScheme] { + subPath += "?mp4" + } + subInputArgs := "preset-rtsp-restream" + + if req.Go2RTC != nil { + if req.Go2RTC.SubStreamName != "" { + subName = req.Go2RTC.SubStreamName + } + if req.Go2RTC.SubStreamSource != "" { + subSource = req.Go2RTC.SubStreamSource + } + } + if req.Frigate != nil { + if req.Frigate.SubStreamPath != "" { + subPath = req.Frigate.SubStreamPath + } + if req.Frigate.SubStreamInputArgs != "" { + subInputArgs = req.Frigate.SubStreamInputArgs + } + } + + info.SubStreamName = subName + info.SubSource = subSource + info.SubPath = subPath + info.SubInputArgs = subInputArgs + } + + return info +} + +func newConfig(info *cameraInfo, req *Request) string { + var b strings.Builder + + b.WriteString("mqtt:\n enabled: false\n\n") + b.WriteString("record:\n enabled: true\n retain:\n days: 7\n mode: motion\n\n") + + b.WriteString("go2rtc:\n streams:\n") + writeStreamLines(&b, info) + + b.WriteString("cameras:\n") + writeCameraBlock(&b, info, req) + + b.WriteString("version: 0.18-0\n") + return b.String() +} + +// internals + +type cameraInfo struct { + CameraName string + MainStreamName string + MainSource string + MainPath string + MainInputArgs string + SubStreamName string + SubSource string + SubPath string + SubInputArgs string +} + +func urlScheme(rawURL string) string { + if i := strings.IndexByte(rawURL, ':'); i > 0 { + return rawURL[:i] + } + return "" +} + +func extractIP(rawURL string) string { + if u, err := url.Parse(rawURL); err == nil && u.Hostname() != "" { + return u.Hostname() + } + if m := reIPv4.FindString(rawURL); m != "" { + return m + } + return "" +} diff --git a/pkg/generate/diff.go b/pkg/generate/diff.go new file mode 100644 index 0000000..0750d4e --- /dev/null +++ b/pkg/generate/diff.go @@ -0,0 +1,36 @@ +package generate + +import "strings" + +func fullDiff(config string) []DiffLine { + lines := strings.Split(config, "\n") + diff := make([]DiffLine, len(lines)) + for i, line := range lines { + diff[i] = DiffLine{Line: i + 1, Text: line, Type: "added"} + } + return diff +} + +func diffWithContext(lines []string, added map[int]bool, ctx int) []DiffLine { + visible := make(map[int]bool) + for idx := range added { + for c := -ctx; c <= ctx; c++ { + if j := idx + c; j >= 0 && j < len(lines) { + visible[j] = true + } + } + } + + var diff []DiffLine + for i, line := range lines { + if !visible[i] { + continue + } + t := "context" + if added[i] { + t = "added" + } + diff = append(diff, DiffLine{Line: i + 1, Text: line, Type: t}) + } + return diff +} diff --git a/pkg/generate/insert.go b/pkg/generate/insert.go new file mode 100644 index 0000000..d82f6e7 --- /dev/null +++ b/pkg/generate/insert.go @@ -0,0 +1,190 @@ +package generate + +import ( + "fmt" + "regexp" + "strings" +) + +var ( + reCamerasHeader = regexp.MustCompile(`^cameras:`) + reTopLevel = regexp.MustCompile(`^[a-z]`) + reCameraName = regexp.MustCompile(`^\s{2}(\w[\w-]*):`) + reStreamsHeader = regexp.MustCompile(`^\s{2}streams:`) + reStreamName = regexp.MustCompile(`^\s{4}'?(\w[\w-]*)'?:`) + reStreamContent = regexp.MustCompile(`^\s{4,}`) + reNextSection = regexp.MustCompile(`^[a-z#]`) + reCameraBody = regexp.MustCompile(`^\s{2,}\S`) + reVersion = regexp.MustCompile(`^version:`) +) + +func addToConfig(existing string, info *cameraInfo, req *Request) (*Response, error) { + lines := strings.Split(existing, "\n") + + existingCams := findNames(lines, reCamerasHeader, reCameraName) + existingStreams := findNames(lines, reStreamsHeader, reStreamName) + + info = dedup(info, existingCams, existingStreams) + + streamIdx := findStreamInsertPoint(lines) + cameraIdx := findCameraInsertPoint(lines) + + if streamIdx == -1 || cameraIdx == -1 { + return nil, fmt.Errorf("generate: can't find go2rtc streams or cameras section") + } + + var sb strings.Builder + writeStreamLines(&sb, info) + streamLines := strings.Split(strings.TrimRight(sb.String(), "\n"), "\n") + + sb.Reset() + writeCameraBlock(&sb, info, req) + cameraLines := strings.Split(strings.TrimRight(sb.String(), "\n"), "\n") + + added := make(map[int]bool) + result := make([]string, 0, len(lines)+len(streamLines)+len(cameraLines)) + + result = append(result, lines[:streamIdx]...) + mark := len(result) + result = append(result, streamLines...) + for i := range streamLines { + added[mark+i] = true + } + + shift := len(streamLines) + adjCameraIdx := cameraIdx + shift + rest := lines[streamIdx:] + split := adjCameraIdx - len(result) + + result = append(result, rest[:split]...) + mark = len(result) + result = append(result, cameraLines...) + for i := range cameraLines { + added[mark+i] = true + } + result = append(result, rest[split:]...) + + config := strings.Join(result, "\n") + diff := diffWithContext(result, added, 3) + return &Response{Config: config, Diff: diff}, nil +} + +func dedup(info *cameraInfo, cams, streams map[string]bool) *cameraInfo { + out := *info + + suffix := 0 + base := out.CameraName + for cams[out.CameraName] { + suffix++ + out.CameraName = fmt.Sprintf("%s_%d", base, suffix) + } + + base = out.MainStreamName + for streams[out.MainStreamName] { + suffix++ + out.MainStreamName = fmt.Sprintf("%s_%d", base, suffix) + } + + if out.SubStreamName != "" { + base = out.SubStreamName + for streams[out.SubStreamName] { + suffix++ + out.SubStreamName = fmt.Sprintf("%s_%d", base, suffix) + } + } + + return &out +} + +func findNames(lines []string, header, nameRe *regexp.Regexp) map[string]bool { + names := make(map[string]bool) + in := false + for _, line := range lines { + if header.MatchString(line) { + in = true + continue + } + if in && reTopLevel.MatchString(line) { + break + } + if in { + if m := nameRe.FindStringSubmatch(line); m != nil { + names[m[1]] = true + } + } + } + return names +} + +func findStreamInsertPoint(lines []string) int { + in := false + last := -1 + headerIdx := -1 + for i, line := range lines { + if reStreamsHeader.MatchString(line) { + in = true + headerIdx = i + continue + } + if in { + if reStreamContent.MatchString(line) { + last = i + } else if reNextSection.MatchString(line) { + if last >= 0 && last+1 < len(lines) && strings.TrimSpace(lines[last+1]) == "" { + return last + 2 + } + if last >= 0 { + return last + 1 + } + return headerIdx + 1 + } + } + } + if last >= 0 { + return last + 1 + } + if headerIdx >= 0 { + return headerIdx + 1 + } + return -1 +} + +func findCameraInsertPoint(lines []string) int { + in := false + last := -1 + headerIdx := -1 + for i, line := range lines { + if reCamerasHeader.MatchString(line) { + in = true + headerIdx = i + continue + } + if in { + if reCameraBody.MatchString(line) { + last = i + } else if reTopLevel.MatchString(line) && !reCamerasHeader.MatchString(line) { + if last < 0 { + return headerIdx + 1 + } + idx := last + 1 + for idx < len(lines) && strings.TrimSpace(lines[idx]) == "" { + idx++ + } + return idx + } else if reVersion.MatchString(line) { + if last < 0 { + return headerIdx + 1 + } + idx := i + for idx > 0 && strings.TrimSpace(lines[idx-1]) == "" { + idx-- + } + return idx + } + } + } + if headerIdx >= 0 { + return headerIdx + 1 + } + return len(lines) +} diff --git a/pkg/generate/models.go b/pkg/generate/models.go new file mode 100644 index 0000000..f597a9c --- /dev/null +++ b/pkg/generate/models.go @@ -0,0 +1,117 @@ +package generate + +type Request struct { + MainStream string `json:"mainStream"` + SubStream string `json:"subStream,omitempty"` + Name string `json:"name,omitempty"` + ExistingConfig string `json:"existingConfig,omitempty"` + + Go2RTC *Go2RTCOverride `json:"go2rtc,omitempty"` + Frigate *FrigateOverride `json:"frigate,omitempty"` + + Objects []string `json:"objects,omitempty"` + Record *RecordConfig `json:"record,omitempty"` + Detect *DetectConfig `json:"detect,omitempty"` + Snapshots *BoolConfig `json:"snapshots,omitempty"` + Motion *MotionConfig `json:"motion,omitempty"` + + FFmpeg *FFmpegConfig `json:"ffmpeg,omitempty"` + Live *LiveConfig `json:"live,omitempty"` + Audio *AudioConfig `json:"audio,omitempty"` + Birdseye *BirdseyeConfig `json:"birdseye,omitempty"` + ONVIF *ONVIFConfig `json:"onvif,omitempty"` + PTZ *PTZConfig `json:"ptz,omitempty"` + Notifications *BoolConfig `json:"notifications,omitempty"` + UI *UIConfig `json:"ui,omitempty"` +} + +type Go2RTCOverride struct { + MainStreamName string `json:"mainStreamName,omitempty"` + SubStreamName string `json:"subStreamName,omitempty"` + MainStreamSource string `json:"mainStreamSource,omitempty"` + SubStreamSource string `json:"subStreamSource,omitempty"` +} + +type FrigateOverride struct { + MainStreamPath string `json:"mainStreamPath,omitempty"` + SubStreamPath string `json:"subStreamPath,omitempty"` + MainStreamInputArgs string `json:"mainStreamInputArgs,omitempty"` + SubStreamInputArgs string `json:"subStreamInputArgs,omitempty"` +} + +type RecordConfig struct { + Enabled bool `json:"enabled"` + RetainDays float64 `json:"retain_days,omitempty"` + Mode string `json:"mode,omitempty"` + AlertsDays float64 `json:"alerts_days,omitempty"` + DetectionDays float64 `json:"detections_days,omitempty"` + PreCapture int `json:"pre_capture,omitempty"` + PostCapture int `json:"post_capture,omitempty"` +} + +type DetectConfig struct { + Enabled bool `json:"enabled"` + FPS int `json:"fps,omitempty"` + Width int `json:"width,omitempty"` + Height int `json:"height,omitempty"` +} + +type MotionConfig struct { + Enabled bool `json:"enabled"` + Threshold int `json:"threshold,omitempty"` + ContourArea int `json:"contour_area,omitempty"` +} + +type FFmpegConfig struct { + HWAccel string `json:"hwaccel,omitempty"` + GPU int `json:"gpu,omitempty"` +} + +type LiveConfig struct { + Height int `json:"height,omitempty"` + Quality int `json:"quality,omitempty"` +} + +type AudioConfig struct { + Enabled bool `json:"enabled"` + Filters []string `json:"filters,omitempty"` +} + +type BirdseyeConfig struct { + Enabled bool `json:"enabled"` + Mode string `json:"mode,omitempty"` +} + +type ONVIFConfig struct { + Host string `json:"host,omitempty"` + Port int `json:"port,omitempty"` + User string `json:"user,omitempty"` + Password string `json:"password,omitempty"` + AutoTracking bool `json:"autotracking,omitempty"` + RequiredZones []string `json:"required_zones,omitempty"` +} + +type PTZConfig struct { + Enabled bool `json:"enabled"` + Presets map[string]string `json:"presets,omitempty"` +} + +type BoolConfig struct { + Enabled bool `json:"enabled"` +} + +type UIConfig struct { + Order int `json:"order,omitempty"` + Dashboard bool `json:"dashboard"` +} + +type Response struct { + Config string `json:"config"` + Diff []DiffLine `json:"diff"` +} + +type DiffLine struct { + Line int `json:"line"` + Text string `json:"text"` + Type string `json:"type"` // context, added, removed +} diff --git a/pkg/generate/writer.go b/pkg/generate/writer.go new file mode 100644 index 0000000..17ab432 --- /dev/null +++ b/pkg/generate/writer.go @@ -0,0 +1,265 @@ +package generate + +import ( + "fmt" + "strings" +) + +func writeStreamLines(b *strings.Builder, info *cameraInfo) { + fmt.Fprintf(b, " '%s':\n", info.MainStreamName) + fmt.Fprintf(b, " - %s\n", info.MainSource) + + if info.SubStreamName != "" { + fmt.Fprintf(b, " '%s':\n", info.SubStreamName) + fmt.Fprintf(b, " - %s\n", info.SubSource) + } + + b.WriteByte('\n') +} + +func writeCameraBlock(b *strings.Builder, info *cameraInfo, req *Request) { + fmt.Fprintf(b, " %s:\n", info.CameraName) + + b.WriteString(" ffmpeg:\n") + writeFFmpegGlobal(b, req) + b.WriteString(" inputs:\n") + + if info.SubStreamName != "" { + writeInput(b, info.SubPath, info.SubInputArgs, "detect") + writeInput(b, info.MainPath, info.MainInputArgs, "record") + } else { + writeInput(b, info.MainPath, info.MainInputArgs, "detect", "record") + } + + writeLive(b, info, req) + writeDetect(b, req) + writeObjects(b, req) + writeMotion(b, req) + writeRecord(b, req) + writeSnapshots(b, req) + writeAudio(b, req) + writeBirdseye(b, req) + writeONVIF(b, req) + writeNotifications(b, req) + writeUI(b, req) + + b.WriteByte('\n') +} + +func writeInput(b *strings.Builder, path, inputArgs string, roles ...string) { + fmt.Fprintf(b, " - path: %s\n", path) + fmt.Fprintf(b, " input_args: %s\n", inputArgs) + b.WriteString(" roles:\n") + for _, r := range roles { + fmt.Fprintf(b, " - %s\n", r) + } +} + +func writeFFmpegGlobal(b *strings.Builder, req *Request) { + if req.FFmpeg == nil { + return + } + if req.FFmpeg.HWAccel != "" && req.FFmpeg.HWAccel != "auto" { + fmt.Fprintf(b, " hwaccel_args: %s\n", req.FFmpeg.HWAccel) + } + if req.FFmpeg.GPU > 0 { + fmt.Fprintf(b, " gpu: %d\n", req.FFmpeg.GPU) + } +} + +func writeLive(b *strings.Builder, info *cameraInfo, req *Request) { + if info.SubStreamName == "" && req.Live == nil { + return + } + + b.WriteString(" live:\n") + + if info.SubStreamName != "" { + b.WriteString(" streams:\n") + fmt.Fprintf(b, " Main Stream: %s\n", info.MainStreamName) + fmt.Fprintf(b, " Sub Stream: %s\n", info.SubStreamName) + } + + if req.Live != nil { + if req.Live.Height > 0 { + fmt.Fprintf(b, " height: %d\n", req.Live.Height) + } + if req.Live.Quality > 0 { + fmt.Fprintf(b, " quality: %d\n", req.Live.Quality) + } + } +} + +func writeDetect(b *strings.Builder, req *Request) { + if req.Detect == nil { + b.WriteString(" detect:\n enabled: true\n") + return + } + + b.WriteString(" detect:\n") + fmt.Fprintf(b, " enabled: %t\n", req.Detect.Enabled) + if req.Detect.FPS > 0 { + fmt.Fprintf(b, " fps: %d\n", req.Detect.FPS) + } + if req.Detect.Width > 0 { + fmt.Fprintf(b, " width: %d\n", req.Detect.Width) + } + if req.Detect.Height > 0 { + fmt.Fprintf(b, " height: %d\n", req.Detect.Height) + } +} + +func writeObjects(b *strings.Builder, req *Request) { + objects := req.Objects + if len(objects) == 0 { + objects = []string{"person"} + } + + b.WriteString(" objects:\n track:\n") + for _, obj := range objects { + fmt.Fprintf(b, " - %s\n", obj) + } +} + +func writeMotion(b *strings.Builder, req *Request) { + if req.Motion == nil { + return + } + + b.WriteString(" motion:\n") + fmt.Fprintf(b, " enabled: %t\n", req.Motion.Enabled) + if req.Motion.Threshold > 0 { + fmt.Fprintf(b, " threshold: %d\n", req.Motion.Threshold) + } + if req.Motion.ContourArea > 0 { + fmt.Fprintf(b, " contour_area: %d\n", req.Motion.ContourArea) + } +} + +func writeRecord(b *strings.Builder, req *Request) { + if req.Record == nil { + b.WriteString(" record:\n enabled: true\n") + return + } + + b.WriteString(" record:\n") + fmt.Fprintf(b, " enabled: %t\n", req.Record.Enabled) + + if req.Record.RetainDays > 0 || req.Record.Mode != "" { + b.WriteString(" retain:\n") + if req.Record.RetainDays > 0 { + fmt.Fprintf(b, " days: %g\n", req.Record.RetainDays) + } + if req.Record.Mode != "" { + fmt.Fprintf(b, " mode: %s\n", req.Record.Mode) + } + } + + if req.Record.AlertsDays > 0 || req.Record.PreCapture > 0 || req.Record.PostCapture > 0 { + b.WriteString(" alerts:\n") + if req.Record.AlertsDays > 0 { + fmt.Fprintf(b, " retain:\n days: %g\n", req.Record.AlertsDays) + } + if req.Record.PreCapture > 0 { + fmt.Fprintf(b, " pre_capture: %d\n", req.Record.PreCapture) + } + if req.Record.PostCapture > 0 { + fmt.Fprintf(b, " post_capture: %d\n", req.Record.PostCapture) + } + } + + if req.Record.DetectionDays > 0 { + fmt.Fprintf(b, " detections:\n retain:\n days: %g\n", req.Record.DetectionDays) + } +} + +func writeSnapshots(b *strings.Builder, req *Request) { + if req.Snapshots == nil || !req.Snapshots.Enabled { + return + } + b.WriteString(" snapshots:\n enabled: true\n") +} + +func writeAudio(b *strings.Builder, req *Request) { + if req.Audio == nil || !req.Audio.Enabled { + return + } + + b.WriteString(" audio:\n enabled: true\n") + if len(req.Audio.Filters) > 0 { + b.WriteString(" filters:\n") + for _, f := range req.Audio.Filters { + fmt.Fprintf(b, " - %s\n", f) + } + } +} + +func writeBirdseye(b *strings.Builder, req *Request) { + if req.Birdseye == nil { + return + } + + b.WriteString(" birdseye:\n") + fmt.Fprintf(b, " enabled: %t\n", req.Birdseye.Enabled) + if req.Birdseye.Mode != "" { + fmt.Fprintf(b, " mode: %s\n", req.Birdseye.Mode) + } +} + +func writeONVIF(b *strings.Builder, req *Request) { + if req.ONVIF == nil || req.ONVIF.Host == "" { + return + } + + b.WriteString(" onvif:\n") + fmt.Fprintf(b, " host: %s\n", req.ONVIF.Host) + + port := req.ONVIF.Port + if port == 0 { + port = 80 + } + fmt.Fprintf(b, " port: %d\n", port) + + if req.ONVIF.User != "" { + fmt.Fprintf(b, " user: %s\n", req.ONVIF.User) + fmt.Fprintf(b, " password: %s\n", req.ONVIF.Password) + } + + if req.ONVIF.AutoTracking { + b.WriteString(" autotracking:\n enabled: true\n") + if len(req.ONVIF.RequiredZones) > 0 { + b.WriteString(" required_zones:\n") + for _, z := range req.ONVIF.RequiredZones { + fmt.Fprintf(b, " - %s\n", z) + } + } + } + + if req.PTZ != nil && len(req.PTZ.Presets) > 0 { + b.WriteString(" ptz:\n presets:\n") + for name, token := range req.PTZ.Presets { + fmt.Fprintf(b, " %s: %s\n", name, token) + } + } +} + +func writeNotifications(b *strings.Builder, req *Request) { + if req.Notifications == nil || !req.Notifications.Enabled { + return + } + b.WriteString(" notifications:\n enabled: true\n") +} + +func writeUI(b *strings.Builder, req *Request) { + if req.UI == nil { + return + } + + b.WriteString(" ui:\n") + if req.UI.Order > 0 { + fmt.Fprintf(b, " order: %d\n", req.UI.Order) + } + if !req.UI.Dashboard { + b.WriteString(" dashboard: false\n") + } +} diff --git a/pkg/probe/arp.go b/pkg/probe/arp.go new file mode 100644 index 0000000..6169a5c --- /dev/null +++ b/pkg/probe/arp.go @@ -0,0 +1,35 @@ +package probe + +import ( + "bufio" + "os" + "strings" +) + +// LookupARP reads /proc/net/arp to find MAC address for ip. Linux only. +func LookupARP(ip string) string { + file, err := os.Open("/proc/net/arp") + if err != nil { + return "" + } + defer file.Close() + + scanner := bufio.NewScanner(file) + scanner.Scan() // skip header + + for scanner.Scan() { + fields := strings.Fields(scanner.Text()) + if len(fields) < 4 { + continue + } + if fields[0] == ip { + mac := fields[3] + if mac == "00:00:00:00:00:00" { + return "" + } + return strings.ToUpper(mac) + } + } + + return "" +} diff --git a/pkg/probe/dns.go b/pkg/probe/dns.go new file mode 100644 index 0000000..e560b5e --- /dev/null +++ b/pkg/probe/dns.go @@ -0,0 +1,21 @@ +package probe + +import ( + "context" + "net" + "strings" +) + +func ReverseDNS(ctx context.Context, ip string) (*DNSResult, error) { + names, err := net.DefaultResolver.LookupAddr(ctx, ip) + if err != nil || len(names) == 0 { + return nil, nil + } + + hostname := strings.TrimSuffix(names[0], ".") + if hostname == "" { + return nil, nil + } + + return &DNSResult{Hostname: hostname}, nil +} diff --git a/pkg/probe/http.go b/pkg/probe/http.go new file mode 100644 index 0000000..79a67be --- /dev/null +++ b/pkg/probe/http.go @@ -0,0 +1,65 @@ +package probe + +import ( + "context" + "crypto/tls" + "fmt" + "net/http" +) + +func ProbeHTTP(ctx context.Context, ip string, ports []int) (*HTTPResult, error) { + if len(ports) == 0 { + ports = []int{80, 8080} + } + + client := &http.Client{ + CheckRedirect: func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + }, + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + } + + type result struct { + resp *http.Response + port int + } + + ch := make(chan result, len(ports)) + + for _, port := range ports { + go func(port int) { + url := fmt.Sprintf("http://%s:%d/", ip, port) + req, err := http.NewRequestWithContext(ctx, "HEAD", url, nil) + if err != nil { + return + } + req.Header.Set("User-Agent", "Strix/2.0") + + resp, err := client.Do(req) + if err != nil { + return + } + ch <- result{resp: resp, port: port} + }(port) + } + + for range ports { + select { + case <-ctx.Done(): + return nil, nil + case r := <-ch: + if r.resp.Body != nil { + r.resp.Body.Close() + } + return &HTTPResult{ + Port: r.port, + StatusCode: r.resp.StatusCode, + Server: r.resp.Header.Get("Server"), + }, nil + } + } + + return nil, nil +} diff --git a/pkg/probe/mdns.go b/pkg/probe/mdns.go new file mode 100644 index 0000000..e5a32e3 --- /dev/null +++ b/pkg/probe/mdns.go @@ -0,0 +1,137 @@ +package probe + +import ( + "context" + "net" + "strings" + "time" + + "github.com/miekg/dns" +) + +const ( + hapService = "_hap._tcp.local." + + txtCategory = "ci" + txtDeviceID = "id" + txtModel = "md" + txtStatusFlags = "sf" + + statusPaired = "0" + categoryCamera = "17" + categoryDoorbell = "18" +) + +// QueryHAP sends unicast mDNS query to ip:5353 for HomeKit service. +// Returns nil if device is not a HomeKit camera/doorbell. +func QueryHAP(ctx context.Context, ip string) (*MDNSResult, error) { + msg := &dns.Msg{ + Question: []dns.Question{ + {Name: hapService, Qtype: dns.TypePTR, Qclass: dns.ClassINET}, + }, + } + + query, err := msg.Pack() + if err != nil { + return nil, err + } + + conn, err := net.ListenPacket("udp4", ":0") + if err != nil { + return nil, err + } + defer conn.Close() + + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(100 * time.Millisecond) + } + _ = conn.SetDeadline(deadline) + + addr := &net.UDPAddr{IP: net.ParseIP(ip), Port: 5353} + if _, err = conn.WriteTo(query, addr); err != nil { + return nil, err + } + + buf := make([]byte, 1500) + n, _, err := conn.ReadFrom(buf) + if err != nil { + return nil, nil // timeout = not a HomeKit device + } + + var resp dns.Msg + if err = resp.Unpack(buf[:n]); err != nil { + return nil, nil + } + + return parseHAPResponse(&resp) +} + +// internals + +func parseHAPResponse(msg *dns.Msg) (*MDNSResult, error) { + records := make([]dns.RR, 0, len(msg.Answer)+len(msg.Extra)) + records = append(records, msg.Answer...) + records = append(records, msg.Extra...) + + var ptrName string + for _, rr := range records { + if ptr, ok := rr.(*dns.PTR); ok && ptr.Hdr.Name == hapService { + ptrName = ptr.Ptr + break + } + } + if ptrName == "" { + return nil, nil + } + + // ex. "My Camera._hap._tcp.local." -> "My Camera" + var name string + if i := strings.Index(ptrName, "."+hapService); i > 0 { + name = strings.ReplaceAll(ptrName[:i], `\ `, " ") + } + + info := map[string]string{} + for _, rr := range records { + txt, ok := rr.(*dns.TXT) + if !ok || txt.Hdr.Name != ptrName { + continue + } + for _, s := range txt.Txt { + k, v, _ := strings.Cut(s, "=") + info[k] = v + } + break + } + + category := info[txtCategory] + if category != categoryCamera && category != categoryDoorbell { + return nil, nil + } + + categoryName := "camera" + if category == categoryDoorbell { + categoryName = "doorbell" + } + + var port int + for _, rr := range records { + if srv, ok := rr.(*dns.SRV); ok && srv.Hdr.Name == ptrName { + port = int(srv.Port) + break + } + } + + return &MDNSResult{ + Name: name, + DeviceID: info[txtDeviceID], + Model: info[txtModel], + Category: categoryName, + Paired: info[txtStatusFlags] == statusPaired, + Port: port, + }, nil +} + +func init() { + dns.Id = func() uint16 { return 0 } +} diff --git a/pkg/probe/models.go b/pkg/probe/models.go new file mode 100644 index 0000000..04abfa7 --- /dev/null +++ b/pkg/probe/models.go @@ -0,0 +1,51 @@ +package probe + +type Response struct { + IP string `json:"ip"` + Reachable bool `json:"reachable"` + LatencyMs float64 `json:"latency_ms,omitempty"` + Type string `json:"type"` // "unreachable", "standard", "homekit" + Error string `json:"error,omitempty"` + Probes Probes `json:"probes"` +} + +type Probes struct { + Ping *PingResult `json:"ping"` + Ports *PortsResult `json:"ports"` + DNS *DNSResult `json:"dns"` + ARP *ARPResult `json:"arp"` + MDNS *MDNSResult `json:"mdns"` + HTTP *HTTPResult `json:"http"` +} + +type PingResult struct { + LatencyMs float64 `json:"latency_ms"` +} + +type PortsResult struct { + Open []int `json:"open"` +} + +type DNSResult struct { + Hostname string `json:"hostname"` +} + +type ARPResult struct { + MAC string `json:"mac"` + Vendor string `json:"vendor"` +} + +type MDNSResult struct { + Name string `json:"name"` + DeviceID string `json:"device_id"` + Model string `json:"model"` + Category string `json:"category"` // "camera", "doorbell" + Paired bool `json:"paired"` + Port int `json:"port"` +} + +type HTTPResult struct { + Port int `json:"port"` + StatusCode int `json:"status_code"` + Server string `json:"server"` +} diff --git a/pkg/probe/oui.go b/pkg/probe/oui.go new file mode 100644 index 0000000..8d0a426 --- /dev/null +++ b/pkg/probe/oui.go @@ -0,0 +1,21 @@ +package probe + +import ( + "database/sql" + "strings" +) + +// LookupOUI returns vendor name for MAC address from SQLite oui table. +// MAC format: "C0:56:E3:AA:BB:CC" -> prefix "C0:56:E3" +func LookupOUI(db *sql.DB, mac string) string { + if len(mac) < 8 { + return "" + } + + prefix := strings.ToUpper(mac[:8]) + prefix = strings.ReplaceAll(prefix, "-", ":") + + var brand string + _ = db.QueryRow("SELECT brand FROM oui WHERE prefix = ?", prefix).Scan(&brand) + return brand +} diff --git a/pkg/probe/ping.go b/pkg/probe/ping.go new file mode 100644 index 0000000..459067b --- /dev/null +++ b/pkg/probe/ping.go @@ -0,0 +1,39 @@ +package probe + +import ( + "context" + "net" + "time" +) + +func CanICMP() bool { + conn, err := net.DialTimeout("ip4:icmp", "127.0.0.1", 100*time.Millisecond) + if err != nil { + return false + } + conn.Close() + return true +} + +func Ping(ctx context.Context, ip string) (*PingResult, error) { + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(100 * time.Millisecond) + } + + timeout := time.Until(deadline) + if timeout <= 0 { + return nil, context.DeadlineExceeded + } + + start := time.Now() + conn, err := net.DialTimeout("ip4:icmp", ip, timeout) + if err != nil { + return nil, err + } + conn.Close() + + return &PingResult{ + LatencyMs: float64(time.Since(start).Microseconds()) / 1000.0, + }, nil +} diff --git a/pkg/probe/ports.go b/pkg/probe/ports.go new file mode 100644 index 0000000..f10fd27 --- /dev/null +++ b/pkg/probe/ports.go @@ -0,0 +1,64 @@ +package probe + +import ( + "context" + "fmt" + "net" + "sync" + "time" +) + +func ScanPorts(ctx context.Context, ip string, ports []int) (*PortsResult, error) { + if len(ports) == 0 { + return nil, nil + } + + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(100 * time.Millisecond) + } + timeout := time.Until(deadline) + if timeout <= 0 { + return nil, context.DeadlineExceeded + } + + type hit struct { + port int + latency time.Duration + } + + var mu sync.Mutex + var hits []hit + var wg sync.WaitGroup + + for _, port := range ports { + wg.Add(1) + go func(port int) { + defer wg.Done() + + start := time.Now() + conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", ip, port), timeout) + if err != nil { + return + } + conn.Close() + + mu.Lock() + hits = append(hits, hit{port: port, latency: time.Since(start)}) + mu.Unlock() + }(port) + } + + wg.Wait() + + if len(hits) == 0 { + return nil, nil + } + + open := make([]int, len(hits)) + for i, h := range hits { + open[i] = h.port + } + + return &PortsResult{Open: open}, nil +} diff --git a/pkg/sse/sse.go b/pkg/sse/sse.go deleted file mode 100644 index de9985a..0000000 --- a/pkg/sse/sse.go +++ /dev/null @@ -1,405 +0,0 @@ -package sse - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "strings" - "time" -) - -const ( - // IngressPaddingSize is the padding size for Home Assistant Ingress mode. - // HA Supervisor uses aiohttp with 64KB buffer for StreamResponse. - // We need to fill this buffer to force immediate delivery of SSE events. - IngressPaddingSize = 64 * 1024 // 64KB - - // IngressHeader is the header that Home Assistant Ingress adds to requests - IngressHeader = "X-Ingress-Path" -) - -// Event represents a Server-Sent Event -type Event struct { - ID string - Type string - Data interface{} - Retry int - Comment string -} - -// Client represents an SSE client connection -type Client struct { - ID string - Channel chan Event - Response http.ResponseWriter - Request *http.Request - Context context.Context - Cancel context.CancelFunc -} - -// Server manages SSE connections -type Server struct { - clients map[string]*Client - register chan *Client - unregister chan *Client - broadcast chan Event - logger interface{ Debug(string, ...any); Error(string, error, ...any) } -} - -// NewServer creates a new SSE server -func NewServer(logger interface{ Debug(string, ...any); Error(string, error, ...any) }) *Server { - return &Server{ - clients: make(map[string]*Client), - register: make(chan *Client), - unregister: make(chan *Client), - broadcast: make(chan Event), - logger: logger, - } -} - -// Start starts the SSE server -func (s *Server) Start(ctx context.Context) { - go func() { - for { - select { - case <-ctx.Done(): - // Close all client connections - for _, client := range s.clients { - client.Cancel() - close(client.Channel) - } - return - - case client := <-s.register: - s.clients[client.ID] = client - s.logger.Debug("SSE client registered", "id", client.ID) - - case client := <-s.unregister: - if _, ok := s.clients[client.ID]; ok { - delete(s.clients, client.ID) - close(client.Channel) - s.logger.Debug("SSE client unregistered", "id", client.ID) - } - - case event := <-s.broadcast: - for _, client := range s.clients { - select { - case client.Channel <- event: - default: - // Client's channel is full, close it - s.unregister <- client - } - } - } - } - }() -} - -// ServeHTTP handles SSE connections -func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // Check if SSE is supported - flusher, ok := w.(http.Flusher) - if !ok { - http.Error(w, "SSE not supported", http.StatusInternalServerError) - return - } - - // Set headers for SSE - w.Header().Set("Content-Type", "text/event-stream") - w.Header().Set("Cache-Control", "no-cache") - w.Header().Set("Connection", "keep-alive") - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("X-Accel-Buffering", "no") // Disable Nginx buffering - - // Create client - ctx, cancel := context.WithCancel(r.Context()) - client := &Client{ - ID: generateClientID(), - Channel: make(chan Event, 100), - Response: w, - Request: r, - Context: ctx, - Cancel: cancel, - } - - // Register client - s.register <- client - - // Remove client on disconnect - defer func() { - s.unregister <- client - cancel() - }() - - // Send initial connection event - s.SendToClient(client, Event{ - Type: "connected", - Data: map[string]string{"id": client.ID}, - }) - - // Listen for events - for { - select { - case <-ctx.Done(): - return - - case <-r.Context().Done(): - return - - case event := <-client.Channel: - if err := s.writeEvent(w, flusher, event); err != nil { - s.logger.Error("failed to write SSE event", err, "client", client.ID) - return - } - } - } -} - -// SendToClient sends an event to a specific client -func (s *Server) SendToClient(client *Client, event Event) { - select { - case client.Channel <- event: - default: - // Channel is full, log warning - s.logger.Debug("client channel full, dropping event", "client", client.ID) - } -} - -// Broadcast sends an event to all clients -func (s *Server) Broadcast(event Event) { - s.broadcast <- event -} - -// writeEvent writes an event to the response writer -func (s *Server) writeEvent(w http.ResponseWriter, flusher http.Flusher, event Event) error { - // Write event ID if present - if event.ID != "" { - if _, err := fmt.Fprintf(w, "id: %s\n", event.ID); err != nil { - return err - } - } - - // Write event type if present - if event.Type != "" { - if _, err := fmt.Fprintf(w, "event: %s\n", event.Type); err != nil { - return err - } - } - - // Write retry if present - if event.Retry > 0 { - if _, err := fmt.Fprintf(w, "retry: %d\n", event.Retry); err != nil { - return err - } - } - - // Write comment if present - if event.Comment != "" { - if _, err := fmt.Fprintf(w, ": %s\n", event.Comment); err != nil { - return err - } - } - - // Write data - if event.Data != nil { - var dataStr string - switch v := event.Data.(type) { - case string: - dataStr = v - case []byte: - dataStr = string(v) - default: - data, err := json.Marshal(v) - if err != nil { - return err - } - dataStr = string(data) - } - - // Split data by newlines for proper SSE format - for _, line := range splitLines(dataStr) { - if _, err := fmt.Fprintf(w, "data: %s\n", line); err != nil { - return err - } - } - } - - // End event with double newline - if _, err := fmt.Fprintf(w, "\n"); err != nil { - return err - } - - // Flush the data - flusher.Flush() - - return nil -} - -// splitLines splits a string into lines -func splitLines(s string) []string { - var lines []string - var current string - - for _, ch := range s { - if ch == '\n' { - lines = append(lines, current) - current = "" - } else { - current += string(ch) - } - } - - if current != "" { - lines = append(lines, current) - } - - return lines -} - -// generateClientID generates a unique client ID -func generateClientID() string { - return fmt.Sprintf("client-%d-%d", time.Now().Unix(), time.Now().Nanosecond()) -} - -// StreamWriter provides a simple interface for writing SSE events -type StreamWriter struct { - client *Client - server *Server - isIngress bool // True when running through Home Assistant Ingress proxy -} - -// NewStreamWriter creates a new stream writer for a client -func (s *Server) NewStreamWriter(w http.ResponseWriter, r *http.Request) (*StreamWriter, error) { - // Check if SSE is supported - flusher, ok := w.(http.Flusher) - if !ok { - return nil, fmt.Errorf("SSE not supported") - } - - // Set headers for SSE - w.Header().Set("Content-Type", "text/event-stream") - w.Header().Set("Cache-Control", "no-cache") - w.Header().Set("Connection", "keep-alive") - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("X-Accel-Buffering", "no") - - // Send initial flush to establish connection - flusher.Flush() - - // Detect Home Assistant Ingress mode by checking for X-Ingress-Path header - isIngress := r.Header.Get(IngressHeader) != "" - - // Create client - ctx, cancel := context.WithCancel(r.Context()) - client := &Client{ - ID: generateClientID(), - Channel: make(chan Event, 100), - Response: w, - Request: r, - Context: ctx, - Cancel: cancel, - } - - return &StreamWriter{ - client: client, - server: s, - isIngress: isIngress, - }, nil -} - -// SendEvent sends an event through the stream writer -func (sw *StreamWriter) SendEvent(eventType string, data interface{}) error { - event := Event{ - Type: eventType, - Data: data, - } - - flusher, ok := sw.client.Response.(http.Flusher) - if !ok { - return fmt.Errorf("response does not support flushing") - } - - // Use Ingress-aware write method - return sw.writeEventWithIngress(sw.client.Response, flusher, event) -} - -// writeEventWithIngress writes an event and adds padding for Ingress mode -func (sw *StreamWriter) writeEventWithIngress(w http.ResponseWriter, flusher http.Flusher, event Event) error { - // Write the event using standard method - if err := sw.server.writeEvent(w, flusher, event); err != nil { - return err - } - - // In Ingress mode, add padding to fill the 64KB buffer and force immediate delivery - if sw.isIngress { - if err := sw.writePadding(w, flusher); err != nil { - return err - } - } - - return nil -} - -// writePadding writes SSE comment padding to fill proxy buffers. -// SSE comments (lines starting with ':') are ignored by clients. -func (sw *StreamWriter) writePadding(w http.ResponseWriter, flusher http.Flusher) error { - // Create padding using SSE comments which are ignored by clients - // Each line is ": " + padding content + "\n" - // We need ~64KB to fill the aiohttp StreamResponse buffer - const lineSize = 1024 // 1KB per line - const numLines = 64 // 64 lines = 64KB - - paddingLine := ": " + strings.Repeat(".", lineSize-4) + "\n" // -4 for ": " and "\n" - - for i := 0; i < numLines; i++ { - if _, err := fmt.Fprint(w, paddingLine); err != nil { - return err - } - } - - // Flush the padding - flusher.Flush() - - return nil -} - -// SendJSON sends JSON data as an event -func (sw *StreamWriter) SendJSON(eventType string, v interface{}) error { - return sw.SendEvent(eventType, v) -} - -// IsIngress returns true if running through Home Assistant Ingress proxy -func (sw *StreamWriter) IsIngress() bool { - return sw.isIngress -} - -// SendMessage sends a simple message -func (sw *StreamWriter) SendMessage(message string) error { - return sw.SendEvent("message", map[string]string{"message": message}) -} - -// SendError sends an error message -func (sw *StreamWriter) SendError(err error) error { - return sw.SendEvent("error", map[string]string{"error": err.Error()}) -} - -// SendProgress sends a progress update -func (sw *StreamWriter) SendProgress(current, total int, message string) error { - return sw.SendEvent("progress", map[string]interface{}{ - "current": current, - "total": total, - "message": message, - "percent": float64(current) / float64(total) * 100, - }) -} - -// Close closes the stream writer -func (sw *StreamWriter) Close() { - // Perform final flush if possible - if flusher, ok := sw.client.Response.(http.Flusher); ok { - flusher.Flush() - } - - sw.client.Cancel() -} \ No newline at end of file diff --git a/pkg/tester/session.go b/pkg/tester/session.go new file mode 100644 index 0000000..1359ce6 --- /dev/null +++ b/pkg/tester/session.go @@ -0,0 +1,97 @@ +package tester + +import ( + "sync" + "time" +) + +const SessionTTL = 30 * time.Minute + +type Session struct { + ID string `json:"session_id"` + Status string `json:"status"` + CreatedAt time.Time `json:"created_at"` + ExpiresAt time.Time `json:"expires_at,omitempty"` + Total int `json:"total"` + Tested int `json:"tested"` + Alive int `json:"alive"` + WithScreen int `json:"with_screenshot"` + Results []*Result `json:"results"` + Screenshots [][]byte `json:"-"` + + cancel chan struct{} + mu sync.Mutex +} + +type Result struct { + Source string `json:"source"` + Screenshot string `json:"screenshot,omitempty"` + Codecs []string `json:"codecs,omitempty"` + LatencyMs int64 `json:"latency_ms,omitempty"` + Skipped bool `json:"skipped,omitempty"` +} + +func NewSession(id string, total int) *Session { + return &Session{ + ID: id, + Status: "running", + CreatedAt: time.Now(), + Total: total, + cancel: make(chan struct{}), + } +} + +func (s *Session) AddResult(r *Result) { + s.mu.Lock() + s.Results = append(s.Results, r) + s.Alive++ + if r.Screenshot != "" { + s.WithScreen++ + } + s.mu.Unlock() +} + +func (s *Session) AddTested() { + s.mu.Lock() + s.Tested++ + s.mu.Unlock() +} + +func (s *Session) AddScreenshot(data []byte) int { + s.mu.Lock() + idx := len(s.Screenshots) + s.Screenshots = append(s.Screenshots, data) + s.mu.Unlock() + return idx +} + +func (s *Session) GetScreenshot(idx int) []byte { + s.mu.Lock() + defer s.mu.Unlock() + if idx < 0 || idx >= len(s.Screenshots) { + return nil + } + return s.Screenshots[idx] +} + +func (s *Session) Done() { + s.mu.Lock() + s.Status = "done" + s.ExpiresAt = time.Now().Add(SessionTTL) + s.mu.Unlock() +} + +func (s *Session) Cancel() { + select { + case <-s.cancel: + default: + close(s.cancel) + } +} + +func (s *Session) Cancelled() <-chan struct{} { + return s.cancel +} + +func (s *Session) Lock() { s.mu.Lock() } +func (s *Session) Unlock() { s.mu.Unlock() } diff --git a/pkg/tester/source.go b/pkg/tester/source.go new file mode 100644 index 0000000..e8410f0 --- /dev/null +++ b/pkg/tester/source.go @@ -0,0 +1,50 @@ +package tester + +import ( + "fmt" + "strings" + + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/rtsp" +) + +// SourceHandler tests stream URL, returns Producer or error +type SourceHandler func(rawURL string) (core.Producer, error) + +var handlers = map[string]SourceHandler{} + +func RegisterSource(scheme string, handler SourceHandler) { + handlers[scheme] = handler +} + +func GetHandler(rawURL string) SourceHandler { + if i := strings.IndexByte(rawURL, ':'); i > 0 { + return handlers[rawURL[:i]] + } + return nil +} + +func init() { + RegisterSource("rtsp", rtspHandler) + RegisterSource("rtsps", rtspHandler) + RegisterSource("rtspx", rtspHandler) +} + +// rtspHandler -- Dial + Describe. Proves: port open, RTSP responds, auth OK, SDP received. +func rtspHandler(rawURL string) (core.Producer, error) { + rawURL, _, _ = strings.Cut(rawURL, "#") + + conn := rtsp.NewClient(rawURL) + conn.Backchannel = false + + if err := conn.Dial(); err != nil { + return nil, fmt.Errorf("rtsp: dial: %w", err) + } + + if err := conn.Describe(); err != nil { + _ = conn.Stop() + return nil, fmt.Errorf("rtsp: describe: %w", err) + } + + return conn, nil +} diff --git a/pkg/tester/worker.go b/pkg/tester/worker.go new file mode 100644 index 0000000..f64a214 --- /dev/null +++ b/pkg/tester/worker.go @@ -0,0 +1,171 @@ +package tester + +import ( + "bytes" + "fmt" + "os/exec" + "time" + + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/magic" +) + +const workers = 20 + +func RunWorkers(s *Session, urls []string) { + ch := make(chan string, len(urls)) + for _, u := range urls { + ch <- u + } + close(ch) + + done := make(chan struct{}) + + n := workers + if len(urls) < n { + n = len(urls) + } + + for i := 0; i < n; i++ { + go func() { + for rawURL := range ch { + select { + case <-s.Cancelled(): + return + default: + } + testURL(s, rawURL) + } + done <- struct{}{} + }() + } + + for i := 0; i < n; i++ { + <-done + } + + s.Done() +} + +func testURL(s *Session, rawURL string) { + defer s.AddTested() + + handler := GetHandler(rawURL) + if handler == nil { + return + } + + start := time.Now() + + prod, err := handler(rawURL) + if err != nil { + return + } + defer func() { _ = prod.Stop() }() + + latency := time.Since(start).Milliseconds() + + var codecs []string + for _, media := range prod.GetMedias() { + if media.Direction != core.DirectionRecvonly { + continue + } + for _, codec := range media.Codecs { + codecs = append(codecs, codec.Name) + } + } + + r := &Result{ + Source: rawURL, + Codecs: codecs, + LatencyMs: latency, + } + + if raw, codecName := getScreenshot(prod); raw != nil { + var jpeg []byte + + switch codecName { + case core.CodecH264, core.CodecH265: + jpeg = toJPEG(raw) + case core.CodecJPEG: + jpeg = raw + default: + jpeg = raw + } + + if jpeg != nil { + idx := s.AddScreenshot(jpeg) + r.Screenshot = fmt.Sprintf("/api/test/screenshot?id=%s&i=%d", s.ID, idx) + } + } + + s.AddResult(r) +} + +// getScreenshot connects Keyframe consumer to producer, waits for first keyframe with 10s timeout +func getScreenshot(prod core.Producer) ([]byte, string) { + cons := magic.NewKeyframe() + + for _, prodMedia := range prod.GetMedias() { + if prodMedia.Kind != core.KindVideo || prodMedia.Direction != core.DirectionRecvonly { + continue + } + for _, consMedia := range cons.GetMedias() { + prodCodec, consCodec := prodMedia.MatchMedia(consMedia) + if prodCodec == nil { + continue + } + + track, err := prod.GetTrack(prodMedia, prodCodec) + if err != nil { + continue + } + + if err = cons.AddTrack(consMedia, consCodec, track); err != nil { + continue + } + + goto matched + } + } + + return nil, "" + +matched: + go func() { + _ = prod.Start() + }() + + once := &core.OnceBuffer{} + done := make(chan struct{}) + go func() { + _, _ = cons.WriteTo(once) + close(done) + }() + + select { + case <-done: + case <-time.After(10 * time.Second): + _ = prod.Stop() + return nil, "" + } + + return once.Buffer(), cons.CodecName() +} + +func toJPEG(raw []byte) []byte { + cmd := exec.Command("ffmpeg", + "-hide_banner", "-loglevel", "error", + "-i", "-", + "-frames:v", "1", + "-f", "image2", "-c:v", "mjpeg", + "-", + ) + cmd.Stdin = bytes.NewReader(raw) + + out, err := cmd.Output() + if err != nil { + return nil + } + return out +} diff --git a/strix.yaml.example b/strix.yaml.example deleted file mode 100644 index 8d90a95..0000000 --- a/strix.yaml.example +++ /dev/null @@ -1,25 +0,0 @@ -# Strix Configuration Example -# Copy this file to strix.yaml and modify as needed - -# API Server Configuration -api: - # Listen address in format ":port" or "host:port" - # Default: ":4567" - listen: ":4567" - - # Examples: - # listen: ":4567" # Listen on all interfaces, port 4567 (default) - # listen: "0.0.0.0:4567" # Explicitly listen on all interfaces - # listen: "127.0.0.1:4567" # Listen only on localhost (secure local-only access) - # listen: ":8080" # Custom port on all interfaces - -# Configuration Priority (highest to lowest): -# 1. Environment variable: STRIX_API_LISTEN -# 2. This file: strix.yaml -# 3. Default value: :4567 - -# Quick Start: -# 1. Copy this file: cp strix.yaml.example strix.yaml -# 2. Edit the listen address if needed -# 3. Run strix: ./strix -# 4. Or set via environment: STRIX_API_LISTEN=":8080" ./strix diff --git a/webui/.eslintrc.cjs b/webui/.eslintrc.cjs deleted file mode 100644 index 8cd5221..0000000 --- a/webui/.eslintrc.cjs +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - env: { - browser: true, - es2021: true, - }, - extends: 'eslint:recommended', - parserOptions: { - ecmaVersion: 2022, - sourceType: 'module', - }, - globals: { - EventSource: 'readonly', - }, - rules: { - 'no-unused-vars': 'warn', - 'no-undef': 'error', - 'no-console': 'off', // Allow console for debugging - 'semi': ['error', 'always'], - 'quotes': ['warn', 'single', { avoidEscape: true }], - 'no-var': 'error', - 'prefer-const': 'warn', - 'eqeqeq': ['error', 'always'], - 'no-unreachable': 'error', - }, -}; diff --git a/webui/CONFIG_GENERATORS.md b/webui/CONFIG_GENERATORS.md deleted file mode 100644 index b0350cb..0000000 --- a/webui/CONFIG_GENERATORS.md +++ /dev/null @@ -1,279 +0,0 @@ -# Configuration Generators Documentation - -This document describes how Strix generates configurations for go2rtc and Frigate with support for main and sub streams. - -## Go2RTC Generator (`webui/web/js/config-generators/go2rtc/index.js`) - -### Purpose -Generates YAML configurations for go2rtc based on discovered camera streams. Supports both single stream and dual-stream (main + sub) configurations. - -### Stream Naming Convention - -**Format:** `_` - -**Examples:** -- Main: `192.168.1.100` → `192_168_1_100_main` -- Sub: `192.168.1.100` → `192_168_1_100_sub` -- Main: `10.0.20.112` → `10_0_20_112_main` -- Sub: `10.0.20.112` → `10_0_20_112_sub` - -### Single Stream Configuration - -When only a main stream is selected: - -```yaml -streams: - '192_168_1_100_main': - - rtsp://admin:password@192.168.1.100/stream1 -``` - -### Dual Stream Configuration (Main + Sub) - -When both main and sub streams are selected: - -```yaml -streams: - '192_168_1_100_main': - - rtsp://admin:password@192.168.1.100/live/main - - '192_168_1_100_sub': - - rtsp://admin:password@192.168.1.100/live/sub -``` - -### Logic by Stream Type - -#### 1. **JPEG Snapshots** (Special Case) -Static JPEG images require conversion to video stream using FFmpeg. - -**Generated Config:** -```yaml -streams: - '10_0_20_112_main': - - exec:ffmpeg -loglevel quiet -f image2 -loop 1 -framerate 10 -i http://admin:pass@10.0.20.112/snapshot.jpg -c:v libx264 -preset ultrafast -tune zerolatency -g 20 -f rtsp {output} -``` - -**Parameters:** -- `-f image2 -loop 1`: Loop single image -- `-framerate 10`: 10 fps output -- `-c:v libx264`: H264 encoding -- `-preset ultrafast -tune zerolatency`: Low latency -- `-g 20`: GOP size for keyframes -- `-f rtsp {output}`: Output to RTSP (go2rtc internal) - -#### 2. **All Other Formats** (Direct Pass-through) -For RTSP, MJPEG, HLS, HTTP-FLV, HTTP-TS, RTMP - use direct URL. -go2rtc has native support for these formats. - -**Supported Formats:** -- **RTSP** (`rtsp://`) - Direct support -- **RTMP** (`rtmp://`) - Direct support -- **MJPEG** (`http://...mjpeg`) - Direct support -- **HLS** (`http://...m3u8`) - Direct support -- **HTTP-FLV** (`http://...flv`) - Direct support -- **HTTP-TS** (`http://...ts`) - Direct support - -#### 3. **ONVIF Device Endpoints** -ONVIF URLs are converted to `onvif://` format: - -```yaml -streams: - '192_168_1_100_main': - - onvif://admin:password@192.168.1.100:80 -``` - -## Frigate Generator (`webui/web/js/config-generators/frigate/index.js`) - -### Purpose -Generates unified Frigate + Go2RTC YAML configurations with intelligent stream routing for optimal performance. - -### Key Features - -- **Motion-based recording**: Records only when motion is detected -- **Object detection**: Tracks person, car, cat, dog -- **Smart stream routing**: - - If sub stream exists → detect on sub (low CPU), record on main (quality) - - If no sub stream → detect and record on main - -### Benefits of Dual-Stream Setup - -✅ **Lower CPU usage**: Detection runs on lower resolution sub stream -✅ **Better quality**: Recording uses high resolution main stream -✅ **Single connection per camera**: Go2RTC multiplexes streams -✅ **Optimal performance**: Each task uses appropriate stream quality - -### Single Stream Configuration (Main Only) - -When only main stream is selected, it handles both detection and recording: - -```yaml -mqtt: - enabled: false - -# Global Recording Settings -record: - enabled: true - retain: - days: 7 - mode: motion # Record only on motion detection - -# Go2RTC Configuration (Frigate built-in) -go2rtc: - streams: - '192_168_1_100_main': - - rtsp://admin:password@192.168.1.100/stream1 - -# Frigate Camera Configuration -cameras: - camera_192_168_1_100: - ffmpeg: - inputs: - - path: rtsp://127.0.0.1:8554/192_168_1_100_main - input_args: preset-rtsp-restream - roles: - - detect - - record - objects: - track: - - person - - car - - cat - - dog - record: - enabled: true - -version: 0.16-0 -``` - -### Dual Stream Configuration (Main + Sub) - -When both streams are selected, detection uses sub stream and recording uses main stream: - -```yaml -mqtt: - enabled: false - -# Global Recording Settings -record: - enabled: true - retain: - days: 7 - mode: motion # Record only on motion detection - -# Go2RTC Configuration (Frigate built-in) -go2rtc: - streams: - '192_168_1_100_main': - - rtsp://admin:password@192.168.1.100/live/main - - '192_168_1_100_sub': - - rtsp://admin:password@192.168.1.100/live/sub - -# Frigate Camera Configuration -cameras: - camera_192_168_1_100: - ffmpeg: - inputs: - - path: rtsp://127.0.0.1:8554/192_168_1_100_sub - input_args: preset-rtsp-restream - roles: - - detect - - path: rtsp://127.0.0.1:8554/192_168_1_100_main - input_args: preset-rtsp-restream - roles: - - record - live: - streams: - Main Stream: 192_168_1_100_main # HD для просмотра - Sub Stream: 192_168_1_100_sub # Низкое разрешение (опционально) - objects: - track: - - person - - car - - cat - - dog - record: - enabled: true - -version: 0.16-0 -``` - -### Why Sub Stream for Detection? - -✅ **CPU Efficiency**: Processing lower resolution (typically 352x288 or 640x480) instead of HD/4K -✅ **Faster Inference**: ML model runs faster on smaller resolution -✅ **Sufficient Accuracy**: Object detection doesn't need Full HD or 4K -✅ **Quality Recording**: Main stream at full resolution (HD/4K) saved to disk -✅ **Auto-detection**: Frigate automatically detects stream resolution - -### Camera Naming Convention - -**Format:** `camera_` - -**Examples:** -- `192.168.1.100` → `camera_192_168_1_100` -- `10.0.20.112` → `camera_10_0_20_112` -- `camera.local` → `camera_camera_local` - -### Object Detection - -The generator includes basic object detection for common use cases: - -- **person** - Human detection -- **car** - Vehicle detection -- **cat** - Cat detection -- **dog** - Dog detection - -To add more objects, edit the generated config and add items from [Frigate's object list](https://docs.frigate.video/configuration/objects/). - -### Recording Mode - -**Mode: `motion`** (Default) -- Records only when motion is detected -- Saves disk space -- May miss the start of an event - -**To enable 24/7 recording**, change to: -```yaml -record: - enabled: true - retain: - days: 7 - mode: all # Continuous recording -``` - -## Workflow - -``` -Stream Discovery - ↓ -User selects Main Stream - ↓ -Config generated (main only) - ↓ -┌─────────────────────┐ -│ User clicks │ -│ "Add Sub Stream" │ -└──────────┬──────────┘ - ↓ -User selects Sub Stream from existing results - ↓ -Config regenerated (main + sub with optimized routing) -``` - -## Key Principles - -1. **No additional scanning**: Sub stream is selected from already discovered streams -2. **Intelligent routing**: Sub for detect, main for record (when both available) -3. **Simplicity first**: Use direct URLs whenever possible -4. **Native support**: Leverage go2rtc's built-in format support -5. **Special cases only**: Only use exec:ffmpeg for JPEG snapshots -6. **Motion-based recording**: Save disk space by default - -## Benefits of This Approach - -✅ **Better performance**: Optimal stream selection for each task -✅ **Lower CPU usage**: Detection on lower resolution when sub stream available -✅ **Quality recordings**: Full resolution saved to disk -✅ **User flexibility**: Optional sub stream - not required -✅ **No re-scanning**: Reuses already discovered streams -✅ **Disk space efficiency**: Motion-based recording by default diff --git a/webui/package.json b/webui/package.json deleted file mode 100644 index 2caef8f..0000000 --- a/webui/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "webui", - "version": "0.0.0", - "type": "module", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "lint": "eslint web/js/**/*.js", - "lint:fix": "eslint web/js/**/*.js --fix" - }, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "eslint": "^8.57.1" - } -} diff --git a/webui/server.go b/webui/server.go deleted file mode 100644 index 851317d..0000000 --- a/webui/server.go +++ /dev/null @@ -1,76 +0,0 @@ -package webui - -import ( - "embed" - "io/fs" - "net/http" - - "github.com/go-chi/chi/v5" - "github.com/go-chi/chi/v5/middleware" -) - -//go:embed web -var webFiles embed.FS - -// Server represents the Web UI server -type Server struct { - router chi.Router - logger interface{ Info(string, ...any); Error(string, error, ...any) } -} - -// NewServer creates a new Web UI server -func NewServer(logger interface{ Info(string, ...any); Error(string, error, ...any) }) *Server { - server := &Server{ - router: chi.NewRouter(), - logger: logger, - } - - server.setupRoutes() - return server -} - -// setupRoutes configures all routes for the web UI -func (s *Server) setupRoutes() { - // Middleware - s.router.Use(middleware.RequestID) - s.router.Use(middleware.RealIP) - s.router.Use(middleware.Logger) - s.router.Use(middleware.Recoverer) - - // CORS middleware - s.router.Use(func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") - w.Header().Set("Access-Control-Allow-Headers", "Accept, Authorization, Content-Type, X-Request-ID") - - if r.Method == "OPTIONS" { - w.WriteHeader(http.StatusNoContent) - return - } - - next.ServeHTTP(w, r) - }) - }) - - // Get the embedded filesystem - webFS, err := fs.Sub(webFiles, "web") - if err != nil { - s.logger.Error("failed to get web filesystem", err) - return - } - - // Serve static files - fileServer := http.FileServer(http.FS(webFS)) - s.router.Handle("/*", fileServer) -} - -// ServeHTTP implements http.Handler -func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - s.router.ServeHTTP(w, r) -} - -// GetRouter returns the chi router -func (s *Server) GetRouter() chi.Router { - return s.router -} diff --git a/webui/web/css/main.css b/webui/web/css/main.css deleted file mode 100644 index 1e2627c..0000000 --- a/webui/web/css/main.css +++ /dev/null @@ -1,1481 +0,0 @@ -/* ===== CSS RESET ===== */ -*, *::before, *::after { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -/* ===== CSS VARIABLES ===== */ -:root { - /* Colors */ - --bg-primary: #0a0a0f; - --bg-secondary: #1a1a24; - --bg-tertiary: #24242f; - --bg-elevated: #2a2a38; - - --purple-primary: #8b5cf6; - --purple-light: #a78bfa; - --purple-dark: #7c3aed; - --purple-glow: rgba(139, 92, 246, 0.3); - --purple-glow-strong: rgba(139, 92, 246, 0.5); - - --text-primary: #e0e0e8; - --text-secondary: #a0a0b0; - --text-tertiary: #606070; - --text-disabled: #404050; - - --success: #10b981; - --warning: #f59e0b; - --error: #ef4444; - - --border-color: rgba(139, 92, 246, 0.15); - --border-focus: rgba(139, 92, 246, 0.5); - - /* Typography */ - --font-primary: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', 'Roboto', sans-serif; - --font-mono: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; - - --text-xs: 0.75rem; - --text-sm: 0.875rem; - --text-base: 1rem; - --text-lg: 1.125rem; - --text-xl: 1.5rem; - --text-2xl: 2rem; - - /* Spacing */ - --space-1: 0.25rem; - --space-2: 0.5rem; - --space-3: 0.75rem; - --space-4: 1rem; - --space-6: 1.5rem; - --space-8: 2rem; - --space-12: 3rem; - - /* Transitions */ - --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); - --transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1); - --transition-slow: 400ms cubic-bezier(0.4, 0, 0.2, 1); - - /* Shadows */ - --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.3); - --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4); - --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5); - --shadow-purple: 0 8px 24px var(--purple-glow); -} - -/* ===== GLOBAL STYLES ===== */ -html { - font-size: 16px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -body { - font-family: var(--font-primary); - background: var(--bg-primary); - color: var(--text-primary); - line-height: 1.5; - min-height: 100vh; - overflow-x: hidden; -} - -/* ===== MOCK MODE BADGE ===== */ -.mock-badge { - position: fixed; - top: 1rem; - right: 1rem; - z-index: 9999; - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 1rem; - background: rgba(245, 158, 11, 0.15); - border: 1px solid var(--warning); - border-radius: 6px; - color: var(--warning); - font-size: var(--text-xs); - font-weight: 600; - letter-spacing: 0.05em; - box-shadow: 0 4px 12px rgba(245, 158, 11, 0.2); - backdrop-filter: blur(10px); - animation: fadeIn var(--transition-base); -} - -.mock-badge svg { - animation: pulse 2s ease-in-out infinite; -} - -@keyframes pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.5; } -} - -/* ===== LAYOUT ===== */ -#app { - min-height: 100vh; - position: relative; -} - -.screen { - display: none; - min-height: 100vh; - padding: var(--space-6); - animation: fadeIn var(--transition-base); -} - -.screen.active { - display: block; -} - -.container { - max-width: 480px; - margin: 0 auto; - width: 100%; -} - -@media (min-width: 768px) { - .screen { - padding: var(--space-12) var(--space-6); - } - - .container { - max-width: 540px; - } -} - -@media (min-width: 1024px) { - .container { - max-width: 600px; - } -} - -/* ===== HERO SECTION ===== */ -.hero { - text-align: center; - margin-bottom: var(--space-12); -} - -.logo { - width: 64px; - height: 64px; - color: var(--purple-primary); - margin: 0 auto var(--space-4); - filter: drop-shadow(0 4px 12px var(--purple-glow)); -} - -.title { - font-size: var(--text-2xl); - font-weight: 700; - letter-spacing: 0.05em; - margin-bottom: var(--space-2); - background: linear-gradient(135deg, var(--purple-light), var(--purple-primary)); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} - -.subtitle { - font-size: var(--text-sm); - color: var(--text-secondary); - font-weight: 400; -} - -/* ===== FORM ELEMENTS ===== */ -.form-group { - margin-bottom: var(--space-6); -} - -.label { - display: block; - font-size: var(--text-sm); - font-weight: 500; - color: var(--text-secondary); - margin-bottom: var(--space-2); -} - -.optional { - color: var(--text-tertiary); - font-weight: 400; -} - -.input { - width: 100%; - padding: var(--space-4); - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 8px; - color: var(--text-primary); - font-size: var(--text-base); - font-family: var(--font-primary); - transition: all var(--transition-fast); - outline: none; -} - -.input:focus { - border-color: var(--purple-primary); - box-shadow: 0 0 0 3px var(--purple-glow); -} - -.input::placeholder { - color: var(--text-tertiary); -} - -.input:disabled, .input:read-only { - opacity: 0.6; - cursor: not-allowed; -} - -.input-large { - padding: var(--space-6); - font-size: var(--text-lg); -} - -.hint { - margin-top: var(--space-2); - font-size: var(--text-sm); - color: var(--text-tertiary); -} - -/* Input with validation checkmark */ -.input-validated { - position: relative; -} - -.input-validated .input { - padding-right: var(--space-12); -} - -.icon-check { - position: absolute; - right: var(--space-4); - top: 50%; - transform: translateY(-50%); - color: var(--success); -} - -/* Password input */ -.input-password-wrapper { - position: relative; -} - -.input-password-wrapper .input { - padding-right: var(--space-12); -} - -.btn-toggle-password { - position: absolute; - right: var(--space-3); - top: 50%; - transform: translateY(-50%); - background: none; - border: none; - padding: var(--space-2); - cursor: pointer; - color: var(--text-tertiary); - transition: color var(--transition-fast); - display: flex; - align-items: center; - justify-content: center; -} - -.btn-toggle-password:hover { - color: var(--purple-primary); -} - -.icon-eye { - width: 20px; - height: 20px; -} - -/* Resolution inputs */ -.input-row { - display: flex; - align-items: center; - gap: var(--space-3); -} - -.input-row .input { - flex: 1; -} - -.input-separator { - color: var(--text-tertiary); - font-size: var(--text-lg); -} - -/* ===== BUTTONS ===== */ -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - gap: var(--space-2); - padding: var(--space-4) var(--space-6); - border-radius: 8px; - font-size: var(--text-base); - font-weight: 600; - font-family: var(--font-primary); - cursor: pointer; - transition: all var(--transition-fast); - border: none; - outline: none; - text-decoration: none; -} - -.btn-primary { - background: linear-gradient(135deg, var(--purple-primary), var(--purple-dark)); - color: white; - box-shadow: 0 4px 12px var(--purple-glow); -} - -.btn-primary:hover:not(:disabled) { - transform: translateY(-2px); - box-shadow: 0 8px 20px var(--purple-glow-strong); -} - -.btn-primary:active:not(:disabled) { - transform: translateY(0); -} - -.btn-primary:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.btn-secondary { - background: var(--bg-secondary); - color: var(--text-primary); - border: 1px solid var(--border-color); -} - -.btn-secondary:hover:not(:disabled) { - border-color: var(--purple-primary); - color: var(--purple-primary); -} - -.btn-outline { - background: transparent; - color: var(--text-secondary); - border: 1px solid var(--border-color); -} - -.btn-outline:hover { - border-color: var(--purple-primary); - color: var(--purple-primary); -} - -.btn-large { - width: 100%; - padding: var(--space-6); - font-size: var(--text-lg); -} - -.btn-back { - display: inline-flex; - align-items: center; - gap: var(--space-2); - background: none; - border: none; - color: var(--text-secondary); - font-size: var(--text-sm); - font-family: var(--font-primary); - cursor: pointer; - padding: var(--space-2) 0; - margin-bottom: var(--space-6); - transition: color var(--transition-fast); -} - -.btn-back:hover { - color: var(--purple-primary); -} - -/* ===== ADVANCED SECTION ===== */ -.advanced-section { - margin-bottom: var(--space-6); -} - -.advanced-toggle { - display: flex; - align-items: center; - gap: var(--space-2); - cursor: pointer; - user-select: none; - font-size: var(--text-base); - font-weight: 500; - color: var(--text-secondary); - padding: var(--space-3) 0; - transition: color var(--transition-fast); -} - -.advanced-toggle:hover { - color: var(--purple-primary); -} - -.advanced-toggle::before { - content: '▶'; - font-size: var(--text-sm); - transition: transform var(--transition-fast); -} - -.advanced-section[open] .advanced-toggle::before { - transform: rotate(90deg); -} - -.advanced-content { - padding-top: var(--space-4); -} - -/* ===== AUTOCOMPLETE ===== */ -.autocomplete-wrapper { - position: relative; -} - -.autocomplete-dropdown { - position: absolute; - top: 100%; - left: 0; - right: 0; - margin-top: var(--space-2); - background: var(--bg-elevated); - border: 1px solid var(--border-color); - border-radius: 8px; - max-height: 300px; - overflow-y: auto; - z-index: 100; - box-shadow: var(--shadow-lg); -} - -.autocomplete-dropdown.hidden { - display: none; -} - -.autocomplete-item { - padding: var(--space-3) var(--space-4); - cursor: pointer; - transition: background-color var(--transition-fast); - font-size: var(--text-sm); -} - -.autocomplete-item:hover, .autocomplete-item.selected { - background: var(--bg-tertiary); -} - -.autocomplete-item:first-child { - border-radius: 8px 8px 0 0; -} - -.autocomplete-item:last-child { - border-radius: 0 0 8px 8px; -} - -.autocomplete-loading { - padding: var(--space-4); - text-align: center; - color: var(--text-tertiary); - font-size: var(--text-sm); -} - -/* ===== EXAMPLES ===== */ -.examples { - margin-top: var(--space-12); - text-align: center; -} - -.examples-title { - font-size: var(--text-sm); - color: var(--text-tertiary); - margin-bottom: var(--space-3); - font-weight: 500; -} - -.examples-list { - list-style: none; - display: flex; - flex-direction: column; - gap: var(--space-2); -} - -.examples-list li { - font-size: var(--text-sm); - color: var(--text-secondary); - font-family: var(--font-mono); -} - -/* ===== SCREEN TITLES ===== */ -.screen-title { - font-size: var(--text-xl); - font-weight: 600; - margin-bottom: var(--space-8); -} - -/* ===== PROGRESS ===== */ -.progress-container { - margin-bottom: var(--space-8); -} - -.progress-bar { - width: 100%; - height: 8px; - background: var(--bg-secondary); - border-radius: 4px; - overflow: hidden; - margin-bottom: var(--space-3); -} - -.progress-fill { - height: 100%; - background: linear-gradient(90deg, var(--purple-primary), var(--purple-light)); - border-radius: 4px; - transition: width var(--transition-base); - box-shadow: 0 0 12px var(--purple-glow); -} - -.progress-text { - text-align: center; - font-size: var(--text-sm); - color: var(--text-secondary); -} - -/* ===== STATS ===== */ -.stats { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: var(--space-4); - margin-bottom: var(--space-12); -} - -.stat { - text-align: center; - padding: var(--space-4); - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 8px; -} - -.stat-value { - display: block; - font-size: var(--text-xl); - font-weight: 700; - color: var(--text-primary); - margin-bottom: var(--space-1); -} - -.stat-value.stat-primary { - color: var(--purple-primary); -} - -.stat-label { - display: block; - font-size: var(--text-xs); - color: var(--text-tertiary); - text-transform: uppercase; - letter-spacing: 0.05em; -} - -/* ===== STREAMS SECTION ===== */ -.streams-section { - margin-top: var(--space-12); -} - -.streams-section.hidden { - display: none; -} - -.section-title { - font-size: var(--text-lg); - font-weight: 600; - margin-bottom: var(--space-6); -} - -/* ===== STREAMS LIST ===== */ -.streams-list { - display: flex; - flex-direction: column; - gap: var(--space-6); - padding: var(--space-2); -} - -/* ===== STREAM GROUPS ===== */ -.stream-group { - display: flex; - flex-direction: column; - gap: var(--space-3); -} - -.stream-group-header { - display: flex; - align-items: center; - gap: var(--space-2); - padding-bottom: var(--space-2); - border-bottom: 1px solid var(--border-color); - cursor: pointer; - user-select: none; - transition: color var(--transition-fast); -} - -.stream-group-header:hover { - color: var(--purple-primary); -} - -.stream-group-toggle { - display: flex; - align-items: center; - justify-content: center; - background: none; - border: none; - padding: 0; - cursor: pointer; - color: var(--text-tertiary); - transition: all var(--transition-fast); -} - -.stream-group-toggle .chevron { - transition: transform var(--transition-fast); -} - -.stream-group.collapsed .stream-group-toggle .chevron { - transform: rotate(-90deg); -} - -.stream-group.collapsed .stream-group-content { - display: none; -} - -.stream-group-title { - font-size: var(--text-sm); - font-weight: 600; - color: var(--text-primary); - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.stream-group-count { - font-size: var(--text-sm); - font-weight: 400; - color: var(--text-tertiary); -} - -.stream-group-content { - display: flex; - flex-direction: column; - gap: var(--space-3); -} - -.stream-group-empty { - padding: var(--space-4); - text-align: center; - color: var(--text-tertiary); - font-size: var(--text-sm); - background: var(--bg-secondary); - border: 1px dashed var(--border-color); - border-radius: 8px; -} - -/* ===== STREAM SUBGROUPS (Main/Sub/Other within Recommended) ===== */ -.stream-subgroup { - display: flex; - flex-direction: column; - gap: var(--space-2); -} - -.stream-subgroup:not(:last-child) { - margin-bottom: var(--space-4); -} - -.stream-subgroup-header { - display: flex; - align-items: center; - gap: var(--space-2); - padding-left: var(--space-2); - cursor: pointer; - user-select: none; - transition: color var(--transition-fast); -} - -.stream-subgroup-header:hover { - color: var(--purple-primary); -} - -.stream-subgroup-toggle { - display: flex; - align-items: center; - justify-content: center; - background: none; - border: none; - padding: 0; - cursor: pointer; - color: var(--text-tertiary); - transition: all var(--transition-fast); -} - -.stream-subgroup-toggle .chevron { - transition: transform var(--transition-fast); -} - -.stream-subgroup.collapsed .stream-subgroup-toggle .chevron { - transform: rotate(-90deg); -} - -.stream-subgroup.collapsed .stream-subgroup-content { - display: none; -} - -.stream-subgroup-title { - font-size: var(--text-xs); - font-weight: 500; - color: var(--text-tertiary); - text-transform: uppercase; - letter-spacing: 0.08em; -} - -.stream-subgroup-count { - font-size: var(--text-xs); - font-weight: 400; - color: var(--text-disabled); -} - -.stream-subgroup-content { - display: flex; - flex-direction: column; - gap: var(--space-2); -} - -/* Custom scrollbar */ -.streams-list::-webkit-scrollbar { - width: 8px; -} - -.streams-list::-webkit-scrollbar-track { - background: var(--bg-secondary); - border-radius: 4px; -} - -.streams-list::-webkit-scrollbar-thumb { - background: var(--purple-primary); - border-radius: 4px; -} - -.streams-list::-webkit-scrollbar-thumb:hover { - background: var(--purple-light); -} - -/* Stream item */ -.stream-item { - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 8px; - transition: all var(--transition-base); - overflow: hidden; -} - -.stream-item:hover { - border-color: var(--purple-primary); - box-shadow: 0 4px 12px var(--purple-glow); -} - -.stream-item.expanded { - border-color: var(--purple-primary); -} - -/* Stream item header */ -.stream-item-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: var(--space-4); - padding: var(--space-4); - cursor: pointer; -} - -.stream-item-main { - display: flex; - align-items: center; - gap: var(--space-3); - flex: 1; - min-width: 0; -} - -.stream-info-left { - display: flex; - flex-direction: column; - gap: var(--space-2); - flex: 1; - min-width: 0; -} - -.stream-type-badge { - display: flex; - align-items: center; - gap: var(--space-2); - font-size: var(--text-sm); - font-weight: 600; - color: var(--purple-primary); - text-transform: uppercase; - letter-spacing: 0.05em; - white-space: nowrap; -} - -.stream-type-badge svg { - width: 20px; - height: 20px; - flex-shrink: 0; -} - -.stream-url-preview { - font-family: var(--font-mono); - font-size: var(--text-xs); - color: var(--text-secondary); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.stream-toggle { - background: none; - border: none; - padding: var(--space-2); - cursor: pointer; - color: var(--text-secondary); - transition: all var(--transition-fast); - display: flex; - align-items: center; - justify-content: center; -} - -.stream-toggle:hover { - color: var(--purple-primary); -} - -.stream-toggle .chevron { - transition: transform var(--transition-fast); -} - -.stream-item.expanded .stream-toggle .chevron { - transform: rotate(180deg); -} - -.btn-use-stream { - flex-shrink: 0; - white-space: nowrap; - padding: var(--space-3) var(--space-4); - font-size: var(--text-sm); -} - -/* Stream item details */ -.stream-item-details { - max-height: 0; - overflow: hidden; - transition: max-height var(--transition-base); - padding: 0 var(--space-4); -} - -.stream-item-details.visible { - max-height: 500px; - padding: 0 var(--space-4) var(--space-4) var(--space-4); -} - -.stream-url-full { - font-family: var(--font-mono); - font-size: var(--text-sm); - color: var(--text-primary); - word-break: break-all; - margin-bottom: var(--space-3); - padding: var(--space-3); - background: var(--bg-tertiary); - border-radius: 6px; - border: 1px solid var(--border-color); -} - -.stream-meta-item { - font-size: var(--text-sm); - color: var(--text-secondary); - margin-bottom: var(--space-2); -} - -.stream-meta-item:last-child { - margin-bottom: 0; -} - -.meta-label { - font-weight: 600; - color: var(--text-primary); -} - -/* ===== SELECTED STREAM INFO ===== */ -.stream-selection-container { - margin-bottom: var(--space-6); -} - -.selected-stream-info { - padding: var(--space-6); - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 8px; - margin-bottom: var(--space-4); - position: relative; -} - -.selected-stream-info:last-child { - margin-bottom: var(--space-6); -} - -.stream-label { - display: flex; - align-items: center; - gap: var(--space-2); - font-size: var(--text-xs); - font-weight: 600; - color: var(--text-tertiary); - text-transform: uppercase; - letter-spacing: 0.05em; - margin-bottom: var(--space-3); -} - -.selected-type { - font-size: var(--text-sm); - font-weight: 600; - color: var(--purple-primary); - margin-bottom: var(--space-2); - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.selected-url { - font-family: var(--font-mono); - font-size: var(--text-sm); - color: var(--text-secondary); - word-break: break-all; -} - -.sub-stream { - border-color: rgba(139, 92, 246, 0.3); -} - -.btn-remove-sub { - margin-top: var(--space-4); - padding: var(--space-2) var(--space-4); - background: transparent; - border: 1px solid var(--error); - border-radius: 6px; - color: var(--error); - font-size: var(--text-sm); - font-weight: 500; - cursor: pointer; - transition: all var(--transition-fast); -} - -.btn-remove-sub:hover { - background: var(--error); - color: white; -} - -/* ===== TABS ===== */ -.tabs { - margin-bottom: var(--space-6); - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} - -.tabs::-webkit-scrollbar { - display: none; -} - -.tabs-scroll { - display: flex; - gap: var(--space-2); - min-width: min-content; -} - -.tab { - padding: var(--space-3) var(--space-6); - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 8px; - color: var(--text-secondary); - font-size: var(--text-sm); - font-weight: 500; - cursor: pointer; - transition: all var(--transition-fast); - white-space: nowrap; -} - -.tab:hover { - border-color: var(--purple-primary); - color: var(--purple-primary); -} - -.tab.active { - background: var(--purple-primary); - border-color: var(--purple-primary); - color: white; - box-shadow: 0 4px 12px var(--purple-glow); -} - -.tab-content { - position: relative; -} - -.tab-pane { - display: none; -} - -.tab-pane.active { - display: block; - animation: fadeIn var(--transition-fast); -} - -.config-code { - background: var(--bg-secondary); - border: 1px solid var(--border-color); - border-radius: 8px; - padding: var(--space-6); - font-family: var(--font-mono); - font-size: var(--text-sm); - color: var(--text-primary); - overflow-x: auto; - line-height: 1.6; - white-space: pre-wrap; - word-break: break-all; -} - -/* ===== ACTIONS ===== */ -.actions { - display: flex; - gap: var(--space-3); - margin-top: 10px; - margin-bottom: var(--space-4); -} - -.actions .btn { - flex: 1; -} - -.secondary-actions { - display: flex; - gap: var(--space-3); - margin-bottom: var(--space-6); -} - -.secondary-actions .btn { - flex: 1; -} - -.secondary-actions .btn-primary { - flex: 1.2; -} - -.secondary-actions .btn-outline { - flex: 0.8; -} - -/* ===== TOAST ===== */ -.toast { - position: fixed; - bottom: var(--space-6); - left: 50%; - transform: translateX(-50%) translateY(100px); - padding: var(--space-4) var(--space-6); - background: var(--bg-elevated); - border: 1px solid var(--border-color); - border-radius: 8px; - box-shadow: var(--shadow-lg); - font-size: var(--text-sm); - color: var(--text-primary); - z-index: 1000; - transition: transform var(--transition-base); - max-width: 90%; -} - -.toast.show { - transform: translateX(-50%) translateY(0); -} - -.toast.hidden { - display: none; -} - -/* ===== MODAL ===== */ -.modal-overlay { - position: fixed; - inset: 0; - background: rgba(0, 0, 0, 0.7); - backdrop-filter: blur(4px); - display: flex; - align-items: center; - justify-content: center; - z-index: 1001; - opacity: 0; - transition: opacity var(--transition-base); - padding: var(--space-4); -} - -.modal-overlay.show { - opacity: 1; -} - -.modal-overlay.hidden { - display: none; -} - -.modal { - background: var(--bg-elevated); - border: 1px solid var(--border-color); - border-radius: 12px; - padding: var(--space-8); - max-width: 400px; - width: 100%; - box-shadow: var(--shadow-lg); - transform: scale(0.95); - transition: transform var(--transition-base); - text-align: center; -} - -.modal-overlay.show .modal { - transform: scale(1); -} - -.modal-title { - font-size: var(--text-xl); - font-weight: 700; - color: var(--error); - margin-bottom: var(--space-4); -} - -.modal-message { - font-size: var(--text-base); - color: var(--text-secondary); - margin-bottom: var(--space-8); - line-height: 1.6; -} - -.modal-actions { - display: flex; - gap: var(--space-3); -} - -.modal-actions .btn { - flex: 1; - padding: var(--space-4); -} - -/* ===== ANIMATIONS ===== */ -@keyframes fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@keyframes slideIn { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -/* ===== FRIGATE TAB CUSTOM STYLES ===== */ -.frigate-input-section { - margin-bottom: var(--space-6); -} - -.frigate-label { - display: block; - font-weight: 500; - margin-bottom: var(--space-2); - color: var(--text-primary); - font-size: var(--text-sm); -} - -.frigate-label .hint { - display: block; - font-weight: 400; - color: var(--text-tertiary); - font-size: var(--text-xs); - margin-top: var(--space-1); -} - -.frigate-config-input { - width: 100%; - min-height: 300px; - font-family: var(--font-mono); - font-size: var(--text-sm); - background: var(--bg-tertiary); - border: 1px solid var(--border-color); - border-radius: 8px; - padding: var(--space-3) var(--space-4); - color: var(--text-primary); - resize: vertical; - transition: all var(--transition-fast); -} - -.frigate-config-input:focus { - outline: none; - border-color: var(--border-focus); - box-shadow: 0 0 0 3px var(--purple-glow); -} - -.btn-generate { - width: 100%; - padding: var(--space-4) var(--space-6); - font-size: var(--text-lg); - font-weight: 600; - margin-bottom: var(--space-6); - background: var(--purple-primary); - color: white; - border: none; - border-radius: 8px; - cursor: pointer; - transition: all var(--transition-fast); - box-shadow: 0 4px 12px var(--purple-glow); -} - -.btn-generate:hover { - background: var(--purple-light); - box-shadow: 0 8px 24px var(--purple-glow-strong); - transform: translateY(-2px); -} - -.btn-generate:active { - transform: translateY(0); -} - -/* Button with tooltip wrapper */ -.button-with-tooltip { - position: relative; - width: 100%; -} - -.button-with-tooltip .btn-generate { - display: flex; - align-items: center; - justify-content: center; - gap: var(--space-2); -} - -/* Button with tooltip in secondary-actions */ -.secondary-actions .button-with-tooltip { - flex: 1.2; - width: auto; -} - -.secondary-actions .button-with-tooltip .btn { - width: 100%; - display: flex; - align-items: center; - justify-content: center; - gap: var(--space-2); -} - -.secondary-actions .button-with-tooltip:last-child { - flex: 0.8; -} - -/* Info icon inside button */ -.info-icon-button { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - width: 18px; - height: 18px; - cursor: help; - color: rgba(255, 255, 255, 0.7); - transition: color var(--transition-fast); -} - -.info-icon-button:hover { - color: rgba(255, 255, 255, 1); -} - -.info-icon-button svg { - width: 18px; - height: 18px; -} - -/* Info icon inside outline button */ -.info-icon-button-outline { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - width: 18px; - height: 18px; - cursor: help; - color: var(--text-tertiary); - transition: color var(--transition-fast); -} - -.info-icon-button-outline:hover { - color: var(--purple-primary); -} - -.info-icon-button-outline svg { - width: 18px; - height: 18px; -} - -/* Info icon inside stream type badge */ -.info-icon-stream { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - width: 16px; - height: 16px; - margin-left: var(--space-2); - cursor: help; - color: var(--text-tertiary); - transition: color var(--transition-fast); -} - -.info-icon-stream:hover { - color: var(--purple-primary); -} - -.info-icon-stream svg { - width: 16px; - height: 16px; -} - -.frigate-output-section { - margin-top: var(--space-6); - padding-top: var(--space-6); - border-top: 1px solid var(--border-color); - animation: slideIn 0.3s ease-out; -} - -.frigate-output-section.hidden { - display: none; -} - -/* ===== TOOLTIPS ===== */ -.label-with-info { - display: flex; - align-items: center; - gap: var(--space-2); -} - -.info-icon { - position: relative; - display: inline-flex; - align-items: center; - justify-content: center; - width: 16px; - height: 16px; - cursor: help; - color: var(--text-tertiary); - transition: color var(--transition-fast); -} - -.info-icon:hover { - color: var(--purple-primary); -} - -.info-icon svg { - width: 16px; - height: 16px; -} - -.tooltip { - position: absolute; - bottom: calc(100% + 8px); - left: 50%; - transform: translateX(-50%); - background: var(--bg-elevated); - border: 1px solid var(--purple-primary); - border-radius: 8px; - padding: var(--space-4); - width: 320px; - max-width: 90vw; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6), 0 0 0 1px var(--purple-glow); - z-index: 1000; - opacity: 0; - visibility: hidden; - transition: opacity var(--transition-fast), visibility var(--transition-fast); - pointer-events: none; -} - -/* Tooltip opens downward */ -.tooltip.tooltip-down { - bottom: auto; - top: calc(100% + 8px); -} - -.info-icon:hover .tooltip { - opacity: 1; - visibility: visible; -} - -.tooltip::after { - content: ''; - position: absolute; - top: 100%; - left: 50%; - transform: translateX(-50%); - border: 6px solid transparent; - border-top-color: var(--purple-primary); -} - -/* Arrow for downward tooltip */ -.tooltip.tooltip-down::after { - top: auto; - bottom: 100%; - border-top-color: transparent; - border-bottom-color: var(--purple-primary); -} - -.tooltip-title { - font-weight: 600; - color: var(--purple-primary); - margin-bottom: var(--space-2); - font-size: var(--text-sm); -} - -.tooltip-text { - font-size: var(--text-xs); - line-height: 1.5; - color: var(--text-secondary); - margin-bottom: var(--space-3); -} - -.tooltip-text:last-child { - margin-bottom: 0; -} - -.tooltip-examples { - margin-top: var(--space-3); - padding-top: var(--space-3); - border-top: 1px solid var(--border-color); -} - -.tooltip-examples-title { - font-weight: 600; - color: var(--text-primary); - font-size: var(--text-xs); - margin-bottom: var(--space-2); -} - -.tooltip-example { - font-family: var(--font-mono); - font-size: var(--text-xs); - color: var(--purple-light); - background: var(--bg-secondary); - padding: var(--space-1) var(--space-2); - border-radius: 4px; - margin-bottom: var(--space-1); - display: block; -} - -.tooltip-example:last-child { - margin-bottom: 0; -} - -/* ===== UTILITIES ===== */ -.hidden { - display: none !important; -} diff --git a/webui/web/dev-server.sh b/webui/web/dev-server.sh deleted file mode 100755 index 7388a61..0000000 --- a/webui/web/dev-server.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# Simple development server for Strix WebUI -# This allows you to test the UI without running the Go backend - -PORT=${1:-8080} - -echo "Starting development server on port $PORT" -echo "Open: http://localhost:$PORT?mock=true" -echo "" -echo "Press Ctrl+C to stop" - -# Use Python's built-in HTTP server -cd "$(dirname "$0")" -python3 -m http.server $PORT diff --git a/webui/web/index.html b/webui/web/index.html deleted file mode 100644 index 53ae618..0000000 --- a/webui/web/index.html +++ /dev/null @@ -1,654 +0,0 @@ - - - - - - - Strix - Camera Stream Discovery - - - - - - -
- -
-
-
- -

STRIX

-

Camera Stream Discovery

-
- -
- - -

IP, hostname or full stream URL

-
- - - -
-

Examples

-
    -
  • 192.168.1.100
  • -
  • camera.local
  • -
  • rtsp://user:pass@192.168.1.100/stream
  • -
-
-
-
- - -
-
- - -

Camera Configuration

- -
- -
- - - - -
-
- -
- -
- - -
- -
- -
- - -
- -
- -
- - -
-
- -
- - -
- -
- Advanced -
- -
- -
- - × - -
-
- -
- - -
-
-
- - -
-
- - -
-
- - -

Discovering Streams

- -
-
-
-
-

Starting scan...

-
- - - -
-
- - -
-
- - -

Stream Configuration

- -
-
-
- Main Stream - - - - - -
-
Main Stream
-

The primary high-resolution video stream from your camera. This stream is typically used for recording and high-quality viewing.

-
-
Common uses:
- Recording to disk - Live HD viewing - High-quality playback -
-

Resolution is usually 1080p (1920×1080) or higher. Higher resolution means better quality but requires more bandwidth and storage.

-
-
-
-

-

-
- - -
- -
-
- - - -
-
- -
-
- -
- - -
- - -
- -
- - - -
-
-

-                    
-
-

-                    
-
- -
- - -
- -
-
- -
-
- -
-
-
-
-
- - - - - - - - - - diff --git a/webui/web/js/api/camera-search.js b/webui/web/js/api/camera-search.js deleted file mode 100644 index 3e93181..0000000 --- a/webui/web/js/api/camera-search.js +++ /dev/null @@ -1,35 +0,0 @@ -import { MockCameraSearch } from '../mock/mock-data.js'; - -export class CameraSearchAPI { - constructor(baseURL = null, useMock = false) { - // Use relative URLs since API and UI are on the same port - if (!baseURL) { - this.baseURL = ''; - } else { - this.baseURL = baseURL; - } - this.useMock = useMock; - this.mockAPI = useMock ? new MockCameraSearch() : null; - } - - async search(query, limit = 10) { - // Use mock API if enabled - if (this.useMock) { - return await this.mockAPI.search(query, limit); - } - - const response = await fetch(`${this.baseURL}api/v1/cameras/search`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ query, limit }), - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return await response.json(); - } -} diff --git a/webui/web/js/api/probe.js b/webui/web/js/api/probe.js deleted file mode 100644 index dc72129..0000000 --- a/webui/web/js/api/probe.js +++ /dev/null @@ -1,24 +0,0 @@ -export class ProbeAPI { - constructor(baseURL = '') { - this.baseURL = baseURL; - } - - /** - * Probe a device at the given IP address. - * Returns device info: reachable status, vendor, hostname, mDNS data. - * @param {string} ip - IP address to probe - * @returns {Promise} Probe response - */ - async probe(ip) { - const response = await fetch( - `${this.baseURL}api/v1/probe?ip=${encodeURIComponent(ip)}` - ); - - if (!response.ok) { - const text = await response.text(); - throw new Error(text || `HTTP ${response.status}`); - } - - return await response.json(); - } -} diff --git a/webui/web/js/api/stream-discovery.js b/webui/web/js/api/stream-discovery.js deleted file mode 100644 index ed8f8bf..0000000 --- a/webui/web/js/api/stream-discovery.js +++ /dev/null @@ -1,112 +0,0 @@ -import { MockStreamDiscovery } from '../mock/mock-data.js'; - -export class StreamDiscoveryAPI { - constructor(baseURL = null, useMock = false) { - // Use relative URLs since API and UI are on the same port - if (!baseURL) { - this.baseURL = ''; - } else { - this.baseURL = baseURL; - } - this.eventSource = null; - this.useMock = useMock; - this.mockAPI = useMock ? new MockStreamDiscovery() : null; - } - - discover(request, callbacks) { - this.close(); - - // Use mock API if enabled - if (this.useMock) { - this.mockAPI.discover(request, callbacks); - return; - } - - fetch(`${this.baseURL}api/v1/streams/discover`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Accept': 'text/event-stream', - }, - body: JSON.stringify(request), - }).then(response => { - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - const reader = response.body.getReader(); - const decoder = new TextDecoder(); - - const processStream = ({ done, value }) => { - if (done) { - return; - } - - const chunk = decoder.decode(value, { stream: true }); - const lines = chunk.split('\n'); - - for (const line of lines) { - if (line.startsWith('event:')) { - // Parse event type (not currently used, but available for future features) - // const eventType = line.substring(6).trim(); - continue; - } - - if (line.startsWith('data:')) { - const data = line.substring(5).trim(); - - try { - const parsed = JSON.parse(data); - this.handleEvent(parsed, callbacks); - } catch (e) { - console.error('Failed to parse SSE data:', e); - } - } - } - - return reader.read().then(processStream); - }; - - return reader.read().then(processStream); - }).catch(error => { - if (callbacks.onError) { - callbacks.onError(error.message); - } - }); - } - - handleEvent(data, callbacks) { - // Determine event type from data - if (data.tested !== undefined && data.found !== undefined) { - // Progress event - if (callbacks.onProgress) { - callbacks.onProgress(data); - } - } else if (data.stream) { - // Stream found event - if (callbacks.onStreamFound) { - callbacks.onStreamFound(data); - } - } else if (data.total_tested !== undefined) { - // Complete event - if (callbacks.onComplete) { - callbacks.onComplete(data); - } - } else if (data.error) { - // Error event - if (callbacks.onError) { - callbacks.onError(data.error); - } - } - } - - close() { - if (this.useMock && this.mockAPI) { - this.mockAPI.close(); - } - if (this.eventSource) { - this.eventSource.close(); - this.eventSource = null; - } - } -} diff --git a/webui/web/js/config-generators/frigate/index.js b/webui/web/js/config-generators/frigate/index.js deleted file mode 100644 index 379877b..0000000 --- a/webui/web/js/config-generators/frigate/index.js +++ /dev/null @@ -1,425 +0,0 @@ -/** - * Frigate NVR Configuration Generator - * Adds cameras to existing Frigate configuration - * Based on frigate-conf-generate logic - */ -export class FrigateGenerator { - /** - * Main entry point - generates config (new or adds to existing) - * @param {string} existingConfig - Existing YAML config text (or empty string) - * @param {Object} mainStream - Main stream object - * @param {Object} subStream - Optional sub stream object - * @returns {string} YAML configuration string - */ - static generate(existingConfig, mainStream, subStream = null) { - if (!existingConfig || existingConfig.trim() === '') { - // Create new config from scratch - return this.createNewConfig(mainStream, subStream); - } - - // Add to existing config - return this.addToExistingConfig(existingConfig, mainStream, subStream); - } - - /** - * Add camera to existing config (text-based, preserves everything) - */ - static addToExistingConfig(existingConfig, mainStream, subStream) { - const lines = existingConfig.split('\n'); - - // Find existing camera names and stream names to avoid duplicates - const existingCameras = this.findExistingCameras(lines); - const existingStreams = this.findExistingStreams(lines); - - // Generate unique camera info - const cameraInfo = this.generateUniqueCameraInfo(mainStream, subStream, existingCameras, existingStreams); - - // Find insertion points - const go2rtcStreamIndex = this.findGo2rtcStreamsInsertionPoint(lines); - const camerasInsertIndex = this.findCamerasInsertionPoint(lines); - - if (go2rtcStreamIndex === -1 || camerasInsertIndex === -1) { - throw new Error('Could not find go2rtc streams or cameras section in config'); - } - - // Generate new stream lines - const streamLines = this.generateStreamLines(cameraInfo); - - // Generate new camera lines - const cameraLines = this.generateCameraLines(cameraInfo); - - // Insert streams into go2rtc section - lines.splice(go2rtcStreamIndex, 0, ...streamLines); - - // Insert camera into cameras section (adjust index after first insertion) - const adjustedCameraIndex = camerasInsertIndex + streamLines.length; - lines.splice(adjustedCameraIndex, 0, ...cameraLines); - - return lines.join('\n'); - } - - /** - * Find existing camera names - */ - static findExistingCameras(lines) { - const cameras = new Set(); - let inCamerasSection = false; - - for (const line of lines) { - if (line.match(/^cameras:/)) { - inCamerasSection = true; - continue; - } - - if (inCamerasSection && line.match(/^[a-z]/)) { - break; // Next top-level section - } - - if (inCamerasSection && line.match(/^\s{2}(\w+):/)) { - const match = line.match(/^\s{2}(\w+):/); - cameras.add(match[1]); - } - } - - return cameras; - } - - /** - * Find existing stream names - */ - static findExistingStreams(lines) { - const streams = new Set(); - let inStreamsSection = false; - - for (const line of lines) { - if (line.match(/^\s{2}streams:/)) { - inStreamsSection = true; - continue; - } - - if (inStreamsSection && line.match(/^[a-z]/)) { - break; // Next top-level section - } - - if (inStreamsSection && line.match(/^\s{4}'?(\w+)'?:/)) { - const match = line.match(/^\s{4}'?(\w+)'?:/); - streams.add(match[1]); - } - } - - return streams; - } - - /** - * Find where to insert new streams in go2rtc section - */ - static findGo2rtcStreamsInsertionPoint(lines) { - let inStreamsSection = false; - let lastStreamIndex = -1; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - - if (line.match(/^\s{2}streams:/)) { - inStreamsSection = true; - continue; - } - - if (inStreamsSection) { - // Check if this is a stream definition or its content - if (line.match(/^\s{4,}/)) { - lastStreamIndex = i; - } else if (line.match(/^[a-z#]/)) { - // Found next section - insert before empty line if it exists - if (lastStreamIndex >= 0 && lines[lastStreamIndex + 1]?.trim() === '') { - return lastStreamIndex + 2; // After existing empty line - } - return lastStreamIndex + 1; - } - } - } - - return lastStreamIndex + 1; - } - - /** - * Find where to insert new camera in cameras section - */ - static findCamerasInsertionPoint(lines) { - let inCamerasSection = false; - let lastCameraLineIndex = -1; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - - if (line.match(/^cameras:/)) { - inCamerasSection = true; - continue; - } - - if (inCamerasSection) { - // Check if we're still in a camera definition - if (line.match(/^\s{2}\w+:/)) { - // New camera starting - lastCameraLineIndex = i; - } else if (line.match(/^\s{2,}\S/)) { - // Still inside camera definition - lastCameraLineIndex = i; - } else if (line.match(/^[a-z]/) && !line.match(/^cameras:/)) { - // Found next top-level section - // Skip any empty lines before it - let insertIndex = lastCameraLineIndex + 1; - while (insertIndex < lines.length && lines[insertIndex].trim() === '') { - insertIndex++; - } - return insertIndex; - } else if (line.match(/^version:/)) { - // Insert before version, skip empty lines - let insertIndex = i; - while (insertIndex > 0 && lines[insertIndex - 1].trim() === '') { - insertIndex--; - } - return insertIndex; - } - } - } - - // If we reach end of file, insert at end - return lines.length; - } - - /** - * Generate unique camera info avoiding duplicates - */ - static generateUniqueCameraInfo(mainStream, subStream, existingCameras, existingStreams) { - const ip = this.extractIP(mainStream.url); - const baseName = ip ? `camera_${ip.replace(/\./g, '_').replace(/:/g, '_')}` : 'camera'; - const streamBaseName = ip ? ip.replace(/\./g, '_').replace(/:/g, '_') : 'stream'; - - // Find unique camera name - let cameraName = baseName; - let suffix = 0; - while (existingCameras.has(cameraName)) { - suffix++; - cameraName = `${baseName}_${suffix}`; - } - - // Find unique stream names - let mainStreamName = `${streamBaseName}_main${suffix ? `_${suffix}` : ''}`; - while (existingStreams.has(mainStreamName)) { - suffix++; - mainStreamName = `${streamBaseName}_main_${suffix}`; - } - - let subStreamName = null; - if (subStream) { - subStreamName = `${streamBaseName}_sub${suffix ? `_${suffix}` : ''}`; - while (existingStreams.has(subStreamName)) { - suffix++; - subStreamName = `${streamBaseName}_sub_${suffix}`; - } - } - - return { - cameraName, - mainStreamName, - subStreamName, - mainStream, - subStream - }; - } - - /** - * Generate stream lines for go2rtc section - */ - static generateStreamLines(cameraInfo) { - const lines = []; - - // Add main stream - const mainSource = this.generateGo2RTCSource(cameraInfo.mainStream); - lines.push(` '${cameraInfo.mainStreamName}':`); - lines.push(` - ${mainSource}`); - - // Add sub stream if provided - if (cameraInfo.subStream) { - lines.push(''); - const subSource = this.generateGo2RTCSource(cameraInfo.subStream); - lines.push(` '${cameraInfo.subStreamName}':`); - lines.push(` - ${subSource}`); - } - - lines.push(''); - return lines; - } - - /** - * Build RTSP path with optional ?mp4 suffix for BUBBLE streams - */ - static buildRtspPath(streamName, streamType) { - const basePath = `rtsp://127.0.0.1:8554/${streamName}`; - // Add ?mp4 parameter only for BUBBLE streams to enable recording in Frigate - return streamType === 'BUBBLE' ? `${basePath}?mp4` : basePath; - } - - /** - * Generate camera lines for cameras section - */ - static generateCameraLines(cameraInfo) { - const lines = []; - - lines.push(` ${cameraInfo.cameraName}:`); - lines.push(' ffmpeg:'); - lines.push(' inputs:'); - - if (cameraInfo.subStream) { - // Use sub for detect, main for record - const subPath = this.buildRtspPath(cameraInfo.subStreamName, cameraInfo.subStream.type); - const mainPath = this.buildRtspPath(cameraInfo.mainStreamName, cameraInfo.mainStream.type); - - lines.push(` - path: ${subPath}`); - lines.push(' input_args: preset-rtsp-restream'); - lines.push(' roles:'); - lines.push(' - detect'); - lines.push(` - path: ${mainPath}`); - lines.push(' input_args: preset-rtsp-restream'); - lines.push(' roles:'); - lines.push(' - record'); - - // Add live view configuration - lines.push(' live:'); - lines.push(' streams:'); - lines.push(` Main Stream: ${cameraInfo.mainStreamName} # HD для просмотра`); - lines.push(` Sub Stream: ${cameraInfo.subStreamName} # Низкое разрешение (опционально)`); - } else { - // Use main for both detect and record - const mainPath = this.buildRtspPath(cameraInfo.mainStreamName, cameraInfo.mainStream.type); - - lines.push(` - path: ${mainPath}`); - lines.push(' input_args: preset-rtsp-restream'); - lines.push(' roles:'); - lines.push(' - detect'); - lines.push(' - record'); - } - - // Add objects configuration - lines.push(' objects:'); - lines.push(' track:'); - lines.push(' - person'); - lines.push(' - car'); - lines.push(' - cat'); - lines.push(' - dog'); - - // Add record configuration - lines.push(' record:'); - lines.push(' enabled: true'); - lines.push(''); - - return lines; - } - - /** - * Create new configuration from scratch - */ - static createNewConfig(mainStream, subStream) { - const cameraInfo = this.generateUniqueCameraInfo(mainStream, subStream, new Set(), new Set()); - const lines = []; - - // MQTT - lines.push('mqtt:'); - lines.push(' enabled: false'); - lines.push(''); - - // Record - lines.push('# Global Recording Settings'); - lines.push('record:'); - lines.push(' enabled: true'); - lines.push(' retain:'); - lines.push(' days: 7'); - lines.push(' mode: motion # Record only on motion detection'); - lines.push(''); - - // Go2RTC - lines.push('# Go2RTC Configuration (Frigate built-in)'); - lines.push('go2rtc:'); - lines.push(' streams:'); - lines.push(...this.generateStreamLines(cameraInfo)); - - // Cameras - lines.push('# Frigate Camera Configuration'); - lines.push('cameras:'); - lines.push(...this.generateCameraLines(cameraInfo)); - - // Version - lines.push('version: 0.16-0'); - - return lines.join('\n'); - } - - /** - * Extract IP address from URL - */ - static extractIP(url) { - try { - const urlObj = new URL(url); - return urlObj.hostname; - } catch (e) { - // Try to extract IP with regex - const match = url.match(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/); - return match ? match[1] : null; - } - } - - /** - * Generate Go2RTC source configuration based on stream type - */ - static generateGo2RTCSource(stream) { - // Handle JPEG snapshots with exec:ffmpeg conversion - if (stream.type === 'JPEG') { - return [ - 'exec:/usr/lib/ffmpeg/7.0/bin/ffmpeg', - '-loglevel quiet', - '-f image2', - '-loop 1', - '-framerate 10', - `-i ${stream.url}`, - '-c:v libx264', - '-preset ultrafast', - '-tune zerolatency', - '-g 20', - '-f rtsp {{output}}' - ].join(' '); - } - - // Handle ONVIF - convert to onvif:// format if needed - if (stream.type === 'ONVIF') { - try { - const urlObj = new URL(stream.url); - const username = urlObj.username || 'admin'; - const password = urlObj.password || ''; - const host = urlObj.hostname; - const port = urlObj.port || '80'; - return `onvif://${username}:${password}@${host}:${port}`; - } catch (e) { - return stream.url; - } - } - - // Handle BUBBLE protocol - convert to bubble:// format for go2rtc - if (stream.type === 'BUBBLE') { - try { - const urlObj = new URL(stream.url); - const username = urlObj.username || 'admin'; - const password = urlObj.password || ''; - const host = urlObj.hostname; - const port = urlObj.port || '80'; - const path = urlObj.pathname + urlObj.search; - return `bubble://${username}:${password}@${host}:${port}${path}#video=copy`; - } catch (e) { - return stream.url; - } - } - - // For all other types: use direct URL - return stream.url; - } -} diff --git a/webui/web/js/config-generators/go2rtc/index.js b/webui/web/js/config-generators/go2rtc/index.js deleted file mode 100644 index b685530..0000000 --- a/webui/web/js/config-generators/go2rtc/index.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Go2RTC Configuration Generator - * Generates proper go2rtc YAML configs based on stream type - * Following go2rtc documentation and best practices - */ -export class Go2RTCGenerator { - /** - * Generate go2rtc config for streams (main + optional sub) - * @param {Object} mainStream - Main stream object with type, protocol, and url - * @param {Object} subStream - Optional sub stream object - * @returns {string} YAML configuration string - */ - static generate(mainStream, subStream = null) { - const configs = []; - configs.push('streams:'); - - // Generate main stream config - const mainStreamName = this.generateStreamName(mainStream, 'main'); - const mainSource = this.generateSource(mainStream); - configs.push(` '${mainStreamName}':`); - configs.push(` - ${mainSource}`); - - // Generate sub stream config if provided - if (subStream) { - configs.push(''); - const subStreamName = this.generateStreamName(subStream, 'sub'); - const subSource = this.generateSource(subStream); - configs.push(` '${subStreamName}':`); - configs.push(` - ${subSource}`); - } - - return configs.join('\n'); - } - - /** - * Generate stream name from IP address with suffix - * Format: "192_168_1_100_main" or "192_168_1_100_sub" - */ - static generateStreamName(stream, suffix) { - try { - const urlObj = new URL(stream.url); - const ip = urlObj.hostname.replace(/\./g, '_').replace(/:/g, '_'); - return `${ip}_${suffix}`; - } catch (e) { - return `camera_stream_${suffix}`; - } - } - - /** - * Generate source configuration based on stream type - */ - static generateSource(stream) { - // Handle JPEG snapshots with special exec:ffmpeg conversion - if (stream.type === 'JPEG') { - return this.generateJPEGSource(stream); - } - - // Handle ONVIF - if (stream.type === 'ONVIF') { - return this.generateONVIFSource(stream); - } - - // Handle BUBBLE protocol - if (stream.type === 'BUBBLE') { - return this.generateBubbleSource(stream); - } - - // For all other types: use direct URL - return stream.url; - } - - /** - * Generate JPEG snapshot conversion using exec:ffmpeg - * Converts static JPEG to RTSP stream with H264 encoding - */ - static generateJPEGSource(stream) { - return [ - 'exec:ffmpeg', - '-loglevel quiet', - '-f image2', - '-loop 1', - '-framerate 10', - `-i ${stream.url}`, - '-c:v libx264', - '-preset ultrafast', - '-tune zerolatency', - '-g 20', - '-f rtsp {output}' - ].join(' '); - } - - /** - * Generate ONVIF source - * Converts HTTP device service endpoint to onvif:// format - */ - static generateONVIFSource(stream) { - try { - const urlObj = new URL(stream.url); - const username = urlObj.username || 'admin'; - const password = urlObj.password || ''; - const host = urlObj.hostname; - const port = urlObj.port || '80'; - return `onvif://${username}:${password}@${host}:${port}`; - } catch (e) { - return stream.url; - } - } - - /** - * Generate BUBBLE source - * Converts HTTP BUBBLE endpoint to bubble:// format for go2rtc - * Format: bubble://user:pass@host:port/bubble/live?ch=X&stream=Y#video=copy - */ - static generateBubbleSource(stream) { - try { - const urlObj = new URL(stream.url); - const username = urlObj.username || 'admin'; - const password = urlObj.password || ''; - const host = urlObj.hostname; - const port = urlObj.port || '80'; - const path = urlObj.pathname + urlObj.search; - return `bubble://${username}:${password}@${host}:${port}${path}#video=copy`; - } catch (e) { - return stream.url; - } - } -} diff --git a/webui/web/js/main.js b/webui/web/js/main.js deleted file mode 100644 index fbe9abf..0000000 --- a/webui/web/js/main.js +++ /dev/null @@ -1,650 +0,0 @@ -import { CameraSearchAPI } from './api/camera-search.js'; -import { StreamDiscoveryAPI } from './api/stream-discovery.js'; -import { ProbeAPI } from './api/probe.js'; -import { MockCameraAPI } from './mock/mock-camera-api.js'; -import { MockStreamAPI } from './mock/mock-stream-api.js'; -import { SearchForm } from './ui/search-form.js'; -import { StreamList } from './ui/stream-list.js'; -import { ConfigPanel } from './ui/config-panel.js'; -import { FrigateGenerator } from './config-generators/frigate/index.js'; -import { showToast } from './utils/toast.js'; -import { showModal } from './ui/modal.js'; - -class StrixApp { - constructor() { - // Check if mock mode is enabled via URL parameter - const urlParams = new URLSearchParams(window.location.search); - const isMockMode = urlParams.get('mock') === 'true'; - - if (isMockMode) { - console.log('🎭 Mock mode enabled - using fake data'); - this.cameraAPI = new MockCameraAPI(); - this.streamAPI = new MockStreamAPI(); - - // Show mock mode badge - const mockBadge = document.getElementById('mock-mode-badge'); - if (mockBadge) { - mockBadge.classList.remove('hidden'); - } - } else { - this.cameraAPI = new CameraSearchAPI(); - this.streamAPI = new StreamDiscoveryAPI(); - } - - this.probeAPI = new ProbeAPI(); - this.probeResult = null; - - this.searchForm = new SearchForm(); - this.streamList = new StreamList(); - this.configPanel = new ConfigPanel(); - - this.currentAddress = ''; - this.currentStreams = []; - this.selectedMainStream = null; - this.selectedSubStream = null; - this.isSelectingSubStream = false; - this.frigateConfigGenerated = false; // Track if Frigate config has been generated - - this.init(); - } - - init() { - this.setupEventListeners(); - this.prefillNetworkAddress(); - this.showScreen('address'); - } - - /** - * Pre-fill network address input with smart default based on server IP - */ - prefillNetworkAddress() { - const hostname = window.location.hostname; - const input = document.getElementById('network-address'); - - // Skip if localhost or empty - if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '0.0.0.0') { - return; - } - - // Check if hostname is an IP address (matches pattern like 192.168.1.1) - const ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; - const match = hostname.match(ipPattern); - - if (match) { - // Extract first three octets (e.g., "192.168.1." from "192.168.1.254") - const networkPrefix = `${match[1]}.${match[2]}.${match[3]}.`; - input.value = networkPrefix; - input.placeholder = `${networkPrefix}100`; - } - } - - setupEventListeners() { - // Screen 1: Address input - document.getElementById('btn-check-address').addEventListener('click', () => this.checkAddress()); - document.getElementById('network-address').addEventListener('keypress', (e) => { - if (e.key === 'Enter') this.checkAddress(); - }); - - // Screen 2: Configuration form - document.getElementById('btn-back-to-address').addEventListener('click', () => { - // Clear probe-filled fields so stale data doesn't persist - document.getElementById('camera-model').value = ''; - document.getElementById('camera-model').disabled = false; - document.getElementById('camera-model').placeholder = 'Start typing...'; - document.getElementById('model-disabled-hint').classList.add('hidden'); - this.probeResult = null; - this.showScreen('address'); - }); - - document.getElementById('btn-discover').addEventListener('click', () => this.discoverStreams()); - - // Password toggle - document.querySelector('.btn-toggle-password').addEventListener('click', () => { - const input = document.getElementById('password'); - input.type = input.type === 'password' ? 'text' : 'password'; - }); - - // Camera model autocomplete - const modelInput = document.getElementById('camera-model'); - let debounceTimer; - let extendedSearchTimer; - modelInput.addEventListener('input', (e) => { - clearTimeout(debounceTimer); - clearTimeout(extendedSearchTimer); - const query = e.target.value.trim(); - - if (query.length >= 2) { - debounceTimer = setTimeout(() => { - this.searchCameraModels(query, 10); - - extendedSearchTimer = setTimeout(() => { - this.searchCameraModels(query, 50, true); - }, 1000); - }, 300); - } else { - this.hideAutocomplete(); - } - }); - - // Screen 3: Stream discovery - document.getElementById('btn-back-to-config').addEventListener('click', () => { - this.streamAPI.close(); - this.showScreen('config'); - }); - - // Screen 4: Configuration output - document.getElementById('btn-back-to-streams').addEventListener('click', () => { - this.isSelectingSubStream = false; - this.showScreen('discovery'); - }); - - document.getElementById('btn-copy-config').addEventListener('click', () => this.copyConfig()); - document.getElementById('btn-download-config').addEventListener('click', () => this.downloadConfig()); - - document.getElementById('btn-add-sub-stream').addEventListener('click', () => this.addSubStream()); - document.getElementById('btn-remove-sub').addEventListener('click', () => this.removeSubStream()); - - // Frigate config generation - document.getElementById('btn-generate-frigate').addEventListener('click', () => this.generateFrigateConfig()); - - document.getElementById('btn-new-search').addEventListener('click', () => { - this.reset(); - this.showScreen('address'); - }); - - // Tab switching - document.querySelectorAll('.tab').forEach(tab => { - tab.addEventListener('click', (e) => this.switchTab(e.target.dataset.tab)); - }); - } - - showScreen(screenName) { - document.querySelectorAll('.screen').forEach(s => s.classList.remove('active')); - document.getElementById(`screen-${screenName}`).classList.add('active'); - } - - async checkAddress() { - const input = document.getElementById('network-address'); - const address = input.value.trim(); - - if (!address) { - showToast('Please enter a network address'); - return; - } - - // Check if it's a full URL with credentials - if (this.isFullURL(address)) { - this.parseFullURL(address); - } else { - // Just an IP or hostname - this.currentAddress = address; - document.getElementById('address-validated').value = address; - } - - // Extract IP for probe (from full URL or raw input) - const probeIP = this.extractIPForProbe(address); - - // Probe the device before proceeding - const btn = document.getElementById('btn-check-address'); - const originalText = btn.textContent; - btn.disabled = true; - btn.textContent = 'Checking...'; - - try { - this.probeResult = await this.probeAPI.probe(probeIP); - - if (this.probeResult.reachable) { - // Auto-fill vendor into Camera Model if found - if (this.probeResult.probes.arp && this.probeResult.probes.arp.vendor) { - const modelInput = document.getElementById('camera-model'); - if (!modelInput.disabled && !modelInput.value) { - modelInput.value = this.probeResult.probes.arp.vendor; - } - } - - this.showScreen('config'); - } else { - // Device unreachable -- show modal - const result = await showModal({ - title: 'Device Unreachable', - message: `The device at ${probeIP} is not responding. It may be offline, on a different network, or the IP address may be incorrect.`, - buttons: [ - { id: 'change', label: 'Change IP', style: 'primary' }, - { id: 'continue', label: 'Continue Anyway', style: 'outline' } - ] - }); - - if (result === 'continue') { - this.showScreen('config'); - } else { - // 'change' or null (overlay click) -- stay on address screen - input.focus(); - input.select(); - } - } - } catch (error) { - // Network/server error -- show modal - const result = await showModal({ - title: 'Connection Error', - message: `Could not check the device: ${error.message}`, - buttons: [ - { id: 'change', label: 'Change IP', style: 'primary' }, - { id: 'continue', label: 'Continue Anyway', style: 'outline' } - ] - }); - - if (result === 'continue') { - this.showScreen('config'); - } else { - input.focus(); - } - } finally { - btn.disabled = false; - btn.textContent = originalText; - } - } - - /** - * Extract IP address from input for probe API call. - * Handles plain IPs and full URLs like rtsp://user:pass@192.168.1.50/stream - */ - extractIPForProbe(address) { - if (this.isFullURL(address)) { - try { - const urlObj = new URL(address); - return urlObj.hostname; - } catch (e) { - return address; - } - } - // Remove port if present (e.g., "192.168.1.50:554") - const colonIndex = address.lastIndexOf(':'); - if (colonIndex > 0) { - return address.substring(0, colonIndex); - } - return address; - } - - isFullURL(str) { - return str.startsWith('rtsp://') || str.startsWith('http://') || str.startsWith('https://'); - } - - parseFullURL(url) { - try { - const urlObj = new URL(url); - - // Extract credentials (only override if provided in URL) - if (urlObj.username) { - document.getElementById('username').value = urlObj.username; - } - // If no username in URL, keep the default "admin" value - - if (urlObj.password) { - document.getElementById('password').value = urlObj.password; - } - - // Extract IP/hostname - this.currentAddress = urlObj.hostname; - document.getElementById('address-validated').value = url; - - // Disable model input - const modelInput = document.getElementById('camera-model'); - modelInput.disabled = true; - modelInput.placeholder = 'Detected from URL'; - document.getElementById('model-disabled-hint').classList.remove('hidden'); - - } catch (e) { - this.currentAddress = url; - document.getElementById('address-validated').value = url; - } - } - - async searchCameraModels(query, limit = 10, append = false) { - const dropdown = document.getElementById('autocomplete-dropdown'); - - // Keep dropdown open and show loading state smoothly - if (!append) { - const isOpen = !dropdown.classList.contains('hidden'); - if (!isOpen) { - dropdown.classList.remove('hidden'); - } - // Show loading only if dropdown was empty or closed - if (!isOpen || dropdown.children.length === 0) { - dropdown.innerHTML = '
Searching...
'; - } - } - - try { - const response = await this.cameraAPI.search(query, limit); - - if (response.cameras && response.cameras.length > 0) { - this.renderAutocomplete(response.cameras, append); - } else if (!append) { - dropdown.innerHTML = '
No cameras found
'; - } - } catch (error) { - console.error('Search error:', error); - if (!append) { - dropdown.innerHTML = '
Search failed
'; - } - } - } - - renderAutocomplete(cameras, append = false) { - const dropdown = document.getElementById('autocomplete-dropdown'); - const modelInput = document.getElementById('camera-model'); - - const existingValues = new Set(); - if (append) { - dropdown.querySelectorAll('.autocomplete-item').forEach(item => { - existingValues.add(item.dataset.value); - }); - } - - const newItems = cameras - .map(camera => { - const fullName = `${camera.brand}: ${camera.model}`; - if (append && existingValues.has(fullName)) { - return null; - } - return `
${fullName}
`; - }) - .filter(item => item !== null) - .join(''); - - if (append) { - dropdown.insertAdjacentHTML('beforeend', newItems); - } else { - dropdown.innerHTML = newItems; - } - - dropdown.querySelectorAll('.autocomplete-item').forEach(item => { - if (!item.hasAttribute('data-listener')) { - item.setAttribute('data-listener', 'true'); - item.addEventListener('click', () => { - modelInput.value = item.dataset.value; - this.hideAutocomplete(); - }); - } - }); - } - - hideAutocomplete() { - document.getElementById('autocomplete-dropdown').classList.add('hidden'); - } - - async discoverStreams() { - const model = document.getElementById('camera-model').value.trim(); - const username = document.getElementById('username').value.trim(); - const password = document.getElementById('password').value.trim(); - const channel = parseInt(document.getElementById('channel').value) || 0; - const maxStreams = parseInt(document.getElementById('max-streams').value) || 10; - - const request = { - target: this.currentAddress, - model: model || 'auto', - username: username, - password: password, - channel: channel, - max_streams: maxStreams, - timeout: 240 - }; - - this.showScreen('discovery'); - this.resetDiscoveryUI(); - - // Start SSE stream - this.streamAPI.discover(request, { - onProgress: (data) => this.handleProgress(data), - onStreamFound: (data) => this.handleStreamFound(data), - onComplete: (data) => this.handleComplete(data), - onError: (error) => this.handleError(error) - }); - } - - resetDiscoveryUI() { - document.getElementById('progress-fill').style.width = '0%'; - document.getElementById('progress-text').textContent = 'Starting scan...'; - document.getElementById('streams-section').classList.add('hidden'); - this.currentStreams = []; - // Reset stream list state for fresh discovery - this.streamList.selectionMode = 'main'; - this.streamList.collapsedGroups.clear(); - this.streamList.collapsedSubgroups.clear(); - this.streamList.needsSmartDefaults = true; - } - - handleProgress(data) { - const total = data.tested + data.remaining; - const percentage = total > 0 ? (data.tested / total) * 100 : 0; - - document.getElementById('progress-fill').style.width = `${percentage}%`; - document.getElementById('progress-text').textContent = `Testing streams... ${Math.round(percentage)}%`; - } - - handleStreamFound(data) { - this.currentStreams.push(data.stream); - - // Show streams section if hidden - const streamsSection = document.getElementById('streams-section'); - if (streamsSection.classList.contains('hidden')) { - streamsSection.classList.remove('hidden'); - } - - // Update stream list (smart defaults applied automatically on first render) - this.streamList.render(this.currentStreams, (stream, index) => { - this.selectStream(stream, index); - }); - } - - handleComplete(data) { - document.getElementById('progress-fill').style.width = '100%'; - document.getElementById('progress-text').textContent = - `Scan complete! Found ${data.total_found} stream(s) in ${data.duration.toFixed(1)}s`; - - if (this.currentStreams.length === 0) { - showToast('No streams found. Try different credentials or model.'); - } - } - - handleError(error) { - console.error('Discovery error:', error); - showToast(`Error: ${error}`); - } - - selectStream(stream, index) { - if (!this.isSelectingSubStream) { - // Selecting main stream - this.selectedMainStream = stream; - this.selectedSubStream = null; - this.frigateConfigGenerated = false; // Reset Frigate config state - this.configPanel.render(this.selectedMainStream, this.selectedSubStream); - this.updateSubStreamUI(); - this.showScreen('output'); - // Hide action buttons initially since Frigate tab is active by default - document.querySelector('.actions').style.display = 'none'; - } else { - // Selecting sub stream - this.selectedSubStream = stream; - this.isSelectingSubStream = false; - this.frigateConfigGenerated = false; // Reset Frigate config state - this.configPanel.render(this.selectedMainStream, this.selectedSubStream); - this.updateSubStreamUI(); - this.showScreen('output'); - // Hide action buttons initially since Frigate tab is active by default - document.querySelector('.actions').style.display = 'none'; - } - } - - addSubStream() { - if (this.currentStreams.length === 0) { - showToast('No streams available to select'); - return; - } - - this.isSelectingSubStream = true; - - // Clear Frigate output section (but NOT the user's input textarea) - document.getElementById('frigate-output-section').classList.add('hidden'); - document.getElementById('config-frigate').textContent = ''; - - // Set stream list to sub selection mode (will collapse Main, show Sub) - this.streamList.setSelectionMode('sub'); - this.streamList.render(this.currentStreams, (stream, index) => { - this.selectStream(stream, index); - }); - - showToast('Select a sub stream from available streams'); - this.showScreen('discovery'); - } - - removeSubStream() { - this.selectedSubStream = null; - this.frigateConfigGenerated = false; // Reset Frigate config state when sub stream is removed - this.configPanel.render(this.selectedMainStream, this.selectedSubStream); - this.updateSubStreamUI(); - - // Hide action buttons if on Frigate tab - const activeTab = document.querySelector('.tab.active').dataset.tab; - if (activeTab === 'frigate') { - document.querySelector('.actions').style.display = 'none'; - } - - showToast('Sub stream removed'); - } - - /** - * Generate Frigate config by adding camera to existing config - */ - generateFrigateConfig() { - const existingConfig = document.getElementById('existing-frigate-config').value; - const mainStream = this.selectedMainStream; - const subStream = this.selectedSubStream; - - if (!mainStream) { - showToast('No main stream selected', 'error'); - return; - } - - try { - // Generate config using FrigateGenerator - const newConfig = FrigateGenerator.generate(existingConfig, mainStream, subStream); - - // Show result - document.getElementById('config-frigate').textContent = newConfig; - document.getElementById('frigate-output-section').classList.remove('hidden'); - - // Mark as generated and show action buttons - this.frigateConfigGenerated = true; - document.querySelector('.actions').style.display = 'flex'; - - // Scroll to result - document.getElementById('frigate-output-section').scrollIntoView({ - behavior: 'smooth', - block: 'nearest' - }); - - showToast('Config generated successfully!'); - } catch (error) { - showToast(`Error: ${error.message}`, 'error'); - console.error('Config generation error:', error); - } - } - - updateSubStreamUI() { - const subStreamInfo = document.getElementById('sub-stream-info'); - const addSubStreamBtn = document.getElementById('btn-add-sub-stream'); - - if (this.selectedSubStream) { - subStreamInfo.classList.remove('hidden'); - addSubStreamBtn.style.display = 'none'; - } else { - subStreamInfo.classList.add('hidden'); - addSubStreamBtn.style.display = 'inline-flex'; - } - } - - switchTab(tabName) { - // Update tab buttons - document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); - document.querySelector(`.tab[data-tab="${tabName}"]`).classList.add('active'); - - // Update tab panes - document.querySelectorAll('.tab-pane').forEach(p => p.classList.remove('active')); - document.querySelector(`.tab-pane[data-pane="${tabName}"]`).classList.add('active'); - - // Show/hide action buttons based on tab and Frigate config state - const actionsContainer = document.querySelector('.actions'); - if (tabName === 'frigate' && !this.frigateConfigGenerated) { - // Hide buttons on Frigate tab until config is generated - actionsContainer.style.display = 'none'; - } else { - // Show buttons for other tabs or after Frigate config is generated - actionsContainer.style.display = 'flex'; - } - } - - copyConfig() { - const activeTab = document.querySelector('.tab.active').dataset.tab; - const configElement = document.getElementById(`config-${activeTab}`); - const text = configElement.textContent; - - const textarea = document.createElement('textarea'); - textarea.value = text; - textarea.style.position = 'fixed'; - textarea.style.left = '-9999px'; - document.body.appendChild(textarea); - textarea.select(); - - try { - document.execCommand('copy'); - showToast('Copied to clipboard!'); - } catch (err) { - showToast('Failed to copy'); - console.error('Copy error:', err); - } finally { - document.body.removeChild(textarea); - } - } - - downloadConfig() { - const activeTab = document.querySelector('.tab.active').dataset.tab; - const configElement = document.getElementById(`config-${activeTab}`); - const text = configElement.textContent; - - const filename = activeTab === 'url' ? 'stream-url.txt' : `${activeTab}-config.yaml`; - const blob = new Blob([text], { type: 'text/plain' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = filename; - a.click(); - URL.revokeObjectURL(url); - - showToast('Downloaded!'); - } - - reset() { - this.currentAddress = ''; - this.currentStreams = []; - this.selectedMainStream = null; - this.selectedSubStream = null; - this.isSelectingSubStream = false; - - document.getElementById('network-address').value = ''; - document.getElementById('camera-model').value = ''; - document.getElementById('camera-model').disabled = false; - document.getElementById('camera-model').placeholder = 'Start typing...'; - document.getElementById('username').value = 'admin'; // Reset to default value - document.getElementById('password').value = ''; - document.getElementById('channel').value = '0'; - document.getElementById('max-streams').value = '10'; - document.getElementById('model-disabled-hint').classList.add('hidden'); - - this.hideAutocomplete(); - this.streamAPI.close(); - } -} - -// Initialize app -const app = new StrixApp(); diff --git a/webui/web/js/mock/mock-camera-api.js b/webui/web/js/mock/mock-camera-api.js deleted file mode 100644 index 8c4f124..0000000 --- a/webui/web/js/mock/mock-camera-api.js +++ /dev/null @@ -1,49 +0,0 @@ -// Mock implementation of CameraSearchAPI for development -export class MockCameraAPI { - constructor() { - this.mockCameras = [ - { brand: "Hikvision", model: "DS-2CD2042WD-I" }, - { brand: "Hikvision", model: "DS-2CD2142FWD-I" }, - { brand: "Hikvision", model: "DS-2CD2032-I" }, - { brand: "Hikvision", model: "DS-2CD2385G1-I" }, - { brand: "Dahua", model: "IPC-HFW4431R-Z" }, - { brand: "Dahua", model: "IPC-HDBW4433R-ZS" }, - { brand: "Dahua", model: "DH-IPC-HFW2431S-S-S2" }, - { brand: "Dahua", model: "IPC-HDW2531T-AS-S2" }, - { brand: "Axis", model: "M3046-V" }, - { brand: "Axis", model: "P3245-LVE" }, - { brand: "Axis", model: "M5525-E" }, - { brand: "Uniview", model: "IPC322SR3-DVS28-F" }, - { brand: "Uniview", model: "IPC2124SR3-DPF40" }, - { brand: "Reolink", model: "RLC-410" }, - { brand: "Reolink", model: "RLC-520A" }, - { brand: "Reolink", model: "RLC-810A" }, - { brand: "TP-Link", model: "VIGI C300HP-4" }, - { brand: "TP-Link", model: "VIGI C540V" }, - { brand: "Amcrest", model: "IP8M-2496EW" }, - { brand: "Amcrest", model: "IP4M-1041B" }, - { brand: "Foscam", model: "FI9900P" }, - { brand: "Foscam", model: "R5" }, - ]; - } - - async search(query, limit = 10) { - // Simulate network delay - await this.delay(150); - - const lowerQuery = query.toLowerCase(); - const filtered = this.mockCameras.filter(camera => { - const searchText = `${camera.brand} ${camera.model}`.toLowerCase(); - return searchText.includes(lowerQuery); - }); - - return { - cameras: filtered.slice(0, limit), - total: filtered.length - }; - } - - delay(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); - } -} diff --git a/webui/web/js/mock/mock-data.js b/webui/web/js/mock/mock-data.js deleted file mode 100644 index 2c0b328..0000000 --- a/webui/web/js/mock/mock-data.js +++ /dev/null @@ -1,209 +0,0 @@ -// Mock data for development and testing -export const MOCK_CAMERAS = [ - { brand: "Hikvision", model: "DS-2CD2143G0-I" }, - { brand: "Hikvision", model: "DS-2CD2385G1-I" }, - { brand: "Hikvision", model: "DS-2CD2T85G1-I8" }, - { brand: "Dahua", model: "IPC-HFW5831E-Z5E" }, - { brand: "Dahua", model: "IPC-HDW5831R-ZE" }, - { brand: "Axis", model: "M3046-V" }, - { brand: "Axis", model: "P3245-LVE" }, - { brand: "Uniview", model: "IPC2324LB-ADZK-G" }, - { brand: "Reolink", model: "RLC-810A" }, - { brand: "TP-Link", model: "VIGI C540V" } -]; - -export const MOCK_STREAMS = [ - { - url: "rtsp://admin:password@192.168.1.100:554/stream1", - type: "FFMPEG", - resolution: "1920x1080", - codec: "h264", - fps: 25, - bitrate: 4096, - audio: true - }, - { - url: "rtsp://admin:password@192.168.1.100:554/stream2", - type: "FFMPEG", - resolution: "640x360", - codec: "h264", - fps: 15, - bitrate: 512, - audio: true - }, - { - url: "http://admin:password@192.168.1.100:80/onvif/device_service", - type: "ONVIF", - resolution: "1920x1080", - codec: "h264", - fps: 25, - bitrate: 4096, - audio: false - }, - { - url: "rtsp://admin:password@192.168.1.100/live/main", - type: "FFMPEG", - resolution: "2560x1440", - codec: "h265", - fps: 30, - bitrate: 6144, - audio: true - }, - { - url: "rtsp://admin:password@192.168.1.100/live/sub", - type: "FFMPEG", - resolution: "704x576", - codec: "h264", - fps: 15, - bitrate: 768, - audio: false - }, - { - url: "rtsp://admin:password@192.168.1.100:554/ch01/0", - type: "FFMPEG", - resolution: "3840x2160", - codec: "h265", - fps: 25, - bitrate: 8192, - audio: true - }, - { - url: "rtsp://admin:password@192.168.1.100:554/ch01/1", - type: "FFMPEG", - resolution: "1280x720", - codec: "h264", - fps: 20, - bitrate: 2048, - audio: false - }, - { - url: "http://admin:password@192.168.1.100:8080/video.mjpeg", - type: "MJPEG", - resolution: "1920x1080", - codec: "mjpeg", - fps: 10, - bitrate: 3072, - audio: false - }, - { - url: "rtsp://admin:password@192.168.1.100/h264_stream", - type: "FFMPEG", - resolution: "1920x1080", - codec: "h264", - fps: 30, - bitrate: 4096, - audio: true - }, - { - url: "http://admin:password@192.168.1.100:8081/stream.m3u8", - type: "HLS", - resolution: "1920x1080", - codec: "h264", - fps: 25, - bitrate: 4096, - audio: true - } -]; - -// Mock Camera Search API -export class MockCameraSearch { - async search(query, limit = 10) { - // Simulate network delay - await this.delay(100); - - const results = MOCK_CAMERAS.filter(camera => { - const searchStr = `${camera.brand} ${camera.model}`.toLowerCase(); - return searchStr.includes(query.toLowerCase()); - }); - - return { - cameras: results.slice(0, limit), - total: results.length - }; - } - - delay(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); - } -} - -// Mock Stream Discovery API -export class MockStreamDiscovery { - constructor() { - this.isRunning = false; - this.timeoutId = null; - } - - discover(request, callbacks) { - this.isRunning = true; - let tested = 0; - const totalToTest = 516; - const foundStreams = [...MOCK_STREAMS]; - - // Initial progress - callbacks.onProgress({ - tested: 0, - found: 0, - remaining: totalToTest - }); - - // Simulate progressive testing - const progressInterval = setInterval(() => { - if (!this.isRunning) { - clearInterval(progressInterval); - return; - } - - tested += Math.floor(Math.random() * 30) + 20; - if (tested > totalToTest) tested = totalToTest; - - callbacks.onProgress({ - tested: tested, - found: foundStreams.length, - remaining: totalToTest - tested - }); - - if (tested >= totalToTest) { - clearInterval(progressInterval); - } - }, 200); - - // Send found streams progressively - let streamIndex = 0; - const streamInterval = setInterval(() => { - if (!this.isRunning) { - clearInterval(streamInterval); - return; - } - - if (streamIndex < foundStreams.length) { - callbacks.onStreamFound({ - stream: foundStreams[streamIndex] - }); - streamIndex++; - } else { - clearInterval(streamInterval); - } - }, 800); - - // Complete after ~7.7 seconds - this.timeoutId = setTimeout(() => { - if (!this.isRunning) return; - - callbacks.onComplete({ - total_found: foundStreams.length, - duration: 7.7 - }); - - this.isRunning = false; - }, 7700); - } - - close() { - this.isRunning = false; - if (this.timeoutId) { - clearTimeout(this.timeoutId); - this.timeoutId = null; - } - } -} diff --git a/webui/web/js/mock/mock-stream-api.js b/webui/web/js/mock/mock-stream-api.js deleted file mode 100644 index 5747a1b..0000000 --- a/webui/web/js/mock/mock-stream-api.js +++ /dev/null @@ -1,311 +0,0 @@ -// Mock implementation of StreamDiscoveryAPI for development -export class MockStreamAPI { - constructor() { - this.mockStreams = [ - // RTSP Main streams (1920x1080) - { - url: "rtsp://192.168.1.100:554/Streaming/Channels/101", - path: "/Streaming/Channels/101", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.264", - fps: 25, - bitrate: 4096000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/live/main", - path: "/live/main", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.264", - fps: 30, - bitrate: 4608000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/stream1", - path: "/stream1", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.265", - fps: 25, - bitrate: 3584000, - has_audio: true - }, - // JPEG snapshots (5 items in different positions) - { - url: "http://192.168.1.100/snap.jpg", - path: "/snap.jpg", - type: "JPEG", - resolution: "1920x1080", - codec: "JPEG", - fps: 1, - bitrate: 0, - has_audio: false - }, - // RTSP Sub streams (640x480) - { - url: "rtsp://192.168.1.100:554/Streaming/Channels/102", - path: "/Streaming/Channels/102", - type: "FFMPEG", - resolution: "640x480", - codec: "H.264", - fps: 5, - bitrate: 512000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/live/sub", - path: "/live/sub", - type: "FFMPEG", - resolution: "640x480", - codec: "H.264", - fps: 10, - bitrate: 768000, - has_audio: false - }, - // JPEG #2 - { - url: "http://192.168.1.100/cgi-bin/snapshot.cgi", - path: "/cgi-bin/snapshot.cgi", - type: "JPEG", - resolution: "1920x1080", - codec: "JPEG", - fps: 1, - bitrate: 0, - has_audio: false - }, - { - url: "rtsp://192.168.1.100:554/stream2", - path: "/stream2", - type: "FFMPEG", - resolution: "640x480", - codec: "H.264", - fps: 15, - bitrate: 640000, - has_audio: false - }, - // ONVIF streams - { - url: "rtsp://192.168.1.100:554/onvif/profile0", - path: "/onvif/profile0", - type: "ONVIF", - resolution: "1920x1080", - codec: "H.264", - fps: 25, - bitrate: 4096000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/onvif/profile1", - path: "/onvif/profile1", - type: "ONVIF", - resolution: "640x480", - codec: "H.264", - fps: 15, - bitrate: 512000, - has_audio: false - }, - // JPEG #3 - { - url: "http://192.168.1.100/image/jpeg.cgi", - path: "/image/jpeg.cgi", - type: "JPEG", - resolution: "1920x1080", - codec: "JPEG", - fps: 1, - bitrate: 0, - has_audio: false - }, - // More RTSP variants - { - url: "rtsp://192.168.1.100:554/cam/realmonitor?channel=1&subtype=0", - path: "/cam/realmonitor?channel=1&subtype=0", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.265", - fps: 30, - bitrate: 5120000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/cam/realmonitor?channel=1&subtype=1", - path: "/cam/realmonitor?channel=1&subtype=1", - type: "FFMPEG", - resolution: "640x480", - codec: "H.264", - fps: 10, - bitrate: 512000, - has_audio: false - }, - // MJPEG - { - url: "http://192.168.1.100/video.mjpg", - path: "/video.mjpg", - type: "MJPEG", - resolution: "1920x1080", - codec: "MJPEG", - fps: 10, - bitrate: 3072000, - has_audio: false - }, - // JPEG #4 - { - url: "http://192.168.1.100/Streaming/channels/1/picture", - path: "/Streaming/channels/1/picture", - type: "JPEG", - resolution: "1920x1080", - codec: "JPEG", - fps: 1, - bitrate: 0, - has_audio: false - }, - // HLS - { - url: "http://192.168.1.100/stream/live.m3u8", - path: "/stream/live.m3u8", - type: "HLS", - resolution: "1920x1080", - codec: "H.264", - fps: 25, - bitrate: 3072000, - has_audio: true - }, - // HTTP Video - { - url: "http://192.168.1.100/videostream.cgi?user=admin&pwd=12345", - path: "/videostream.cgi?user=admin&pwd=12345", - type: "HTTP_VIDEO", - resolution: "1920x1080", - codec: "H.264", - fps: 20, - bitrate: 2560000, - has_audio: false - }, - // BUBBLE - { - url: "bubble://192.168.1.100:34567/bubble/live?ch=0&stream=0", - path: "/bubble/live?ch=0&stream=0", - type: "BUBBLE", - resolution: "1920x1080", - codec: "H.264", - fps: 25, - bitrate: 3584000, - has_audio: true - }, - // JPEG #5 - { - url: "http://192.168.1.100/tmpfs/auto.jpg", - path: "/tmpfs/auto.jpg", - type: "JPEG", - resolution: "1920x1080", - codec: "JPEG", - fps: 1, - bitrate: 0, - has_audio: false - }, - // Additional RTSP - { - url: "rtsp://192.168.1.100:554/h264_stream", - path: "/h264_stream", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.264", - fps: 30, - bitrate: 4096000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/av0_0", - path: "/av0_0", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.264", - fps: 25, - bitrate: 3840000, - has_audio: true - }, - { - url: "rtsp://192.168.1.100:554/av0_1", - path: "/av0_1", - type: "FFMPEG", - resolution: "640x480", - codec: "H.264", - fps: 10, - bitrate: 512000, - has_audio: false - }, - { - url: "rtsp://192.168.1.100:554/unicast/c1/s0/live", - path: "/unicast/c1/s0/live", - type: "FFMPEG", - resolution: "1920x1080", - codec: "H.265", - fps: 25, - bitrate: 4608000, - has_audio: true - } - ]; - } - - discover(request, callbacks) { - const totalToScan = 450; - const streamsToFind = this.mockStreams; - let tested = 0; - let found = 0; - - const startTime = Date.now(); - - // Simulate progressive discovery - 1 stream per second - const progressInterval = setInterval(() => { - const increment = Math.floor(Math.random() * 15) + 10; - tested = Math.min(tested + increment, totalToScan); - const remaining = totalToScan - tested; - - // Send progress event - if (callbacks.onProgress) { - callbacks.onProgress({ - tested: tested, - found: found, - remaining: remaining - }); - } - - // Complete when done - if (tested >= totalToScan) { - clearInterval(progressInterval); - - const duration = (Date.now() - startTime) / 1000; - - if (callbacks.onComplete) { - callbacks.onComplete({ - total_tested: totalToScan, - total_found: found, - duration: duration - }); - } - } - }, 300); - - // Find streams at ~1 per second - const streamInterval = setInterval(() => { - if (found < streamsToFind.length) { - const stream = streamsToFind[found]; - found++; - - if (callbacks.onStreamFound) { - callbacks.onStreamFound({ - stream: stream - }); - } - } else { - clearInterval(streamInterval); - } - }, 1000); - } - - close() { - // Nothing to close in mock mode - } -} diff --git a/webui/web/js/ui/config-panel.js b/webui/web/js/ui/config-panel.js deleted file mode 100644 index 5c1abc1..0000000 --- a/webui/web/js/ui/config-panel.js +++ /dev/null @@ -1,98 +0,0 @@ -import { Go2RTCGenerator } from '../config-generators/go2rtc/index.js'; -// import { FrigateGenerator } from '../config-generators/frigate/index.js'; // Reserved for future use - -export class ConfigPanel { - constructor() { - this.mainStream = null; - this.subStream = null; - } - - render(mainStream, subStream = null) { - this.mainStream = mainStream; - this.subStream = subStream; - - // Update main stream info - document.getElementById('selected-main-type').textContent = mainStream.type; - document.getElementById('selected-main-url').textContent = this.maskCredentials(mainStream.url); - - // Update sub stream info if provided - if (subStream) { - document.getElementById('selected-sub-type').textContent = subStream.type; - document.getElementById('selected-sub-url').textContent = this.maskCredentials(subStream.url); - } - - // Generate configs for URL and Go2RTC (as before) - const urlConfig = this.generateURLConfig(); - const go2rtcConfig = Go2RTCGenerator.generate(mainStream, subStream); - - // Update config displays - document.getElementById('config-url').textContent = urlConfig; - document.getElementById('config-go2rtc').textContent = go2rtcConfig; - - // For Frigate: initialize the tab instead of generating automatically - this.initializeFrigateTab(); - } - - /** - * Initialize Frigate tab with example config - */ - initializeFrigateTab() { - const textarea = document.getElementById('existing-frigate-config'); - const outputSection = document.getElementById('frigate-output-section'); - - // Show example config if field is empty - if (!textarea.value || textarea.value.trim() === '') { - textarea.value = this.getExampleConfig(); - } - - // Hide output section - outputSection.classList.add('hidden'); - document.getElementById('config-frigate').textContent = ''; - } - - /** - * Get example Frigate config - */ - getExampleConfig() { - return `mqtt: - enabled: false - -# Global Recording Settings -record: - enabled: true - retain: - days: 7 - mode: motion # Record only on motion detection - -# Go2RTC Configuration (Frigate built-in) -go2rtc: - streams: - # Your existing streams will be preserved here - -# Frigate Camera Configuration -cameras: - # Your existing cameras will be preserved here - -version: 0.16-0`; - } - - generateURLConfig() { - if (this.subStream) { - return `Main Stream:\n${this.mainStream.url}\n\nSub Stream:\n${this.subStream.url}`; - } - return this.mainStream.url; - } - - maskCredentials(url) { - try { - const urlObj = new URL(url); - if (urlObj.username || urlObj.password) { - urlObj.username = urlObj.username ? '***' : ''; - urlObj.password = urlObj.password ? '***' : ''; - } - return urlObj.toString(); - } catch (e) { - return url; - } - } -} diff --git a/webui/web/js/ui/modal.js b/webui/web/js/ui/modal.js deleted file mode 100644 index 96f0693..0000000 --- a/webui/web/js/ui/modal.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Simple modal dialog component. - * Shows a centered card with title, message, and configurable buttons. - * Returns a Promise that resolves with the clicked button's id. - * - * Usage: - * const result = await showModal({ - * title: 'Device Unreachable', - * message: 'This IP is not responding.', - * buttons: [ - * { id: 'change', label: 'Change IP', style: 'primary' }, - * { id: 'continue', label: 'Continue Anyway', style: 'outline' } - * ] - * }); - */ - -let currentResolve = null; - -export function showModal({ title, message, buttons }) { - return new Promise((resolve) => { - currentResolve = resolve; - - const overlay = document.getElementById('modal-overlay'); - - // Clear previous content safely - overlay.replaceChildren(); - - // Build modal DOM using safe DOM methods - const modal = document.createElement('div'); - modal.className = 'modal'; - - const titleEl = document.createElement('div'); - titleEl.className = 'modal-title'; - titleEl.textContent = title; - modal.appendChild(titleEl); - - const messageEl = document.createElement('div'); - messageEl.className = 'modal-message'; - messageEl.textContent = message; - modal.appendChild(messageEl); - - const actionsEl = document.createElement('div'); - actionsEl.className = 'modal-actions'; - - buttons.forEach(btnConfig => { - const btn = document.createElement('button'); - btn.className = `btn btn-${btnConfig.style || 'outline'}`; - btn.textContent = btnConfig.label; - btn.addEventListener('click', () => { - hideModal(); - resolve(btnConfig.id); - }); - actionsEl.appendChild(btn); - }); - - modal.appendChild(actionsEl); - overlay.appendChild(modal); - - // Close on overlay click (outside modal) - overlay.addEventListener('click', (e) => { - if (e.target === overlay) { - hideModal(); - resolve(null); - } - }); - - // Show with animation - overlay.classList.remove('hidden'); - requestAnimationFrame(() => { - overlay.classList.add('show'); - }); - }); -} - -export function hideModal() { - const overlay = document.getElementById('modal-overlay'); - overlay.classList.remove('show'); - setTimeout(() => { - overlay.classList.add('hidden'); - overlay.replaceChildren(); - }, 200); - currentResolve = null; -} diff --git a/webui/web/js/ui/search-form.js b/webui/web/js/ui/search-form.js deleted file mode 100644 index a5b2df5..0000000 --- a/webui/web/js/ui/search-form.js +++ /dev/null @@ -1,6 +0,0 @@ -// Placeholder for future form-specific logic -export class SearchForm { - constructor() { - // Reserved for form validation and helpers - } -} diff --git a/webui/web/js/ui/stream-carousel.js b/webui/web/js/ui/stream-carousel.js deleted file mode 100644 index 372e75b..0000000 --- a/webui/web/js/ui/stream-carousel.js +++ /dev/null @@ -1,157 +0,0 @@ -export class StreamCarousel { - constructor() { - this.track = document.getElementById('carousel-track'); - this.prevBtn = document.getElementById('carousel-prev'); - this.nextBtn = document.getElementById('carousel-next'); - this.counter = document.getElementById('carousel-counter'); - this.dotsContainer = document.getElementById('carousel-dots'); - - this.streams = []; - this.currentIndex = 0; - this.onUseCallback = null; - } - - render(streams, onUseCallback) { - this.streams = streams; - this.onUseCallback = onUseCallback; - this.currentIndex = Math.min(this.currentIndex, streams.length - 1); - - // Render stream cards - this.track.innerHTML = streams.map((stream, index) => this.renderCard(stream, index)).join(''); - - // Render dots - this.dotsContainer.innerHTML = streams.map((_, index) => - `` - ).join(''); - - // Attach event listeners - this.attachEventListeners(); - - // Update view - this.updateView(); - } - - renderCard(stream, index) { - const icon = this.getStreamIcon(stream.type); - - return ` -
-
- ${icon} - ${stream.type} -
-
${this.truncateURL(stream.url)}
- ${stream.resolution ? `
Resolution: ${stream.resolution}
` : ''} - ${stream.codec ? `
Codec: ${stream.codec}${stream.fps ? ` • ${stream.fps} fps` : ''}${stream.bitrate ? ` • ${Math.round(stream.bitrate / 1000)} Kbps` : ''}
` : ''} - ${stream.has_audio ? '
Audio: Yes
' : ''} -
- -
-
- `; - } - - getStreamIcon(type) { - const icons = { - 'FFMPEG': '', - 'ONVIF': '', - 'JPEG': '', - 'MJPEG': '', - 'HLS': '', - 'HTTP_VIDEO': '' - }; - return icons[type] || icons['FFMPEG']; - } - - truncateURL(url) { - if (url.length > 50) { - return url.substring(0, 47) + '...'; - } - return url; - } - - attachEventListeners() { - // Use buttons - this.track.querySelectorAll('.btn-use').forEach(btn => { - btn.addEventListener('click', (e) => { - const index = parseInt(e.target.dataset.index); - if (this.onUseCallback) { - this.onUseCallback(this.streams[index], index); - } - }); - }); - - // Dots - this.dotsContainer.querySelectorAll('.carousel-dot').forEach(dot => { - dot.addEventListener('click', (e) => { - const index = parseInt(e.target.dataset.index); - this.goTo(index); - }); - }); - - // Touch gestures - let touchStartX = 0; - let touchEndX = 0; - - this.track.addEventListener('touchstart', (e) => { - touchStartX = e.changedTouches[0].screenX; - }); - - this.track.addEventListener('touchend', (e) => { - touchEndX = e.changedTouches[0].screenX; - this.handleSwipe(touchStartX, touchEndX); - }); - } - - handleSwipe(startX, endX) { - const swipeThreshold = 50; - const diff = startX - endX; - - if (Math.abs(diff) > swipeThreshold) { - if (diff > 0) { - this.next(); - } else { - this.prev(); - } - } - } - - prev() { - if (this.currentIndex > 0) { - this.goTo(this.currentIndex - 1); - } - } - - next() { - if (this.currentIndex < this.streams.length - 1) { - this.goTo(this.currentIndex + 1); - } - } - - goTo(index) { - if (index < 0 || index >= this.streams.length) return; - - this.currentIndex = index; - this.updateView(); - } - - updateView() { - // Update track position - const offset = -100 * this.currentIndex; - this.track.style.transform = `translateX(${offset}%)`; - - // Update counter - this.counter.textContent = `Stream ${this.currentIndex + 1} of ${this.streams.length}`; - - // Update dots - this.dotsContainer.querySelectorAll('.carousel-dot').forEach((dot, i) => { - dot.classList.toggle('active', i === this.currentIndex); - }); - - // Update arrow buttons - this.prevBtn.disabled = this.currentIndex === 0; - this.nextBtn.disabled = this.currentIndex === this.streams.length - 1; - } -} diff --git a/webui/web/js/ui/stream-list.js b/webui/web/js/ui/stream-list.js deleted file mode 100644 index 694a5d1..0000000 --- a/webui/web/js/ui/stream-list.js +++ /dev/null @@ -1,562 +0,0 @@ -export class StreamList { - constructor() { - this.listContainer = document.getElementById('streams-list'); - this.streams = []; - this.onUseCallback = null; - this.expandedIndex = null; - // Track collapsed state for groups and subgroups - this.collapsedGroups = new Set(); - this.collapsedSubgroups = new Set(); - // Selection mode: 'main' or 'sub' - this.selectionMode = 'main'; - // Flag to apply smart defaults on first render after reset - this.needsSmartDefaults = true; - } - - /** - * Set selection mode and apply smart defaults for collapsed state - * Only resets collapsed state when mode actually changes - */ - setSelectionMode(mode) { - if (this.selectionMode === mode) return; - - this.selectionMode = mode; - this.applySmartDefaults(); - } - - /** - * Apply smart collapsed defaults based on current selection mode and available streams - */ - applySmartDefaults() { - // Get current stream classification - const recommended = this.streams.filter(s => this.isRecommended(s)); - const { main, sub, other } = this.classifyRecommendedStreams( - recommended.map((stream, i) => ({ stream, index: i })) - ); - - // Reset all collapsed states - this.collapsedGroups.clear(); - this.collapsedSubgroups.clear(); - - if (this.selectionMode === 'main') { - // Main mode: show Main, collapse Sub/Other/Alternative - if (main.length > 0) { - // Has main streams - collapse everything except Main - this.collapsedGroups.add('alternative'); - this.collapsedSubgroups.add('recommended-sub'); - this.collapsedSubgroups.add('recommended-other'); - } - // If no main streams - leave everything open - } else { - // Sub mode: show Sub, collapse Main/Other/Alternative - if (sub.length > 0) { - // Has sub streams - collapse everything except Sub - this.collapsedGroups.add('alternative'); - this.collapsedSubgroups.add('recommended-main'); - this.collapsedSubgroups.add('recommended-other'); - } - // If no sub streams - leave everything open - } - } - - // Stream types considered "recommended" (standard video streams) - static RECOMMENDED_TYPES = ['FFMPEG', 'ONVIF']; - - // Minimum width threshold for Main streams (HD quality) - static MIN_MAIN_WIDTH = 720; - - // Minimum gap between resolutions to split Main/Sub - static MIN_GAP_FOR_SPLIT = 400; - - isRecommended(stream) { - return StreamList.RECOMMENDED_TYPES.includes(stream.type); - } - - /** - * Parse resolution string "1920x1080" to width number - * Returns null if resolution is missing or invalid - */ - parseResolutionWidth(resolution) { - if (!resolution) return null; - const match = resolution.match(/^(\d+)x(\d+)$/); - if (!match) return null; - return parseInt(match[1], 10); - } - - /** - * Classify recommended streams into Main/Sub/Other using clustering algorithm - * - * Algorithm: - * 1. Streams with width >= 720 are candidates for Main - * 2. Streams with width < 720 go to Sub - * 3. Streams without resolution go to Other - * 4. Among Main candidates, find max gap between sorted resolutions - * 5. If gap > 400px, split into Main (higher) and Sub (lower) - */ - classifyRecommendedStreams(items) { - const main = []; - const sub = []; - const other = []; - - // First pass: separate by resolution availability and threshold - const mainCandidates = []; // width >= 720 - - items.forEach(item => { - const width = this.parseResolutionWidth(item.stream.resolution); - - if (width === null) { - other.push(item); - } else if (width < StreamList.MIN_MAIN_WIDTH) { - sub.push(item); - } else { - mainCandidates.push({ ...item, width }); - } - }); - - // If no main candidates or only one, no need to cluster - if (mainCandidates.length <= 1) { - mainCandidates.forEach(item => main.push({ stream: item.stream, index: item.index })); - return { main, sub, other }; - } - - // Sort candidates by width descending - mainCandidates.sort((a, b) => b.width - a.width); - - // Find the largest gap between adjacent resolutions - let maxGap = 0; - let splitIndex = -1; - - for (let i = 0; i < mainCandidates.length - 1; i++) { - const gap = mainCandidates[i].width - mainCandidates[i + 1].width; - if (gap > maxGap) { - maxGap = gap; - splitIndex = i; - } - } - - // If max gap is significant, split into Main and Sub - if (maxGap > StreamList.MIN_GAP_FOR_SPLIT && splitIndex >= 0) { - mainCandidates.forEach((item, i) => { - const cleanItem = { stream: item.stream, index: item.index }; - if (i <= splitIndex) { - main.push(cleanItem); - } else { - sub.push(cleanItem); - } - }); - } else { - // All candidates stay in Main - mainCandidates.forEach(item => { - main.push({ stream: item.stream, index: item.index }); - }); - } - - return { main, sub, other }; - } - - render(streams, onUseCallback) { - this.streams = streams; - this.onUseCallback = onUseCallback; - - // Apply smart defaults on first render after reset - if (this.needsSmartDefaults && streams.length > 0) { - this.needsSmartDefaults = false; - this.applySmartDefaults(); - } - - // Split streams into groups while preserving original indices - const recommended = []; - const alternative = []; - - streams.forEach((stream, index) => { - if (this.isRecommended(stream)) { - recommended.push({ stream, index }); - } else { - alternative.push({ stream, index }); - } - }); - - // Render only non-empty groups - let html = ''; - if (recommended.length > 0) { - html += this.renderRecommendedGroup(recommended); - } - if (alternative.length > 0) { - html += this.renderGroup('Alternative', alternative, 'alternative'); - } - this.listContainer.innerHTML = html; - - // Attach event listeners - this.attachEventListeners(); - } - - /** - * Render Recommended group with Main/Sub/Other subgroups - */ - renderRecommendedGroup(items) { - const { main, sub, other } = this.classifyRecommendedStreams(items); - const totalCount = items.length; - const isCollapsed = this.collapsedGroups.has('recommended'); - - let subgroupsHtml = ''; - - if (main.length > 0) { - subgroupsHtml += this.renderSubgroup('Main', main, 'recommended'); - } - if (sub.length > 0) { - subgroupsHtml += this.renderSubgroup('Sub', sub, 'recommended'); - } - if (other.length > 0) { - subgroupsHtml += this.renderSubgroup('Other', other, 'recommended'); - } - - return ` - - `; - } - - /** - * Render a subgroup (Main/Sub/Other) within Recommended - */ - renderSubgroup(title, items, parentGroup) { - const subgroupKey = `${parentGroup}-${title.toLowerCase()}`; - const isCollapsed = this.collapsedSubgroups.has(subgroupKey); - - return ` -
-
- - ${title} - (${items.length}) -
-
- ${items.map(({ stream, index }) => this.renderItem(stream, index)).join('')} -
-
- `; - } - - renderGroup(title, items, groupClass) { - const count = items.length; - const isCollapsed = this.collapsedGroups.has(groupClass); - - return ` -
-
- - ${title} - (${count}) -
-
- ${items.map(({ stream, index }) => this.renderItem(stream, index)).join('')} -
-
- `; - } - - renderItem(stream, index) { - const icon = this.getStreamIcon(stream.type); - const isExpanded = this.expandedIndex === index; - const truncatedUrl = this.truncateURL(stream.url, 60); - - return ` -
-
-
-
-
- ${icon} - ${stream.type} - ${this.getStreamTypeTooltip(stream.type)} -
-
${truncatedUrl}
-
- -
- -
-
-
${stream.url}
- ${stream.resolution ? `
Resolution: ${stream.resolution}
` : ''} - ${stream.codec ? `
Codec: ${stream.codec}${stream.fps ? ` • ${stream.fps} fps` : ''}${stream.bitrate ? ` • ${Math.round(stream.bitrate / 1000)} Kbps` : ''}
` : ''} - ${stream.has_audio ? '
Audio: Yes
' : ''} -
-
- `; - } - - truncateURL(url, maxLength = 60) { - if (url.length <= maxLength) { - return url; - } - return url.substring(0, maxLength) + '...'; - } - - getStreamIcon(type) { - const icons = { - 'FFMPEG': '', - 'ONVIF': '', - 'JPEG': '', - 'MJPEG': '', - 'HLS': '', - 'HTTP_VIDEO': '', - 'BUBBLE': '' - }; - return icons[type] || icons['FFMPEG']; - } - - getStreamTypeTooltip(type) { - const tooltips = { - 'FFMPEG': ` - - - - - -
-
FFMPEG Stream
-

Standard video stream decoded by FFmpeg. Most compatible and widely supported format for RTSP, HTTP, and other protocols.

-
-
Features:
- ✓ Universal compatibility - ✓ Supports H.264, H.265, MJPEG - ✓ Works with most cameras - ✓ Best for recording -
-

Best for: Main streams, recording, high-quality playback. Default choice for most use cases.

-
-
- `, - 'ONVIF': ` - - - - - -
-
ONVIF Stream
-

Industry standard protocol for IP cameras. Discovered via ONVIF specification, ensuring maximum compatibility with camera features.

-
-
Features:
- ✓ Standardized protocol - ✓ Auto-discovery support - ✓ PTZ control capable - ✓ Vendor-independent -
-

Best for: Enterprise cameras, systems requiring standardization, cameras with PTZ controls.

-
-
- `, - 'JPEG': ` - - - - - -
-
JPEG Snapshot
-

Single static image endpoint. Can be converted to video stream by repeatedly fetching images.

-
-
Features:
- ✓ Low bandwidth - ✓ Simple HTTP request - ✓ No streaming protocol needed - ⚠ Limited framerate (1-10 fps) -
-

Best for: Thumbnails, snapshots, very low bandwidth scenarios. Not recommended for recording.

-
-
- `, - 'MJPEG': ` - - - - - -
-
MJPEG Stream
-

Motion JPEG - sequence of JPEG images transmitted continuously. Simple but bandwidth-intensive.

-
-
Features:
- ✓ Simple HTTP streaming - ✓ No complex codecs - ✓ Frame-by-frame - ⚠ High bandwidth usage -
-

Best for: Sub streams, low-latency monitoring, simple camera integration. Higher bandwidth than H.264.

-
-
- `, - 'HLS': ` - - - - - -
-
HLS Stream
-

HTTP Live Streaming - Apple's adaptive bitrate streaming protocol. Delivers video in small chunks over HTTP.

-
-
Features:
- ✓ Adaptive bitrate - ✓ Wide browser support - ✓ Firewall-friendly (HTTP) - ⚠ Higher latency (5-30s) -
-

Best for: Web playback, public streaming, CDN delivery. Not ideal for real-time monitoring.

-
-
- `, - 'HTTP_VIDEO': ` - - - - - -
-
HTTP Video Stream
-

Generic HTTP-based video stream. Simple protocol that works over standard web connections.

-
-
Features:
- ✓ Simple HTTP protocol - ✓ No special ports - ✓ Firewall-friendly - ✓ Direct browser playback -
-

Best for: Quick viewing, simple setups, scenarios where RTSP ports are blocked.

-
-
- `, - 'BUBBLE': ` - - - - - -
-
BUBBLE / DVRIP Protocol
-

Proprietary protocol for Chinese DVR/NVR cameras. Also known as: ESeeCloud, dvr163, DVR-IP, NetSurveillance, Sofia protocol, XMeye SDK.

-
-
Compatible brands:
- XMEye, Floureon, ZOSI - Sannce, Annke, DVR163 - ESeeCloud, NetSurveillance -
-
-
Features:
- ⚠ Proprietary protocol - ✓ Go2RTC converts to standard - ✓ Two-way audio support - ⚠ TCP only (port 34567) -
-

Note: Automatically converted to standard RTSP format by Go2RTC. Works seamlessly with Frigate without additional configuration.

-
-
- ` - }; - return tooltips[type] || ''; - } - - attachEventListeners() { - // Group header toggle (Recommended, Alternative) - this.listContainer.querySelectorAll('.stream-group-header').forEach(header => { - header.addEventListener('click', (e) => { - const groupKey = header.dataset.group; - if (groupKey) { - this.toggleGroup(groupKey); - } - }); - }); - - // Subgroup header toggle (Main, Sub, Other) - this.listContainer.querySelectorAll('.stream-subgroup-header').forEach(header => { - header.addEventListener('click', (e) => { - e.stopPropagation(); // Don't bubble to group header - const subgroupKey = header.dataset.subgroup; - if (subgroupKey) { - this.toggleSubgroup(subgroupKey); - } - }); - }); - - // Click on stream item header to toggle details - this.listContainer.querySelectorAll('.stream-item-header').forEach(header => { - header.addEventListener('click', (e) => { - // Don't toggle if clicking "Use Stream" button - if (e.target.closest('.btn-use-stream')) { - return; - } - - const index = parseInt(header.dataset.index); - this.toggleExpand(index); - }); - }); - - // Use Stream buttons - this.listContainer.querySelectorAll('.btn-use-stream').forEach(btn => { - btn.addEventListener('click', (e) => { - e.stopPropagation(); // Prevent toggle - const index = parseInt(e.target.dataset.index); - if (this.onUseCallback) { - this.onUseCallback(this.streams[index], index); - } - }); - }); - } - - toggleGroup(groupKey) { - if (this.collapsedGroups.has(groupKey)) { - this.collapsedGroups.delete(groupKey); - } else { - this.collapsedGroups.add(groupKey); - } - this.render(this.streams, this.onUseCallback); - } - - toggleSubgroup(subgroupKey) { - if (this.collapsedSubgroups.has(subgroupKey)) { - this.collapsedSubgroups.delete(subgroupKey); - } else { - this.collapsedSubgroups.add(subgroupKey); - } - this.render(this.streams, this.onUseCallback); - } - - toggleExpand(index) { - if (this.expandedIndex === index) { - // Collapse if already expanded - this.expandedIndex = null; - } else { - // Expand new item - this.expandedIndex = index; - } - - // Re-render to update state - this.render(this.streams, this.onUseCallback); - } -} diff --git a/webui/web/js/utils/toast.js b/webui/web/js/utils/toast.js deleted file mode 100644 index df30bbe..0000000 --- a/webui/web/js/utils/toast.js +++ /dev/null @@ -1,13 +0,0 @@ -export function showToast(message, duration = 3000) { - const toast = document.getElementById('toast'); - toast.textContent = message; - toast.classList.remove('hidden'); - toast.classList.add('show'); - - setTimeout(() => { - toast.classList.remove('show'); - setTimeout(() => { - toast.classList.add('hidden'); - }, 250); - }, duration); -} From 4d171f69c742d6c270c1c6b3c8270fcd6fd4275a Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 11:28:47 +0000 Subject: [PATCH 10/33] Add Dockerfile, fix SQLite immutable mode, URL-encode credentials - Dockerfile: multi-stage build with golang:1.26 and alpine + ffmpeg - SQLite: use file: URI with immutable=1 for read-only access - URL builder: encode user/pass with PathEscape/QueryEscape for special characters (@, \, :, etc.) - Health endpoint: truncate uptime to seconds - Release skill: update smoke test to /api endpoint - Remove unused ValidateID function --- .claude/skills/release_strix/SKILL.md | 2 +- Dockerfile | 28 +++++++++++++++++++ internal/api/api.go | 2 +- internal/probe/probe.go | 2 +- internal/search/search.go | 2 +- pkg/camdb/streams.go | 40 ++++++++------------------- 6 files changed, 44 insertions(+), 32 deletions(-) create mode 100644 Dockerfile diff --git a/.claude/skills/release_strix/SKILL.md b/.claude/skills/release_strix/SKILL.md index 27a6c07..0d7a0e8 100644 --- a/.claude/skills/release_strix/SKILL.md +++ b/.claude/skills/release_strix/SKILL.md @@ -121,7 +121,7 @@ Verify the new version tag exists and both amd64 and arm64 platforms are present ```bash docker run --rm -d --name strix-smoke-test -p 14567:4567 eduard256/strix:$VERSION sleep 5 -curl -s http://localhost:14567/api/v1/health | jq '.version' +curl -s http://localhost:14567/api | jq '.version' docker stop strix-smoke-test ``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cfb72ac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM golang:1.26-alpine AS builder + +RUN apk add --no-cache gcc musl-dev + +WORKDIR /src +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +ARG VERSION=dev +RUN CGO_ENABLED=1 go build -ldflags "-s -w -X main.version=${VERSION}" -o /strix . + +FROM alpine:latest + +RUN apk add --no-cache ffmpeg ca-certificates + +COPY --from=builder /strix /usr/local/bin/strix + +WORKDIR /app +COPY cameras.db . + +EXPOSE 4567 + +HEALTHCHECK --interval=30s --timeout=3s CMD wget -q --spider http://localhost:4567/api/health || exit 1 + +USER nobody +ENTRYPOINT ["strix"] diff --git a/internal/api/api.go b/internal/api/api.go index 601f0b4..cf86300 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -108,7 +108,7 @@ func apiHandler(w http.ResponseWriter, r *http.Request) { func apiHealth(w http.ResponseWriter, r *http.Request) { ResponseJSON(w, map[string]any{ "version": app.Version, - "uptime": time.Since(app.StartTime).String(), + "uptime": time.Since(app.StartTime).Truncate(time.Second).String(), }) } diff --git a/internal/probe/probe.go b/internal/probe/probe.go index f56e679..109b789 100644 --- a/internal/probe/probe.go +++ b/internal/probe/probe.go @@ -29,7 +29,7 @@ func Init() { log = app.GetLogger("probe") var err error - db, err = sql.Open("sqlite3", app.DB+"?mode=ro") + db, err = sql.Open("sqlite3", "file:"+app.DB+"?mode=ro&immutable=1") if err != nil { log.Error().Err(err).Msg("[probe] db open") } diff --git a/internal/search/search.go b/internal/search/search.go index 00a8d70..732dd18 100644 --- a/internal/search/search.go +++ b/internal/search/search.go @@ -21,7 +21,7 @@ func Init() { log = app.GetLogger("search") var err error - db, err = sql.Open("sqlite3", app.DB+"?mode=ro") + db, err = sql.Open("sqlite3", "file:"+app.DB+"?mode=ro&immutable=1") if err != nil { log.Fatal().Err(err).Msg("[search] db open") } diff --git a/pkg/camdb/streams.go b/pkg/camdb/streams.go index 251adb3..7207008 100644 --- a/pkg/camdb/streams.go +++ b/pkg/camdb/streams.go @@ -3,8 +3,8 @@ package camdb import ( "database/sql" "encoding/base64" - "errors" "fmt" + "net/url" "strconv" "strings" ) @@ -125,26 +125,6 @@ func BuildStreams(db *sql.DB, p *StreamParams) ([]string, error) { return streams, nil } -// ValidateID checks if id format is valid -func ValidateID(id string) error { - switch { - case strings.HasPrefix(id, "b:"): - if len(id) < 3 { - return errors.New("camdb: empty brand id") - } - case strings.HasPrefix(id, "m:"): - if strings.Count(id, ":") < 2 { - return fmt.Errorf("camdb: invalid model id: %s", id) - } - case strings.HasPrefix(id, "p:"): - if len(id) < 3 { - return errors.New("camdb: empty preset id") - } - default: - return fmt.Errorf("camdb: unknown prefix: %s", id) - } - return nil -} // internals @@ -153,7 +133,7 @@ func buildURL(protocol, path, ip string, port int, user, pass string, channel in var auth string if user != "" { - auth = user + ":" + pass + "@" + auth = url.PathEscape(user) + ":" + url.PathEscape(pass) + "@" } host := ip @@ -174,6 +154,10 @@ func replacePlaceholders(s, ip string, port int, user, pass string, channel int) auth = base64.StdEncoding.EncodeToString([]byte(user + ":" + pass)) } + // URL-encode credentials for safe use in query parameters + encUser := url.QueryEscape(user) + encPass := url.QueryEscape(pass) + pairs := []string{ "[CHANNEL]", strconv.Itoa(channel), "[channel]", strconv.Itoa(channel), @@ -183,12 +167,12 @@ func replacePlaceholders(s, ip string, port int, user, pass string, channel int) "[channel+1]", strconv.Itoa(channel + 1), "{CHANNEL+1}", strconv.Itoa(channel + 1), "{channel+1}", strconv.Itoa(channel + 1), - "[USERNAME]", user, "[username]", user, - "[USER]", user, "[user]", user, - "[PASSWORD]", pass, "[password]", pass, - "[PASWORD]", pass, "[pasword]", pass, - "[PASS]", pass, "[pass]", pass, - "[PWD]", pass, "[pwd]", pass, + "[USERNAME]", encUser, "[username]", encUser, + "[USER]", encUser, "[user]", encUser, + "[PASSWORD]", encPass, "[password]", encPass, + "[PASWORD]", encPass, "[pasword]", encPass, + "[PASS]", encPass, "[pass]", encPass, + "[PWD]", encPass, "[pwd]", encPass, "[WIDTH]", "640", "[width]", "640", "[HEIGHT]", "480", "[height]", "480", "[IP]", ip, "[ip]", ip, From bfeae738e377bda4932796892d7fb26eb215d033 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 17:37:20 +0000 Subject: [PATCH 11/33] Add add_protocol skill, update release skills with DB download step --- .claude/skills/add_protocol_strix/SKILL.md | 563 +++++++++++++++++++++ .claude/skills/release_strix/SKILL.md | 32 +- .claude/skills/release_strix_dev/SKILL.md | 16 +- 3 files changed, 597 insertions(+), 14 deletions(-) create mode 100644 .claude/skills/add_protocol_strix/SKILL.md diff --git a/.claude/skills/add_protocol_strix/SKILL.md b/.claude/skills/add_protocol_strix/SKILL.md new file mode 100644 index 0000000..0f47de5 --- /dev/null +++ b/.claude/skills/add_protocol_strix/SKILL.md @@ -0,0 +1,563 @@ +--- +name: add_protocol_strix +description: Add a new protocol support to Strix -- full flow from research to implementation. Covers stream handler registration, URL builder updates, database issues, and go2rtc integration. +disable-model-invocation: true +argument-hint: [protocol-name] +--- + +# Add Protocol to Strix + +You are adding support for a new protocol to Strix. Follow every step in order. Be thorough -- read all referenced files completely before writing any code. + +The protocol name is provided as argument (e.g. `/add_protocol_strix bubble`). If no argument, use AskUserQuestion to ask which protocol to add. + +## Repositories + +- Strix: `/home/user/Strix` +- go2rtc: `/home/user/go2rtc` (reference implementation, read-only) +- StrixCamDB: issues at https://github.com/eduard256/StrixCamDB/issues (for database updates) + +--- + +## STEP 0: Understand the existing RTSP implementation (REFERENCE) + +Before doing anything, read these files completely to understand the patterns: + +``` +/home/user/Strix/pkg/tester/source.go -- handler registry + RTSP reference implementation +/home/user/Strix/pkg/tester/worker.go -- how handlers are called, screenshot logic +/home/user/Strix/pkg/tester/session.go -- session data structures +/home/user/Strix/pkg/camdb/streams.go -- URL builder, placeholder replacement +/home/user/Strix/internal/test/test.go -- API layer for tester +/home/user/Strix/internal/search/search.go -- search API (rarely needs changes) +``` + +### How RTSP works (the reference pattern) + +**Registration** in `pkg/tester/source.go`: +```go +var handlers = map[string]SourceHandler{} + +func RegisterSource(scheme string, handler SourceHandler) { + handlers[scheme] = handler +} + +func init() { + RegisterSource("rtsp", rtspHandler) + RegisterSource("rtsps", rtspHandler) + RegisterSource("rtspx", rtspHandler) +} +``` + +**Handler** -- receives a URL string, returns go2rtc `core.Producer`: +```go +func rtspHandler(rawURL string) (core.Producer, error) { + rawURL, _, _ = strings.Cut(rawURL, "#") + + conn := rtsp.NewClient(rawURL) + conn.Backchannel = false + + if err := conn.Dial(); err != nil { + return nil, fmt.Errorf("rtsp: dial: %w", err) + } + + if err := conn.Describe(); err != nil { + _ = conn.Stop() + return nil, fmt.Errorf("rtsp: describe: %w", err) + } + + return conn, nil +} +``` + +**Data flow**: URL -> GetHandler(url) -> handler(url) -> core.Producer -> GetMedias() -> codecs, latency -> getScreenshot() -> Result + +**Key**: The handler ONLY needs to return a `core.Producer`. Everything else (codecs extraction, screenshot capture, session management) is handled automatically by `worker.go`. + +### How URLs are built in `pkg/camdb/streams.go`: + +1. Database has URL templates like `/cam/realmonitor?channel=[CHANNEL]&subtype=0` +2. `replacePlaceholders()` substitutes `[CHANNEL]`, `[USERNAME]`, `[PASSWORD]`, etc. +3. `buildURL()` prepends `protocol://user:pass@host:port` to the path +4. Credentials are URL-encoded with `url.PathEscape` / `url.QueryEscape` + +Default ports are defined in `defaultPorts` map: +```go +var defaultPorts = map[string]int{ + "rtsp": 554, "rtsps": 322, "http": 80, "https": 443, + "rtmp": 1935, "mms": 554, "rtp": 5004, +} +``` + +--- + +## STEP 1: Research the protocol in go2rtc + +go2rtc already implements most camera protocols. Study the implementation: + +### Where to look in go2rtc + +| What | Where | +|------|-------| +| Protocol client logic | `/home/user/go2rtc/pkg/{protocol}/` | +| Module registration | `/home/user/go2rtc/internal/{protocol}/` | +| Core interfaces | `/home/user/go2rtc/pkg/core/core.go` | +| Stream handler registry | `/home/user/go2rtc/internal/streams/handlers.go` | +| Keyframe capture | `/home/user/go2rtc/pkg/magic/keyframe.go` | + +### Protocol map in go2rtc + +| Protocol | pkg/ (Dial function) | internal/ (Init glue) | +|----------|---------------------|----------------------| +| rtsp/rtsps | `pkg/rtsp/client.go` | `internal/rtsp/rtsp.go` | +| http/https | `pkg/magic/producer.go`, `pkg/tcp/request.go` | `internal/http/http.go` | +| rtmp | `pkg/rtmp/` | `internal/rtmp/rtmp.go` | +| bubble | `pkg/bubble/` | `internal/bubble/bubble.go` | +| dvrip | `pkg/dvrip/` | `internal/dvrip/dvrip.go` | +| onvif | `pkg/onvif/` | `internal/onvif/onvif.go` | +| homekit | `pkg/homekit/`, `pkg/hap/` | `internal/homekit/homekit.go` | +| tapo | `pkg/tapo/` | `internal/tapo/tapo.go` | +| kasa | `pkg/kasa/` | `internal/kasa/kasa.go` | +| eseecloud | `pkg/eseecloud/` | `internal/eseecloud/eseecloud.go` | +| nest | `pkg/nest/` | `internal/nest/init.go` | +| ring | `pkg/ring/` | `internal/ring/ring.go` | +| wyze | `pkg/wyze/` | `internal/wyze/wyze.go` | +| xiaomi | `pkg/xiaomi/` | `internal/xiaomi/xiaomi.go` | +| tuya | `pkg/tuya/` | `internal/tuya/tuya.go` | +| doorbird | `pkg/doorbird/` | `internal/doorbird/doorbird.go` | +| isapi | `pkg/isapi/` | `internal/isapi/init.go` | +| flussonic | `pkg/flussonic/` | `internal/flussonic/flussonic.go` | +| gopro | `pkg/gopro/` | `internal/gopro/gopro.go` | +| roborock | `pkg/roborock/` | `internal/roborock/roborock.go` | + +### What to read + +1. Read `/home/user/go2rtc/internal/{protocol}/{protocol}.go` -- find `streams.HandleFunc` call, understand what function is called and how +2. Read `/home/user/go2rtc/pkg/{protocol}/` -- find the `Dial()` or `NewClient()` function, understand its signature and what it returns +3. Understand: does it return `core.Producer`? Does it need special setup before Dial? Does it need credentials differently? + +### Typical go2rtc internal module (e.g. kasa -- simplest): +```go +package kasa + +import ( + "github.com/AlexxIT/go2rtc/internal/streams" + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/kasa" +) + +func Init() { + streams.HandleFunc("kasa", func(source string) (core.Producer, error) { + return kasa.Dial(source) + }) +} +``` + +Most protocols follow this exact pattern: `pkg/{protocol}.Dial(url)` returns `core.Producer`. + +--- + +## STEP 2: Classify the protocol + +Use AskUserQuestion to discuss with the user. Determine the protocol type: + +### Type A: Standard URL-based protocol (rtsp, rtmp, bubble, dvrip, http, etc.) + +- Has URL scheme (e.g. `bubble://host:port/path`) +- URLs stored in StrixCamDB database +- Flow: user searches camera -> gets URL templates -> URLs built with credentials -> sent to tester +- Needs: stream handler in tester + default port in URL builder + database issue + +### Type B: Custom/discovery protocol (homekit, onvif, etc.) + +- Does NOT use standard URL templates from database +- Has custom discovery or authentication flow +- Data comes from probe endpoint or direct user input, NOT from camera search +- Needs: source handler in tester with custom logic, possibly probe endpoint update +- Does NOT need database issue + +### Type C: HTTP sub-protocol (mjpeg, jpeg snapshot, hls) + +- Uses http:// or https:// URL scheme +- Already has URLs in database (same as HTTP) +- Needs special handling in tester based on Content-Type response +- Needs: stream handler that detects content type and handles accordingly + +--- + +## STEP 3: For Type A -- Create StrixCamDB issue + +ONLY for Type A protocols that have URL patterns stored in the database. + +Create a GitHub issue using `gh` CLI for the new protocol: + +```bash +cd /home/user/Strix +gh issue create --repo eduard256/StrixCamDB \ + --title "[New Protocol] {PROTOCOL_NAME}" \ + --label "new-protocol" \ + --body "$(cat <<'ISSUE_EOF' +```yaml +protocol: {PROTOCOL_NAME} +default_port: {PORT} +url_format: {EXAMPLE_URL_PATTERN} +``` + +## Description + +{DESCRIPTION -- what cameras use this, what firmware, how it works} + +## Known brands + +- {BRAND1} +- {BRAND2} + +## URL patterns + +- {PATTERN1} -- main stream +- {PATTERN2} -- sub stream + +## Where to research + +- go2rtc source: https://github.com/AlexxIT/go2rtc/tree/master/pkg/{PROTOCOL_NAME} +- ispyconnect: search for "{PROTOCOL_NAME}" cameras + +## Notes + +{ANY_NOTES} +ISSUE_EOF +)" +``` + +If the protocol introduces new placeholders (e.g. `[STREAM]`), create a separate issue: + +```bash +gh issue create --repo eduard256/StrixCamDB \ + --title "[New Placeholder] {PLACEHOLDER}" \ + --label "new-placeholder" \ + --body "$(cat <<'ISSUE_EOF' +placeholder: "{PLACEHOLDER}" +alternatives: ["{alt1}", "{alt2}"] +description: "{WHAT_IT_DOES}" +example_values: ["{VAL1}", "{VAL2}"] + +## URL examples + +- {URL_EXAMPLE_1} +- {URL_EXAMPLE_2} + +## Known brands using this + +- {BRAND1} +- {BRAND2} +ISSUE_EOF +)" +``` + +DO NOT wait for issue approval. Continue immediately to the next step. + +--- + +## STEP 4: Update URL builder (Type A only) + +If the protocol needs a new default port, edit `/home/user/Strix/pkg/camdb/streams.go`: + +Add the port to `defaultPorts` map: +```go +var defaultPorts = map[string]int{ + "rtsp": 554, "rtsps": 322, "http": 80, "https": 443, + "rtmp": 1935, "mms": 554, "rtp": 5004, + // add new protocol here: + "bubble": 80, +} +``` + +If the protocol needs new placeholders in `replacePlaceholders()`, add them to the pairs slice. Follow the existing pattern -- both `[UPPER]` and `[lower]` variants, plus `{curly}` variants. + +### Files to edit for URL builder: +- `/home/user/Strix/pkg/camdb/streams.go` -- `defaultPorts` map and `replacePlaceholders()` function + +--- + +## STEP 5: Add stream handler to tester + +### Before writing code + +1. Read ALL existing handlers in `/home/user/Strix/pkg/tester/source.go` completely +2. Read the go2rtc pkg/ implementation for this protocol (Step 1) +3. Understand what the `Dial()` function needs and returns + +### For standard protocols (Type A, most Type C) + +Most protocols follow the same pattern as RTSP. The handler: +1. Takes a URL string +2. Calls go2rtc's `pkg/{protocol}.Dial(url)` or equivalent +3. Returns `core.Producer` + +Add the handler to `/home/user/Strix/pkg/tester/source.go`. + +**Pattern for simple protocols** (bubble, dvrip, rtmp, kasa, etc.): + +```go +import "github.com/AlexxIT/go2rtc/pkg/{protocol}" + +// in init(): +RegisterSource("{scheme}", {scheme}Handler) + +// handler: +func {scheme}Handler(rawURL string) (core.Producer, error) { + return {protocol}.Dial(rawURL) +} +``` + +If the protocol needs extra setup before Dial (like RTSP needs `Backchannel = false`), add it. Study the go2rtc internal module to see what setup is done. + +**Pattern for protocols that need connection setup** (like RTSP): + +```go +func {scheme}Handler(rawURL string) (core.Producer, error) { + rawURL, _, _ = strings.Cut(rawURL, "#") + + conn := {protocol}.NewClient(rawURL) + // any setup specific to this protocol + + if err := conn.Dial(); err != nil { + return nil, fmt.Errorf("{scheme}: dial: %w", err) + } + + // protocol-specific validation (like RTSP Describe) + + return conn, nil +} +``` + +### For custom protocols (Type B -- homekit, onvif, etc.) + +These protocols do NOT go through the standard URL -> handler flow. They need a **source handler** that receives custom parameters and produces results directly. + +The current architecture uses `SourceHandler func(rawURL string) (core.Producer, error)` for standard protocols. For custom protocols, you need to: + +1. Extend the POST /api/test request to accept custom source blocks +2. Handle them separately from the `streams` array + +Current request format: +```json +{ + "sources": { + "streams": ["rtsp://...", "http://..."] + } +} +``` + +Extended format for custom protocols: +```json +{ + "sources": { + "streams": ["rtsp://...", "http://..."], + "homekit": {"device_id": "AA:BB:CC", "pin": "123-45-678"}, + "onvif": {"host": "192.168.1.100", "username": "admin", "password": "pass"} + } +} +``` + +To implement this: + +1. Define a source handler type in `/home/user/Strix/pkg/tester/source.go`: +```go +// SourceBlockHandler processes a custom source block, writes results directly to session +type SourceBlockHandler func(data json.RawMessage, s *Session) + +var sourceHandlers = map[string]SourceBlockHandler{} + +func RegisterSourceBlock(name string, handler SourceBlockHandler) { + sourceHandlers[name] = handler +} +``` + +2. Update `/home/user/Strix/internal/test/test.go` `apiTestCreate()` to parse and dispatch custom source blocks. + +3. Write the handler for your protocol. It receives raw JSON and a Session, and is responsible for: + - Parsing its own parameters + - Running its own discovery/test logic + - Adding Results to the Session + - Calling `s.AddTested()` for progress tracking + +**IMPORTANT**: Before implementing a custom protocol, discuss the approach with the user. Custom protocols are rare and need careful design. + +--- + +## STEP 6: Test the implementation + +### Build and verify + +```bash +cd /home/user/Strix +go build ./... +``` + +If it compiles, test with the running container: + +```bash +# rebuild image +docker build -t strix:test . + +# restart container +docker rm -f strix +docker run -d --name strix --network host --restart unless-stopped strix:test + +# check logs +docker logs strix + +# test the new protocol (example for bubble) +curl -s -X POST http://localhost:4567/api/test \ + -H 'Content-Type: application/json' \ + -d '{"sources":{"streams":["bubble://admin:password@192.168.1.100:80/"]}}' +``` + +### What to verify + +1. Handler is registered -- check logs for no errors at startup +2. URLs with the new scheme are dispatched to the correct handler +3. If Type A: verify `/api/streams` returns URLs with correct scheme and port +4. Test with a real device if available + +--- + +## STEP 7: Commit and push + +```bash +cd /home/user/Strix +git add -A +git commit -m "Add {protocol} protocol support + +- Register {protocol} stream handler using go2rtc pkg/{protocol} +- Add default port {port} for {protocol} scheme +- {any other changes}" + +git push origin develop +``` + +--- + +## CODE STYLE RULES + +All code MUST follow AlexxIT go2rtc style: + +### File organization +- One handler per protocol is fine in `source.go` if it's a one-liner (`return pkg.Dial(url)`) +- If handler needs >10 lines of custom logic, create `source_{protocol}.go` +- Keep `source.go` as the registry + simple handlers +- Complex protocols get their own file + +### Naming +- Handler: `{scheme}Handler` (e.g. `bubbleHandler`, `rtmpHandler`) +- Error prefix: `"{scheme}: dial: ..."` or `"{scheme}: ..."` +- Short var names: `conn` for connection, `prod` for producer + +### Error handling +- Wrap errors with protocol prefix: `fmt.Errorf("bubble: dial: %w", err)` +- Close/stop connections on error: `_ = conn.Stop()` +- Return nil Producer on error, never a half-initialized one + +### Comments +- Comment ONLY if the "why" is not obvious +- No docstrings on every function +- Inline examples: `// ex. "bubble://admin:pass@192.168.1.100:80/"` + +### Imports +- go2rtc packages: `"github.com/AlexxIT/go2rtc/pkg/{protocol}"` +- Always import `"github.com/AlexxIT/go2rtc/pkg/core"` for Producer interface +- Group: stdlib, then go2rtc, then project packages + +--- + +## go2rtc INTERNALS REFERENCE + +### core.Producer interface (pkg/core/core.go) + +Every protocol handler must return something that implements `core.Producer`: + +```go +type Producer interface { + GetMedias() []*Media // what tracks are available (video/audio codecs) + GetTrack(media *Media, codec *Codec) (*Receiver, error) // get specific track + Start() error // start receiving packets (blocking) + Stop() error // close connection +} +``` + +The tester uses: +1. `GetMedias()` -- to list codecs (H264, AAC, etc.) +2. `GetTrack()` + `Start()` -- to capture screenshot (keyframe) +3. `Stop()` -- to clean up + +### How screenshot works (pkg/tester/worker.go) + +1. `getScreenshot(prod)` is called after successful Dial +2. Creates `magic.NewKeyframe()` consumer +3. Matches video media between producer and consumer +4. Gets track via `prod.GetTrack()` +5. Starts `prod.Start()` in goroutine (blocking -- reads packets) +6. Waits for first keyframe via `cons.WriteTo()` with 10s timeout +7. If H264/H265 -- converts to JPEG via ffmpeg +8. If already JPEG -- uses as-is + +This works automatically for ANY protocol that returns a valid `core.Producer`. You do NOT need to implement screenshot logic per protocol. + +### magic.NewKeyframe() (pkg/magic/keyframe.go) + +Captures first video keyframe from any Producer. Supports H264, H265, JPEG, MJPEG. The tester uses this -- you never call it directly from a protocol handler. + +### Connection patterns in go2rtc + +**Simple Dial** (most protocols): +```go +// pkg/bubble/client.go +func Dial(rawURL string) (core.Producer, error) { + // parse URL, connect, return producer +} +``` + +**Client with setup** (rtsp): +```go +// pkg/rtsp/client.go +conn := rtsp.NewClient(rawURL) +conn.Backchannel = false // optional setup +conn.Dial() // TCP connect +conn.Describe() // RTSP DESCRIBE (gets SDP) +// conn is now a Producer +``` + +**HTTP-based** (complex -- content type detection): +```go +// pkg/magic/producer.go +// Opens HTTP connection, detects Content-Type: +// - multipart/x-mixed-replace -> MJPEG +// - image/jpeg -> single JPEG frame +// - application/vnd.apple.mpegurl -> HLS +// - video/mp2t -> MPEG-TS +// - etc. +``` + +### TCP/TLS connection (pkg/tcp/) + +Many protocols use `pkg/tcp` for low-level connection: +- `tcp.Dial(rawURL)` -- TCP connect with timeout +- `tcp.Client` -- HTTP client with digest/basic auth +- Used by RTSP, HTTP, and others internally + +--- + +## CHECKLIST BEFORE FINISHING + +- [ ] Read all existing protocol handlers in `source.go` +- [ ] Read go2rtc pkg/ and internal/ for this protocol +- [ ] Determined protocol type (A/B/C) +- [ ] For Type A: created StrixCamDB issue (protocol + placeholders if needed) +- [ ] For Type A: added default port to `defaultPorts` in `streams.go` (if not already there) +- [ ] Added handler registration in `source.go` init() or new file +- [ ] Handler follows RTSP pattern: Dial -> return Producer +- [ ] Error messages prefixed with protocol name +- [ ] Connections closed on error +- [ ] Code compiles: `go build ./...` +- [ ] Committed and pushed to develop diff --git a/.claude/skills/release_strix/SKILL.md b/.claude/skills/release_strix/SKILL.md index 0d7a0e8..5cf4a86 100644 --- a/.claude/skills/release_strix/SKILL.md +++ b/.claude/skills/release_strix/SKILL.md @@ -47,7 +47,19 @@ Offer options: Wait for answer. Store the chosen version as VERSION (without "v" prefix). -## Step 3: Verify build +## Step 3: Download latest camera database + +```bash +cd /home/user/Strix +gh release download latest --repo eduard256/StrixCamDB --pattern "cameras.db" --clobber +``` + +Verify the database was downloaded: +```bash +ls -lh cameras.db +``` + +## Step 4: Verify build ```bash cd /home/user/Strix @@ -57,7 +69,7 @@ go build ./... If tests or build fail -- STOP and report the error. Do not continue. -## Step 4: Update CHANGELOG.md +## Step 5: Update CHANGELOG.md Read `/home/user/Strix/CHANGELOG.md`. Add a new section at the top (after the header lines), based on the commits from Step 1. Follow the existing format exactly: @@ -76,7 +88,7 @@ Read `/home/user/Strix/CHANGELOG.md`. Add a new section at the top (after the he Use today's date. Categorize commits into Added/Fixed/Changed/Technical sections. Only include sections that have entries. Write clear, user-facing descriptions (not raw commit messages). -## Step 5: Git -- commit, merge, tag, push +## Step 6: Git -- commit, merge, tag, push ```bash cd /home/user/Strix @@ -94,7 +106,7 @@ git merge main git push origin develop ``` -## Step 6: Build and push Docker image +## Step 7: Build and push Docker image ```bash cd /home/user/Strix @@ -107,7 +119,7 @@ docker buildx build --platform linux/amd64,linux/arm64 \ --push . ``` -## Step 7: Verify Docker Hub +## Step 8: Verify Docker Hub ```bash curl -s "https://hub.docker.com/v2/repositories/eduard256/strix/tags/?page_size=10" | jq '.results[].name' @@ -116,7 +128,7 @@ docker manifest inspect eduard256/strix:$VERSION | jq '.manifests[].platform' Verify the new version tag exists and both amd64 and arm64 platforms are present. -## Step 8: Smoke test +## Step 9: Smoke test ```bash docker run --rm -d --name strix-smoke-test -p 14567:4567 eduard256/strix:$VERSION @@ -127,7 +139,7 @@ docker stop strix-smoke-test Verify the health endpoint returns the correct version string. -## Step 9: Update hassio-strix +## Step 10: Update hassio-strix ```bash cd /home/user/hassio-strix @@ -136,7 +148,7 @@ git pull origin main Edit `/home/user/hassio-strix/strix/config.json` -- change `"version"` to the new VERSION. -Edit `/home/user/hassio-strix/strix/CHANGELOG.md` -- add the same CHANGELOG section as in Step 4. +Edit `/home/user/hassio-strix/strix/CHANGELOG.md` -- add the same CHANGELOG section as in Step 5. ```bash cd /home/user/hassio-strix @@ -145,7 +157,7 @@ git commit -m "Release v$VERSION" git push origin main ``` -## Step 10: GitHub Release +## Step 11: GitHub Release ```bash cd /home/user/Strix @@ -155,7 +167,7 @@ gh release create v$VERSION \ --notes "$(git log --oneline ${PREV_TAG}..v$VERSION)" ``` -## Step 11: Final report +## Step 12: Final report Output a summary: diff --git a/.claude/skills/release_strix_dev/SKILL.md b/.claude/skills/release_strix_dev/SKILL.md index b7b6df9..1880574 100644 --- a/.claude/skills/release_strix_dev/SKILL.md +++ b/.claude/skills/release_strix_dev/SKILL.md @@ -22,21 +22,29 @@ git rev-parse --short HEAD Store this as COMMIT_HASH (e.g. `fe93aa3`). -## Step 2: Build Docker image +## Step 2: Download latest camera database + +```bash +cd /home/user/Strix +gh release download latest --repo eduard256/StrixCamDB --pattern "cameras.db" --clobber +ls -lh cameras.db +``` + +## Step 3: Build Docker image ```bash cd /home/user/Strix docker build --build-arg VERSION=dev-$COMMIT_HASH -t eduard256/strix:dev -t eduard256/strix:dev-$COMMIT_HASH . ``` -## Step 3: Push to Docker Hub +## Step 4: Push to Docker Hub ```bash docker push eduard256/strix:dev docker push eduard256/strix:dev-$COMMIT_HASH ``` -## Step 4: Update hassio-strix +## Step 5: Update hassio-strix ```bash cd /home/user/hassio-strix @@ -52,7 +60,7 @@ git commit -m "Dev build dev-$COMMIT_HASH" git push origin main ``` -## Step 5: Report +## Step 6: Report Output a summary: From 0bf2a83e9d46107675dad774c9c63ca4ddab1fdb Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 17:42:22 +0000 Subject: [PATCH 12/33] Add probe detector skill --- .../skills/add_probe_detector_strix/SKILL.md | 316 ++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100644 .claude/skills/add_probe_detector_strix/SKILL.md diff --git a/.claude/skills/add_probe_detector_strix/SKILL.md b/.claude/skills/add_probe_detector_strix/SKILL.md new file mode 100644 index 0000000..df94c85 --- /dev/null +++ b/.claude/skills/add_probe_detector_strix/SKILL.md @@ -0,0 +1,316 @@ +--- +name: add_probe_detector_strix +description: Add a new device type detector to the Strix probe system. Covers adding new probers, result types, and detector functions. +disable-model-invocation: true +argument-hint: [detector-name] +--- + +# Add Probe Detector to Strix + +You are adding a new device type detector to the Strix probe system. The probe system runs when a user enters an IP address -- it discovers what's at that IP and determines the device type. The device type drives the frontend flow. + +The detector name is provided as argument (e.g. `/add_probe_detector_strix onvif`). If no argument, use AskUserQuestion to ask which detector to add. + +## Repository + +- Strix: `/home/user/Strix` +- go2rtc (reference): `/home/user/go2rtc` + +--- + +## STEP 0: Understand the probe system + +Before writing anything, read these files COMPLETELY: + +``` +/home/user/Strix/internal/probe/probe.go -- glue: Init(), runProbe(), detectors, API handler +/home/user/Strix/pkg/probe/models.go -- all data structures (Response, Probes, result types) +/home/user/Strix/pkg/probe/ping.go -- prober example: ICMP ping +/home/user/Strix/pkg/probe/ports.go -- prober example: TCP port scan +/home/user/Strix/pkg/probe/arp.go -- prober example: ARP lookup +/home/user/Strix/pkg/probe/dns.go -- prober example: reverse DNS +/home/user/Strix/pkg/probe/http.go -- prober example: HTTP HEAD request +/home/user/Strix/pkg/probe/mdns.go -- prober example: HomeKit mDNS query +/home/user/Strix/pkg/probe/oui.go -- prober example: OUI vendor lookup +``` + +Read ALL of them. Every prober is different. Understand the full picture before proceeding. + +### How the probe system works + +The probe has three layers: + +**Layer 1: Probers** (`pkg/probe/`) + +Pure functions that gather raw data about an IP address. Each runs in parallel with a shared 100ms timeout context. They do NOT interpret results -- just collect facts. + +Current probers: +- `Ping()` -- ICMP echo, returns latency +- `ScanPorts()` -- TCP connect to all known camera ports, returns open ports +- `ReverseDNS()` -- reverse DNS lookup, returns hostname +- `LookupARP()` -- reads /proc/net/arp, returns MAC address +- `LookupOUI()` -- looks up MAC prefix in SQLite, returns vendor name +- `ProbeHTTP()` -- HTTP HEAD to ports 80/8080, returns status + server header +- `QueryHAP()` -- mDNS query for HomeKit Accessory Protocol, returns device info + +Every prober writes its result into `resp.Probes.{Name}` via mutex. + +**Layer 2: Detectors** (`internal/probe/probe.go`) + +Functions registered in the `detectors` slice. They run AFTER all probers complete. Each detector receives the full `*probe.Response` with all probe results and returns a device type string (or empty string to pass). + +```go +var detectors []func(*probe.Response) string +``` + +Detectors are checked in order. First non-empty result wins and sets `resp.Type`. + +Default type is `"standard"`. If device is unreachable, type is `"unreachable"`. + +**Layer 3: API** (`internal/probe/probe.go`) + +`GET /api/probe?ip=192.168.1.100` returns the full Response JSON. The frontend uses `type` field to decide which UI flow to show. + +### Data flow + +``` +IP address + | + v +[All probers run in parallel, 100ms timeout] + | + v +probe.Response filled with results + | + v +[Detectors run in order on the Response] + | + v +resp.Type = "homekit" | "standard" | "unreachable" | ... + | + v +JSON response to frontend +``` + +### API response example + +```json +{ + "ip": "192.168.1.100", + "reachable": true, + "latency_ms": 2.5, + "type": "homekit", + "probes": { + "ping": {"latency_ms": 2.5}, + "ports": {"open": [80, 554, 5353]}, + "dns": {"hostname": "camera.local"}, + "arp": {"mac": "C0:56:E3:AA:BB:CC", "vendor": "Hikvision"}, + "mdns": { + "name": "My Camera", + "device_id": "AA:BB:CC:DD:EE:FF", + "model": "Camera 1080p", + "category": "camera", + "paired": false, + "port": 80 + }, + "http": {"port": 80, "status_code": 200, "server": "nginx"} + } +} +``` + +--- + +## STEP 1: Determine what you need + +Use AskUserQuestion to discuss with the user. There are two scenarios: + +### Scenario A: Detector only (using existing probe data) + +The detector can determine device type from data already collected by existing probers. No new prober needed. + +Examples: +- Detect ONVIF cameras by checking if port 80 is open and HTTP server header contains "onvif" or specific vendor strings +- Detect specific brands by ARP vendor name +- Detect UPnP devices by checking specific open ports + +In this case: skip to STEP 3. + +### Scenario B: New prober + detector + +Need to collect new data that existing probers don't provide. Requires adding a new prober to `pkg/probe/` and a new result type to `models.go`. + +Examples: +- ONVIF discovery (send ONVIF GetCapabilities request) +- UPnP SSDP discovery +- Specific protocol handshake + +In this case: proceed to STEP 2. + +--- + +## STEP 2: Add new prober (Scenario B only) + +### 2a: Add result type to models.go + +Edit `/home/user/Strix/pkg/probe/models.go`: + +1. Add new result struct: +```go +type {Name}Result struct { + // fields specific to this probe +} +``` + +2. Add field to `Probes` struct: +```go +type Probes struct { + Ping *PingResult `json:"ping"` + Ports *PortsResult `json:"ports"` + DNS *DNSResult `json:"dns"` + ARP *ARPResult `json:"arp"` + MDNS *MDNSResult `json:"mdns"` + HTTP *HTTPResult `json:"http"` + {Name} *{Name}Result `json:"{name}"` // add here +} +``` + +### 2b: Write prober function + +Create `/home/user/Strix/pkg/probe/{name}.go`. + +Rules: +- Pure function, no app/api imports +- Takes `context.Context` and `ip string` as first params +- Returns `(*{Name}Result, error)` +- Respects context deadline (timeout comes from runProbe) +- Returns `nil, nil` when device doesn't support this (NOT an error) +- Keep it simple -- one file, one function + +Pattern: +```go +package probe + +import "context" + +func Probe{Name}(ctx context.Context, ip string) (*{Name}Result, error) { + // respect context deadline + deadline, ok := ctx.Deadline() + if !ok { + // set sensible default + } + + // do the probe work... + + // not supported = nil, nil (not an error) + // found = &{Name}Result{...}, nil + // actual error = nil, err +} +``` + +### 2c: Wire prober into runProbe + +Edit `/home/user/Strix/internal/probe/probe.go`, add to `runProbe()` alongside other probers: + +```go +run(func() { + r, _ := probe.Probe{Name}(ctx, ip) + mu.Lock() + resp.Probes.{Name} = r + mu.Unlock() +}) +``` + +All probers run in parallel inside the same `run()` pattern. The mutex protects writes to `resp.Probes`. + +--- + +## STEP 3: Add detector function + +Edit `/home/user/Strix/internal/probe/probe.go`, add detector in `Init()`: + +```go +// {Name} detector +detectors = append(detectors, func(r *probe.Response) string { + // check probe results to determine device type + // return type string or "" to pass + if r.Probes.{Something} != nil && {condition} { + return "{type_name}" + } + return "" +}) +``` + +### Detector rules + +1. Return a SHORT type string: `"homekit"`, `"onvif"`, `"tapo"`, etc. +2. Return `""` (empty) to pass to the next detector +3. Detectors run in order -- put more specific detectors BEFORE generic ones +4. A detector can use ANY combination of probe results (ports, HTTP, ARP, mDNS, custom) +5. Don't do network I/O in detectors -- all data should come from probers + +### Type string convention + +The type string is used by the frontend to select UI flow: +- `"unreachable"` -- device not found (set automatically, don't return this) +- `"standard"` -- default, normal camera (set automatically if no detector matches) +- `"homekit"` -- Apple HomeKit device +- Custom types: lowercase, one word, matches the protocol/brand name + +--- + +## STEP 4: Build and test + +```bash +cd /home/user/Strix +go build ./... +``` + +If it compiles, rebuild Docker and test: + +```bash +docker build -t strix:test . +docker rm -f strix +docker run -d --name strix --network host --restart unless-stopped strix:test +sleep 2 + +# test probe on a known device +curl -s "http://localhost:4567/api/probe?ip={DEVICE_IP}" | python3 -m json.tool +``` + +Verify: +1. New probe data appears in `probes` object (if new prober added) +2. `type` field correctly identifies the device +3. No errors in `docker logs strix` + +--- + +## STEP 5: Commit and push + +```bash +cd /home/user/Strix +git add -A +git commit -m "Add {name} probe detector" +git push origin develop +``` + +--- + +## CODE STYLE + +### pkg/probe/ files +- One file per prober +- Pure functions, no globals, no app imports +- `context.Context` as first param for anything with I/O +- Return `nil, nil` for "not applicable" (not an error) +- Short names: `conn`, `resp`, `buf` + +### internal/probe/probe.go +- Detectors are inline anonymous functions in Init() +- Keep detector logic minimal -- just check fields and return type +- If detector logic is complex (>10 lines), extract to a named function in the same file + +### models.go +- All result structs in one file +- JSON tags use lowercase with underscores +- Optional fields use `omitempty` +- Pointer types for probe results (nil = not collected) From b060a5372ee5a0421f11b0858fc992d70e3155f3 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 18:15:31 +0000 Subject: [PATCH 13/33] Add frigate connectivity check endpoint --- internal/frigate/frigate.go | 47 +++++++++++++++++++++++++++++++++++++ main.go | 2 ++ 2 files changed, 49 insertions(+) create mode 100644 internal/frigate/frigate.go diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go new file mode 100644 index 0000000..7fbe507 --- /dev/null +++ b/internal/frigate/frigate.go @@ -0,0 +1,47 @@ +package frigate + +import ( + "fmt" + "net/http" + "time" + + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + "github.com/rs/zerolog" +) + +var log zerolog.Logger +var frigateURL string + +func Init() { + log = app.GetLogger("frigate") + + frigateURL = app.Env("STRIX_FRIGATE_URL", "http://localhost:5000") + + log.Info().Str("url", frigateURL).Msg("[frigate] target") + + api.HandleFunc("api/frigate/check", apiCheck) +} + +func apiCheck(w http.ResponseWriter, r *http.Request) { + client := &http.Client{Timeout: 3 * time.Second} + + resp, err := client.Get(frigateURL + "/api/config") + if err != nil { + api.ResponseJSON(w, map[string]any{ + "connected": false, + "url": frigateURL, + "error": err.Error(), + }) + return + } + resp.Body.Close() + + api.ResponseJSON(w, map[string]any{ + "connected": true, + "url": frigateURL, + "status_code": resp.StatusCode, + "version": resp.Header.Get("X-Frigate-Version"), + "message": fmt.Sprintf("Frigate API responded with %d", resp.StatusCode), + }) +} diff --git a/main.go b/main.go index 499e0de..eb097da 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "github.com/eduard256/strix/internal/api" "github.com/eduard256/strix/internal/app" + "github.com/eduard256/strix/internal/frigate" "github.com/eduard256/strix/internal/generate" "github.com/eduard256/strix/internal/probe" "github.com/eduard256/strix/internal/search" @@ -24,6 +25,7 @@ func main() { {"test", test.Init}, {"probe", probe.Init}, {"generate", generate.Init}, + {"frigate", frigate.Init}, } for _, m := range modules { From a9ab7e2ba6a6a990df28737c52de0a083e0d080f Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 18:30:38 +0000 Subject: [PATCH 14/33] Add Frigate autodiscovery via HA Supervisor API --- internal/frigate/frigate.go | 174 +++++++++++++++++++++++++++++++++--- 1 file changed, 161 insertions(+), 13 deletions(-) diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index 7fbe507..e29ab40 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -1,8 +1,10 @@ package frigate import ( + "encoding/json" "fmt" "net/http" + "os" "time" "github.com/eduard256/strix/internal/api" @@ -16,7 +18,7 @@ var frigateURL string func Init() { log = app.GetLogger("frigate") - frigateURL = app.Env("STRIX_FRIGATE_URL", "http://localhost:5000") + frigateURL = detectFrigateURL() log.Info().Str("url", frigateURL).Msg("[frigate] target") @@ -26,22 +28,168 @@ func Init() { func apiCheck(w http.ResponseWriter, r *http.Request) { client := &http.Client{Timeout: 3 * time.Second} + result := map[string]any{ + "url": frigateURL, + "detection": "unknown", + "ha_addons": nil, + "frigate_slug": "", + } + + // show how URL was detected + if env := os.Getenv("STRIX_FRIGATE_URL"); env != "" { + result["detection"] = "env" + } else if os.Getenv("SUPERVISOR_TOKEN") != "" { + result["detection"] = "supervisor" + // show what addons we found + addons, frigateSlug := listHAAddons() + result["ha_addons"] = addons + result["frigate_slug"] = frigateSlug + } else { + result["detection"] = "fallback_localhost" + } + resp, err := client.Get(frigateURL + "/api/config") if err != nil { - api.ResponseJSON(w, map[string]any{ - "connected": false, - "url": frigateURL, - "error": err.Error(), - }) + result["connected"] = false + result["error"] = err.Error() + api.ResponseJSON(w, result) return } resp.Body.Close() - api.ResponseJSON(w, map[string]any{ - "connected": true, - "url": frigateURL, - "status_code": resp.StatusCode, - "version": resp.Header.Get("X-Frigate-Version"), - "message": fmt.Sprintf("Frigate API responded with %d", resp.StatusCode), - }) + result["connected"] = true + result["status_code"] = resp.StatusCode + result["message"] = fmt.Sprintf("Frigate API responded with %d", resp.StatusCode) + api.ResponseJSON(w, result) +} + +// detectFrigateURL determines Frigate URL in priority order: +// 1. STRIX_FRIGATE_URL env var +// 2. HA Supervisor API autodiscovery +// 3. fallback to localhost:5000 +func detectFrigateURL() string { + // 1. explicit env + if url := os.Getenv("STRIX_FRIGATE_URL"); url != "" { + log.Info().Str("url", url).Msg("[frigate] using STRIX_FRIGATE_URL") + return url + } + + // 2. HA Supervisor autodiscovery + if token := os.Getenv("SUPERVISOR_TOKEN"); token != "" { + log.Info().Msg("[frigate] SUPERVISOR_TOKEN found, trying autodiscovery") + + slug := findFrigateAddon(token) + if slug != "" { + // HA addon hostname format: slug with _ replaced by - and prefixed + url := fmt.Sprintf("http://%s:5000", slug) + log.Info().Str("slug", slug).Str("url", url).Msg("[frigate] found via Supervisor") + return url + } + + log.Warn().Msg("[frigate] Supervisor available but Frigate addon not found") + } + + // 3. fallback + return "http://localhost:5000" +} + +// findFrigateAddon queries HA Supervisor API for installed addons and finds Frigate +func findFrigateAddon(token string) string { + client := &http.Client{Timeout: 3 * time.Second} + + req, err := http.NewRequest("GET", "http://supervisor/addons", nil) + if err != nil { + log.Debug().Err(err).Msg("[frigate] supervisor request failed") + return "" + } + req.Header.Set("Authorization", "Bearer "+token) + + resp, err := client.Do(req) + if err != nil { + log.Debug().Err(err).Msg("[frigate] supervisor API unreachable") + return "" + } + defer resp.Body.Close() + + var body struct { + Data struct { + Addons []struct { + Slug string `json:"slug"` + Name string `json:"name"` + State string `json:"state"` + URL string `json:"url"` + Hostname string `json:"hostname"` + } `json:"addons"` + } `json:"data"` + } + + if err = json.NewDecoder(resp.Body).Decode(&body); err != nil { + log.Debug().Err(err).Msg("[frigate] supervisor response parse failed") + return "" + } + + for _, addon := range body.Data.Addons { + // match by slug or name containing "frigate" + if addon.Slug == "ccab4aaf_frigate" || addon.Slug == "frigate" { + if addon.Hostname != "" { + return addon.Hostname + } + return addon.Slug + } + } + + return "" +} + +// listHAAddons returns addon list for debug purposes +func listHAAddons() ([]map[string]string, string) { + token := os.Getenv("SUPERVISOR_TOKEN") + if token == "" { + return nil, "" + } + + client := &http.Client{Timeout: 3 * time.Second} + + req, err := http.NewRequest("GET", "http://supervisor/addons", nil) + if err != nil { + return nil, "" + } + req.Header.Set("Authorization", "Bearer "+token) + + resp, err := client.Do(req) + if err != nil { + return []map[string]string{{"error": err.Error()}}, "" + } + defer resp.Body.Close() + + var body struct { + Data struct { + Addons []struct { + Slug string `json:"slug"` + Name string `json:"name"` + State string `json:"state"` + Hostname string `json:"hostname"` + } `json:"addons"` + } `json:"data"` + } + + if err = json.NewDecoder(resp.Body).Decode(&body); err != nil { + return []map[string]string{{"error": err.Error()}}, "" + } + + var addons []map[string]string + var frigateSlug string + for _, a := range body.Data.Addons { + addons = append(addons, map[string]string{ + "slug": a.Slug, + "name": a.Name, + "state": a.State, + "hostname": a.Hostname, + }) + if a.Slug == "ccab4aaf_frigate" || a.Slug == "frigate" { + frigateSlug = a.Slug + } + } + + return addons, frigateSlug } From 62dcd89fc5baa5b46946a73a7bc083364df24f53 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 18:37:53 +0000 Subject: [PATCH 15/33] Simplify listHAAddons to return raw Supervisor API JSON --- internal/frigate/frigate.go | 40 ++++++++----------------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index e29ab40..f2899d4 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -141,8 +141,8 @@ func findFrigateAddon(token string) string { return "" } -// listHAAddons returns addon list for debug purposes -func listHAAddons() ([]map[string]string, string) { +// listHAAddons returns raw JSON from Supervisor API for debug +func listHAAddons() (any, string) { token := os.Getenv("SUPERVISOR_TOKEN") if token == "" { return nil, "" @@ -152,44 +152,20 @@ func listHAAddons() ([]map[string]string, string) { req, err := http.NewRequest("GET", "http://supervisor/addons", nil) if err != nil { - return nil, "" + return map[string]string{"error": err.Error()}, "" } req.Header.Set("Authorization", "Bearer "+token) resp, err := client.Do(req) if err != nil { - return []map[string]string{{"error": err.Error()}}, "" + return map[string]string{"error": err.Error()}, "" } defer resp.Body.Close() - var body struct { - Data struct { - Addons []struct { - Slug string `json:"slug"` - Name string `json:"name"` - State string `json:"state"` - Hostname string `json:"hostname"` - } `json:"addons"` - } `json:"data"` + var raw any + if err = json.NewDecoder(resp.Body).Decode(&raw); err != nil { + return map[string]string{"error": err.Error()}, "" } - if err = json.NewDecoder(resp.Body).Decode(&body); err != nil { - return []map[string]string{{"error": err.Error()}}, "" - } - - var addons []map[string]string - var frigateSlug string - for _, a := range body.Data.Addons { - addons = append(addons, map[string]string{ - "slug": a.Slug, - "name": a.Name, - "state": a.State, - "hostname": a.Hostname, - }) - if a.Slug == "ccab4aaf_frigate" || a.Slug == "frigate" { - frigateSlug = a.Slug - } - } - - return addons, frigateSlug + return raw, "" } From 124007ea31a1e424b60acee3abd7cffba0050ad3 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 18:46:56 +0000 Subject: [PATCH 16/33] Rebuild dev image From 5fdeca8701a68de52abc466029cceab6b50f3f9b Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 18:58:53 +0000 Subject: [PATCH 17/33] Add raw Supervisor API response to frigate check endpoint --- internal/frigate/frigate.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index f2899d4..b72a942 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -40,6 +40,7 @@ func apiCheck(w http.ResponseWriter, r *http.Request) { result["detection"] = "env" } else if os.Getenv("SUPERVISOR_TOKEN") != "" { result["detection"] = "supervisor" + result["supervisor_token_len"] = len(os.Getenv("SUPERVISOR_TOKEN")) // show what addons we found addons, frigateSlug := listHAAddons() result["ha_addons"] = addons @@ -141,7 +142,7 @@ func findFrigateAddon(token string) string { return "" } -// listHAAddons returns raw JSON from Supervisor API for debug +// listHAAddons returns raw response from Supervisor API for debug func listHAAddons() (any, string) { token := os.Getenv("SUPERVISOR_TOKEN") if token == "" { @@ -163,9 +164,10 @@ func listHAAddons() (any, string) { defer resp.Body.Close() var raw any - if err = json.NewDecoder(resp.Body).Decode(&raw); err != nil { - return map[string]string{"error": err.Error()}, "" - } + json.NewDecoder(resp.Body).Decode(&raw) - return raw, "" + return map[string]any{ + "status_code": resp.StatusCode, + "body": raw, + }, "" } From fe4a5dfa2e2516f63756bec667eb6a1fc80f3050 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 19:08:23 +0000 Subject: [PATCH 18/33] Simplify Frigate detection, use known HA addon hostname --- internal/frigate/frigate.go | 129 ++++-------------------------------- 1 file changed, 14 insertions(+), 115 deletions(-) diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index b72a942..d0545e8 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -1,8 +1,6 @@ package frigate import ( - "encoding/json" - "fmt" "net/http" "os" "time" @@ -29,24 +27,8 @@ func apiCheck(w http.ResponseWriter, r *http.Request) { client := &http.Client{Timeout: 3 * time.Second} result := map[string]any{ - "url": frigateURL, - "detection": "unknown", - "ha_addons": nil, - "frigate_slug": "", - } - - // show how URL was detected - if env := os.Getenv("STRIX_FRIGATE_URL"); env != "" { - result["detection"] = "env" - } else if os.Getenv("SUPERVISOR_TOKEN") != "" { - result["detection"] = "supervisor" - result["supervisor_token_len"] = len(os.Getenv("SUPERVISOR_TOKEN")) - // show what addons we found - addons, frigateSlug := listHAAddons() - result["ha_addons"] = addons - result["frigate_slug"] = frigateSlug - } else { - result["detection"] = "fallback_localhost" + "url": frigateURL, + "detection": detectMethod(), } resp, err := client.Get(frigateURL + "/api/config") @@ -60,114 +42,31 @@ func apiCheck(w http.ResponseWriter, r *http.Request) { result["connected"] = true result["status_code"] = resp.StatusCode - result["message"] = fmt.Sprintf("Frigate API responded with %d", resp.StatusCode) api.ResponseJSON(w, result) } -// detectFrigateURL determines Frigate URL in priority order: -// 1. STRIX_FRIGATE_URL env var -// 2. HA Supervisor API autodiscovery -// 3. fallback to localhost:5000 +// detectFrigateURL determines Frigate URL: +// 1. STRIX_FRIGATE_URL env +// 2. HA addon -- known hostname ccab4aaf-frigate:5000 +// 3. fallback localhost:5000 func detectFrigateURL() string { - // 1. explicit env if url := os.Getenv("STRIX_FRIGATE_URL"); url != "" { - log.Info().Str("url", url).Msg("[frigate] using STRIX_FRIGATE_URL") return url } - // 2. HA Supervisor autodiscovery - if token := os.Getenv("SUPERVISOR_TOKEN"); token != "" { - log.Info().Msg("[frigate] SUPERVISOR_TOKEN found, trying autodiscovery") - - slug := findFrigateAddon(token) - if slug != "" { - // HA addon hostname format: slug with _ replaced by - and prefixed - url := fmt.Sprintf("http://%s:5000", slug) - log.Info().Str("slug", slug).Str("url", url).Msg("[frigate] found via Supervisor") - return url - } - - log.Warn().Msg("[frigate] Supervisor available but Frigate addon not found") + if os.Getenv("SUPERVISOR_TOKEN") != "" { + return "http://ccab4aaf-frigate:5000" } - // 3. fallback return "http://localhost:5000" } -// findFrigateAddon queries HA Supervisor API for installed addons and finds Frigate -func findFrigateAddon(token string) string { - client := &http.Client{Timeout: 3 * time.Second} - - req, err := http.NewRequest("GET", "http://supervisor/addons", nil) - if err != nil { - log.Debug().Err(err).Msg("[frigate] supervisor request failed") - return "" +func detectMethod() string { + if os.Getenv("STRIX_FRIGATE_URL") != "" { + return "env" } - req.Header.Set("Authorization", "Bearer "+token) - - resp, err := client.Do(req) - if err != nil { - log.Debug().Err(err).Msg("[frigate] supervisor API unreachable") - return "" + if os.Getenv("SUPERVISOR_TOKEN") != "" { + return "ha" } - defer resp.Body.Close() - - var body struct { - Data struct { - Addons []struct { - Slug string `json:"slug"` - Name string `json:"name"` - State string `json:"state"` - URL string `json:"url"` - Hostname string `json:"hostname"` - } `json:"addons"` - } `json:"data"` - } - - if err = json.NewDecoder(resp.Body).Decode(&body); err != nil { - log.Debug().Err(err).Msg("[frigate] supervisor response parse failed") - return "" - } - - for _, addon := range body.Data.Addons { - // match by slug or name containing "frigate" - if addon.Slug == "ccab4aaf_frigate" || addon.Slug == "frigate" { - if addon.Hostname != "" { - return addon.Hostname - } - return addon.Slug - } - } - - return "" -} - -// listHAAddons returns raw response from Supervisor API for debug -func listHAAddons() (any, string) { - token := os.Getenv("SUPERVISOR_TOKEN") - if token == "" { - return nil, "" - } - - client := &http.Client{Timeout: 3 * time.Second} - - req, err := http.NewRequest("GET", "http://supervisor/addons", nil) - if err != nil { - return map[string]string{"error": err.Error()}, "" - } - req.Header.Set("Authorization", "Bearer "+token) - - resp, err := client.Do(req) - if err != nil { - return map[string]string{"error": err.Error()}, "" - } - defer resp.Body.Close() - - var raw any - json.NewDecoder(resp.Body).Decode(&raw) - - return map[string]any{ - "status_code": resp.StatusCode, - "body": raw, - }, "" + return "localhost" } From e2fdf0d3d65d7d51baada84bdd398b904c62c8f5 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 19:20:07 +0000 Subject: [PATCH 19/33] Add Frigate config proxy with auto-discovery --- internal/frigate/frigate.go | 161 ++++++++++++++++++++++++++---------- 1 file changed, 119 insertions(+), 42 deletions(-) diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index d0545e8..fed004e 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -1,8 +1,10 @@ package frigate import ( + "io" "net/http" "os" + "sync" "time" "github.com/eduard256/strix/internal/api" @@ -11,62 +13,137 @@ import ( ) var log zerolog.Logger + +// resolved Frigate URL, cached after first successful probe var frigateURL string +var frigateOnce sync.Once + +// candidates to try when no explicit URL is set +var candidates = []string{ + "http://localhost:5000", + "http://ccab4aaf-frigate:5000", +} + +const probeTimeout = 50 * time.Millisecond +const requestTimeout = 5 * time.Second func Init() { log = app.GetLogger("frigate") - frigateURL = detectFrigateURL() - - log.Info().Str("url", frigateURL).Msg("[frigate] target") - - api.HandleFunc("api/frigate/check", apiCheck) -} - -func apiCheck(w http.ResponseWriter, r *http.Request) { - client := &http.Client{Timeout: 3 * time.Second} - - result := map[string]any{ - "url": frigateURL, - "detection": detectMethod(), + if url := os.Getenv("STRIX_FRIGATE_URL"); url != "" { + frigateURL = url + log.Info().Str("url", frigateURL).Msg("[frigate] using STRIX_FRIGATE_URL") } - resp, err := client.Get(frigateURL + "/api/config") - if err != nil { - result["connected"] = false - result["error"] = err.Error() - api.ResponseJSON(w, result) + api.HandleFunc("api/frigate/config", apiConfig) + api.HandleFunc("api/frigate/config/save", apiConfigSave) +} + +// getFrigateURL returns resolved Frigate URL. Probes candidates on first call. +func getFrigateURL() string { + if frigateURL != "" { + return frigateURL + } + + frigateOnce.Do(func() { + frigateURL = probeFrigate() + if frigateURL != "" { + log.Info().Str("url", frigateURL).Msg("[frigate] discovered") + } else { + log.Warn().Msg("[frigate] not found on any candidate") + } + }) + + return frigateURL +} + +// probeFrigate tries candidates sequentially with short timeout, returns first that responds +func probeFrigate() string { + client := &http.Client{Timeout: probeTimeout} + + for _, url := range candidates { + resp, err := client.Get(url + "/api/config") + if err != nil { + continue + } + resp.Body.Close() + if resp.StatusCode == 200 { + return url + } + } + + return "" +} + +// GET /api/frigate/config -- proxy Frigate config +func apiConfig(w http.ResponseWriter, r *http.Request) { + url := getFrigateURL() + if url == "" { + api.ResponseJSON(w, map[string]any{ + "connected": false, + "config": "", + }) return } - resp.Body.Close() - result["connected"] = true - result["status_code"] = resp.StatusCode - api.ResponseJSON(w, result) + client := &http.Client{Timeout: requestTimeout} + resp, err := client.Get(url + "/api/config/raw") + if err != nil { + api.ResponseJSON(w, map[string]any{ + "connected": false, + "error": err.Error(), + "config": "", + }) + return + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + + api.ResponseJSON(w, map[string]any{ + "connected": true, + "url": url, + "config": string(body), + }) } -// detectFrigateURL determines Frigate URL: -// 1. STRIX_FRIGATE_URL env -// 2. HA addon -- known hostname ccab4aaf-frigate:5000 -// 3. fallback localhost:5000 -func detectFrigateURL() string { - if url := os.Getenv("STRIX_FRIGATE_URL"); url != "" { - return url +// POST /api/frigate/config/save?save_option=restart -- proxy config save to Frigate +func apiConfigSave(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return } - if os.Getenv("SUPERVISOR_TOKEN") != "" { - return "http://ccab4aaf-frigate:5000" + url := getFrigateURL() + if url == "" { + http.Error(w, "frigate not connected", http.StatusBadGateway) + return } - return "http://localhost:5000" -} - -func detectMethod() string { - if os.Getenv("STRIX_FRIGATE_URL") != "" { - return "env" - } - if os.Getenv("SUPERVISOR_TOKEN") != "" { - return "ha" - } - return "localhost" + saveOption := r.URL.Query().Get("save_option") + if saveOption == "" { + saveOption = "saveonly" + } + + client := &http.Client{Timeout: 30 * time.Second} + + req, err := http.NewRequest("POST", url+"/api/config/save?save_option="+saveOption, r.Body) + if err != nil { + api.Error(w, err, http.StatusInternalServerError) + return + } + req.Header.Set("Content-Type", "text/plain") + + resp, err := client.Do(req) + if err != nil { + api.Error(w, err, http.StatusBadGateway) + return + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(resp.StatusCode) + w.Write(body) } From 0ecf1eb75fa1281ebd021a3bba114173b13c427b Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 19:41:25 +0000 Subject: [PATCH 20/33] Use app.Env for consistent env var access in frigate module --- internal/frigate/frigate.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index fed004e..d5eda6a 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -3,7 +3,6 @@ package frigate import ( "io" "net/http" - "os" "sync" "time" @@ -30,7 +29,7 @@ const requestTimeout = 5 * time.Second func Init() { log = app.GetLogger("frigate") - if url := os.Getenv("STRIX_FRIGATE_URL"); url != "" { + if url := app.Env("STRIX_FRIGATE_URL", ""); url != "" { frigateURL = url log.Info().Str("url", frigateURL).Msg("[frigate] using STRIX_FRIGATE_URL") } From 74b4b611981ad072a4a974ddd394ff5f79f3f7c6 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Thu, 26 Mar 2026 10:18:40 +0000 Subject: [PATCH 21/33] Add frontend pages, move static to www/, add resolution to tester Frontend: - index.html: probe device, navigate to standard/homekit by type - standard.html: camera config, model search with multi-select - create.html: stream URL list, custom URL input, create test session - homekit.html: HomeKit device info, contact links, fallback to standard Backend: - Move static files to www/ package with embed (go2rtc pattern) - Add initStatic() in api with FileServer - Add width/height to test results from H264 SPS parsing - Contribute links to gostrix.github.io with auto-filled params --- internal/api/api.go | 10 +- internal/api/static.go | 16 + internal/api/web/index.html | 16 - pkg/tester/session.go | 2 + pkg/tester/worker.go | 14 + www/create.html | 665 +++++++++++++++++++++++++++++++++++ www/homekit.html | 323 +++++++++++++++++ www/index.html | 454 ++++++++++++++++++++++++ www/standard.html | 682 ++++++++++++++++++++++++++++++++++++ www/static.go | 6 + 10 files changed, 2163 insertions(+), 25 deletions(-) create mode 100644 internal/api/static.go delete mode 100644 internal/api/web/index.html create mode 100644 www/create.html create mode 100644 www/homekit.html create mode 100644 www/index.html create mode 100644 www/standard.html create mode 100644 www/static.go diff --git a/internal/api/api.go b/internal/api/api.go index cf86300..4ef2bb0 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -1,9 +1,7 @@ package api import ( - "embed" "encoding/json" - "io/fs" "net" "net/http" "time" @@ -25,10 +23,7 @@ func Init() { HandleFunc("api/health", apiHealth) HandleFunc("api/log", apiLog) - // serve frontend from embedded web/ directory - if sub, err := fs.Sub(webFS, "web"); err == nil { - http.Handle("/", http.FileServer(http.FS(sub))) - } + initStatic() Handler = middlewareCORS(http.DefaultServeMux) @@ -39,9 +34,6 @@ func Init() { go listen_serve("tcp", listen) } -//go:embed web -var webFS embed.FS - func listen_serve(network, address string) { ln, err := net.Listen(network, address) if err != nil { diff --git a/internal/api/static.go b/internal/api/static.go new file mode 100644 index 0000000..012abbf --- /dev/null +++ b/internal/api/static.go @@ -0,0 +1,16 @@ +package api + +import ( + "net/http" + + "github.com/eduard256/strix/www" +) + +func initStatic() { + root := http.FS(www.Static) + fileServer := http.FileServer(root) + + HandleFunc("", func(w http.ResponseWriter, r *http.Request) { + fileServer.ServeHTTP(w, r) + }) +} diff --git a/internal/api/web/index.html b/internal/api/web/index.html deleted file mode 100644 index de2ed02..0000000 --- a/internal/api/web/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - -Strix - - - -

Strix 2.0

- - diff --git a/pkg/tester/session.go b/pkg/tester/session.go index 1359ce6..c737e8c 100644 --- a/pkg/tester/session.go +++ b/pkg/tester/session.go @@ -27,6 +27,8 @@ type Result struct { Source string `json:"source"` Screenshot string `json:"screenshot,omitempty"` Codecs []string `json:"codecs,omitempty"` + Width uint16 `json:"width,omitempty"` + Height uint16 `json:"height,omitempty"` LatencyMs int64 `json:"latency_ms,omitempty"` Skipped bool `json:"skipped,omitempty"` } diff --git a/pkg/tester/worker.go b/pkg/tester/worker.go index f64a214..157f8af 100644 --- a/pkg/tester/worker.go +++ b/pkg/tester/worker.go @@ -7,6 +7,7 @@ import ( "time" "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/h264" "github.com/AlexxIT/go2rtc/pkg/magic" ) @@ -66,18 +67,31 @@ func testURL(s *Session, rawURL string) { latency := time.Since(start).Milliseconds() var codecs []string + var width, height uint16 + for _, media := range prod.GetMedias() { if media.Direction != core.DirectionRecvonly { continue } for _, codec := range media.Codecs { codecs = append(codecs, codec.Name) + + // extract resolution from first video codec SPS + if width == 0 && codec.Name == core.CodecH264 { + if spsBytes, _ := h264.GetParameterSet(codec.FmtpLine); spsBytes != nil { + if sps := h264.DecodeSPS(spsBytes); sps != nil { + width, height = sps.Width(), sps.Height() + } + } + } } } r := &Result{ Source: rawURL, Codecs: codecs, + Width: width, + Height: height, LatencyMs: latency, } diff --git a/www/create.html b/www/create.html new file mode 100644 index 0000000..5bc63b6 --- /dev/null +++ b/www/create.html @@ -0,0 +1,665 @@ + + + + + + + Strix - Stream URLs + + + + +
+
+ + +

Stream URLs

+

+ +
+
+
+ Building stream URLs... +
+
+
+
+ +
+ +
+ + + + + + + diff --git a/www/homekit.html b/www/homekit.html new file mode 100644 index 0000000..258efc4 --- /dev/null +++ b/www/homekit.html @@ -0,0 +1,323 @@ + + + + + + + Strix - HomeKit Device + + + + +
+
+ + +
+ + + + + +

HomeKit Device Detected

+
Apple HomeKit
+ +
+ +

+ We are working on adding Apple HomeKit camera support to Strix, but we don't have HomeKit cameras available for testing. +

+

+ The device at this IP supports HomeKit protocol. If you'd like to help us add support for HomeKit cameras, please reach out. Your contribution would be greatly appreciated. +

+ + + +
or
+ + + +
+
+
+ + + + + diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..5f1af5a --- /dev/null +++ b/www/index.html @@ -0,0 +1,454 @@ + + + + + + + Strix - Camera Stream Discovery + + + + +
+
+
+ +

STRIX

+

Camera Stream Discovery

+
+ +
+ + +

IP address of the camera

+
+ + + +
+ +
+

Examples

+
    +
  • 192.168.1.100
  • +
  • 10.0.0.50
  • +
  • 172.16.0.10
  • +
+
+
+
+ + + + + + + diff --git a/www/standard.html b/www/standard.html new file mode 100644 index 0000000..f32cea9 --- /dev/null +++ b/www/standard.html @@ -0,0 +1,682 @@ + + + + + + + Strix - Camera Configuration + + + + +
+
+ + +

Camera Configuration

+ + +
+ +
+ + + + +
+
+ + +
+ +
+ + +
+
+ + +
+ + +
+ + +
+ +
+ + +
+
+ + +
+ + + + + Advanced + +
+
+ + +

Camera channel number (0 for most cameras, 1+ for NVR)

+
+
+ + +

Only test streams on these ports. Leave empty to test all.

+
+
+
+ + + +
+
+ + + + + + + diff --git a/www/static.go b/www/static.go new file mode 100644 index 0000000..80e6b16 --- /dev/null +++ b/www/static.go @@ -0,0 +1,6 @@ +package www + +import "embed" + +//go:embed *.html +var Static embed.FS From 8dc8ba10965c6c156b56139041df103edc21a484 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Thu, 26 Mar 2026 10:40:41 +0000 Subject: [PATCH 22/33] Add resolution extraction from JPEG screenshots in tester --- .claude/skills/add_protocol_strix/SKILL.md | 24 +++++++++++++-- pkg/tester/session.go | 4 +-- pkg/tester/worker.go | 36 +++++++++++++--------- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/.claude/skills/add_protocol_strix/SKILL.md b/.claude/skills/add_protocol_strix/SKILL.md index 0f47de5..40329a8 100644 --- a/.claude/skills/add_protocol_strix/SKILL.md +++ b/.claude/skills/add_protocol_strix/SKILL.md @@ -70,7 +70,7 @@ func rtspHandler(rawURL string) (core.Producer, error) { } ``` -**Data flow**: URL -> GetHandler(url) -> handler(url) -> core.Producer -> GetMedias() -> codecs, latency -> getScreenshot() -> Result +**Data flow**: URL -> GetHandler(url) -> handler(url) -> core.Producer -> GetMedias() -> codecs, latency -> getScreenshot() -> jpegSize() -> Result (with width, height) **Key**: The handler ONLY needs to return a `core.Producer`. Everything else (codecs extraction, screenshot capture, session management) is handled automatically by `worker.go`. @@ -491,7 +491,7 @@ The tester uses: 2. `GetTrack()` + `Start()` -- to capture screenshot (keyframe) 3. `Stop()` -- to clean up -### How screenshot works (pkg/tester/worker.go) +### How screenshot and resolution work (pkg/tester/worker.go) 1. `getScreenshot(prod)` is called after successful Dial 2. Creates `magic.NewKeyframe()` consumer @@ -501,8 +501,26 @@ The tester uses: 6. Waits for first keyframe via `cons.WriteTo()` with 10s timeout 7. If H264/H265 -- converts to JPEG via ffmpeg 8. If already JPEG -- uses as-is +9. `jpegSize(jpeg)` extracts width and height from JPEG SOF0/SOF2 marker +10. Resolution stored in `Result.Width` and `Result.Height` -This works automatically for ANY protocol that returns a valid `core.Producer`. You do NOT need to implement screenshot logic per protocol. +This works automatically for ANY protocol that returns a valid `core.Producer`. You do NOT need to implement screenshot or resolution logic per protocol. + +### Result struct (pkg/tester/session.go) + +```go +type Result struct { + Source string `json:"source"` + Screenshot string `json:"screenshot,omitempty"` + Codecs []string `json:"codecs,omitempty"` + Width int `json:"width,omitempty"` // from JPEG screenshot + Height int `json:"height,omitempty"` // from JPEG screenshot + LatencyMs int64 `json:"latency_ms,omitempty"` + Skipped bool `json:"skipped,omitempty"` +} +``` + +Resolution is extracted from the JPEG screenshot, not from SDP or protocol-specific data. This means width/height are only available when a screenshot was successfully captured. The frontend uses these values to classify streams as Main (HD) or Sub (SD). ### magic.NewKeyframe() (pkg/magic/keyframe.go) diff --git a/pkg/tester/session.go b/pkg/tester/session.go index c737e8c..41b66f7 100644 --- a/pkg/tester/session.go +++ b/pkg/tester/session.go @@ -27,8 +27,8 @@ type Result struct { Source string `json:"source"` Screenshot string `json:"screenshot,omitempty"` Codecs []string `json:"codecs,omitempty"` - Width uint16 `json:"width,omitempty"` - Height uint16 `json:"height,omitempty"` + Width int `json:"width,omitempty"` + Height int `json:"height,omitempty"` LatencyMs int64 `json:"latency_ms,omitempty"` Skipped bool `json:"skipped,omitempty"` } diff --git a/pkg/tester/worker.go b/pkg/tester/worker.go index 157f8af..409633d 100644 --- a/pkg/tester/worker.go +++ b/pkg/tester/worker.go @@ -7,7 +7,6 @@ import ( "time" "github.com/AlexxIT/go2rtc/pkg/core" - "github.com/AlexxIT/go2rtc/pkg/h264" "github.com/AlexxIT/go2rtc/pkg/magic" ) @@ -67,31 +66,18 @@ func testURL(s *Session, rawURL string) { latency := time.Since(start).Milliseconds() var codecs []string - var width, height uint16 - for _, media := range prod.GetMedias() { if media.Direction != core.DirectionRecvonly { continue } for _, codec := range media.Codecs { codecs = append(codecs, codec.Name) - - // extract resolution from first video codec SPS - if width == 0 && codec.Name == core.CodecH264 { - if spsBytes, _ := h264.GetParameterSet(codec.FmtpLine); spsBytes != nil { - if sps := h264.DecodeSPS(spsBytes); sps != nil { - width, height = sps.Width(), sps.Height() - } - } - } } } r := &Result{ Source: rawURL, Codecs: codecs, - Width: width, - Height: height, LatencyMs: latency, } @@ -110,6 +96,7 @@ func testURL(s *Session, rawURL string) { if jpeg != nil { idx := s.AddScreenshot(jpeg) r.Screenshot = fmt.Sprintf("/api/test/screenshot?id=%s&i=%d", s.ID, idx) + r.Width, r.Height = jpegSize(jpeg) } } @@ -167,6 +154,27 @@ matched: return once.Buffer(), cons.CodecName() } +// jpegSize extracts width and height from JPEG SOF0/SOF2 marker +func jpegSize(data []byte) (int, int) { + for i := 2; i < len(data)-9; { + if data[i] != 0xFF { + return 0, 0 + } + marker := data[i+1] + size := int(data[i+2])<<8 | int(data[i+3]) + + // SOF0 (0xC0) or SOF2 (0xC2) -- baseline or progressive + if marker == 0xC0 || marker == 0xC2 { + h := int(data[i+5])<<8 | int(data[i+6]) + w := int(data[i+7])<<8 | int(data[i+8]) + return w, h + } + + i += 2 + size + } + return 0, 0 +} + func toJPEG(raw []byte) []byte { cmd := exec.Command("ffmpeg", "-hide_banner", "-loglevel", "error", From f34a7b96c7700bdccbfb973c6b491214c3d57601 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Thu, 26 Mar 2026 22:45:32 +0000 Subject: [PATCH 23/33] Add go2rtc module, test/config/urls pages, Frigate config fixes --- internal/frigate/frigate.go | 10 +- internal/go2rtc/go2rtc.go | 108 +++++ main.go | 2 + pkg/generate/config.go | 16 +- pkg/generate/diff.go | 36 -- pkg/generate/insert.go | 11 +- pkg/generate/models.go | 10 +- www/config.html | 820 ++++++++++++++++++++++++++++++++++++ www/create.html | 99 ++++- www/go2rtc.html | 344 +++++++++++++++ www/test.html | 687 ++++++++++++++++++++++++++++++ www/urls.html | 320 ++++++++++++++ 12 files changed, 2411 insertions(+), 52 deletions(-) create mode 100644 internal/go2rtc/go2rtc.go delete mode 100644 pkg/generate/diff.go create mode 100644 www/config.html create mode 100644 www/go2rtc.html create mode 100644 www/test.html create mode 100644 www/urls.html diff --git a/internal/frigate/frigate.go b/internal/frigate/frigate.go index d5eda6a..58cda49 100644 --- a/internal/frigate/frigate.go +++ b/internal/frigate/frigate.go @@ -1,6 +1,7 @@ package frigate import ( + "encoding/json" "io" "net/http" "sync" @@ -99,10 +100,17 @@ func apiConfig(w http.ResponseWriter, r *http.Request) { body, _ := io.ReadAll(resp.Body) + // Frigate /api/config/raw returns JSON-encoded string, unquote it + config := string(body) + var unquoted string + if err := json.Unmarshal(body, &unquoted); err == nil { + config = unquoted + } + api.ResponseJSON(w, map[string]any{ "connected": true, "url": url, - "config": string(body), + "config": config, }) } diff --git a/internal/go2rtc/go2rtc.go b/internal/go2rtc/go2rtc.go new file mode 100644 index 0000000..75a3abb --- /dev/null +++ b/internal/go2rtc/go2rtc.go @@ -0,0 +1,108 @@ +package go2rtc + +import ( + "io" + "net/http" + "sync" + "time" + + "github.com/eduard256/strix/internal/api" + "github.com/eduard256/strix/internal/app" + "github.com/rs/zerolog" +) + +var log zerolog.Logger + +var go2rtcURL string +var go2rtcOnce sync.Once + +var candidates = []string{ + "http://localhost:1984", + "http://localhost:11984", +} + +const probeTimeout = 50 * time.Millisecond +const requestTimeout = 5 * time.Second + +func Init() { + log = app.GetLogger("go2rtc") + + if url := app.Env("STRIX_GO2RTC_URL", ""); url != "" { + go2rtcURL = url + log.Info().Str("url", go2rtcURL).Msg("[go2rtc] using STRIX_GO2RTC_URL") + } + + api.HandleFunc("api/go2rtc/streams", apiStreams) +} + +func getURL() string { + if go2rtcURL != "" { + return go2rtcURL + } + + go2rtcOnce.Do(func() { + go2rtcURL = probe() + if go2rtcURL != "" { + log.Info().Str("url", go2rtcURL).Msg("[go2rtc] discovered") + } + }) + + return go2rtcURL +} + +func probe() string { + client := &http.Client{Timeout: probeTimeout} + + for _, url := range candidates { + resp, err := client.Get(url + "/api") + if err != nil { + continue + } + resp.Body.Close() + if resp.StatusCode == 200 { + return url + } + } + + return "" +} + +// PUT /api/go2rtc/streams?name=...&src=... -- proxy to go2rtc +func apiStreams(w http.ResponseWriter, r *http.Request) { + if r.Method != "PUT" { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + url := getURL() + if url == "" { + api.ResponseJSON(w, map[string]any{"success": false, "error": "go2rtc not found"}) + return + } + + // forward query params as-is + target := url + "/api/streams?" + r.URL.RawQuery + + client := &http.Client{Timeout: requestTimeout} + req, err := http.NewRequest("PUT", target, nil) + if err != nil { + api.ResponseJSON(w, map[string]any{"success": false, "error": err.Error()}) + return + } + + resp, err := client.Do(req) + if err != nil { + api.ResponseJSON(w, map[string]any{"success": false, "error": err.Error()}) + return + } + defer resp.Body.Close() + + body, _ := io.ReadAll(resp.Body) + + w.Header().Set("Content-Type", "application/json") + if resp.StatusCode == 200 { + api.ResponseJSON(w, map[string]any{"success": true}) + } else { + api.ResponseJSON(w, map[string]any{"success": false, "error": string(body)}) + } +} diff --git a/main.go b/main.go index eb097da..0b17abe 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "github.com/eduard256/strix/internal/app" "github.com/eduard256/strix/internal/frigate" "github.com/eduard256/strix/internal/generate" + "github.com/eduard256/strix/internal/go2rtc" "github.com/eduard256/strix/internal/probe" "github.com/eduard256/strix/internal/search" "github.com/eduard256/strix/internal/test" @@ -26,6 +27,7 @@ func main() { {"probe", probe.Init}, {"generate", generate.Init}, {"frigate", frigate.Init}, + {"go2rtc", go2rtc.Init}, } for _, m := range modules { diff --git a/pkg/generate/config.go b/pkg/generate/config.go index 1296a87..eb7e623 100644 --- a/pkg/generate/config.go +++ b/pkg/generate/config.go @@ -26,9 +26,17 @@ func Generate(req *Request) (*Response, error) { } } - if strings.TrimSpace(req.ExistingConfig) == "" { + existing := strings.TrimSpace(req.ExistingConfig) + + // generate from scratch if no config or config has no go2rtc streams section + if existing == "" || !strings.Contains(existing, "go2rtc:") { config := newConfig(info, req) - return &Response{Config: config, Diff: fullDiff(config)}, nil + lines := strings.Count(config, "\n") + 1 + added := make([]int, lines) + for i := range added { + added[i] = i + 1 + } + return &Response{Config: config, Added: added}, nil } return addToConfig(req.ExistingConfig, info, req) @@ -124,7 +132,7 @@ func newConfig(info *cameraInfo, req *Request) string { var b strings.Builder b.WriteString("mqtt:\n enabled: false\n\n") - b.WriteString("record:\n enabled: true\n retain:\n days: 7\n mode: motion\n\n") + b.WriteString("record:\n enabled: true\n\n") b.WriteString("go2rtc:\n streams:\n") writeStreamLines(&b, info) @@ -132,7 +140,7 @@ func newConfig(info *cameraInfo, req *Request) string { b.WriteString("cameras:\n") writeCameraBlock(&b, info, req) - b.WriteString("version: 0.18-0\n") + b.WriteString("version: 0.17-0\n") return b.String() } diff --git a/pkg/generate/diff.go b/pkg/generate/diff.go deleted file mode 100644 index 0750d4e..0000000 --- a/pkg/generate/diff.go +++ /dev/null @@ -1,36 +0,0 @@ -package generate - -import "strings" - -func fullDiff(config string) []DiffLine { - lines := strings.Split(config, "\n") - diff := make([]DiffLine, len(lines)) - for i, line := range lines { - diff[i] = DiffLine{Line: i + 1, Text: line, Type: "added"} - } - return diff -} - -func diffWithContext(lines []string, added map[int]bool, ctx int) []DiffLine { - visible := make(map[int]bool) - for idx := range added { - for c := -ctx; c <= ctx; c++ { - if j := idx + c; j >= 0 && j < len(lines) { - visible[j] = true - } - } - } - - var diff []DiffLine - for i, line := range lines { - if !visible[i] { - continue - } - t := "context" - if added[i] { - t = "added" - } - diff = append(diff, DiffLine{Line: i + 1, Text: line, Type: t}) - } - return diff -} diff --git a/pkg/generate/insert.go b/pkg/generate/insert.go index d82f6e7..d3f35d6 100644 --- a/pkg/generate/insert.go +++ b/pkg/generate/insert.go @@ -65,8 +65,15 @@ func addToConfig(existing string, info *cameraInfo, req *Request) (*Response, er result = append(result, rest[split:]...) config := strings.Join(result, "\n") - diff := diffWithContext(result, added, 3) - return &Response{Config: config, Diff: diff}, nil + + addedLines := make([]int, 0, len(added)) + for i := range result { + if added[i] { + addedLines = append(addedLines, i+1) + } + } + + return &Response{Config: config, Added: addedLines}, nil } func dedup(info *cameraInfo, cams, streams map[string]bool) *cameraInfo { diff --git a/pkg/generate/models.go b/pkg/generate/models.go index f597a9c..ee61e41 100644 --- a/pkg/generate/models.go +++ b/pkg/generate/models.go @@ -106,12 +106,6 @@ type UIConfig struct { } type Response struct { - Config string `json:"config"` - Diff []DiffLine `json:"diff"` -} - -type DiffLine struct { - Line int `json:"line"` - Text string `json:"text"` - Type string `json:"type"` // context, added, removed + Config string `json:"config"` + Added []int `json:"added"` // 1-based line numbers of added lines } diff --git a/www/config.html b/www/config.html new file mode 100644 index 0000000..e5a71af --- /dev/null +++ b/www/config.html @@ -0,0 +1,820 @@ + + + + + + + Strix - Configuration + + + + +
+ +

Frigate Configuration

+ +
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + +
+
Camera Name
+ +
+ +
+ + + + + + +
+ + +
+
+
+ Generated Config +
+ + +
+
+
Loading...
+ +
+
+
+
+ + + + + + + diff --git a/www/create.html b/www/create.html index 5bc63b6..360b300 100644 --- a/www/create.html +++ b/www/create.html @@ -359,7 +359,11 @@ var data = await r.json(); dbStreams = data.streams || []; - renderAll(); + if (dbStreams.length === 0 && customStreams.length === 0) { + renderEmpty(); + } else { + renderAll(); + } } catch (e) { renderError('Connection error: ' + e.message); } @@ -518,6 +522,99 @@ content.appendChild(div); } + function renderEmpty() { + var content = document.getElementById('content'); + while (content.firstChild) content.removeChild(content.firstChild); + + var box = document.createElement('div'); + box.style.cssText = 'text-align:center; padding:2.5rem 1.5rem; background:var(--bg-secondary); border:1px solid var(--border-color); border-radius:8px;'; + + var title = document.createElement('div'); + title.style.cssText = 'font-size:1.125rem; font-weight:600; color:var(--text-primary); margin-bottom:0.75rem;'; + title.textContent = 'No streams found for this camera'; + + var msg = document.createElement('div'); + msg.style.cssText = 'font-size:0.875rem; color:var(--text-secondary); line-height:1.6; margin-bottom:1.5rem;'; + msg.textContent = 'The Strix database does not have stream patterns for this device yet. You can help by adding your camera model to the database.'; + + var link = document.createElement('a'); + var p = new URLSearchParams(); + if (vendor) p.set('brand', vendor); + if (model) p.set('model', model); + if (mac && mac.length >= 8) p.set('mac_prefix', mac.substring(0, 8)); + link.href = 'https://gostrix.github.io/#/contribute?' + p.toString(); + link.target = '_blank'; + link.style.cssText = 'display:inline-flex; align-items:center; gap:0.5rem; padding:0.75rem 1.25rem; background:var(--purple-primary); color:white; border-radius:8px; text-decoration:none; font-size:0.875rem; font-weight:600; transition:opacity 150ms;'; + link.textContent = 'Add your camera to Strix DB'; + link.onmouseover = function() { link.style.opacity = '0.85'; }; + link.onmouseout = function() { link.style.opacity = '1'; }; + + var issueLink = document.createElement('a'); + issueLink.href = 'https://github.com/eduard256/Strix/issues'; + issueLink.target = '_blank'; + issueLink.style.cssText = 'display:inline-flex; align-items:center; gap:0.5rem; padding:0.75rem 1.25rem; background:var(--bg-tertiary); color:var(--text-secondary); border:1px solid var(--border-color); border-radius:8px; text-decoration:none; font-size:0.875rem; font-weight:600; transition:all 150ms;'; + issueLink.textContent = 'Report Issue'; + issueLink.onmouseover = function() { issueLink.style.borderColor = 'var(--purple-primary)'; issueLink.style.color = 'var(--purple-light)'; }; + issueLink.onmouseout = function() { issueLink.style.borderColor = 'var(--border-color)'; issueLink.style.color = 'var(--text-secondary)'; }; + + var btns = document.createElement('div'); + btns.style.cssText = 'display:flex; gap:0.75rem; justify-content:center; flex-wrap:wrap;'; + btns.appendChild(link); + btns.appendChild(issueLink); + + var or = document.createElement('div'); + or.style.cssText = 'margin:1.25rem 0; color:var(--text-tertiary); font-size:0.75rem;'; + or.textContent = 'or add a custom stream URL below'; + + box.appendChild(title); + box.appendChild(msg); + box.appendChild(btns); + box.appendChild(or); + content.appendChild(box); + + // still show add section below + renderAddSection(content); + updateButton(); + } + + function renderAddSection(content) { + var addSection = document.createElement('div'); + addSection.className = 'add-section'; + var addRow = document.createElement('div'); + addRow.className = 'add-row'; + var addInput = document.createElement('input'); + addInput.className = 'add-input'; + addInput.type = 'text'; + addInput.placeholder = 'rtsp://user:pass@host/path or bubble://...'; + addInput.spellcheck = false; + addInput.value = pendingInput; + var addBtn = document.createElement('button'); + addBtn.className = 'btn-add'; + addBtn.type = 'button'; + addBtn.textContent = '+'; + + function addCustom() { + var v = addInput.value.trim(); + if (!v) return; + if (v.indexOf('://') === -1) { showToast('URL must include protocol (rtsp://, http://, bubble://, ...)'); return; } + if (customStreams.indexOf(v) !== -1 || dbStreams.indexOf(v) !== -1) { showToast('This URL is already in the list'); return; } + customStreams.push(v); + pendingInput = ''; + renderAll(); + var newInput = document.querySelector('.add-input'); + if (newInput) newInput.focus(); + showContributeBanner(v); + } + + addBtn.addEventListener('click', addCustom); + addInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') addCustom(); }); + addInput.addEventListener('input', function() { pendingInput = addInput.value; }); + addRow.appendChild(addInput); + addRow.appendChild(addBtn); + addSection.appendChild(addRow); + content.appendChild(addSection); + } + // test button document.getElementById('btn-test').addEventListener('click', startTest); diff --git a/www/go2rtc.html b/www/go2rtc.html new file mode 100644 index 0000000..a40fe5b --- /dev/null +++ b/www/go2rtc.html @@ -0,0 +1,344 @@ + + + + + + + Strix - Add to go2rtc + + + + +
+
+ + +

Add to go2rtc

+ + +
+ + + + + + +
+ + +
+
Main Stream Name
+ +
Name used in go2rtc config and Frigate
+
+ + + + + + +
+
+
+ + + + + + + diff --git a/www/test.html b/www/test.html new file mode 100644 index 0000000..da2bbd6 --- /dev/null +++ b/www/test.html @@ -0,0 +1,687 @@ + + + + + + + Strix - Stream Testing + + + + +
+
+ + +
+

Stream Testing

+ +
+ +
+
+
+
+ running +
+ +
+
+
0
total
+
0
tested
+
0
alive
+
0
screenshots
+
+
+
+
+
+ +
+
+
+ + + + + + + diff --git a/www/urls.html b/www/urls.html new file mode 100644 index 0000000..2ed9741 --- /dev/null +++ b/www/urls.html @@ -0,0 +1,320 @@ + + + + + + + Strix - Stream URLs + + + + +
+
+ + +

Your Stream URLs

+

Copy these URLs to use in your NVR, media player, or streaming software.

+ +
+ + + +
+ +
+
How to use
+
Add these URLs to your NVR software (Frigate, Blue Iris, Shinobi, etc.) or stream player (VLC, go2rtc). The main stream is high resolution for recording, the sub stream is lower resolution for real-time detection.
+
+ +
+
+
+ + + + + + + From 20d5ad2f0b823eda8753908c95baf49d827e85bc Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 1 Apr 2026 16:07:22 +0000 Subject: [PATCH 24/33] Fix screenshot URL path: remove leading slash --- pkg/tester/worker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/tester/worker.go b/pkg/tester/worker.go index 409633d..2916e53 100644 --- a/pkg/tester/worker.go +++ b/pkg/tester/worker.go @@ -95,7 +95,7 @@ func testURL(s *Session, rawURL string) { if jpeg != nil { idx := s.AddScreenshot(jpeg) - r.Screenshot = fmt.Sprintf("/api/test/screenshot?id=%s&i=%d", s.ID, idx) + r.Screenshot = fmt.Sprintf("api/test/screenshot?id=%s&i=%d", s.ID, idx) r.Width, r.Height = jpegSize(jpeg) } } From 8e8f5682517abe45a1ace1707cef941df38500a8 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 1 Apr 2026 17:24:02 +0000 Subject: [PATCH 25/33] Add bubble protocol support - Register bubble stream handler using go2rtc pkg/bubble - Add default port 80 for bubble scheme --- pkg/camdb/streams.go | 2 +- pkg/tester/source.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/camdb/streams.go b/pkg/camdb/streams.go index 7207008..c53150a 100644 --- a/pkg/camdb/streams.go +++ b/pkg/camdb/streams.go @@ -11,7 +11,7 @@ import ( var defaultPorts = map[string]int{ "rtsp": 554, "rtsps": 322, "http": 80, "https": 443, - "rtmp": 1935, "mms": 554, "rtp": 5004, + "rtmp": 1935, "mms": 554, "rtp": 5004, "bubble": 80, } type StreamParams struct { diff --git a/pkg/tester/source.go b/pkg/tester/source.go index e8410f0..558b046 100644 --- a/pkg/tester/source.go +++ b/pkg/tester/source.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/AlexxIT/go2rtc/pkg/bubble" "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/rtsp" ) @@ -28,6 +29,13 @@ func init() { RegisterSource("rtsp", rtspHandler) RegisterSource("rtsps", rtspHandler) RegisterSource("rtspx", rtspHandler) + RegisterSource("bubble", bubbleHandler) +} + +// bubbleHandler -- Dial handles TCP connect, HTTP handshake, XML parsing, and auth. +// ex. "bubble://admin:pass@192.168.1.100:80/bubble/live?ch=0&stream=0" +func bubbleHandler(rawURL string) (core.Producer, error) { + return bubble.Dial(rawURL) } // rtspHandler -- Dial + Describe. Proves: port open, RTSP responds, auth OK, SDP received. From 8ce89bec75c20e79454ee1817c2b323e2248dc38 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 1 Apr 2026 17:53:00 +0000 Subject: [PATCH 26/33] Always include port in URL for protocols with raw TCP dial Bubble protocol uses net.DialTimeout with u.Host directly, which requires explicit port. Add portRequired set to force port in generated URLs for such protocols. --- pkg/camdb/streams.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/camdb/streams.go b/pkg/camdb/streams.go index c53150a..2404e8b 100644 --- a/pkg/camdb/streams.go +++ b/pkg/camdb/streams.go @@ -14,6 +14,11 @@ var defaultPorts = map[string]int{ "rtmp": 1935, "mms": 554, "rtp": 5004, "bubble": 80, } +// protocols where port must always be explicit in URL (raw TCP dial without default port logic) +var portRequired = map[string]bool{ + "bubble": true, +} + type StreamParams struct { IDs string IP string @@ -137,7 +142,7 @@ func buildURL(protocol, path, ip string, port int, user, pass string, channel in } host := ip - if p, ok := defaultPorts[protocol]; !ok || p != port { + if p, ok := defaultPorts[protocol]; (!ok || p != port) || portRequired[protocol] { host = ip + ":" + strconv.Itoa(port) } From 6abb8409cb9f44163be2bb7fe914495600a7886c Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 3 Apr 2026 16:03:45 +0000 Subject: [PATCH 27/33] Add HTTP/HTTPS protocol support for snapshots and streams Register http, https, httpx handlers with content-type detection: - image/jpeg: single JPEG snapshots via go2rtc image.Open - multipart/x-mixed-replace: MJPEG streams via mpjpeg.Open - application/vnd.apple.mpegurl: HLS via hls.OpenURL - auto-detect fallback via magic.Open (MPEG-TS, raw MJPEG, etc.) Uses go2rtc tcp.Do for Basic + Digest auth and TLS handling. --- pkg/tester/source_http.go | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 pkg/tester/source_http.go diff --git a/pkg/tester/source_http.go b/pkg/tester/source_http.go new file mode 100644 index 0000000..1c4074c --- /dev/null +++ b/pkg/tester/source_http.go @@ -0,0 +1,66 @@ +package tester + +import ( + "errors" + "fmt" + "net/http" + "strings" + + "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/hls" + "github.com/AlexxIT/go2rtc/pkg/image" + "github.com/AlexxIT/go2rtc/pkg/magic" + "github.com/AlexxIT/go2rtc/pkg/mpjpeg" + "github.com/AlexxIT/go2rtc/pkg/tcp" +) + +func init() { + RegisterSource("http", httpHandler) + RegisterSource("https", httpHandler) + RegisterSource("httpx", httpHandler) +} + +// httpHandler -- HTTP GET with content-type detection. +// Supports JPEG snapshots, MJPEG streams, HLS, MPEG-TS, and auto-detect via magic.Open. +// Uses go2rtc tcp.Do for Basic + Digest auth and TLS handling. +// ex. "http://admin:pass@192.168.1.100/cgi-bin/snapshot.cgi" +func httpHandler(rawURL string) (core.Producer, error) { + rawURL, _, _ = strings.Cut(rawURL, "#") + + // httpx -> https with insecure TLS (handled inside tcp.Do) + req, err := http.NewRequest("GET", rawURL, nil) + if err != nil { + return nil, fmt.Errorf("http: request: %w", err) + } + + res, err := tcp.Do(req) + if err != nil { + return nil, fmt.Errorf("http: dial: %w", err) + } + + if res.StatusCode != http.StatusOK { + tcp.Close(res) + return nil, errors.New("http: " + res.Status) + } + + ct := res.Header.Get("Content-Type") + if i := strings.IndexByte(ct, ';'); i > 0 { + ct = ct[:i] + } + + var ext string + if i := strings.LastIndexByte(req.URL.Path, '.'); i > 0 { + ext = req.URL.Path[i+1:] + } + + switch { + case ct == "application/vnd.apple.mpegurl" || ext == "m3u8": + return hls.OpenURL(req.URL, res.Body) + case ct == "image/jpeg": + return image.Open(res) + case ct == "multipart/x-mixed-replace": + return mpjpeg.Open(res.Body) + } + + return magic.Open(res.Body) +} From 4880e1ad14d537b95a6997a7f2bc386a0f28bbc7 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 3 Apr 2026 19:26:17 +0000 Subject: [PATCH 28/33] Add 15s timeout for HTTP handler requests Cameras under load may accept TCP connection but never respond, hanging tester workers indefinitely. Context timeout on the HTTP request ensures workers are released. --- pkg/tester/source_http.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/tester/source_http.go b/pkg/tester/source_http.go index 1c4074c..b94b908 100644 --- a/pkg/tester/source_http.go +++ b/pkg/tester/source_http.go @@ -1,10 +1,12 @@ package tester import ( + "context" "errors" "fmt" "net/http" "strings" + "time" "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/hls" @@ -27,22 +29,29 @@ func init() { func httpHandler(rawURL string) (core.Producer, error) { rawURL, _, _ = strings.Cut(rawURL, "#") - // httpx -> https with insecure TLS (handled inside tcp.Do) - req, err := http.NewRequest("GET", rawURL, nil) + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + + req, err := http.NewRequestWithContext(ctx, "GET", rawURL, nil) if err != nil { + cancel() return nil, fmt.Errorf("http: request: %w", err) } res, err := tcp.Do(req) if err != nil { + cancel() return nil, fmt.Errorf("http: dial: %w", err) } if res.StatusCode != http.StatusOK { + cancel() tcp.Close(res) return nil, errors.New("http: " + res.Status) } + // cancel on success is not called -- context expires naturally, + // connection lifetime is managed by prod.Stop() + ct := res.Header.Get("Content-Type") if i := strings.IndexByte(ct, ';'); i > 0 { ct = ct[:i] From d59816543d02fb47b177ea8141c716e6ce8dcfa3 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 3 Apr 2026 20:03:45 +0000 Subject: [PATCH 29/33] Add direct stream URL input support to web UI --- www/create.html | 19 ++++++++++++------- www/index.html | 10 ++++++++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/www/create.html b/www/create.html index 360b300..5ba7e4a 100644 --- a/www/create.html +++ b/www/create.html @@ -326,8 +326,16 @@ var dbStreams = []; // from /api/streams var customStreams = []; // user-added + // Pre-populate custom streams from "url" query parameter (supports multiple) + params.getAll('url').forEach(function(u) { + u = u.trim(); + if (u && u.indexOf('://') !== -1 && customStreams.indexOf(u) === -1) { + customStreams.push(u); + } + }); + // subtitle - document.getElementById('subtitle').textContent = ip ? 'Target: ' + ip : ''; + document.getElementById('subtitle').textContent = ip ? 'Target: ' + ip : 'Add stream URLs manually'; // back document.getElementById('btn-back').addEventListener('click', function() { @@ -339,7 +347,8 @@ async function loadStreams() { if (!ids || !ip) { - renderError('Missing required parameters (ids, ip)'); + // No parameters — show empty list with add section + renderAll(); return; } @@ -359,11 +368,7 @@ var data = await r.json(); dbStreams = data.streams || []; - if (dbStreams.length === 0 && customStreams.length === 0) { - renderEmpty(); - } else { - renderAll(); - } + renderAll(); } catch (e) { renderError('Connection error: ' + e.message); } diff --git a/www/index.html b/www/index.html index 5f1af5a..e88561e 100644 --- a/www/index.html +++ b/www/index.html @@ -257,7 +257,7 @@ -

IP address of the camera

+

IP address or stream URL (rtsp://, http://, ...)

@@ -295,7 +295,13 @@ async function checkAddress() { const ip = ipInput.value.trim(); - if (!ip) { showToast('Enter an IP address'); return; } + if (!ip) { showToast('Enter an IP address or stream URL'); return; } + + // Direct stream URL — skip probe, go straight to create.html + if (ip.indexOf('://') !== -1) { + window.location.href = 'create.html?url=' + encodeURIComponent(ip); + return; + } btnCheck.disabled = true; btnCheck.textContent = 'Checking...'; From 51b11e233f021df71b7998af30e47f1cf6746e88 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 3 Apr 2026 20:33:30 +0000 Subject: [PATCH 30/33] Add RTMP protocol support Register rtmp, rtmps, rtmpx stream handlers using go2rtc pkg/rtmp.DialPlay for TCP connect, handshake, and play. --- pkg/tester/source.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/tester/source.go b/pkg/tester/source.go index 558b046..dc4e226 100644 --- a/pkg/tester/source.go +++ b/pkg/tester/source.go @@ -6,6 +6,7 @@ import ( "github.com/AlexxIT/go2rtc/pkg/bubble" "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/rtmp" "github.com/AlexxIT/go2rtc/pkg/rtsp" ) @@ -30,6 +31,9 @@ func init() { RegisterSource("rtsps", rtspHandler) RegisterSource("rtspx", rtspHandler) RegisterSource("bubble", bubbleHandler) + RegisterSource("rtmp", rtmpHandler) + RegisterSource("rtmps", rtmpHandler) + RegisterSource("rtmpx", rtmpHandler) } // bubbleHandler -- Dial handles TCP connect, HTTP handshake, XML parsing, and auth. @@ -38,6 +42,12 @@ func bubbleHandler(rawURL string) (core.Producer, error) { return bubble.Dial(rawURL) } +// rtmpHandler -- DialPlay handles TCP connect, RTMP handshake, and play command. +// ex. "rtmp://admin:pass@192.168.1.100:1935/bcs/channel0_main.bcs?channel=0&stream=0" +func rtmpHandler(rawURL string) (core.Producer, error) { + return rtmp.DialPlay(rawURL) +} + // rtspHandler -- Dial + Describe. Proves: port open, RTSP responds, auth OK, SDP received. func rtspHandler(rawURL string) (core.Producer, error) { rawURL, _, _ = strings.Cut(rawURL, "#") From 44ab0651cb407db95c0d6da23b329cf21ed1dbff Mon Sep 17 00:00:00 2001 From: eduard256 Date: Fri, 3 Apr 2026 21:01:39 +0000 Subject: [PATCH 31/33] Add DVRIP protocol support - Register dvrip stream handler using go2rtc pkg/dvrip - Add default port 34567 for dvrip scheme in URL builder --- pkg/camdb/streams.go | 1 + pkg/tester/source.go | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/pkg/camdb/streams.go b/pkg/camdb/streams.go index 2404e8b..fb9df18 100644 --- a/pkg/camdb/streams.go +++ b/pkg/camdb/streams.go @@ -12,6 +12,7 @@ import ( var defaultPorts = map[string]int{ "rtsp": 554, "rtsps": 322, "http": 80, "https": 443, "rtmp": 1935, "mms": 554, "rtp": 5004, "bubble": 80, + "dvrip": 34567, } // protocols where port must always be explicit in URL (raw TCP dial without default port logic) diff --git a/pkg/tester/source.go b/pkg/tester/source.go index dc4e226..c02bb0f 100644 --- a/pkg/tester/source.go +++ b/pkg/tester/source.go @@ -6,6 +6,7 @@ import ( "github.com/AlexxIT/go2rtc/pkg/bubble" "github.com/AlexxIT/go2rtc/pkg/core" + "github.com/AlexxIT/go2rtc/pkg/dvrip" "github.com/AlexxIT/go2rtc/pkg/rtmp" "github.com/AlexxIT/go2rtc/pkg/rtsp" ) @@ -34,6 +35,13 @@ func init() { RegisterSource("rtmp", rtmpHandler) RegisterSource("rtmps", rtmpHandler) RegisterSource("rtmpx", rtmpHandler) + RegisterSource("dvrip", dvripHandler) +} + +// dvripHandler -- Dial handles TCP connect, Sofia MD5 auth, and OPMonitor stream negotiation. +// ex. "dvrip://admin:pass@192.168.1.100:34567?channel=0&subtype=0" +func dvripHandler(rawURL string) (core.Producer, error) { + return dvrip.Dial(rawURL) } // bubbleHandler -- Dial handles TCP connect, HTTP handshake, XML parsing, and auth. From 5f21a91ff957168a651570228f80ea8bad208020 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Sun, 5 Apr 2026 08:13:28 +0000 Subject: [PATCH 32/33] Add universal Linux installer script Bash installer that works on any Linux distro: - Auto-detects OS and architecture - Installs Docker via get.docker.com if missing - Installs Docker Compose plugin if missing - Auto-discovers local Frigate and go2rtc instances - Interactive dialogs with 10s timeouts - Generates docker-compose.yml and .env in /opt/strix/ - Supports install and update modes - CLI flags for non-interactive use (--yes, --version, --no-logo) - Returns machine-readable status for parent scripts (Proxmox LXC) --- install.sh | 863 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 863 insertions(+) create mode 100755 install.sh diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..43c153d --- /dev/null +++ b/install.sh @@ -0,0 +1,863 @@ +#!/usr/bin/env bash +# ============================================================================= +# Strix Installer +# Universal installer for any Linux distribution. +# Installs Docker (via get.docker.com), Docker Compose, detects Frigate/go2rtc, +# and deploys Strix via docker compose. +# +# Usage: +# curl -fsSL https://raw.githubusercontent.com/eduard256/Strix/main/install.sh | sudo bash +# sudo bash install.sh [OPTIONS] +# +# Options: +# --no-logo Suppress ASCII logo (useful when called from another script) +# --no-color Disable colored output +# --yes, -y Non-interactive mode, accept all defaults +# --version TAG Set image tag without prompt (latest/dev/1.0.9) +# --verbose, -v Show detailed output from docker commands +# +# Exit codes: +# 0 = success +# 1 = docker installation failed +# 2 = docker compose not available +# 3 = image pull failed +# 4 = container failed to start +# 5 = healthcheck failed +# ============================================================================= + +set -euo pipefail + +# --------------------------------------------------------------------------- +# Globals +# --------------------------------------------------------------------------- +STRIX_DIR="/opt/strix" +STRIX_PORT="4567" +IMAGE="eduard256/strix" +LOG_FILE="${STRIX_DIR}/install.log" +DIALOG_TIMEOUT=10 + +# Flags (overridden by CLI args) +SHOW_LOGO=true +USE_COLOR=true +INTERACTIVE=true +VERBOSE=false +TAG="" + +# Result variables (printed at the end for parent scripts) +INSTALL_MODE="" # install | update +FRIGATE_STATUS="none" # found | set | none +GO2RTC_STATUS="none" # found | set | none +FINAL_VERSION="" + +# --------------------------------------------------------------------------- +# Parse CLI arguments +# --------------------------------------------------------------------------- +while [[ $# -gt 0 ]]; do + case "$1" in + --no-logo) SHOW_LOGO=false; shift ;; + --no-color) USE_COLOR=false; shift ;; + --yes|-y) INTERACTIVE=false; shift ;; + --verbose|-v) VERBOSE=true; shift ;; + --version) TAG="$2"; shift 2 ;; + *) shift ;; + esac +done + +# --------------------------------------------------------------------------- +# Color setup +# --------------------------------------------------------------------------- +setup_colors() { + if [[ "$USE_COLOR" == false ]] || [[ "${NO_COLOR:-}" != "" ]] || [[ ! -t 1 ]]; then + USE_COLOR=false + C_RESET="" C_BOLD="" C_DIM="" + C_RED="" C_GREEN="" C_YELLOW="" C_CYAN="" C_MAGENTA="" C_WHITE="" + return + fi + + local colors + colors=$(tput colors 2>/dev/null || echo 0) + if [[ "$colors" -lt 8 ]]; then + USE_COLOR=false + C_RESET="" C_BOLD="" C_DIM="" + C_RED="" C_GREEN="" C_YELLOW="" C_CYAN="" C_MAGENTA="" C_WHITE="" + return + fi + + C_RESET="\033[0m" + C_BOLD="\033[1m" + C_DIM="\033[2m" + C_RED="\033[31m" + C_GREEN="\033[32m" + C_YELLOW="\033[33m" + C_CYAN="\033[36m" + C_MAGENTA="\033[35m" + C_WHITE="\033[97m" +} + +# --------------------------------------------------------------------------- +# Terminal width helpers +# --------------------------------------------------------------------------- +term_width() { + local w + w=$(tput cols 2>/dev/null || echo 80) + [[ "$w" -lt 40 ]] && w=40 + echo "$w" +} + +# Print text centered in terminal +center() { + local text="$1" + local w + w=$(term_width) + # Strip ANSI codes for length calculation + local stripped + stripped=$(echo -e "$text" | sed 's/\x1b\[[0-9;]*m//g') + local len=${#stripped} + local pad=$(( (w - len) / 2 )) + [[ "$pad" -lt 0 ]] && pad=0 + printf "%*s%b\n" "$pad" "" "$text" +} + +# --------------------------------------------------------------------------- +# Logging +# --------------------------------------------------------------------------- +mkdir -p "$STRIX_DIR" 2>/dev/null || true + +log_raw() { + local ts + ts=$(date '+%H:%M:%S') + echo -e "$ts $1" >> "$LOG_FILE" 2>/dev/null || true +} + +log() { + log_raw "$1" + if [[ "$VERBOSE" == true ]]; then + local ts + ts=$(date '+%H:%M:%S') + echo -e " ${C_DIM}${ts} $1${C_RESET}" + fi +} + +# Status line helpers +status_ok() { echo -e " ${C_GREEN}${C_BOLD}[OK]${C_RESET} $1"; log "[OK] $1"; } +status_warn() { echo -e " ${C_YELLOW}${C_BOLD}[!!]${C_RESET} $1"; log "[!!] $1"; } +status_fail() { echo -e " ${C_RED}${C_BOLD}[XX]${C_RESET} $1"; log "[XX] $1"; } +status_info() { echo -e " ${C_CYAN}${C_BOLD}[..]${C_RESET} $1"; log "[..] $1"; } +status_skip() { echo -e " ${C_DIM}[--]${C_RESET} $1"; log "[--] $1"; } + +# --------------------------------------------------------------------------- +# ASCII art +# --------------------------------------------------------------------------- +show_logo() { + [[ "$SHOW_LOGO" == false ]] && return + + echo "" + + # Block STRIX title + center "${C_MAGENTA}${C_BOLD}███████╗████████╗██████╗ ██╗██╗ ██╗${C_RESET}" + center "${C_MAGENTA}${C_BOLD}██╔════╝╚══██╔══╝██╔══██╗██║╚██╗██╔╝${C_RESET}" + center "${C_MAGENTA}${C_BOLD}███████╗ ██║ ██████╔╝██║ ╚███╔╝${C_RESET}" + center "${C_MAGENTA}${C_BOLD}╚════██║ ██║ ██╔══██╗██║ ██╔██╗${C_RESET}" + center "${C_MAGENTA}${C_BOLD}███████║ ██║ ██║ ██║██║██╔╝ ██╗${C_RESET}" + center "${C_MAGENTA}${C_BOLD}╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝${C_RESET}" + + echo "" + + # Owl + center "${C_CYAN} __________-------____ ____-------__________${C_RESET}" + center "${C_CYAN} \\------____-------___--__---------__--___-------____------/${C_RESET}" + center "${C_CYAN} \\//////// / / / / / \\ _-------_ / \\ \\ \\ \\ \\ \\\\\\\\\\\\\\\\/${C_RESET}" + center "${C_CYAN} \\////-/-/------/_/_| /___ ___\\ |_\\_\\------\\-\\-\\\\\\\\/${C_RESET}" + center "${C_CYAN} --//// / / / //|| ${C_YELLOW}(O)${C_CYAN}\\ /${C_YELLOW}(O)${C_CYAN} ||\\\\ \\ \\ \\ \\\\\\\\--${C_RESET}" + center "${C_CYAN} ---__/ // /| \\_ /V\\ _/ |\\ \\\\ \\__---${C_RESET}" + center "${C_CYAN} -// / /\\_ ------- _/\\ \\ \\\\-${C_RESET}" + center "${C_CYAN} \\_/_/ /\\---------/\\ \\_\\_/${C_RESET}" + center "${C_CYAN} ----\\ | /----${C_RESET}" + center "${C_CYAN} | -|- |${C_RESET}" + center "${C_CYAN} / | \\${C_RESET}" + center "${C_CYAN} ---- ----${C_RESET}" + + echo "" + center "${C_WHITE}${C_BOLD}Smart IP Camera Stream Finder${C_RESET}" + center "${C_DIM}────────────────────────────────────────${C_RESET}" + echo "" +} + +show_owl_small() { + echo -e " ${C_CYAN} ,___,${C_RESET}" + echo -e " ${C_CYAN} /(6 6)\\_${C_RESET}" + echo -e " ${C_CYAN} /\\\` ' \`'\\\\_${C_RESET}" + echo -e " ${C_CYAN} \\\\\\\\_''''|\\\\\\\\${C_RESET}" + echo -e " ${C_CYAN} )\\\\\\\\\\\\''//||/${C_RESET}" + echo -e " ${C_CYAN} ._,--/////\"\"------${C_RESET}" +} + +# --------------------------------------------------------------------------- +# Dialog boxes +# --------------------------------------------------------------------------- + +# Draw a box around content. +# Usage: draw_box "Title" "line1" "line2" ... +draw_box() { + local title="$1"; shift + local w + w=$(term_width) + local box_w=$(( w - 4 )) + [[ "$box_w" -gt 60 ]] && box_w=60 + + local top_line="" + local bot_line="" + local i + + # Build horizontal lines + for (( i = 0; i < box_w - 2; i++ )); do + top_line="${top_line}─" + bot_line="${bot_line}─" + done + + # Center the box + local pad=$(( (w - box_w) / 2 )) + [[ "$pad" -lt 0 ]] && pad=0 + local sp + sp=$(printf "%*s" "$pad" "") + + echo "" + echo -e "${sp}${C_CYAN}┌─ ${C_WHITE}${C_BOLD}${title}${C_RESET}${C_CYAN} ${top_line:$(( ${#title} + 3 ))}┐${C_RESET}" + echo -e "${sp}${C_CYAN}│$(printf "%*s" $(( box_w - 2 )) "")│${C_RESET}" + + for line in "$@"; do + local stripped + stripped=$(echo -e "$line" | sed 's/\x1b\[[0-9;]*m//g') + local line_len=${#stripped} + local right_pad=$(( box_w - 2 - line_len )) + [[ "$right_pad" -lt 0 ]] && right_pad=0 + echo -e "${sp}${C_CYAN}│${C_RESET} ${line}$(printf "%*s" "$right_pad" "")${C_CYAN}│${C_RESET}" + done + + echo -e "${sp}${C_CYAN}│$(printf "%*s" $(( box_w - 2 )) "")│${C_RESET}" + echo -e "${sp}${C_CYAN}└${bot_line}┘${C_RESET}" + echo "" +} + +# Prompt with timeout. Returns user input or default. +# Usage: timed_prompt "prompt text" "default" timeout_seconds +timed_prompt() { + local prompt_text="$1" + local default="$2" + local timeout="$3" + local result="" + + if [[ "$INTERACTIVE" == false ]]; then + echo "$default" + return + fi + + # Show countdown hint + echo -ne " ${C_YELLOW}${prompt_text}${C_RESET} ${C_DIM}(${timeout}s -> ${default})${C_RESET}: " + + if read -r -t "$timeout" result 2>/dev/null; then + if [[ -z "$result" ]]; then + echo "$default" + else + echo "$result" + fi + else + echo "" # newline after timeout + echo "$default" + fi +} + +# --------------------------------------------------------------------------- +# System detection +# --------------------------------------------------------------------------- +detect_system() { + log "Detecting OS from /etc/os-release" + + if [[ -f /etc/os-release ]]; then + # shellcheck disable=SC1091 + . /etc/os-release + OS_ID="${ID:-unknown}" + OS_VERSION="${VERSION_ID:-unknown}" + OS_NAME="${PRETTY_NAME:-${ID} ${VERSION_ID}}" + else + OS_ID="unknown" + OS_VERSION="unknown" + OS_NAME="Unknown Linux" + fi + + ARCH=$(uname -m) + case "$ARCH" in + x86_64) ARCH_LABEL="amd64" ;; + aarch64) ARCH_LABEL="arm64" ;; + armv7l) ARCH_LABEL="armv7" ;; + *) ARCH_LABEL="$ARCH" ;; + esac + + log "Detected: ${OS_ID} ${OS_VERSION} (${ARCH_LABEL})" + status_ok "System: ${C_WHITE}${C_BOLD}${OS_NAME}${C_RESET} (${ARCH_LABEL})" +} + +# --------------------------------------------------------------------------- +# Ensure root +# --------------------------------------------------------------------------- +ensure_root() { + if [[ "$(id -u)" -ne 0 ]]; then + status_info "Root privileges required, re-running with sudo..." + exec sudo "$0" "$@" + fi +} + +# --------------------------------------------------------------------------- +# Install curl if missing +# --------------------------------------------------------------------------- +ensure_curl() { + if command -v curl &>/dev/null; then + log "curl found" + return + fi + + status_info "Installing curl..." + log "curl not found, installing" + + case "$OS_ID" in + ubuntu|debian|raspbian|linuxmint|pop) + apt-get update -qq && apt-get install -y -qq curl ;; + centos|rhel|rocky|almalinux|ol) + yum install -y -q curl ;; + fedora) + dnf install -y -q curl ;; + alpine) + apk add --no-cache curl ;; + arch|manjaro) + pacman -Sy --noconfirm curl ;; + opensuse*|sles) + zypper install -y curl ;; + *) + status_fail "Cannot install curl: unknown package manager for ${OS_ID}" + status_fail "Please install curl manually and re-run the script" + exit 1 ;; + esac + + if command -v curl &>/dev/null; then + status_ok "curl installed" + else + status_fail "Failed to install curl" + exit 1 + fi +} + +# --------------------------------------------------------------------------- +# Docker installation +# --------------------------------------------------------------------------- +check_docker() { + if command -v docker &>/dev/null; then + local ver + ver=$(docker --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1 || echo "unknown") + status_ok "Docker ${C_WHITE}${C_BOLD}${ver}${C_RESET}" + log "Docker found: ${ver}" + return 0 + fi + return 1 +} + +install_docker() { + status_info "Installing Docker via ${C_WHITE}get.docker.com${C_RESET}..." + log "Downloading and running get.docker.com" + + if [[ "$VERBOSE" == true ]]; then + curl -fsSL https://get.docker.com | sh + else + curl -fsSL https://get.docker.com | sh &>/dev/null + fi + + # Enable and start docker + if command -v systemctl &>/dev/null; then + systemctl enable docker &>/dev/null || true + systemctl start docker &>/dev/null || true + fi + + if check_docker; then + return 0 + else + status_fail "Docker installation failed" + log "Docker installation failed" + exit 1 + fi +} + +# --------------------------------------------------------------------------- +# Docker Compose check +# --------------------------------------------------------------------------- +check_compose() { + # Check plugin first (docker compose v2) + if docker compose version &>/dev/null; then + local ver + ver=$(docker compose version --short 2>/dev/null || echo "unknown") + status_ok "Docker Compose ${C_WHITE}${C_BOLD}${ver}${C_RESET}" + log "Docker Compose found: ${ver}" + COMPOSE_CMD="docker compose" + return 0 + fi + + # Check standalone docker-compose + if command -v docker-compose &>/dev/null; then + local ver + ver=$(docker-compose --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1 || echo "unknown") + status_ok "Docker Compose ${C_WHITE}${C_BOLD}${ver}${C_RESET} (standalone)" + log "Docker Compose standalone found: ${ver}" + COMPOSE_CMD="docker-compose" + return 0 + fi + + return 1 +} + +install_compose() { + status_info "Installing Docker Compose plugin..." + log "Installing Docker Compose plugin" + + # Docker Compose V2 is typically bundled with Docker now. + # Try installing the plugin package. + case "$OS_ID" in + ubuntu|debian|raspbian|linuxmint|pop) + apt-get update -qq && apt-get install -y -qq docker-compose-plugin 2>/dev/null ;; + centos|rhel|rocky|almalinux|ol|fedora) + yum install -y -q docker-compose-plugin 2>/dev/null || dnf install -y -q docker-compose-plugin 2>/dev/null ;; + *) + # Fallback: download binary + local compose_ver="v2.29.1" + local compose_arch + case "$ARCH_LABEL" in + amd64) compose_arch="x86_64" ;; + arm64) compose_arch="aarch64" ;; + *) compose_arch="$ARCH" ;; + esac + mkdir -p /usr/local/lib/docker/cli-plugins + curl -fsSL "https://github.com/docker/compose/releases/download/${compose_ver}/docker-compose-linux-${compose_arch}" \ + -o /usr/local/lib/docker/cli-plugins/docker-compose + chmod +x /usr/local/lib/docker/cli-plugins/docker-compose + ;; + esac + + if check_compose; then + return 0 + else + status_fail "Docker Compose installation failed" + log "Docker Compose installation failed" + exit 2 + fi +} + +# --------------------------------------------------------------------------- +# Check if Strix is already installed +# --------------------------------------------------------------------------- +check_existing() { + if [[ -f "${STRIX_DIR}/docker-compose.yml" ]]; then + if $COMPOSE_CMD -f "${STRIX_DIR}/docker-compose.yml" ps --format '{{.State}}' 2>/dev/null | grep -qi "running"; then + INSTALL_MODE="update" + status_info "Strix is already running -- ${C_WHITE}${C_BOLD}update mode${C_RESET}" + log "Existing Strix installation found, switching to update mode" + return 0 + fi + # compose file exists but not running + INSTALL_MODE="update" + status_info "Strix config found but not running -- ${C_WHITE}${C_BOLD}update mode${C_RESET}" + log "Existing Strix config found (not running), switching to update mode" + return 0 + fi + + INSTALL_MODE="install" + log "No existing Strix installation found" + return 1 +} + +# --------------------------------------------------------------------------- +# Version selection dialog +# --------------------------------------------------------------------------- +select_version() { + # If already set via --version flag + if [[ -n "$TAG" ]]; then + FINAL_VERSION="$TAG" + status_ok "Version: ${C_WHITE}${C_BOLD}${TAG}${C_RESET} (from --version flag)" + log "Version set via flag: ${TAG}" + return + fi + + if [[ "$INTERACTIVE" == false ]]; then + FINAL_VERSION="latest" + status_ok "Version: ${C_WHITE}${C_BOLD}latest${C_RESET} (non-interactive default)" + log "Version defaulted to latest (non-interactive)" + return + fi + + draw_box "Select Version" \ + " ${C_GREEN}${C_BOLD}[1]${C_RESET} latest ${C_DIM}(recommended)${C_RESET}" \ + " ${C_YELLOW}${C_BOLD}[2]${C_RESET} dev ${C_DIM}(development)${C_RESET}" \ + " ${C_CYAN}${C_BOLD}[3]${C_RESET} custom tag ${C_DIM}(e.g. 1.0.9)${C_RESET}" + + local choice + choice=$(timed_prompt "Choice [1/2/3]" "1" "$DIALOG_TIMEOUT") + + case "$choice" in + 1|"") FINAL_VERSION="latest" ;; + 2) FINAL_VERSION="dev" ;; + 3) + echo -ne " ${C_YELLOW}Enter tag: ${C_RESET}" + local custom_tag + if read -r -t "$DIALOG_TIMEOUT" custom_tag 2>/dev/null && [[ -n "$custom_tag" ]]; then + FINAL_VERSION="$custom_tag" + else + FINAL_VERSION="latest" + echo "" + fi + ;; + *) FINAL_VERSION="latest" ;; + esac + + status_ok "Version: ${C_WHITE}${C_BOLD}${FINAL_VERSION}${C_RESET}" + log "Version selected: ${FINAL_VERSION}" +} + +# --------------------------------------------------------------------------- +# Service detection (Frigate / go2rtc) +# --------------------------------------------------------------------------- +probe_frigate() { + log "Probing Frigate at localhost:5000" + + if curl -sf --connect-timeout 2 --max-time 3 "http://localhost:5000/api/config" &>/dev/null; then + FRIGATE_STATUS="found" + FRIGATE_URL="http://localhost:5000" + status_ok "Frigate: ${C_WHITE}${C_BOLD}localhost:5000${C_RESET}" + log "Frigate found at localhost:5000" + return + fi + + log "Frigate not found locally" + + if [[ "$INTERACTIVE" == false ]]; then + FRIGATE_STATUS="none" + FRIGATE_URL="" + status_skip "Frigate: not found (skipped)" + return + fi + + echo "" + show_owl_small + draw_box "Frigate Not Found" \ + " Frigate was not detected on this machine." \ + " Enter Frigate URL or leave empty to skip." \ + "" \ + " ${C_DIM}Example: http://192.168.1.100:5000${C_RESET}" + + local input + input=$(timed_prompt "Frigate URL" "" "$DIALOG_TIMEOUT") + + if [[ -n "$input" ]]; then + FRIGATE_STATUS="set" + FRIGATE_URL="$input" + status_ok "Frigate: ${C_WHITE}${C_BOLD}${input}${C_RESET} (manual)" + log "Frigate URL set manually: ${input}" + else + FRIGATE_STATUS="none" + FRIGATE_URL="" + status_skip "Frigate: not configured" + log "Frigate skipped" + fi +} + +probe_go2rtc() { + log "Probing go2rtc at localhost:1984 and localhost:11984" + + if curl -sf --connect-timeout 2 --max-time 3 "http://localhost:1984/api" &>/dev/null; then + GO2RTC_STATUS="found" + GO2RTC_URL="http://localhost:1984" + status_ok "go2rtc: ${C_WHITE}${C_BOLD}localhost:1984${C_RESET}" + log "go2rtc found at localhost:1984" + return + fi + + if curl -sf --connect-timeout 2 --max-time 3 "http://localhost:11984/api" &>/dev/null; then + GO2RTC_STATUS="found" + GO2RTC_URL="http://localhost:11984" + status_ok "go2rtc: ${C_WHITE}${C_BOLD}localhost:11984${C_RESET}" + log "go2rtc found at localhost:11984" + return + fi + + log "go2rtc not found locally" + + if [[ "$INTERACTIVE" == false ]]; then + GO2RTC_STATUS="none" + GO2RTC_URL="" + status_skip "go2rtc: not found (skipped)" + return + fi + + echo "" + show_owl_small + draw_box "go2rtc Not Found" \ + " go2rtc was not detected on this machine." \ + " Enter go2rtc URL or leave empty to skip." \ + "" \ + " ${C_DIM}Example: http://192.168.1.100:1984${C_RESET}" + + local input + input=$(timed_prompt "go2rtc URL" "" "$DIALOG_TIMEOUT") + + if [[ -n "$input" ]]; then + GO2RTC_STATUS="set" + GO2RTC_URL="$input" + status_ok "go2rtc: ${C_WHITE}${C_BOLD}${input}${C_RESET} (manual)" + log "go2rtc URL set manually: ${input}" + else + GO2RTC_STATUS="none" + GO2RTC_URL="" + status_skip "go2rtc: not configured" + log "go2rtc skipped" + fi +} + +# --------------------------------------------------------------------------- +# Generate config files +# --------------------------------------------------------------------------- +generate_env() { + log "Generating ${STRIX_DIR}/.env" + + cat > "${STRIX_DIR}/.env" <> "${STRIX_DIR}/.env" + fi + + if [[ -n "${GO2RTC_URL:-}" ]]; then + echo "STRIX_GO2RTC_URL=${GO2RTC_URL}" >> "${STRIX_DIR}/.env" + fi + + log "Generated .env: TAG=${FINAL_VERSION}, FRIGATE=${FRIGATE_URL:-}, GO2RTC=${GO2RTC_URL:-}" +} + +generate_compose() { + log "Generating ${STRIX_DIR}/docker-compose.yml" + + local env_section="" + if [[ -n "${FRIGATE_URL:-}" ]] || [[ -n "${GO2RTC_URL:-}" ]]; then + env_section=" environment:" + [[ -n "${FRIGATE_URL:-}" ]] && env_section="${env_section} + - STRIX_FRIGATE_URL=\${STRIX_FRIGATE_URL}" + [[ -n "${GO2RTC_URL:-}" ]] && env_section="${env_section} + - STRIX_GO2RTC_URL=\${STRIX_GO2RTC_URL}" + fi + + cat > "${STRIX_DIR}/docker-compose.yml" <&1 | tail -1 + fi + + if [[ $? -eq 0 ]]; then + status_ok "Image pulled: ${C_WHITE}${C_BOLD}${IMAGE}:${FINAL_VERSION}${C_RESET}" + log "Image pulled successfully" + else + status_fail "Failed to pull image ${IMAGE}:${FINAL_VERSION}" + log "Image pull failed" + exit 3 + fi +} + +start_container() { + log "Starting container" + + if [[ "$INSTALL_MODE" == "update" ]]; then + status_info "Recreating container..." + $COMPOSE_CMD -f "${STRIX_DIR}/docker-compose.yml" --env-file "${STRIX_DIR}/.env" up -d --force-recreate 2>&1 | \ + if [[ "$VERBOSE" == true ]]; then cat; else tail -1; fi + else + status_info "Starting container..." + $COMPOSE_CMD -f "${STRIX_DIR}/docker-compose.yml" --env-file "${STRIX_DIR}/.env" up -d 2>&1 | \ + if [[ "$VERBOSE" == true ]]; then cat; else tail -1; fi + fi + + if [[ $? -ne 0 ]]; then + status_fail "Container failed to start" + log "Container failed to start" + exit 4 + fi + + log "Container started" +} + +healthcheck() { + status_info "Running healthcheck..." + log "Waiting for healthcheck on localhost:${STRIX_PORT}" + + local retries=10 + local i + for (( i = 1; i <= retries; i++ )); do + if curl -sf --connect-timeout 2 --max-time 3 "http://localhost:${STRIX_PORT}/api/health" &>/dev/null; then + local version + version=$(curl -sf --max-time 3 "http://localhost:${STRIX_PORT}/api" 2>/dev/null | grep -oP '"version"\s*:\s*"\K[^"]+' || echo "unknown") + status_ok "Strix is running ${C_WHITE}${C_BOLD}v${version}${C_RESET} on port ${C_WHITE}${C_BOLD}${STRIX_PORT}${C_RESET}" + log "Healthcheck passed, version: ${version}" + return 0 + fi + sleep 1 + done + + status_fail "Healthcheck failed after ${retries} attempts" + log "Healthcheck failed" + exit 5 +} + +# --------------------------------------------------------------------------- +# Summary +# --------------------------------------------------------------------------- +show_summary() { + echo "" + local w + w=$(term_width) + local line="" + local box_w=$(( w - 4 )) + [[ "$box_w" -gt 60 ]] && box_w=60 + for (( i = 0; i < box_w - 2; i++ )); do line="${line}─"; done + local pad=$(( (w - box_w) / 2 )) + [[ "$pad" -lt 0 ]] && pad=0 + local sp + sp=$(printf "%*s" "$pad" "") + + echo -e "${sp}${C_GREEN}┌─ ${C_WHITE}${C_BOLD}Complete${C_RESET} ${C_GREEN}${line:11}┐${C_RESET}" + echo -e "${sp}${C_GREEN}│$(printf "%*s" $(( box_w - 2 )) "")│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} Mode: ${C_WHITE}${C_BOLD}${INSTALL_MODE}${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#INSTALL_MODE} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} Version: ${C_WHITE}${C_BOLD}${FINAL_VERSION}${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#FINAL_VERSION} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} Port: ${C_WHITE}${C_BOLD}${STRIX_PORT}${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#STRIX_PORT} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} Frigate: ${C_WHITE}${FRIGATE_STATUS}${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#FRIGATE_STATUS} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} go2rtc: ${C_WHITE}${GO2RTC_STATUS}${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#GO2RTC_STATUS} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} Config: ${C_DIM}${STRIX_DIR}/${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#STRIX_DIR} - 1 )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} Log: ${C_DIM}${LOG_FILE}${C_RESET}$(printf "%*s" $(( box_w - 16 - ${#LOG_FILE} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│$(printf "%*s" $(( box_w - 2 )) "")│${C_RESET}" + echo -e "${sp}${C_GREEN}│${C_RESET} ${C_CYAN}Open: ${C_WHITE}${C_BOLD}http://localhost:${STRIX_PORT}${C_RESET}$(printf "%*s" $(( box_w - 30 - ${#STRIX_PORT} )) "")${C_GREEN}│${C_RESET}" + echo -e "${sp}${C_GREEN}│$(printf "%*s" $(( box_w - 2 )) "")│${C_RESET}" + echo -e "${sp}${C_GREEN}└${line}┘${C_RESET}" + echo "" + + # Machine-readable output for parent scripts (always last line) + echo "STRIX_RESULT=OK MODE=${INSTALL_MODE} VERSION=${FINAL_VERSION} FRIGATE=${FRIGATE_STATUS} GO2RTC=${GO2RTC_STATUS}" +} + +# --------------------------------------------------------------------------- +# Verbose log tail (shown on error) +# --------------------------------------------------------------------------- +show_error_log() { + if [[ -f "$LOG_FILE" ]]; then + echo "" + echo -e " ${C_RED}${C_BOLD}── Last log entries ──${C_RESET}" + tail -20 "$LOG_FILE" | while IFS= read -r line; do + echo -e " ${C_RED}${line}${C_RESET}" + done + echo -e " ${C_RED}${C_BOLD}──────────────────────${C_RESET}" + echo "" + echo -e " Full log: ${C_WHITE}${LOG_FILE}${C_RESET}" + fi +} + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- +main() { + # Trap errors to show log + trap 'show_error_log' ERR + + # Initialize + setup_colors + ensure_root "$@" + + # Show logo + show_logo + + # Detect system + detect_system + + # Ensure curl is available + ensure_curl + + # Docker + if ! check_docker; then + install_docker + fi + + # Docker Compose + if ! check_compose; then + install_compose + fi + + # Version selection + select_version + + # Check existing installation + check_existing || true + + # Detect services (only for fresh install) + if [[ "$INSTALL_MODE" == "install" ]]; then + probe_frigate + probe_go2rtc + else + # For updates, load existing env + if [[ -f "${STRIX_DIR}/.env" ]]; then + # shellcheck disable=SC1091 + source "${STRIX_DIR}/.env" 2>/dev/null || true + FRIGATE_URL="${STRIX_FRIGATE_URL:-}" + GO2RTC_URL="${STRIX_GO2RTC_URL:-}" + [[ -n "$FRIGATE_URL" ]] && FRIGATE_STATUS="set" + [[ -n "$GO2RTC_URL" ]] && GO2RTC_STATUS="set" + fi + fi + + echo "" + echo -e " ${C_DIM}────────────────────────────────────────${C_RESET}" + echo "" + + # Generate configs + generate_env + generate_compose + + # Deploy + pull_image + start_container + healthcheck + + # Done + show_summary +} + +main "$@" From e2f84ec0f61d6b1a8111b1506a75fe508ef58ff6 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Sun, 5 Apr 2026 08:32:05 +0000 Subject: [PATCH 33/33] Release v2.0.0 --- .claude/skills/release_strix/SKILL.md | 38 +++++++++++++++--- CHANGELOG.md | 33 +++++++++++++++ Dockerfile | 4 +- go.mod | 17 +++++--- go.sum | 58 ++++++++++++++++++++++----- internal/probe/probe.go | 4 +- internal/search/search.go | 4 +- main.go | 7 +++- 8 files changed, 137 insertions(+), 28 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.claude/skills/release_strix/SKILL.md b/.claude/skills/release_strix/SKILL.md index 5cf4a86..4962b9c 100644 --- a/.claude/skills/release_strix/SKILL.md +++ b/.claude/skills/release_strix/SKILL.md @@ -1,6 +1,6 @@ --- name: release_strix -description: Full release of Strix -- merge develop to main, tag, build multiarch Docker image, push to Docker Hub, update hassio-strix, create GitHub Release. +description: Full release of Strix -- merge develop to main, tag, build multiarch Docker image, build static binaries, push to Docker Hub, update hassio-strix, create GitHub Release with binaries attached. disable-model-invocation: true --- @@ -13,6 +13,10 @@ You are performing a full release of Strix. Follow every step exactly. Do NOT sk - Strix: `/home/user/Strix` - hassio-strix: `/home/user/hassio-strix` +## Versioning + +Version is injected at build time via ldflags (`-X main.version=$VERSION`). There is NO hardcoded version in the source code -- `main.go` has `var version = "dev"` as default. The Dockerfile passes `--build-arg VERSION` which maps to the same ldflags. Do NOT edit `main.go` to set the version. + ## Step 1: Gather information ```bash @@ -64,7 +68,7 @@ ls -lh cameras.db ```bash cd /home/user/Strix go test ./... -go build ./... +CGO_ENABLED=0 go build ./... ``` If tests or build fail -- STOP and report the error. Do not continue. @@ -157,17 +161,40 @@ git commit -m "Release v$VERSION" git push origin main ``` -## Step 11: GitHub Release +## Step 11: Build static binaries + +Build static binaries for both platforms: + +```bash +cd /home/user/Strix +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.version=$VERSION" -o strix-linux-amd64 . +CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -X main.version=$VERSION" -o strix-linux-arm64 . +``` + +Verify both binaries are statically linked: +```bash +file strix-linux-amd64 strix-linux-arm64 +``` + +## Step 12: GitHub Release + +Create the release and attach binaries: ```bash cd /home/user/Strix PREV_TAG=$(git tag --sort=-version:refname | sed -n '2p') gh release create v$VERSION \ --title "v$VERSION" \ - --notes "$(git log --oneline ${PREV_TAG}..v$VERSION)" + --notes "$(git log --oneline ${PREV_TAG}..v$VERSION)" \ + strix-linux-amd64 strix-linux-arm64 ``` -## Step 12: Final report +Clean up binaries after upload: +```bash +rm -f strix-linux-amd64 strix-linux-arm64 +``` + +## Step 13: Final report Output a summary: @@ -176,6 +203,7 @@ Release v$VERSION complete: - Git: tag v$VERSION pushed to main - Docker Hub: eduard256/strix:$VERSION (amd64 + arm64) - Health check: version "$VERSION" verified +- Binaries: strix-linux-amd64, strix-linux-arm64 attached to GitHub Release - hassio-strix: config.json updated to $VERSION, pushed to main - GitHub Release: ``` diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2f86588 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,33 @@ +# Changelog + +## [2.0.0] - 2025-04-05 + +### Added +- Complete rewrite as a single Go binary with modular architecture +- DVRIP protocol support +- RTMP protocol support +- Bubble protocol support +- HTTP/HTTPS protocol support for snapshots and streams +- Direct stream URL input in web UI +- Frigate config proxy with auto-discovery via HA Supervisor API +- Frigate connectivity check endpoint +- go2rtc module with auto-discovery +- Network probe system: port scanning, ICMP ping, ARP/OUI lookup, mDNS/HomeKit detection, HTTP probing +- Camera stream tester with automatic JPEG screenshot capture and resolution extraction +- Frigate config generator from camera database +- Web UI pages: search, test, config, URLs, go2rtc streams, HomeKit +- SQLite camera database loaded from external StrixCamDB repository +- Universal Linux installer script with Docker/Compose auto-setup +- In-memory log viewer API endpoint +- Dockerfile with multi-stage build and healthcheck + +### Fixed +- Screenshot URL path: removed leading slash +- Credentials with special characters are now URL-encoded in stream URLs +- Credentials no longer leak in debug logs + +### Changed +- Version is now injected at build time via ldflags (no hardcoded version in source) +- Pure Go build with no CGO dependency (switched from mattn/go-sqlite3 to modernc.org/sqlite) +- Port is always included in URL for protocols with raw TCP dial +- Structured logging with zerolog, separate from human-readable output diff --git a/Dockerfile b/Dockerfile index cfb72ac..beb6b47 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,5 @@ FROM golang:1.26-alpine AS builder -RUN apk add --no-cache gcc musl-dev - WORKDIR /src COPY go.mod go.sum ./ RUN go mod download @@ -9,7 +7,7 @@ RUN go mod download COPY . . ARG VERSION=dev -RUN CGO_ENABLED=1 go build -ldflags "-s -w -X main.version=${VERSION}" -o /strix . +RUN CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=${VERSION}" -o /strix . FROM alpine:latest diff --git a/go.mod b/go.mod index d2aa909..16f15c7 100644 --- a/go.mod +++ b/go.mod @@ -4,23 +4,30 @@ go 1.26 require ( github.com/AlexxIT/go2rtc v1.9.14 - github.com/mattn/go-sqlite3 v1.14.37 github.com/miekg/dns v1.1.72 github.com/rs/zerolog v1.34.0 + modernc.org/sqlite v1.48.1 ) require ( + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/rtcp v1.2.16 // indirect github.com/pion/rtp v1.10.0 // indirect github.com/pion/sdp/v3 v3.0.17 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/sigurn/crc16 v0.0.0-20240131213347-83fcde1e29d1 // indirect github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f // indirect - golang.org/x/mod v0.32.0 // indirect - golang.org/x/net v0.49.0 // indirect + golang.org/x/mod v0.33.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.40.0 // indirect - golang.org/x/tools v0.41.0 // indirect + golang.org/x/sys v0.42.0 // indirect + golang.org/x/tools v0.42.0 // indirect + modernc.org/libc v1.70.0 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index 6895456..b202810 100644 --- a/go.sum +++ b/go.sum @@ -3,9 +3,17 @@ github.com/AlexxIT/go2rtc v1.9.14/go.mod h1:fcN11KXBbIcExYRqMVDlW7amLZ4/z+hpr5+3 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= @@ -13,10 +21,10 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-sqlite3 v1.14.37 h1:3DOZp4cXis1cUIpCfXLtmlGolNLp2VEqhiB/PARNBIg= -github.com/mattn/go-sqlite3 v1.14.37/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= @@ -28,6 +36,8 @@ github.com/pion/sdp/v3 v3.0.17/go.mod h1:9tyKzznud3qiweZcD86kS0ff1pGYB3VX+Bcsmkx github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= @@ -37,18 +47,46 @@ github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f h1:1R9KdKjCNSd7F8iGTxI github.com/sigurn/crc8 v0.0.0-20220107193325-2243fe600f9f/go.mod h1:vQhwQ4meQEDfahT5kd61wLAF5AAeh5ZPLVI4JJ/tYo8= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= -golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis= +modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.32.0 h1:hjG66bI/kqIPX1b2yT6fr/jt+QedtP2fqojG2VrFuVw= +modernc.org/ccgo/v4 v4.32.0/go.mod h1:6F08EBCx5uQc38kMGl+0Nm0oWczoo1c7cgpzEry7Uc0= +modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= +modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= +modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= +modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= +modernc.org/libc v1.70.0 h1:U58NawXqXbgpZ/dcdS9kMshu08aiA6b7gusEusqzNkw= +modernc.org/libc v1.70.0/go.mod h1:OVmxFGP1CI/Z4L3E0Q3Mf1PDE0BucwMkcXjjLntvHJo= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= +modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.48.1 h1:S85iToyU6cgeojybE2XJlSbcsvcWkQ6qqNXJHtW5hWA= +modernc.org/sqlite v1.48.1/go.mod h1:hWjRO6Tj/5Ik8ieqxQybiEOUXy0NJFNp2tpvVpKlvig= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/internal/probe/probe.go b/internal/probe/probe.go index 109b789..057ce9e 100644 --- a/internal/probe/probe.go +++ b/internal/probe/probe.go @@ -13,7 +13,7 @@ import ( "github.com/eduard256/strix/pkg/probe" "github.com/rs/zerolog" - _ "github.com/mattn/go-sqlite3" + _ "modernc.org/sqlite" ) const probeTimeout = 100 * time.Millisecond @@ -29,7 +29,7 @@ func Init() { log = app.GetLogger("probe") var err error - db, err = sql.Open("sqlite3", "file:"+app.DB+"?mode=ro&immutable=1") + db, err = sql.Open("sqlite", "file:"+app.DB+"?mode=ro&immutable=1") if err != nil { log.Error().Err(err).Msg("[probe] db open") } diff --git a/internal/search/search.go b/internal/search/search.go index 732dd18..68a81f5 100644 --- a/internal/search/search.go +++ b/internal/search/search.go @@ -11,7 +11,7 @@ import ( "github.com/eduard256/strix/pkg/camdb" "github.com/rs/zerolog" - _ "github.com/mattn/go-sqlite3" + _ "modernc.org/sqlite" ) var log zerolog.Logger @@ -21,7 +21,7 @@ func Init() { log = app.GetLogger("search") var err error - db, err = sql.Open("sqlite3", "file:"+app.DB+"?mode=ro&immutable=1") + db, err = sql.Open("sqlite", "file:"+app.DB+"?mode=ro&immutable=1") if err != nil { log.Fatal().Err(err).Msg("[search] db open") } diff --git a/main.go b/main.go index 0b17abe..882d091 100644 --- a/main.go +++ b/main.go @@ -11,8 +11,13 @@ import ( "github.com/eduard256/strix/internal/test" ) +// version is set at build time via ldflags: +// +// go build -ldflags "-X main.version=2.0.0" +var version = "dev" + func main() { - app.Version = "2.0.0" + app.Version = version type module struct { name string

poN>qutwhC2sxnk5tH~;>%c*F{t7<9WwUyL# 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 z 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%0Arg`Ewh-OVq1-dFdw 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 FacPhOHImHL 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%0Am5It9`8b6hf7{2J>vED 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