From 27117900ebef60c8e62788369b0d12f80102adc0 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 25 Mar 2026 10:38:46 +0000 Subject: [PATCH] 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 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 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); -}

poN>qutwhC2sxnk5tH~;>%c*F{t7<9WwUyL# zlr{8J)eY1%jMOv<>RP56I%b->rdqnD+PY@ix~4jM=DK>ux&%EvYb||yH9c1qJr5;4 zFGYPnS-l`>-B3y02yxvgoK_4@D;B36htrJ{*N>MpjF&NqSF}u2y^^d!Bx^aP>9}U- zd1UE&<`{YAn0jSd`exhtJ#xC8;eMO!btmz5K-}HHC{j>(?A?(2A%V$3{^@tT9{S(N z@^Q`ebA9aVTHxzi==VoORB|71y*SvtIP6w=oL^;9U=2CwS^C|^NB5euLto{Fz0N1S zejNF_Aogu>(%aIs)`|!1)mdFnb9(A>`|9)i8wv)V7xdH@bv`R@p`Lw#G zqN=XAvZ0`&F~8zPcKNG^XOSY8runr!JBf7>Nk+nAVp zKTZ`D4b5*(F8oVV)bQlu=Jev`%+luEzcA6};_@FY{fCy9H~-PQcbn88<^M_lP@{9l z97itylNyy1uxbhababra@1MehIrXSP>{zT;J~cUcu{%SQ+Jh4`8a_mp^4pR6u)Q`gr@+8R?dV`*H|o!*h_p!amdOh~aG#`D)Q>j^T2@(S+0})f8#v=({me}-#%SQq z#(bl<^qV9D>$UObK#t|1fwQa2Z%C)W^M)_}PEHCr48Eva?;-OTiu{`+l z4>i)bf8OX%aytOT2WRS!)11kl_MN6_{xy| zU#!Bdd^@dxTFSyt+^azx5Ae>(MajLV09ieS@<}$Be!jxTQ!^2DwN1PH1&2xIpR)b4 zbWz!?1@Mqgq=mjj6&EQ+_Jn`GpR0?ZjKuO0QP3)DtXp0H1bH5%084Dnl0<&mrLVfV z_d3S{3pPNjv2bi{0x!3PV>0_Y{!5WD=d^V>Y2MA6F3TpD*J>+iCzcvq==$wEa39Wu z@0V6H%p8`~)?6J3#QlI30T$(e?WzS9_3ijZfCPICVUc~;XE)v|-2Y~j96 z>WlYnJgdG1BdW8X=Y)?H1D6y*bQYAK9zAoaa_yYxgu;$n^W4n6*G-g%Hh_*oF)YDX zbEBOiHPf5e!N&C`7`07>{f&AfO!*Rbxi=jxMI*ztT0`I^GQ8>j*WI{A{FqWsTV9u>x{sKM0s^Aa?0A(!Z1xrR z!Rqa*(DJb))oxC4GUgfHx(5adFEWI~D%M6Y5AI#oR@5R_(@XgR3SvYe`3aDVEAP_= z={OafHJRU)+iKyA5Uu^v(#Mhg*h`6O!}m@}=_AdjFubvfrnwankiysmKarH5o!?Ni zE7ynuzFH9{@WamY%ASFxrpd{@(v=X-8YnhDbfGOw8-#mj7x5>Ch4pGh!|}Hx0Zp1u zR@XRU^f~3O7e`jmylZg`8iOa+4Ks9RnVLLMX@vU;Nu>=Ms7O^2eE0`mtP~Z!idgRy zi9q;kO9wlMW&s01+y!j24S3Fa4g*-LzzARu4Xk16h-7-pxv%C!8Nao ziDGm4D^_%${JJoYo9+280_%KTl*y9>Il@Xe@Ag58$abupV=qhYO>xA95IAySH!`L; zfJ-SV{G19u*44iW9LY}vyu)-Jqs}tx#Mk0qKO2pjZUX~%xfxEJ1xMMwG;uN3sIi&+ ziiKZ11Mn>Gi-r?46i+ZwAQ*t@9;4Rd%kTN|6g;4+TpLM!1v~5>$MHBFLwC*+T__?h zQ8b!aK3zmk)g zgT;KZeSOBk`{@)!3IE^8$^DFS!}pp@n3xn~QM9-3BPEC788)Et>s}p|#5N%9M#QZ>wG1_ST#SEiT%OqNGEI@vVaIXF zO2UIOquc#y`Juf=pVGnT!qNMham2GB#~2G67yes;CZ*=eFe9Feg8}2;YwkR8Q#kBT zv#;LPs6WzJNh=26utO~FmaUP1V9R)vd5zg~L5Zn~nVf0nrxr^UI(B>9^YY<{z1a~| z7N*kidm*Jyche$=ZlcFnrWAhfL_`Dk(Jalol1}_gQ4x3#NK>nx=x7sr28HXqP~6ZM zblctNoX|o~w@l5*^GgOc8Jups;c_lVHY!o#A}l5ADX$Day9yXM+<))yG-TOpcZ1&c znupbc-K3`>TL$lb%^$uw8hRRfIPmV|*Wp_Ls+I&bTmf>(y}k3G8lYa6oD`%_!zMXd z!?YV^*~ahrm>jFhI3}sFHksM2`SphNmAN9`M~Fv&2!K;6;(Znu+wX}{!402$vG;|H zsu(<{N|f&X%BBK^b9D}fzm_vCn4jslP}D?NV!047ZJlDuli=#9AI*m?mrDfgZe^!S zOBrxz$l*EqQ&aS7{j;vR>6|5PA3co(am-?(@5vMo-+ohOxix2__QqUEPKs7}YkYB6iFceok73>N3Bm ztMMu?X2B%1%kJ#Xd!N;rd5K8_4!*vj_2K2~E#}(~d+r-1Xj@K(ed&5(_aG5h#AOL* z?P5`7rgi+tVYaq>#D0?P2nJQta45RvwB-$a3b@Z&*l_V#h4ZjO0!|IkOhR4stgBW& zac1eAfN<%PKPH{7pFxIp_s&lXhgVru4m|XHHB&WL9n;MFlAQdSvJ!=cQMo~F*6UeZ zeF$E|0c!keerEVb9#8vsHZn|g&G8Ngm+VbP#W5eYi!BwUX2ogC$;uG9l>i&3dS3kZmvMi zA6-}>)8&!rzYw4u&xk`5=zr?@@&0nF5^yV8mM7tBv z>bq#uR{96tAZRLNo*3~+JXr5cqMlUFI%!N zw9_T{t7fEqpfzkSgfI%9z=N(+5T`zvni#g^7!lL(7{pYVk7i&Dx5F(P{_nfzTqJZ) z;%9`NW&#ptg7aMO9>KxP>D8(l~w*|~~>5GDd%)xxA(Zw25m?nES&9XPG1UBRdfM0tj|UN67n za@gQ)0X6-mdz}`j+{ti{iPtjN41A>)wE~Q>E=rknf=rR|wCd_Vq#UkT-oAXzRjbqx z_0r+76=w~A&L*99+dF&<%0qn#q*9B&y{;%vfK1^)%+8RR>*feLBb>mAiz>v#MmqI- z1Jym2I1E#Iv#zEx9@h|@vvsLH+y7zwZZ{H=lGof>QYnLrJ;RBI^W3!dAow12f*h^pa@_rcXZky4S{<_ z7UrIP3FtG04zr7m&<%jA7yvRC5kj9qGi)N+kX&qSq5kWc=`akK51uhf}kQdgs;vP@S4$LUL45 zuf^0`GSyf~wO9U67v{g8$p5*Hiy8=unF->o1aY=PIBOxCl?cuPhcl59*OiylRFYCx zmBy<{t7yn5Yso6<$SG2#E3ZVAo`SNzf{MPPs(}*TP+84LRl^vsK~UE))6lZe)Undi zv(eGF)it=RXLLp1$j-pn&cNh~0pW_F>188xTO$i=BTGwTYcpe86XPpJ#`gL~j@kyU zYI+_jIyV)yyks@}WYhwr@j+6mcO_LrBveAhRl>wo!f`4QVk(hhDp6vpQ4(sA(pr&n zI*|(ckxE99s-}_ZmXX>v5qei53?0Iai6m1;lDTuJg>$HtbEvg*h>cUQtz+O7;vIXU zAMvWUv%{@x4j%3fZZ{pSdD=UB+dKQ(JNnxb@7NIo?XCvdUA<>-ALd{me$_sT=n&)R zkl^f)tBfYe`IJc}!1r+(2#8a6Ngnfjst{Jl>c(@gjZl zWyVzVqv@9HnK${ft%Y;#CG(vX3tg29-PMcTPZoP>mU?TKdh3?@sH$J?Z&)5^Tpny% z9(uVv)Vw_WYI)@K^61;8vG%3$uBFNTrRkBSnTe&@sinD@KaE3ww6Hk8xVW%H)xyH^ z{KC80`FE3Z??z|d4NtEOOs@1ytaOa6w2r)cJ^b#~(7Ts|@0tde8wZvf{!7mXs88NC z53jV2t#(bU4NR|(&TdT1zn@vyoLk&nSlV1%qF&9n{-t+Y|J=Ee|LN2uVE^vLq{8mP zt^_7AkHtV7PfrTFas(%vDQ{mo+^EpbmT=MFq3G4ZM1gePp=_+z+D5tGb=}7jcY$4U zOxMO9sHdnHR{C>Il>Xz?temQ{`Tyv}T<`zm)LeQM_>Jn+l>His-L$~ust>=bV?4ze z+8mnXumeHSncucWUPa>P1KW-g%dLSAw(l!m6_Wf&8~D=)4b0iFH0#)=wVL?Zd8JHZHnK zpSb{Vm-#y%5Fb|BozF;fjG)LNg}4kOH@`Sr2bKR_FBSjOAV&q642lBndR*15m>3L`=M@7;oAj z_iFKE5$djjP^lv2qC%4axraO_Y^8ph97P_DY?tU14zfo=B zmaIAq-`fKL5m!I}@;0yp!X}4_QuaOOp;7h+kit{$gO-o_v>wU!PMjVUCBaL1Szo0; zJesgcg4vm(C*K0{#43SbKYsk*+lnr{UH3`h{l=z9=dcck!&uFdpfoa!NWk-tqC;%m zuN&^UErp%JfyxM9V_6A9BAVm6x_#=dHN39xYv{qZ^Y_$29Imw~EZvSk6)O^nCZbGl ziM{W*)%|Ww zK%K;kM~nF4;(}kO`v~|sN}08FT96}SI4lyCeFP9O+0e1F~RB?WS+#+VBm#4L1*H0Q?{x1MpbHzIZJB2~G`cSchkLN5#+JTtt= zhls%SFr?dN(3Pt*Z{Rr8M2YZgFbVN0LbQD5nBGkRb3U{UR2Z@^TJ?NFsdRsIW1y(xOa%s`B#pN}HidD{5O&P4JZH{WYNSWF!fSDLj8F2cbP>h?@Vvb2&zk zeNXpJQ>1s>`Dm`HpTmG~eJLIgny4crg`m<3&}ww$@sA@3CUo< zyIe6oxkh<=qygJG^%bTpff#u}Ms&N226N@bni<2X=W$&6ja#{~w}6^)5B06DYZ(#3IdB*#9d3?$J6s zY1H^Hicjr}#yd_OXTDfpGF*jUIcjGeu8ol$Tt(eI>R|TqCXIl@wODP~Z`fq;?zW}) z-MdCV)eNG+5Tnb~cJ9M^fk(%tNIW*3>n!N0)8)DdC_j*c2T$TDT#fKwO*QH1Wap_P zMuu6moiF+w%d)?kzzN{O98kJaA~_tQNf6+V?c@^y;vU7_8_&>7z~#_8!G-lG=R<2Z zRF5WmBCz~w(||U2Afr2}nkKB~$jj+91F;2f+Nz6dT6ZM7u!yyH>vHbTl*u#=pX2H;}8GoPNO zhGO8t*s@Hx`mX;knghyKBeyr5TWzAzTWlK$*M`Vn8^17)>k?z+fvIJxvrAy^NHSTI zb(KJKw0fNq=M}a`TbxlT%Pg4DRX7sS876s@c-lzMPO#ZB%&>_8AnKB089SNely#Zk zjMarr{v~-hUC^a+COqgsZR7>ri|xoSt1$pA%Cm)p2Eg&7*ofnm^Y{3A!5fYjBkVY7 z4zHb&@*n{&xV2(N=2#R%>wxrj>Mk%G2oQz!bcx{VQyJwC#DL?@+Tp98vDT|w;I{WS zIDwCdKGK&l@!`C^NoR1;Mfs_oV8fUTPl#5u>Cf5nLu2UE_jKF|w;rl3uCt25{)2(_ zQ{cQcXfyQ$kuxLPlF$Mn_y$S3*u-Lf%kP-cU;3Kt^6)PF`0*R!dP@U0DjRBB87* zp+uFMgrb_HqPmo#hP0BVtdf?TvbKVF9X zFtRi>wlp%aG9p+T5p0bKcE$vvk%^0uv73>JrwJi|K)6dVC7GDUn3yG)m?fH+r5Kx$ zjm^m>=BZ{DWK+vjQ>zqHt0Xh)`(`!?mRF)J?ZPeXf-D^TEs361&TiJOPS$Q$tURo& zZkk%&GPdy4H}ljr^U^W%)-v6|mEPo+`6_^V9;Y70^WTP2+QJIj!;3m2 zi@Rb&sy%lncm`qQcg9zGe&dODO-H=OruB)@*-@w1`Fb^Vm5-9pl%(~#!h{Lt@hwtstGU}wR-uEMbH z;>ez|*uILm{;Gt5n&iQ{^r42#k*2(nmqmZtKwBzCURRC2tr>5to#=cv-Q6(L(=gxH zFyH@tVc_|~(2K>fH%n6;%QHR8vwh2R1IzP6%L^mR3!}?_r==F>CuU|Q2PbAaM`m9S z&cEnic;2`4ynm^&f9b`*a`WKwo8fouqbr@`tKAc8eN*d$(;Fky8c}LyYWDruEESJ! zPEhp^A)`XFd1|rfzx0QYEpE;(Zq6-HgH(U;*z&(g*ycNGy(l$B^|$^xk5hZ<`EfM= znVjNEPWY#%p4oV?x2{MhnL{;!Q*WQxo5pYMq*U>`laYJV=9U#ZapX|Em5EWa|7 zxR}DM-iIly(P7GAg7&NjoK@-{GWB$u8wAxfetN<}(nlbcRaTMbe_tXlB|RlRN?^A6 zadW;2Hj^fOpXH13%Ud7kU&lZCviuhI9e5%TxI5e)j!3RQA(2pFcw~QoX`i~Uy0PXcX;j~R#gPHp{?8%b!c))i?N(p4KA_0 zqT#!kj+9^#-pa*i37;vBy&&;u3IBj;f&|zT&KeRrO^l4fdrV4V)fQj0^QZ%R>(^CN zrTj*6R*%az)QnJ*E0KqbIAdnCl=sCf?LfM`*sE|0I~{Lbjj#cJnNI*QGo;BWM5?BrfJSjgx6(OCeE@0~c~l-Yw%z7Yl}rj(ZFj0uh0V^RB@fb|#Z zSBvLFwqm6e)uD7J5{$40nAA_yfzJ3NrjB+sSf*c;`o;U{QLjuVc_P)HF-CpI-yT4BbR;M0j zD0!SZ_5U#Uo>5J9eYbByLP$b@AV^n2uR`cm3B5xEL_ow)MMOaar3s-|A@q)+cML^D znxS_LMX4f90Skhnq9W|*{gnHC-u>>gznnA98gpb^49eh3u9Y>f`TtG9+fqbV`k6R6 zMIE%m)UHogKG(kb<9xnN$%N#yN|*(*>M=+5h1;JuO3YK4`WvJpe8DJ24cB$ncO)9$QjRiC z%qG)U`~qe|5UGn>bqHeth+6@YJp%gbZ&V`7NK1K`qHZ~|Q`Gq@x;$CCi0*3fZJ(C~e z7y&oqOm8Tn7(M|?VpughLt`yb8%M!ofG(M4{cbEiv~^J3$grO#5znwwN!#sBDP(rh zW*e2{KUc8LVc3l3P0xMfqneUz!DYZZvvn2Jws-CdSS){xM@09+&{SsIei`~VJ=ADA zcVWL=dA!Q(?#OiEkNpY^Lp3(WBhSFk@XFD93n0;g^^{}4~NZ<816lPFdYDKpW8J=*H z#L>UCN`Ho+$^4$E3#M>M-cz}QIzm|6`lARoP%zVh1z2`q3I2%@S@0l!qG_5aQzK^L40=$h+1|$#%3iwkJIiWRzuZpvAY7AEyh4*4#&g`v2g`div=7z*?8fLWT94TO^T!gfw4 zpkXbwPkvZ8**|F6RE`r`9k4ipQFJ=yYKNjeL46D&YC6OJE9v z{n7dm1NPPth|s5U!UgBe8q2EW1B_rqhx6W<0fNs_&YV2#rPJisR5THGyoW0Sb3=QT z@I_Zh*zgb)Oj9neCsUA#HeE82S7_4vzUz4b*eERK2Yz+QGkw4G*Z{0j?aZVd+NzX5 zq>~obpRrr~@uGF&QT^TVcMd;)%#s;fNHM1Gow$F_4TTu9bGYXY@m~n8H%?oR z&E>K|Pic?|3?_k2wqy#AQ$muCPj2#z0V4V&5sx4I4ohw1P%43Hpg~xXN`BD14_Oc6M2md1B}yXyiGK|M5Cv4=s1eqmao_ z(!JmU3Bd7Yvg1C>1`~~5j5KXHBfpMQE6uIQ7+89pI%Zuo!XU=agn+#9J_DggUQXhX zVPY9C;uItI1qymYgExqhIyPpC8(=S4qO-fNI4vWXaNi#4!uSP)Ym$sHl=aqReNHhd zXgt|etE-fzw;m|`v>p_jIfzZSLH;HP|+*5 z`L673{g{n<9OcW~hnQQ55jVq(Um}Kay2QpHS{ur9?#6K<#!~lb{a!H+Xiih{jn! z85Ym)1lhncl;Rl#ES3ABU^XI1GbLnwI0&%9=<3XH(ACqnY>vc`Ec zP7rRu8hG4xB^i)(6C`K@!R-=~3F;Ke8y;G82mBK2x=w_zt-w#}p^g^buu zm_fp>h|ql|F&&cWul6H#{JGx^a8G19l&5{$y~DV45O`?C3-L5N^|*hw6BnhX^>m*;Urr z<^>lq6q3?W-%a)R%r%)!KKN!laghxmrQ_y#n1|RbL^Qq;p%d7^V~Q|8OP~@EI*nI6 z25Ub?N0Mi3GErCJv8N6R@Q`Q=Im39TuS|&qM2KFxAewPv7S@2yHU`qH;rJJdj2&8( z@2entb&!_FaNmHYkrDMJV;WY(Q# zeLH33J%YuWAan+xL$l}9dE}iQ{GFy%1e~#}(@!1Z;&j;B=cC2CO{gHfD8_V?boOpJ zG(c#FAre4lFxNwN*#^BKi?3I)l&fTPr)G~%LcZXb#8d!ISm@`KpyL%7Lsux&lkXvfhR%)_PN}5c5<18z)!4C>ErRg?0*kwAz z3r7MN4|?G&WS%I@rMVU!6aiLu2mW3Jz>>){P7$R5#iRM4(`XeTPDjwZ{@YEEAemO5 z0w_ku;>e6g#OSkInb4FOSQh}qw~Ixh3{3JbHf|P{c;Ap}4 z+h@p5JDN;(4SE@J=bGT`VQ2>W;=9}O?uoYAD1GEwFT`Y!CnXMJ3A?O>rs2s@Ldh!f z`c&P~jJI474UUAo!-GrrZ-tz=!9Yy(*$ ztIusRDD)bc4MCCgND-L1{N)5X+iTwUyd85Vbm}fQLiX{**Uw>--n5En8V4-cH4Jo= z4m~8$8tXEBdP^&heWXhPgsq%OUZds1!UizeUNXfDqddvh+Rj>u-*=g&DeyUG)G<~s z9(8A$3{RkijW!}e7XWOo=URxc?>IzmCHG7w^=|y{Q1Wj>X6rY~MqJ8JT-uQODt3k{ zeep9oVrR6(B+iLRsELWIh>8EbnB^aJE8^lx|DnH(8tU`azt}a@XRZGTB1?O|`X6e>X+xVfCpoWMgwf zGjk(zb0e&|k%gJz1!H|116?~^?aLSpPW`N_l9H#aysxx;&>4j=Nre~*r34AJWC^Vl z3B6Pa({zdRRHaFtPd#H!kTFhFHH)d zTE%0nlB}#!?Ji_ovCeS0nB{&k=ekYqP20lTwnhH7B|&zjp_j`e981Doh+*!zc+ZTm zTS;MeBk|!u_ynJ@G|#YH9KOUhw8A2!(j>UjAgDs;w<>jmtMo%^jKb>8A{)$Nn=d9l zzMRsAOYd;b>~za|dM%smncMA^*X@(veW$Q5sHp#5@jz(FU|8v3c-de?*OFc{_VP~ zQOjF~W;RBiZ;ZZpP3>=aHvfk5n^f}~Q}cp~srgp~`Q_`Smm5n<>q|>3e=1yFE-%e5 zFFt>@F!^fX*{k{Sm8HqGS1&eSzkK(0eQ)pmw{Ks5{P_O=Sm#2$gZRiI)U@!iKvU$nzZ=6!ID+Ff9KUun#5gq z$zA5muFcK+CD;L`=zoF;hCb04Td-BPdQtgQcbT+-Ch@--6xjxz} z*>ZFzXO~jDH6qhNjOv8OCvFuPcDcgk9v&lA+U&vAo|Sh`Sm71NvU7FC<$OO^@V|TS z?WPc94;YuA3D9Ij)(it-q){z3Yh5z6i@V|Id_hr+;8 zx@$4igG1r)18qv9$IsQa)+T$?*D^Ckm&P~*j&gsHb zKj*j7KRV6lxiPKKGf{ht>M>Ofjr0bJHQ209oP4*BHg$oOsF=QuC$sblb`y4=DX#BE z{Q&zQoH;-oQkCI~ly1fw>Gj+}q*JeB3GH&6A8CT<+-vEkGT@C11-1@*HW|Fi1muG{QUu7(UB6p}HFA z7vmQ!dwY*M&Z4D@BZGatXsS@GY9U#6`^C!xxbSJSlepMlq4J{+r2qcRxz z5#g%S?kHdmbU*`2X1Gzg%3G`)Ej^NsHaxkKC}+TcCXlT3xx zte45r(ezfDJnEo+v=0uCJ>&-~ayw2mYYtxn)BxlTVt^z~W#yyt`(OC=si|pczr*uh zdt2Qa7Sp6J4ew22ct9#!?k%5EK&h$X(>)VmjIQ=mCOM^6%SU{1K7@6i)gOa^QcdZ* z2YA%9+6!9#^NhDkomt67_f>{u5^WYf6&@UoRh;`a{4C_h=LZ0WN(`M5<#(M6)U;BI zeS{LNx?hC6U#auE&c$xOm}9(BPibT_DR938#ZYDNyUrzdzf{z;%IM+<)sXQu+~$Cy z9Ju&GiCRd!D8!U+Bf0RaFCP#PHAv=+^LME*$)CsM0H`Ka>6?>AXVbj<) z4I;tevA!h7il)77bCz)Y)eZsVd6dp+vUO^>tM(}^(P{pf)rgrbYM*vS-*d`FzJQBg zjSDj76q(DqK^*KEEBsK zA@JPy4gh63hT-&{PV6o$N3jY!=y_33f&89pmU7+=5@34)CiWrm6SWQTjEUBYPG1JK z;CxAUmBT<+t21VZGIWONJMdM59+xm&tS@qv_em#4fK3eIgXC-7AnQpV-d&m#yvxT< zq>&x!rsrvf-Ko-Y4Z|(pBkq2yl{=S;V|= z-JiMf*fdb6AFcI;)(;h4FZQCEBYP-}JxzE3I^4q>?F|r@U(d#==|iQ-XKovOcKV5%h-MpO42ySWx8!-mMN^ zdOhFuv+Gjr7C@$L@;E@g^ryhK;m3-p%n7D)xqA;xZ?~N*JlYS|I`j5`&^Gf?MWK4O zIXm};F*71~a>skL-{x#Ls!ZhNSlly4uSdVN84926xc_Nc%sYa^T?nig z&TJgYWVce509HE+!3l37O;($GK9?0&Nn%aa#XjE9LwleJ;!9t7kA(ZxBEKhxwc`NG z2hKT%v|{O@ny-8L+4^{oe6kZx(y!ve^VHvY31UIj?7L5veTuBWs5%op{kHbvFTzd= zzeI;GM5^M6GP@C{ z_&|?)0FrZuwEJCPN!mKc5GMNcNY|%3428Sr40o;`B?%j+-`oQY>G3vqox7ZWz~BZ~ zYg-mNFwQx(uVHu-SPy(22F7vKlfNrR-VM{PbY`8EY~WGpOl0z zG|?zJ-q<4?UR1Q?lxA&UWxC`2>kcUH*~2;MG-v;n za&h0@!;)Pl53ESWX0Z5RK+8987)Pj@<_$iXdkE3cPi$d{t9aG}Ha7pTYbjw|{%kyR zVXk{&sDqRI%HfyKhYPo!6wMB|ZU~n&I4N}yZowQO3q2`s6Jc~KLOGUIwKalODePQq z7=|N~TRBo^D@@Nnk}o^b$RONgE>h$m5?dK=p&WI_CdwKbVUryt*BWK-9^r5hrNR;I zG!)@t6Rlxm=f1^uwl(_9Wc1C}6W$y#Vtk&oILKF4fSWg@GF|SKc8mz0=iHYIbi0T? zYLi0wdJLaI3uLY1u=p2%miZA{Yg0zX4DW~NXc4i5~C%MOgIc^z> z#Lcn;4yeol0>t1XeKD4C8%xJYLbT%S>t=z=L~tfndN5LQMnC8+Yn-!wqVv_D2U)(? zn-Wd4?CB^7G7d~jfW1MfkK!3aSAf|#Mt$O)OSAzZGYQ>(_})f*Uo3ulP^{ov?0cv* ze$eN6mi-$iu-h79wGq)lOjyE0+Ak__ygAc(z(kCd3cDCzHWc@6D=DSb_v5CNlv1)& zhPHC=IgUQ1iZs-DOa>3{YT6g^MO;#>UTx-1;P%TIGI6Y&&(gJm@(YuI3Gh!83v_(>Mc! zpAo1iy#y3zyk=Z_h)rtGiR3d?1Q=gtmh!F7`j8Dl`8&u251+JSB#if4ipF+^@%N1F zxx@$hnL2SvLEj0jN-=o%6Op#rs9V{w+syG#vUw)6ld6~roH-maIqBD!GXrv1Q*v^} znDggzkb61AZDg@ZF5-M{c@?rUCl}g~TWg4{|DH?3oY!cW_wZU?ZCqYeRbKgUUdeVI z5td&dmY-{wpLH!iJuW|`DnDsBKVdsR7FIC1?b&Es@FIu5+L!NnsYD{9 zCJ8~qC*NX_eq}gzWG-vMAZHxK_!JFtn<`)joO17RWDfvZ0N@UCsgB!Ol%A}qtjwf& zL^YYg>zbySH!v3i9$$cEaN7LNV5n1fM#4S zsTj62tS2U%fmiBsWopKiMqR7C#t+{hSFUX^Jf+yBdWdeIIn85jIg*Jc>naVj*o0EGmv zK5QHi1AXajrr{hK=VT5d)V(3V8NM>b5E(Xh8ROnW(4iSRy&;x3hzH4*De&B;A211N z^2mZwWJcKX3-q106+6*Hmr@_&%_t{$^pGQ((QW4T2LkxJEP`RcevrsT#qqe4fL3^h zjYh7gNU#fmA=q0y{1GsR%&4;-5!)}eK4r7B%h0yRG(w{7kfSK2-cm;OT_#ro#Fmx>W^P&AXD~n^LEmVKuqreSrpnoY)u;y^ zpU?yv_+wPjEQT&k0sLYY{zUEqhtk$#8i1f72j;)8~- zAm%#ENlpX&igxIh9fXv6Je9G;;OsyJb*m9B6=Le_e#GfQ&;8lj5=5V1<{7TY4w&{7iP z{U*Jy2~IRcPmeJ@VJpBQB;sqE4alV9Ew1CLh?pgs;Z*RWU#>jQv2>%}+F~(M?hABJ zPTIDkk_=nGQ@i3882g$-v=RMNQ|l&9{F!f&7)KvxiSs& zBWE5cpLf^M6EMB5Jy}1PEO*E7dj!H2WYA7vh_vpfaSR?pyWG!UJS}drr2w`fGSpIH z?xv!@!hLTcJFXvc++1n{b<+}M0IR!tOZ$w1Bt#paADQ7lw|qTPl9Sz;NYO#DH3#Bw@g z6~5SY4G~je`x1!&SoXV}(5Bc6AI=-PPSwxpGu~Yhjw3K`NFu9bz(5>jf8Y3Ztx!{m zH>Hw%yRuz6M*tbMLM@6#Mk3{3V-XEHkU5lm4w|yb_P0rje;I{hVwS%pZX+gkUQEnX zOw343Oh=50y%swwCZ_hU`sV*Fz~JvS&HuWl5)LH96eLCEC4^n%c)B$ zoRd;KC#|S~R??JH)>cr_RZ`WXPHIqRG}O)-tDiGHr(v$4fz`xVXlYt%X<2D&Tj^+D z(AB-5r*}bL|AK+RMMEPSBV&7G69*I1D`w`-<`%f~7aS~XE?Zu@bm5Bi#j9pEw+!t9 zb?w8nFGp!!j@7svf6gKCtiyfvE6Hk(DeBH?>aOW$uV!dp&osN0ZS9wH>29`jV8-?ofHv0jx49*qRIwhZTvY^Tm#=gu6L_AJ*Y8Sbs=9+(CR3)-s+TPq(lRTe!gFR3jruPm=AuXtEi(O6pfsHEy~aZP(sZC6n( zxv;J;ziuG6emJLol$z_xZFpADNO{maMQoWSKAtIVeO}V`qO@bKymOvPETB4i6=W*6 zV4`YGLmlRZPzy(7>2 zMqdn!&kas23_V*Ko?ITDS{a#H9eutw{$lOf?CRv~%GBKQ^xVtmbBizLsH6hwqOz@@ zFU-v>&P^@NQC`kHTb>_Zo*!GD8(n@e{POv4EmQSkgz5mkT9~35g3C*D%P$vRQk$Na zmzS1bEiJDsF0WCw^lF`|mn-YbE9)z(8>?#@8yl}T-)wGgzy0uG=hLT8U%z}kI5_z6 zU}=aRwktl{hfIoFDOR&8}qtA{&@ahM&TC@->s>N zKa&&+F4NV2CMguQpV$BCeP&yqZFHZmzMS_(^0!eqlCgc~k5Oomc;09-$8T>Re%i#w zJKkcMjZ@V6H@(1>DX*Q6^*6ns4E}Ft3LQAjSg@zB9Y5npiojbYLhzNfQ&pGEV?Mo1Uq@ZCHUJYSvNnEIM)p5LOE0&e%=CS=C1L9EtYMuecE1v_zm4ci)rgaEz>7OG?j_v}) z0P+^QVn|~4372=}cbD5XGw#tyyf4N57`awo_=2q()Zh1(T*b(vtxu?7Js~I_iztG~ zB`lGylZN8s#E5N2;`Jma@pO^;KH+x@jgGCB*K?2YG!qOUdCMA5WxDp5>g{ZLsfSN} zwy%w<1J3~(i&yF1&A7aJK-@t|g!+G#M?+6G{wght&t>LK!T;7)glY_Q0a+?#LF z6%0+1d)G&goXNSABW>f;jWdqhC5(7kGp1aJg=WuC@ApDXXf{88LNuFRk>lz16U3bwsFQl}Y7UH^VbPjf8k1X0s3> z`isBpZahqkkCVRiWIw`2v()rvYn3YmtzrNZIKHPO zV4@#5{D!{oJpIYozG+u2%HGbTXiH?j+JOCFn;t<`& zO`jmHE&G*cih!pLy)Oyfc5N~F+a$%pr_9!|GO4@6qYghlWswo(=oo76GuP+rA(L|1 ztl=>?)z3MU#B%vRz0aR>=f=tv9}kb;3~bVq_r-{i!v;nBdwIeRO1Xw6BV_IsbE_Cc zsdR=tZn}3{V)cmUDk0M^N)Z7%Ws&`ybs$oku9V-}7DcO`gdYxab4}7ROrJ^*AZ$~0CK)0>iqddR0Kup@t#pW=^}r7iiw1l=(q>4EO%Ph@ z4VS-SXN-~E0F+vxXy`q?2LxTLEo<>3+y${7B1w)@xx?|+kh5tVbIg&&f$J>KTKO&W zj83M$D6KYXwyKU_!OP|gKufWGS?bk#ii+vA*rH2@-*T)~>z$ad*g<$QWhkhC8Q^u4 ze%0(%TuK!GRXiMX6)om$E5JCHZ)&0 zgLwa_&hx7A;sUkzxplnm=H1c7Z*6nqJ4s_-Z9ll_zzP9lDjQ@_7X94)*F~e1MuHst6HQR>#x=RjlnGL;&ah*5$h{0!@UOr~wggHy224sk7rS?= zcnC6il!8-GG(r)Pu8|^$WcVe20SUyk+HLP;A%u1<><&O;Vgmpc6u^D1^GdkVks?bh zsd*PMh@7|tM%OwMRTO(u&i5yo*V_!;7}8=Z#%v^{7xBFQl93Wc-iQxyrc*ghK9X%# zgp(nLJz5iy`Rf$dgvixX`(K`O&0Tr}JX9V$j(s=2d&d<%%PEk5vab-1OO(i*2VOOZ z5t-u_lqnTp*gWXYTJhY{z672EScU^h6u4LO{$!F5q>Q#W(Z%NawB((J3W+s+4VZ$z^ky}+4G;PYN3 zpn8CFySM}|o`#R;@bswNWFXqv!OG*HxAPR_4hPJjkrdJY@;yNBRtxs()&OJS1+9XF zc7$8UNiiosI7tP^c>&6WbM6){PncXa*Z5RtSJYSi3QomYhpRRM?nme=Z{nD~0pm4e zPxAm6-rAJTKaRXp@S$hj>!RaQZ$Z>$vh&(az|``?LciG_fzq(Mf$bvZ-$yPTeae2; z@kZ&{_lcmR&qSuqEq(JJQ+Y@GmFAsqFFyP6qW$O#DY^6gRr8+>t75e%cQo$j&N6qgUpF94srDe&1n0NC(9m~I43NBq%8LcL@nf z{U0R!=exp!(!xSiq5mlvVPV<7BqS{NNAg0#e@Q_|geqkr5jA1av%(@8LL!<%B09pN z`of~7BBJL-#4JR`EyTpni%XhGoH3P@GC6}bmX!_;g zV9x32XzCj1=o;%Am>L?Ho0yz8Gqc2+Tb;*RS)9LMX=zPuNwc=Lv9YnWwY9UeyL9Q2 z-DRAugNqH${i36%wUgHcXP*l$epaq`t=s}E-GVHy23xw{vvdzRe=Q8_5pLlTZtW3j zb3N47GxU;Yh{KH#+|7H=Ucqj+f;@ZzZ{7~@@$jCbaZq~OiXNSY+PJie0+RzLTuXosLZ6u?Bwt~ zLO3xkq$K@bd1g>aW@u4HM1FdFUPe-GR$6v8l|Y@7o12@LmzSTPUrKuL8IbPp6QQ!5fzKcTD!>3aX z-P29IGcEnk+lFSlM(3Z7&3BK__e?DGJzMCfEDlf>hb9+CrWVJh7bj*GpUo^%o-a;5 zUz(m>q88@7m|vP*Sel=oUtE}5TBM#FmZ|I2@~f4VmDSbN_4SRdt*v+O-tFw{?C$PT z&k3JD?|=F7vie-E8M}H=?-O8#T)yzJ`^)_yZ{|O*WD_Z^O(lHa{lF>jQ+78c9pOvad%2&p0bq2Q*!6DbP4ZoN4p5nJV`yHXHx( z_U#Lq4_(owdE4(7T5oT5)wMtNn(PRr=atH7-CL&y5U5=`|L>eDULr(oh^x{67hO7% z#VC-L?8<+1=@_mjf$NAHX;?k6*XdT)*Is8R)T6P?Sj~lvlmU z^=#RGlPl{@{fO)P;@W0`e_?AlEa2<*<^w#$Na#U0o5xmBtZ?;KaiZeetrCKs_;zW! zwa0c@wp;afdH$WZ+ZDuU@wb(wnI3PeD$D<4Li-#S=!D2j^}G5!MrZ6v;cB26D~bzb z#=>(1ilUm6?R-tfU^$AssVDi}qq!E`eY?qeD)1X58Wo4f!lX3-8g_T&oqwr9)k zz|S(Sm&)`dGUbQP{jFFVz=-0S9a3AqufCl+0z6c++jIWS?id?4obQ8Ds`9lkt`~>5 zN1 zitatPniK(_bz%fA5fTMore5!s-K@U!rOk*8yg8wG_rsUO{e^c4XPzn63@ASLm}}@X zc_88W)Z#jgH{-En-HsyVP{8nreC6AR$MGuiEU=h9t2#&dUq{8a9$ja@}+>ktdI+C_CjjRLvKqOAlW*ta3Hh7d6jaqBOjIBxk=D9n*!(FlVEg%lZf(B12A8 z1@Fa%X-rVz>ePu4CGl74l`F|XR>%kxVl_Vd;#lug!#i4C9l;ODpd_(~YsDHMiU1A`@k061aoEIS)(V4ual5^Eo3UcH z$3y*6fqMx!L8EyM|W`hN&c&kToCh5SnhgdhST#(j~6<*GX1Bwv+rE?EIV@0-T%zTwH>GiIYo^ zgY&o8IsQ|eoPz&FT!Pde{?{-5b#a=TPw+HKjQ6w@KQCGkCBY{kj1uNMEy{aJ>@<(~ zKP7RRNAfh!8D1V~ULG`6C>~ip9(n##iu|XQ1b$0dkXKm{CuP!E_ zAugaLE};FN64VhF)DacX5f;$p6EZk0YJ5uE?3APhmy|WHj1|B9c_BG7aXCY@yuQ4W zo)UEqRS|&>vMKGE0iCfx{1y%mxk5S|ellNA}49UGq=pO}?&KO^OSYFct?1|c<N@AuIaL+$gUPv^(F=g0e~NYWRR z6ECKwDARM}GfU&oSDwvnOwDh+_>C`lO`V=xpyErY?2=cT%YXE0Wou=1YjtgVZT;=~ z#=F;V-fwPw*na!*{fE7eAF10fb@Qd}yuUYH>W2H5P4{0mQ}FN2^nWzzsGDhH>2MU} zcQM_kSHoFoDq_^I>95UHaK5p^JWMU(pPOk~*Ws}I>mHuK;@`z||7YAu;Ia;OuDO0R zl6kG;)>>cvtEYGn{eK`v&wh`dWQpE!>bOJ3{2ehWj}!48vC*sDHRbr7=KBjV+EOs| zBn5k`huh1WI$qiFdo$Gx3Ts;M?on_^{f9}{v`X9>=W^r`oBM}J7ZC2=<*kvAHGlQ_ zuVOkm&gW2;#}EH1rsEQXguu392&aLRKoE&M9Dq^oQY}{;-84ny4@vsLYb& zlhjg?`*CUs*_snlwD;SFG&ZnrClrq^qN%tONtL(krRRR#@^D(u2AS2;RQ)iQeTCD+ z%D&_5 zHRjY_Yk-vW*h^?!Tf=lf2V~m}6EP{poU>3_`Q?5C&%~1UB?CQ`1sNk>tMyag{Plzu zVw3Uj1tN1x2Qgf-#@{$yGCJfcwN*bEZJ&3^LKZ{Db=d*Wm2I!J3Mix z?Q_AdiRtaYNJ2-)>XqGprTHu$I8i_xZ=Ud79sx@IXPQryO{LaRiXxe6q4=*fpT3g7 zztVi?7jiQGIbIpaJVE)#cxBt#nc% zf|B~Rx$=<*tL5mz3-K@U^}kKJ2>9YW)ufaEz)v;lE@dP&P)#~1gHQ>oNjEFncb00> z1*L7sDpg+c-?=<(lY+sNFvA+^1xmRsLfpgJeafVCYZERqfaJL21d7`#P_w6`UY)#wfA+lTthtn=o(usHd-3u z9cI02b8<8rd=!1f^NK&Ymqt$NLy%WK{&P)~)c_zHd!9D3kDr6~ zoEHs04kXg2#SS{~7Cb=&x&TVZwP+tyrpz|D*@=VJtw|*|?3HrFqXCxlz6H0{W1TQ1 z?DSHy@@@?GC6$!wzS8&vTAdT&gqsGbwjn^(eM?aKZ&@TzSDZD%){P_*O0=! zwR9F70_(M;v&hDZUIenW4~4T0oTb&|U8MBXf381^M<|E@mU^Y`(44NjAwjsiw9e?4 zUjy9q2s-(kMRQlMoB(s(EhgKM!sre7T+a`EgD9@(6nWjhd0B0ZX(T(60nGf~pSyke z6h=?#s2m$1?7Q$v^wm2$r|v{s2@XDJw4Th2XPC7&2Ukz_!IRB`9aFE_lV=`A$wdBg z4475}4m)_G?9Y6btT^1pCb!L0n0=|f^y{t7v$hwHC%)7N{d$LEYM&c4``VcI>%F`A ze?g31<__boTqUxO|3Qp){rvS2&lGI4hKgpvE((LG#x;5O*?`*79wE77Lvxr`z7NRA zQ2+x@kVl9AVbZmWK~$D}gdOKbxBg+$mF;Ws$R4M%w9rzD3+&Z8%?<}`oIJ?r}V_~^l~Y$BiV*?X9dFY+4r-FMApB{aC7V5J6K=Au)D2*~6+-h{JbOLCDhqvMp zm4ND1v=3l95FtzhMw-s zRtAupD-b&}`Vt|=4iIC!1@>=^F{3~N4Wy4;2(-bI5W5xH5ak$xXtA z!Q*XW%e>>tykQr&z}Eh-Y3IaV9|_nAVt<4&{2liy`eG1 zbN9XH;wR=3%)Fta2KV0@;9rO`Yl+gv;^2j?QPxA~SMKnAnxyr)#E03*+pS4}C!rrW zn6=!a^5){Lm1(~#Cmw9wFXBkDF-ZEgb^n-yz$O+7f-!4l!_vtjrKG4^SolRUyM=e6 zjZHG6ZS>Ercz4nGlL0Ac+oKT9??~Ef@B|#RYA%u33cZDg5&cscU@2nP5)bE6BX(1% z(Yi&YG{%(3C~sIMp87u}nR8}@;9x;pbjSV~kwY0~=!{@TSpQb4k!|MEU^>HUwA+(R z(b!BxQKlzn7WY;rJuu5BAnSxd7Tht*e?E)0GV8-?RyZsIAApJo$i88S+KS0egoQ^9 z^WEpnX{pTK70JmQ#wQPFWj)E6%F4M39hcL{U}CrmB^}=$lH}D29_x2mZ-Ls zs4x7FHI+l@Q9civ~Za_z#8LfTk-e^lTXZbG|ZpZtI> zE9Evw5ABumi&$J*HS{797>%uPB|@dxXyQ?zgg20Q9CV!(5|5_!#yhcLsxNw1#s=OA zi$^jJLi2ElW(1RO%&R?Vabt-$;6PP{k- z-8aWBqVF>_41}$Zs;+Y$yxE6AJSM?kE7D|A;PqeWL6qx{Nl--s;Dm9*+c(g#75Z8t zy$BwWf&*%0B1>>Cyoy)eInfH=-Nsu3Xb}0S9bA z!)np6uw6t132_nd&@2nEW9JJ^xpuF-5j5I}Q>uZ<)CeN!kqPH@-$CtvA{P7M9ccOl zGH_@GJ_x6OO1aAHef4yVZ(ksfaM^Iohg#>TLA&{f+1_HbZP5sNQRaiu1 z9w2-d(M!1+`PMg_X+o*A5M9uc1IAs8xF}o(u$a4CQrU?n&)H#>exzOGz%?1=ffmXP?*3`N-E_J;L>e|ZddfVRhez9xkXV)(G z(@$zo_b)yD8uaua@9B^Br-zGAe~!{bXR$D&AwB>)FK;q5pA7FHBbLaFhh!vA_X+iG zR{L(Y;BJomZmy1Qo~7>7hutWi9)9&6LCKz%oOCCzv&bUpuHg!#5P_q&AgmY`Q50R% z_a0^S0MFeZ**(B?PA^71z?%S)O#yi#`wS2P_DH&zZzm`zeb^;`uN4{@KDu$vew#xx zcPuBmD984&zuzSnr#_&UoewY=aL+e$${+AdG`+qw;GJ*c#WUz@VshJl(Erf*ZvJ2} zPn26C{^%ahP-F98xcyL>&QNsz5HWHnerYJLZzzdp_{zZ`Qgql;5)zGvX5gW*D-ejm zFuVJ(O9yQR4*tm|zT6vjgJ49E9Fbarx4@V1(45MIikXr6!~9E>xI&ZB7=zL3 zgV7ko$m!P6^OCfg)SEdXx!e=pXfj&h-=E+)CKNk{eGe(eLxY)%qD zO3b*SNqle-?W!kqktexllbR5RmzRzPchfykPPpQom_Q_$VWHp0*nfJa?bA@Qh|dn~ zDZme4(96`Vv8ea?NlrL;%kC;2~sF*ioG4Q6WmXSD7m zp>ND+79r1Vu#!rFSrZbdWBHf}r#!y^DZ|igXcC zQNeyJ@I3+BDW3P-^S)Cs)wRiQDyXs_?!i3+mn^vDA%tK;N zHIfc{4`o!}$uNcPF}*o85_UYVd(8nFQBE4QJ{;r&ZM-}#x!4;mo;B?NjY1D!EsJ|- zc=wURJ%!7p7F1~#iIhES_t>eX71zkpoGCN>DAN%4%1Ndwf(Ij2!|P@TYV+>9wcc-~ z>TCae-;QIZi?g@KaYip_W`MJ2sBK1ZW@hwr*VrcK?3Ci{Vy}VN+?yLGT>ZL#N$fUX zC*2j7Bil*r4j~U~Sb)zhP;V|ExE47d!V-Y0K>JcskV%DTGlze zj61)q-@a@(w`{z*Y|8b}TI@S6rzrr{tWgy=aHs;rO=*@41JYiW@8bYAdxm@N<4A8T=0f3^&1Q9%(K< zI>Tjo#MrCTlu|;FRzs(Ds{+Ba{xEI52J!LX(Yfi}&P37G5985~Bb_O&#>mo5Da}5% zR60_QG7)9_u9W#sCCsg=zgZobf+ci3f}35nF+I313c-eH80&yHRzDhE30Obr7qAD; zVGYY9qqU9>ngb9m-JMz^l3}dDvYQ$CLNMx zT_&LHN{fNsgw&i#_sw00hgw4;FA!1GJ7@L5)N>AoM)`LXP>`UBg;$`lABp^L(t}sHDzpW`m&j<#ThribQ(t8cdf=$zC6G0sGzHq` zgN-4V-P;d#V_?oSZ!P_vVz^&(ns_xwdc>g7Aa8PT zpkTwNBVfc28dv38=kC;bwlPBg!^*AwA1Fg!jQPPcHpz*t;eCFOiPgOp?A;pkKkDu$ zQe$1AaG}hscIL&z#iJparj&((o0+DMPD9eHLQ-MwTf5IvK1_qWn%^wS21-H~-35bq z4t|`oi?aavu0zNO7PBR69HY2XPo~)eog_}x(XN}Jy{lyjL)kEZ<4TCu9_BUCvs_LTRt|wV3em8$!7J$vcjs;sW;o|sdd#)4%68@ zcW6HPEQRWajge_Y2}EQN45W;blKM}ut!+?4q2EBzKmHxS;RtGKIyyQgR#pxql2=$* zSX5M0OiWB%TwFpzLQ+x^jYdmJNl8mf%gD&c%F4>g$;r#h@7}#zK|w)LQBg@rNm*H0 zMMXtbRaH$*Ogu|0-##}txBdI~ySuv|IB>wj!{gw=gPxwAUS3|_-rhbwKEA%bhYlU`^Yiof_dk62 z@R1`&0s;b#9zA;O*s*`d9}piOpOBD{n3$N9lyvs&Sv($}oSdAJl9HO5dhXo0w6wJJ z^z@93jGy@f3JMDTeSbhhLqlU@V^dR8b8~Y`OG|5OYg=1edwcu!>(@IvIyyT$ySlo% zySsaOdU|_%`}+F&`}+q51_lQQhlYlRhryBAksCK|jE;`pym@nMY;1gdd}3na)~#EU zlase^-=3P9x^su%LI&o5>FMeF_wUcl%*<{Z1m@>~KVTmC1D2MS9srL3@De|KxU#bH z=+Pr!7kCUz#ZR69)4u(7eRZ6J8{`t`3o1Uq8Jj_(*41%OF_ zAZh48BtHRzSQsXZjAqjy5MPLiriMxLH=6SF#_wEB`|1w>k_PY{J29k$3268;yO^K* z1uQ7YVmMwp_KPI)yIPnIDJ0@0R)dr=(DE?S@-or!Gt&#PGN9NPMLC!xIGLr8Eb_dp zO8o3jw_$=J+f3((IX2KjE5u4O+D0>Rk5-z4R*sWqp|fV0i&ljz_VPY#m78|; ze(kI7I@b>9)OqMO9Mo+*sN3v`Yw^OhdF!=%>vj0(b^7Xe`RaEc((gHB(CcT==WjT0 z*l_TO(eM$Y8v(|nM~%mRhGWKK$4th5hl%5+w*pOXpEAD}Y%v#Vy%K4=7Gu8=yXSS> zo;QC6hc|KCh^G4GCwPf#yX-8+XLMG0~4Hc(#UM#M^eDT_qpIC4H ze=RM7_2wTetxX76#!3N!guzhO!v9JwOy!pmV}Upq7-T@m+%R9&!tLE3`HIZ7K`2BA zX#p-(#Bs-ZbAlQPg>-i@n-go+twRk>Hm5hVOo4r8y6o*=FH_d z9u`+9sZLDq_@~QQ{fWrTC>XC$6@)fByLX)zgMU3uCazA(SPK^dqCk zLMVk`dBJ`w)50+#%F2)!R~S$WBU#)P^5|WJOFA@jJcO5G_|rX#_G@M?^27+$uP()- zMKYJ-pph&DwXpm_fK1i8OQJFvY8j6`J@w$M=v~|86hryP%gJI&1nW%~g#g~l{o=!P zm{S%%!FqGyq?3r^N|wh3N{6g-sKS*TzdjUePHGbhSZ{{(%G{2v0PBs*b5^_j5MaGY z75Ts-kRJ`KH~273oz>!V)+b#{&Kh|F>y3TP#eLbwfc54>@U(4t39#OrxF8+%q=Il9 z!SPajo5<73#+N#xX7wvio?a<>_QCv02a}hWdsj1dt!702sqNKWMvH5~q_17Ek_^W8 z`D=+QizalVq6T;~yoCn^%W{Q= zL>k~i!xH^Lf+Ny*Mg(riKQern%q<*%t5+hYdPMIed@jUF6md9o%&_}nBm7vRPdJt+f+pdwSo(dN5w;wM`!w0%a(EKBYGEXM@N(71=dJIae|*tF zF8OJ_hxyQ_KRS-^`ha2Q8z?(PbtbW@uE6H|<%~m{zpR$!*RNTcRfm39@0Z;A^!m;j zHL?e)Ocum+rVCqJ5O@KE9M?h2wjM%ZSU}7StT%tKj5Vf{lp`cqg7SwKWCf&-NDRUR zDWjobq@!bHVBlb4;$jAS0$6xhSa?}k0SFG1|0=fqCcwAyGyKY#!p_bQz`+3^z{x4V z#U;qiEyTkk%*%@s5D*a-5)&1XkPt^pp`~S{W##4M|KAJpufHI3^9pnGOL7a!a|&dhG1%?&|LA=^g0p8|oVv0rz(YhQ5=-4UiS6;?`OK|u(U#B2U?)=t#%ilW>oR?F;SkX?+W?;l)VaRCZdE; zLCPQy2oVtxF)=X-2`M=_1(XsBhfz^e(I9AO>1gR0=olFpn3)(^SU_9H%*MvT!OjZ6 z#lZ%^&B@Nq#g63W;Nj-rMRM{Hz$Jj>76!I-B#$^ZFB-`w#ltVnD1 z=spgAgahKy6{kJen4#QiMXuO37HW|=`m;16Oz;Msh~;x zgDx@e2N(IbF7ZNfQF%#GMQPC`kY+6_xm;d)>0;S$YP{-7&97bL^|kelwe`()4J~zz zt@TZ94bAOMEp07?Ch@mj;&zKj=n#AR2mAX62L^@)2Zx7-Muvt*hevJ>k51een;ad# z16*w5lhcz^_ix{sow_@B_a5P%*YwQ%{n>??*?C|bpPvVXJ+lqMAApPe+t1?SPQ3$D zIY^&Ac=&J`bd0O3Ac9J07eTN1{P{D`DE`;FLATSEq+InX5852J@eANF1003xI=915e{c+U|?ZrXlZ0*wGC?{ zqo2aq*!t(NF*g1JGZPyN6Kg9|Yil!`J?1uhEp1$_Y}{;Y_uJXI@7Z&}$;sWt#eLsC zFq`=sW0~MnfgwSG;lY6srvoF;1V)4eg@v9842kkRljISazAqx*C8~IDRH<`RiF;JR z=@@)mT-+ayWztgc8L9Z}bNHMzd~P~EFC#fGGc_+OEjK&!H?fUx1@}j>jmwuRsxDuu zsl0r(va+_Ss_x2_y6Wosn(F$iSL?1_tNRw)*zO%0elwP7Ywu{f-cx^lpsr)6wqv-q zbEK|wq_KOXrDvqGZ@710Xkc(>Br|&B#@OhM@zK#+H*Zefym@Aj^*{Qj?yYut+x62OH+v38)(!#qBayaZ~DFqQd_j%7|0 z3J&MDkQPQkN{C_eXob^IDkUgvxM)W)(>vJ}?u($}l#xy7C=Bn5I%5O(Ida?3z7gG> zs}0*tR$AzHngj|vu2)t^gKB9*1PVLAL!(+daZS&5nU|VmR0MpGL?x6PUbOF3k`uAk zXetlm{BX!yC*lCRPDJC|y=Q;mz(G)wq=b^Bpa2C&i$E~Z)3Y%$axyb>gQxDleCM(O z6ZWsc&dNss8$UZ6`1}=qc=mpO=l=eYi$oG0x%~Vh!om`wqEeEQa?;WYa&k($cdIBW zs;MYr)YY&W8ah}kATdHQ>gk#3>zf-GSOORtS{WKz{|Wx2RJZ@i#>nUkKy8|s0N9$D z*_xZ%Sz6lL*f`kPIquoB*U5=6GzAk=FfRRXn3TrH#U{na;uGUilH$&tjZ4SJXC%jG zr^IKaBxa?a%{-T!k(Qc~o|c}GnU;}#E;BDBD<7X#oRU+Nnp>QfTb!O(oO!-DJHI%u zptyh#r23wuswgk3tSGC#Tz0jxyx~e&YfWiyUC~f|!Ei&tKz&h9ed+c3OD*+Rn(D7L zG}P5LG*{MlUaadaxi(mE^+v(f(W2TL7aN9ZTKj9;`|7XvH+J+lclNh+^>uXjbrS}q z|Jh0DKm5*>CA@P3wUHX(TTp7l7}Ld0$1Ac7lO(Z=U14&*=!nJ*tNyd3iczl>Qh2oE z$tC5njeI}MMQ?yYq9ha&IXRS)k_rZ+p`xOtp<$qZA2qq*F|8*o0a9eUh)SpNWndzXOvj1Fi zDExIHfk+~VWt9^WiGL}QxHA`RZfg8{l0)yv_^%}gpg4S!9HzFp?Prn$;UW3YHjMV$ z4WnN{M;HkW@24_^OLrIzy@aenvWqsIviHFHMsbvedwPlZC9)(6E%*7uxg))yBr=vH z+IC)p3ACLCGLF+6F{vw~XH<{Qjbsf`YpB=QJ2@yxEp`0BTT`IidLhUDGfzpvTatx^ zg_V_+jg5_+ot=Y&gOih!i;Ih!n;VHl^6>ER^78WW@$vKX3kV1Zf`_CKcuESRP$&@* zksXB(sC%HSfTAZa541dGB_&lA6^xpiCI&;`DossYEiFC3SlZf#;039xYmCF0Y*QD3 zz4Y|V0fBA9LSO&4*d{g$@Z$U<0K)qMBO^;=V=Dj?6KhjbYcn$&b8{OD3tLM|J8Nq| zU3<2v%gNEvdGB6=-Uq}!AoKl?Quwm7vvP8>b8~a@@^%uyd4vFPL4ILjK~Yg*adFY# zP5}SkmLV>Fo6r0hTG}Y+i2I`O>4Hl$+o2`BC>|3KTDn@=eNF;|mK5m(2`k9kCkL;U z-3*ln3E-2`!sErb-E1HM{J6W+xL9AD;%LR~3szS=1+tG`x^v#~dR*eg!pl+B`)*ZD zLM$uq=X!4y1{>VjH`8?Vm3!-@h8KG6r+39CcxhF;B)QXo7374?LU=xd^M*}?%|bF> zKZceFn}sYcIo%*^7Wx)iYCQ6Ej?v(N|YL7}Xm!}-wnJb}(( za0%PJtOrW`qfCG7O?Pz73dolf&T zZ@N3tTmf&Xbk0^K+g|m&gIb{zrqo%Z+*Rw68@6h{c8$Bv)dK`6^pD}8Tf2=qPh5i+ zuEj_1y03ocA^mQDgFYaL9yK04VR}2r{Cm3n{(uak==$gepO+mWtb;dX^Aoat^ zLs(cHJUgoewQz47w2M^@AAz8t$1+LVCNT#{F;UiaRa$j zqpeX({TE#`XM>a_6SgT6gNb@H_jRSf9MYPF!^t!v`q9p+vQx)k(qWt2Yin>IC*L z!!$J?Jbf^nZ*sl;If9#RrFtg?30={k_&~a&YtDs`imWb#BXnZe!zrE#5p>P+LRSVZ zx5X%A6woy}*nz)j~ zI)aavQ@6yk98yieN`aH+yt)t59F8?PrnmV#ewgX@66YMLoeowCG=~o6WP10Zgbw;X zCwr6|xN^@nuX*+&SSdi=cfj{F8CWTBf+}uLVT}BAc~OJZlhu+CP0yT?bM8uIrFAY9 zkIOs{>*tgeq)(TYUrP3TQej$DkzKI~mampvy4VSHP34KW?8?TsBE?l@8&95Aqlmq- zt9t}tMKz^7m)5Q^OT(VkCg~eIs|&S{e^wvpIsB}_>m=-Xqf?y0^Cqk8_~*^Iis9!i z>dmkhtukSLD;n$Lmkwp|1mf{9<~7mk3~@vJ7&#yOvR~Rlot0%fOjm4~;+?0pDXAof z&_^5rxHrYd z_m_v62dWgYf`4UI*>f66e`IjlkOFi9OBpNYjj+6*uvk+(=CPvDy;LODbM99tR2!<|aq%zKh zo@|lNIeio!V!BAO308_rgd$Y@+@HSni((jE;FiEGvW^wpm>LX0M1ATcO8I4%hHznS z<In{q=49wQ-dmQEaHN1p}K+xbk`Hp zNe#;)^#TuVqvK#Sed`R%$N@y+QS#6qzg}wkpvUXEjS@t0|SXaxo6B=qM7g3O1{&c-1UoJzsjevg*<$ zCsk%}YqP2*<;@;<)u;6n6;oa{b(ObHiaO*A+-VZLRCSD#$?4VfrM8!EtWSUTx=bv3 z*NV2jx>QNbRlW3Xue*L}%vk2W2hHT+O34WEOtJdDu^ZemA$cLrVeS|AhiagCBB|d$ zqRBHhD5mIeR#M0Awm+1 zG@;JKC*r(B5Wk#VdGgP!OvJAHhc5ggqVjfu_Q-0rxNUDwy^2X9HJcNjq zi${Jr`i`Woi8zi3Z9`&6B;QxX*o-VOwY={|C;8DFTL`0@=l@|2Qvu;2miewR0DXa! z6zB?+Fc?r1em{`;rs@BSS?5p2FW*Kn-{&wuuiqBy2}2kj9wA;{Fv>&;35lRkzy>M- z{GUIwegfa;w&xQVKD9J8wY9Xsh!gist<%*t#NoiW(@0Ox7(id&1i-)mND-!nh5%+p zMqo3PIe>|Yg{i59nVF@9g_Wfx!T$-|pZ43Uq5kh$KYz0s>aVVb`oG*5W)d`pMz=5T zxbiUu!fGhC0O6XV-dJWC>yq-C2bxJ-TCNOw=E#8*E|a3k^1}~%((LMHi2TN`UAS)sAqyB(okI!h}z3ss|;g7xb>M}71!%B4Y%R*Y6TbhG(P-pI*0 zW1M(WRsVI_oqEqwt_W5c-q~iF7fYWTcNfpKQ*04)DJr;NzANz6pjgSi3{8Ozn~I7K z2oT$L8}?t@ZN3jge;khf?E7DL*?gUw?)YoAOBN}}%Ok|cC&Di%E+{N1EFvi?hTa*P zO3Ca7L({+EvN77$CxB#V`hUo$eKz^r*_8C;)bt;H+8LQS8CiLm*?B+^JfE8bHo+90 z&n?W)D1`>)&Rg>}+gEc6QF6&P4fsIureU>H*A0 zLDm7N4$8_vZ%|iL)4*V~G&Hog=c7C36rivh0$mS`NcC_=`TzvF+tK)d%(nv|_WcM@ zSYKddWU)O51*1?)6B8>_Q!6tw>+LzHjisfnwY8m%jlG?n!=62a00c-s02S{~QV+g9 zUOTA=U%$h?{sDf61ODTwhlC{jA9~h6;vp*wEJMu812fS4qQb(GqM{2WB^OIeFI~8B zxvZ?Jtn5m8IY9L`YRb#M;Nr!a-=LzR2H?`An#%;i{c2SeFl%3{si_5Odu=W7uYsx} zXzU>O@OwYY&r%OJhKGKidbl+)4pI-dCnu+F-@ZdgJrGu}?}Q$v@6Y~_de~7Q{z+@L zI)VD$yDea>$w+w(8^@fx!zs5^Em{1Fdg8X0ysznCi^#keI>h-p^}Flw6S&PIlQ;I{ z#KWcfavz&s=>9=xXahAx@he#m1bh$(;0a~f(e!@JQ$N%6e#>7!Fw~DyxBxpl0UR8H zoSZ^jTteIg9~p{=N0gTr>^2n#OG|-+Oh^bVEG#1;A}t~!BPt3YD<(#OxVRjEgoM1L zB*1PongA&&1zA}oIe9fj;Av6TR8_?SN0^otL5R=?C8lR)WMIByW!bi=?ATFkf$IGm zn3~!GY)j!gYPg-1)sCw0t(x}!Pfik@OUw9uk|-zle12Z;&Zf~nwXFQj=Oiep_TPEL zepXZ41ogL*M4+aYw$l#(V3J6gpff~a!giH%V9OCMU6Ca0O6LX;OIp!e!aB8?HQg|$ z1*O7OTgqHLK2F6flIW5LH0}#0J6B`O9`wd?_)PTJ$^6i%_58b!KNKsgC@U-Y{8e=U z>j}rU@8l;f+mH3O^5D^e$D6+++hD~X(|2e@s}j;rMqb~Kt|1R zjf%eZXl{Kd3ICzlDXiuD>QZcm7!4W8_t)R>zy10H#!4n8pn?Ml96a~9xwv?dNPZq3 z0bX9v521h|OF%#rSV@G0#D#?O!OCw~bxO^1IcQl+;yJG}P3zFc=-6lpBC`*949Ho3{&y-voP?fq~Ty zwtZf}>h&w^_%VMYf$zNgwg(`D=?93t{yjJIe{<$FJtHff&`afjo!EIf+2?b!cbF{`XR${pGfF(2ZWR}L+=YL@pi|d_YMWvO8r1k<6kRk$I`VO?q=9_NdA}d zKmywwCHRe|b}U^#VJ9$9{60$j^>hNHe+aIwoq?jDpy)S(LZd;J97M=LR|PWTgqCW1 ze5k8~#p!D60TSBwNrK0o3FxHs^#RPjHc;PNr|m}|urz-I!Ar6O&`Ir>N`B)jv9cmq zOKfd{wFEo@fwhDXDBm$g{+J^7^7QywiroLmQU8GBM~)u*L7f~~sUMl@&Oh5zeShE)Ds8)=`r1XZ5cVm>4G*z~<0U8>5x`beWp|-ZM zj*f}0uBooB84d?v4gj28KVsYBMVMTGfdv>f2XaH0C|Ggvn%uW>^AE^f1j_o#R|LxXI_LYwQG^K2H=5f1VhxyT2Y{?hO>KY=a@z`N zyJLj}LyNC&NC$g+M+XPsZJ0$e^k~O_h{@TPWZV%B6~m%1f83w`Y5`AWU=RO8qt?HP+NLeMNIk4FOlL{sFFC zYp$&YXsNGnX=rF|Y;0|AZfj`)lZ)%^?VTMRU0q#Z_sOpopZptXO+qJso8|*OUfd4+-NL9R0o< zSu8(J)|dZ5#`+aqePb*T`QDxa?hFD6j0FOvKMVrJ1qCFw2Z2(;!UUjDQlJal<}GQ^ zbAb*EjaHDBRwB@q!Z*6o)yCj7H1xH!479Y2uvjBNTH7$u);0m`^$ohZfXRSC`HM#x zJQ%kHW`eZ*gRV?CIRx$v{qJS0T!P^kP}X@cX8-*Zu(;&HZ&c;~lDU5;xb}^)+QAQD zozP$0Cj{0B{f&J>|E-Lb@yCp{D{=3FY~ktvU@Ro39)YoVXbvm{HvNRL1c~^FH6Tjg zjr<@G`XvuaMn*wSPDugs*px5;C`e_)0I1+_pcI2tC?OX5>rCj5Xtm?x=U`*w09OA0 zs*(TqqSep*8vk!q*Z-m^;D2IO*T2ZkJbU&%c)hcm>)rNoubstQ-;B1OK7BppwY{VZ z?CAnOgjHPy+nG>sBA9T>OSZ9aF)9+lr=RfNuc$YkUepzw@+#;{LQ0*6>!r93rV5%> zxUKqq_1%8CKC-h<2=o2=$k%;BzxLfe#SlTyLs=N=FG9|^-T0uj$NKTTy3^CV!7Wpx z#0{GYxB2`Qe9eh+8Q?OVuQ7LtR+lAIJ7j;DjATJ9h|fX93H$ZfzJe19<%L3pwm-pl z)@`srq0CSy6BNn_g)%^)^iU|>Hhy&}2nt2OpoD8e)G%5a7##s{dIX%2mWr8ynw1&B z&PL10MUUiVPN>(Bx9Y zax3WocOZ|7KCh}ipQaw4jvl{0PQVB!V5%)(qb2Bw5!$CJ_oM)CFh6fNA73m#f4qP|qL5&sh;Wja2p%n-DkqVwAaPb%GEr4B9)ph6 zKu2q#qp(r{k-E}RdeYGbGBL)oai((d=JE*^@(EVE6RZ^y>=ff|mE!G`W9?OA957MN z*l2fLw5L(*A@lenR`_GK=_l=TPVX%UaV`mSs*G@Gh_r8ywCjno9f-0Wj^d zdllI0ILB9UjxXc)t|z!WPuTY)$>ZS{v;3*i%<$fv#Fm2Ws-k=#KmVQkdp~w?+xzvv zK;*ZZ6Mn9W{XO5t&SV4(8@~-k{*G_s?OVcuzMTTzvB~dL@AsnJHp>(4dT-y~+c_Bo zGcP~@lNDjV9!R|{^%3sx1>7A6m+ZiPJ+Xu4grX(A>dgv@Hc{r_94K0s(es#aK{r%w zxmgy2GMA&hr4Zr%-cQZ)guC9qSppVL$5Yhlkt~5MSJKd0awXDCJ1NXjTXx7yBMr*_ z8Q)ous-HC)Q;sX8D^gCPk*4NkxVl`_ZfaZAGmXfiL6C0zVsR1MHLhdCJ=?cW&TA?% z#@nNu#4Kl6lY$F95jhY&enuDmiG2x@BHTI(I!Wi1`Umpz8WGhfy)A3!EQ>kC((UPJ2de>>Yh%`GYH7J`flSf@d5QciMn za5Lbw1rizka9qKvW`i_a5oWeA_2Yg06l7!d-RefjE?qbSgI||=n8#9=I+asYbbvW> zV(FCX`(2|nn`0jPq7DRBkL~xFw9(6V^Q0pVr+7=6jz}wOmKVNd=u-9zd~mbw&h#J~x7wP`m`g66wyzO?4^e*B zgDLwtr?EX$Ti}2xR;=c-wW~KWEmzT$K50^e-c2y%1Gu5|zMH0=?EXQDy)+wH-U4mJ zO;O~eV^f)!GY)hETxzanl!(XH(w7H%r*fhxU9#~Iw-1Gi?gx%W;314GUDK)LZOAnm zS=ovjR_uFwB`%&YrVd_yd`ak@wloBfDLp6GVcgic6o)G{TYjC{Ic?%*F$Xw(SzQH^ z7HGvy`3l0(=c4>+$-GGzX`_5dy=kLP+ea+gDifcGe@8>-9HbFOcjSnTLbh{=7=q3z zLIdmUvGQ3PfuL{;VN5y|qPVP`g^5?XdD+a)NoPNV74 z310zz0EgwaDS~in4i2LSpn@|{Q!!CfF@szdH32L%RLlr!COR5MMg%=GEgdU@mL1%e zqd|aAHUxqdfnWi%dukdcIwl4>HhOw?0I=5U8|Zhw({s?%and2U=xDfT5l9*uemIpl z94-x~+6||{z-e(*2vr&y30i7?T529T8txwfvSIWHBqJRU3nM=#yBH^jBquwXon3^L zMUaIFWW&CInTd~O`+OY-n*dmq@a;Ms8!P|sK-jLp$<8Ot!z&}mrzpa&E+(KQE}$+h zuv>^znvY!^$%^7+5##_X7&y7uz&|R?$quq-Vw`N-H|jVgd3nLjS~(#h1tC5qK_p0& zsR;6@iV9;SL^Q;OHAVTgM7{tk&SwNxZ;JC>kmgo?~@QPluG?IQwOzOveG8hQ>ode%n9c9y1AdrXX740R3~ zVtq}p0T#GZjz*zwrZGO&sYmw|g}XMF;Kv91W@i@W=N~ODt}ZV>U0Qk!j<-$EJ-T&& zW$4aw$HdaLf!T_#dj+kx(`rVOFAXG@wr3Y!%ge7ipI?=iUzweEIU}b$Exj-`H7hYG zBP#aX>F|`m&{Ut3iTjU6I|amBA5Ankk){%qsTi2K+do6WGegxS-N3eVkIA+DhOOQP z9fu5h{I&stX8{JIfw+68un&VZp9Eu`omPK#TJ8C1_2*|ao}bZtaYpM!2$q0Q?e$Qd z^)TEI&|44FTMyUY2shk_Famh_4Uxt#qfB2$nE|{a!2DIT<*R6`*D(Or1jO3DjYDqF)JBHs?=Qe18TzVR`u%S9*{B;>*MgX@ zWa6?ki5icpEbTa1m`ove>E1O0nY0}7(!O$FQ(*methZ%-;HxLI!!}pUN)Gw-er8Tc z?cmLncBDg(-87fl8rr;88|y#69pyAUJUVX3yr@<_Y0#t2+M52d;^P(DD~6d^?IgB~ z8LXq*QO^6TRR&CLT)l57yRTCkZ;7)DIOD52i3`o2SVc9wd3yI+&Ks&+-Wif3VVkjZ zct|SRso`X#uwV{S%DH90gOI!m&YEe1G2u{mq8>WCp<_?3F=7*hTP%;whr#7nowa{C zT9<#gEzmR*Qx%CBl-Nf_l6E9Vg|Jalo`nbN6q*u?ZoX zkFUpE2^%FJeL3d3a`Dmmpq*o`BC7=v|JE_rDNnFbas?c7ZG8(iN_LQmu2uIid9Bq9 z2wqyd3N}ivT^j@U=ZZ)f(9h~%)?VWEGoEG7>Sv=`?l;f}@9}9`h`Ur}xLo8_g?&^d z`oiE@^T)IG>lc(?wDaBedeL^jT@=x@u{8XmljE1C5}m}?PgQkN=;kJO(Pn-0>ma5v ztm)y9bV%++ineYzWqx`IL$fV~9k%LOei^%;^P@rxS}>o(wU;y+Uel+1g<+SJ+!k@% zLEhU4mJ+U%mrJTrRRX4wG)?G6)da~;iLsNQ3kSSt% z_sxgMs%1GRxkX`ayF|+~HIHuI<|hkpn7ZKcjB=FvX~K)%4{=z^TYC=VHB9s5`9K2# z-HH}W{ELZ+HPYOcWaoL==;cI8yj|^6y8@o!dsSqD6#8P%xP^=Ag%gwQi|Hk9S_{lD zXMB(o{+v(XOgtU2#>Vqrd681f{)yRWJazZL;bU{IRI+-LC2&pH z+=T?)OwqDj^Pxxml&|!sF5s6wsgGrxJ&N+QafN*>x79|G_2cylUYv$E5lKRXF%M`X zj$K&5pgkV7qcmuIir@E-n=X>R>j*nt9O6W_p{o{#NetMP>_F{N6KA2&OVb)iIyY0+ zeg^I9bwPpaL(*>i{(+@Kn{PhmN?((Wi7p2r$GfcdecqaWO^O8fH_!>gzr;78W1!bQ)nM75Czx_$h;)ct!)W z!AO>3hJ1(?>C0-3DO_)73N`0J}!xCKrtQWJc0F~)*X5H@wf305wH4iZHxl;WQ z+=WS)OG`m!h39LyN4M>9bxrasSwLa@4ZMf6sl!)iIabh2>ef=8_gfzd%zHFo>**uo zMsgrBX7M^Hn)FVa1;m15$4eDPT$1)?hBLEV(+ZUhKOL7W@R{tIp2a!d^j^OiGR?ts zH|G~TM>5ObughzSX1nT3J3FA%kcj>K(zFNov;}4Zp}#ozF_Z@JY9t+lO0q@xQ>YAx zDcTKc;HtEae2REqWDOmLAGv`0_<)R382^xQB9A}fk$Srg6oznnHt>Ee(w4Wteotpne@C5N{y!aV%&1K%4{gq{7 z4>gYsIo}gx=`&ZW3IF_ICDP%ZFRE910wNZ!XztH5Y%xocX>B31kGXfDaxI%rR4!*T z{IZ|mL(G(j!(iIW#B77?gL>(tI*p)=-ZRb$>$6HyPyO@sNyJ)&4 zMbUSHX(&*KG=%UvyPnS{Hh0bJrqnUwO?tgSCD8 zN-12h)2o}NQVOEYhnOmbds7S99+Q>X1z6NZim&u%8^HLFlvekW)7(eEy(%LQvcF<5 z(6~+g?BmFVq`K>*bfYC{VaLMxj~zD9Fm%0ee35v(0_7cAcgubD@zwN3?)FDxG`v&{ z=_uL$)HVN0JG~E`d}wiEmtT}r-6P>TQ@?vWHWpR-q?*O6 zt|lWNbn3!yi#df_@;)!|+fa8!yfnvk<<$!gP;uxfsYukvhUD<)T{Qa8dV<*9)8^Fu znxZfRbnlTqRvcG)Q7n99L5jGEXr0_Owv=BN89R>EKy;roSl;Bm-jJ&?)69T2bVu6E$P8C%B;21Z1 z=WHW%0wZvl5&Df0hIa|~=S*25%@raoZ6mD%BW*Jy?HdXA=bYY0IxV7iKMe>r9ZnWSklUSve5b6Wsag(X7`WQAd)()5Y1H>9poP!SWf#UB}!&da&zB< zXv%J-s6Zy)yD>~eu_`>Vak!XZkLYum(XoxuIkvH9JYo*qRq`HC8t9HHT2;zWKwJd( zhXUiC9gd1&iL1#}IlCI=+8v|3FTN@>*1j>WB~vCWQ|c&1e6t4vPZ86g5Lbtb@6L=5 zDo?n8OBgAS4_l3H&rEQpPl%+5p12!FIv#WTeSA!Ke1~xSs6t}owS;8~0`q!-8YIC<(S{+&n4)WF$#g?J8B(u49%$>-%~ z-v=Vten}R1oH7`LSE5W2)Jsv)lPZr%-oF|jayM0FSE|rGnE_mC_-ZQhUaH36Id)Xa zBV3}5T?!*Bp89d54hnD2nr_vE*!@e2JY}3^Y^rk>Uif1A7R%W~7gI#+(hUaFP3f+7;;5^!a%gxVg4oXvB35KJy~L=llhPNMMuN()$VyXY&CI-* zmT@p6jWW&6c2_-yV_KTB5kgiTL*8AGxsNjK>_J!oGGXc}T-S^&{$6GSMb?3=#G`ge zzQ5$W5sphoC9CM=b~h#Gv!)jwgtdgg>g^yGVzaMUhA}oR7m4PkoM$m<=O1Se+>0AnO<8M7(!Y5AI4Y{>7s^(M#n_4L+q}Da(D3|%%${mk z6B?caVN5Wi><%HDR)m|rlsO4<>oRaxXUc9o?-piP%wYDkG(`iFtaA*O6}jsqiY(Di z9L!;xf3e0Q3;W0O3qpu)7iD)tpsc14Y5n3k;j|oZ^ltS$hBALiIHN!@>dnFI9DIJc zB1Ov>th)e)wt}~!3rL@EZz1809h9Wi@FqVp{Ww_rST0Xj;dMV)6P}mSH1B4tWbXp^ zg@YQzPhic+0(MhKZwRby0oED1Xu)lIo+Fw`iA+ZOYBZL%KS6#`Rc`A835^S*9o}%22ynI$&3M;3Kr~76dc>I;^Fd zh+`V&pUmqeVnkmJd*D*>Y+U*!?XLC(ZutV(qI>qKIM{h-D=|9eFlU&nX_2P+Jf;GKS@MHTWg1+epI&fzf_M>X4p3Xh>sn0rUztrf=A zP8-<^(kJib()YsJoLLhOX1h4=9a?i7AHR9&jaAvJlQ5EHMhapJGP69n2e3v6 z>!v5`?IxnaICWC5(!s?myr(F4#gn9s<-QChN$;qYpiN>MX5ug)dT=uP{4`IRpNje= zyQU79E1H@62~k8L>}4q1lg>gJSWY;b?=Jr;Ik$?DPF}p!<*t)3c?0-K&+5U#hJCUW z+!$GTKUf~JF@n8LMzPMbvu5%F%ytj?jo7lr0{Pk|nAsv@6PoGdB@bW)!@IZwh_-!?oxK5naK1*Y2|dwHLn0>_PDrV zCVD)1l|1YK58IK6+%8B%6tNI+J6&I-haGx)Id%OPaf{ydV8GzL_rvFVe8Fz zG>5BOw?as6UTW>%#dTtxRB54YYoUGDBJt>@c3u4SzMAW!r`mhjJBU>}NE|xIg8tzC zTp9(DCYl6?|K0sLhc3aOF5%oRk=8D;nJ$S>U1*MOX_anShi-Y5Zmk94sUbQhKN4&R zi4melQ>6#%(4!O7gUjvFZ|yOh=`sG)W6IHMuF`Ai&}$vkYn$6^-`eXi)9W zizX4}A;FH32;=)aTl>6c`g}k2`Em3gR_PCL=sy>1MfiRVU z2#0~Fpn-!4B)SDyzHwq~$N-*WFhynXoWo#x&|qfnV0PU3M5<3F@EozVWDa zbZutzIsC?B_~;9jo39;izD*d~_(Z!Hbo0~9&CO3Y&*a|Zs<{bq93u-JBNHFv)EJ|f z9i#p{_UQ5$N9P#Aahxf5{D#;#yT&-n>^Rrw@ynOT**eFOjuV2x6KP_b6Ra8&!m|?+ zpC^JZPq1`OpdD|?2jB7*yTz<=OJVkwTJVID53S1QTUf_QM$Sn_sY#u-NyE=KaYnTI z;9?t|+#4R&jk)dXecSd%-;sh0o3=hj=iB~}{u5}p$yi^eAEi}g#-7oY>aJ0M}#$EFU#Z9>}ac;=E{N5UiX`i?;0XY%eGY3uWc*mR7M zdgYSKrc!zt-u2sm_t58ia-T_3{ov<9`b|`6%~bDR$5WoH?7OT=E<8rkjf5Ll_hqcZ zs@sUAT<>}2BCcP)-{Cjal1S_b0ld=}<1>@?Z2CHaFFUVKAoae~W*2FJUP~AT?GVK*Ye5SImyRy#_O@6g)<{$_8 zKGpf~%DIC<_mh2QNuH12t(-j(G)#nz`Z*0_AyC`IU~Q7gCh?#eIIPfI^D)5_0cBXcX{6D z*8V6e>7m#8)i*OMMr!26i3>qu4-py|36FNKd`&GfOIco>F6TvDI;f z!D(*o*@L+DCoe`;ji?_dt39H3d=%w4e~oJOAbcKUJgYkQ_yN_z%fu(%4yz2l59+yQ zE}vgp8(FR9dO922Z{zgX=Ek&T;@#{vvJND?h54>9g8YW+N(cV>DEoXv@NGZ2sfK6w zdL-uMpFg`b`fP~n#mdZzDA%p4?c-qG=@E>~;^^Iu>N_7#OP^RDHb&3;G0HCGk)Ke7 zKQ~$`nd?KSJ@}-y{?chfH~0mg&j#D|jTEuRG#ZaNxL@*a^>Mw}L?G2)3ah^qm`4cZ zzm&MLA$k)bzV%Y}%9_-5gv{PoO8Kk1&ma`9zrq|^QayxF=YFlTcUEgJLi@~X!}&=) z6NJJ1YjcxH6Lo}{`WxFbx2z-)Hu-OyUQF!SqH)}M>K|+O zeyl(95nPdLzW%Xw{$u;r#}4jKUFx5D_I~P9|Aa-7Ap9VAp|sPR?>~)kf1XhPJh}Jt z)S1tB^FL2t|2#AQd2Z|T0{7;U`liVV+T}BwtNEKxu5Yf*Z$97JT<6|eGl_n=ckAt$ zt@rs`AFgkGn%|nnZ9&X13z#rcDlTlM=^|KM&Z+hX_vbFI&+puyQG- z!JO~+=j@(i<0e+W-kowb}`)}BP(topNU+**9?wBo)BHW*w z>)m4}G0__Qd6RVH*o)DQNGfg}hk)wQo&Wr>(%`p3PZ806|omEXIe|!;JpaO#n47)mA9>2~>*-SJ- z{Aqxn-c?$!ID}G~wP(^0dpUx|PFt4lx`hnU5xkL@6ypG~ukf2m1QcNrWf&$ab1y#~ zCYT`uui%F>WH0PDQwY`zr*kL?>S8`1v{0HMTkiP!rbAy$5t)>=Ef0&sn6L-4>E_zC zOegP<+7OKZRv`G#JWI`RXb%j_Wc%Es4QJSd7l)XTv$^T-vrsL#jj(1c4kh+Oo8Lhu z*1DyVLqj0+(ys*sttg})zapcBIzv*WV@O|x7)DviAGjaq_0}#tZc~_y#qsbW#F&w^f%uhNey-A;LjvEAc%8fg=;s{2XU*^n7I0ExD6VU6fF+zJ;^HnOpBW- z#!$b6X~139IgHxbbfg&x%-MzS5TdY`tQrz7OG`#eG-;eF* zWFNc-`(V#plUd2EnXJiVt;yu~U7rgkNJ*)g#v^GFNOsT8UK|f}-@&X6&YocE{ksQM zij&X)u<$MdQ3$np$h@a?bu>ZH;*FA?;w;g*52>?GUpp~@1yc`Vg^cQsdS%E953xB1 zSEKIbQq-U|J_NK}Cnwg1Qha(fo!9#`Le%?&=e@ZbDRd!R4lS$3hoG#-6L)`iTYkBna) zUm#i|s4Dw$I3Y$S#M~Gj%NQwN)F!8J`)JuJFl1e2VdecUmDOXkkD8!1rKZ!ivP_r+ znk7y=?s*@Gv}oH#l0#6lKT-eVffcUQlEldEz`KkK=~$Vg&m;TX{o*$uJFlDHBWUtO zNnl;1{Jm}3kY$@JqQ_c_ERwpB1{2v7y>==hO}a526FKx?dsSsgy@ce6TsCEU^~X(m z$@LR?e4+Ll*4rZthk-=?9rjwUn)EZyCkkZ24mzQdkFv=p3m+&u=p{8h$`_q1(hhZa zlqdPP*x*&M&tmX>I{q=7`6a^V=pgbQNrUR-$x>V8=O&X)2KDumWzM0`&DJCho2Dkq zJ$s*CYr*iFA0bj7rs^s}UpQJzna)lnm%eBWmfahL%$-j)w1b^o zLa*nf8c`Cy&>fegX0vtC>CYo?pVQ)+(#pzBH%<3CdDJ~O5w}Zjngcs~^-7r^57jk) zDRO!}*=&AZKmB>*Pr1*U)YGde&)UN?P4B(tr;t7tdRD3PT8)kYvHIFO} zZY(j>(=&ZGZ;wzmzR&0`E_);vzQp)RTQM3^4!9A!#V56_-qK0%sM)wB=IxrZ1%QVv z^T3?7E!K}*u*-w&z#J1-k@_!#O1~KOvP6$Y>L%X%_I^}>tKK(K&&y)SvrovZ#4L&H zc@}{y;3X|&30IH#qRh3@-Q?*QuD-8Dsq<79H?^jLnpD%h48WcW$PS9@DB`gtQ(kNY@Vq^Hz7vhU>q zz{W3@BKhZx$zRa*aEV$>8Tv9(7Qlmz7+S-OV<#tn#MG44!K3sjy{9)~+$!E3Kd-{f zqDRBZdpT4E@J&h;zOIP&@(1bS^4npNztDnkBIWnAOR>oFbb`qdWndEx$??yG4MuOP za9wlememc!^k%-f=%1RFzC(f86QZIGgMW}(YVNn!RfdT(x0Fs!VGk&0xfp!+ofWlH zuI`(ldy&U3YZpuVvcn=V#U3EH9 zD(~h->&zuSla_h(wWsV!{1#bC*P42U@+oDd=b~XHv~7F(^FX*?sw%&@D%9lDqg^PoO4>vMMx+0ya-jUJk3O> zba&_d(@qk65v=P@2CG&&<}M~?NhYN(7HKgSt1h-(VYZMijzmFPVT>4OPggdc!i-!w z_h}bn6p+y<=I2$H;I4oqfB7Ua)lGN;O$=YtIo^I*Wf~w_UR!Vm0 zXtx|$k34gaLTNY8DM7+gup}B=@nz40kRH{eV6Z z)n)G06YkY&0YWLE8p07kmtMn=UZccbeJHX%3+6sc z;l5`|eO8b9tRM9SkFrGssr>Znv&&Wak<#bT)Azlx&vCVHWTwvv)c@tO&xN_apR(Ug zslQvi|D{!byHUSKNPn|ezgKR5LrTAQPk&8gzwhdUs+oR&3`n)?vLDSnP)Iotq%`1l zl^Fm z1+{~DJz4o7L&d@oYbf;>MPv}8uq+t(HUi6Y3+%P@Q8x~xdK_v_8KNXeYgx&lGfJ5w z&(c^LVhX1ZR7II)a)mAdP|v@}jH|3aT%(*dL`hz67d%u`o_h&k8Z^ z0B_(2suU*=2j-5v(W;i#axx?I{jGjTmWdq~^2CMwIzIR^G5FE%;cuTm?P#Q*mTDdN zGUs=OYQ||xY<@W|?b~#r&}u}lgT7(UVB?|DdGWM3d7!@e1lpz%)5VaAKs1X54F)tK z7!jvC0D!t+H8G4jMiWwRetgnFE!9bewaG9#2FA@B#w$xyI1Y8$(xNRM$)h6G8p|aW z8Tmw}SJ*Phm^Z+rtQYZUoW**8^_5;o2xgp}U?4Diyr6cRi(n{hd^{t!khg45jqJMs z%XdMM??TGog&%(xvHmXl>bqFzck!g}%P0UtWpKJ=uk_@1nYHi8v+uIt3Av_Uc_;IB;zVpfkJKsjV15E92O-WaU>V&dToe(^;hOpaX)rKkaZjQb3TjGI_Pqh%^5 zbRIv(4hD)J7Km+@K2CZJ493=b5>t^jX~t72Ng1@F{`d*lfKyS40B_2&j*mll$||(d z;+}x@tEn@EDchu}-N-5Xx~YvjhH}ziZD{Jn+0?J?Dd&5Jv$)f)B8Kp12KS_U*~bZ&YSk}{_>+=|x|z54xdLQ@BnE<|jiiD2KO{zt(AL1Xk3e?upadSdxO*iM zm)PiUK#4`8=V#M}&%r9dhCQKB0~FX;)hHxMSYicK^E^~PrPa7m%m@Ltd1&&c)!6#X z5T)AKKw87N*%T60pQQ}eiVD4Gt}}aPQWbQ!vuNp`$)b;sgWm$VKca)Q_NuR+|b$F@R#||b7rW?=?=|CaW8P+$B@T|A(foiHDBrn zo;0jt&ykiGd&ydOfq&+i^}jX$1vangHT%Y5{^V@hk1JFw zbEax}L7P8J588YrQg`$Ud3wLaCmmce*AV~B+_-n<^8WnqykA9izpmG2ZYG~bt^LBV z%-n)e{`VHK`lhi(QQpdnps;DM4a(!yA`WsIn!MT3@0&w-A`bR#z^>_5vbN z!SpK2%m$WHAwlAem|$FXfB`pv;gC}t70lJQ%ssWtv%buGzRU+%;U`}aU|kUuT@g}Q z5jI#6u~`xISP=_b5l>!`$bTjg7A(05lo}m;{}M~AFjy9{Do4I5&$_B0x~izMs${UL zY_qE3vHBovRW*54Eq_(Le)VDBs>al+=DL+;J&+j%_=eEq&l}`mS@RZN(~s$YWU%I8 zwPv8zZy2`bmbhk&`J!8Iolv@FMmL_cYMng4_LNu0jC?&Bf88>y@0rSaxZb+8L7|Pu zdQi~19i-4cf8DQo{drq~YX-VGZk(ZG?lvM^-VDq;Ax+d zVP_X^Kps&a3JfCE5(h9JZXk5A{Lis(DYqmJgK*-2eDH|aRy4L+e~A2Iw?R^@s9+QATMLadX8aaDjJ^h{4os6`*rq{lvqw; zz$1qgs+my2pYKw~k}EXO8iG4Dbi{9C98juB=2G5X!;+~w%_PsuNssT_g^v>zXl6YBKl&pUN8hnXLO1tQ|6sgftT z(U8hd1a`UENasf;yIVG~+jP*}!B7i3hinE2s?zxhBKT&(dHnYWeAo9dd#xvzp`h2K zwAq26*9^U3&LqZ!)KCcNy$BjO1O*MgSx2ik9$KI&2&bK^KLnywwI2e)&bWgtMxCp& zK&TX2+QvgoJJ)1?7r^HY>Zh?Z{YSox>-Qgw(On!_oUb9+9^7X;_D@)5I>4+k8@e%! zjI+k7LA{%j^b3F?NmYRRPn*7lHsYc?Wv0A>4Wf7)%T}r z1*hr_rw{v2HKt!88-QBM>q71>3o$*!i;u=T?U2*0$$1p69mV=XUSU?PEPuR6`Uu zPh|Ng=Hgx(7GUZJdPAN9$BT6jNR&$$BYn zPJRP`kQ?Dfd%xfM-5uWvjaDS`AUx-ji830ZML|#yewD5nQX~eFD)dGMT$TKqDJ{7A zR_R^YU{rPYZ>CsCg_uu}vQIgiPlfY!n4eFb?e*th(@nA0b^X_Ylh=dn*KPgN?N6gS z!ghmn`5BH6F=lePHX1)3b^F_Adt9H~k+w$QHUn1bl zL%BcF5y36ke=6XA))@bcH&lw;4asoa(`SHa82L3j{3-VGTZ{Dj5l|`4p7e0$Pf~M; zUMg^5+Pe|Q_j7ysB8C5h$Np88pNE5j_2h3pZ~GNr{#i=EY>8F&82hsi0F4>K9v-&u zj)c@bF4=eX-fSp8q`19J3qGYNIq46PF7(rgFuuWo@?hhTaI5kY3oC~0-aOwtWaxiin(ltKGx2pm{Gl49}_ist)iJqYCly_7oq}|;{7$>Hxp<6L_ivF;s!{h?o;;ffwZh}dk6?teR6K%&$<+y8W|9+Y87+mv)s1jN zYhR@-h5s0`IO{i9q+km-n5K+}#Oiww^^k%zYs_!<-1y>D9QUrZTD^~vDm`{- zG3r+wg;|ls%K2%?9*(q(m?qAWGIitPB7!XM{NnOiZ?5w5PU@Y~&sSGmm7U&HPfDvJ zIk>9_Ih(nQl*pyVs=lgA@ziDRJ2+HKIyCb%XquPU*Z+)^;{Dv_S7O(=R@}_nEco%c zZPVV66kjVtE1pfu*>-b9+XZzhUpp3_MmeS(%DOh+0pn^ZXB=U^;zrGyZtGi}*p z`o@0RS3~eS3oi1;Oj>Yopj`JGBQ9+0NY;b>6e=Q~EG_h{j8*Tg0-Cm?8Wbw5^ovTWSScn)0n%NuePK5zDp;-*aL~`Nj#6#e zBvb#p^7!X%5*r_VFcOu<3X-=>633#w;1Wuv4^rUXOpG@GUq>@x654oq^M{P<9u~o>H(I`oWH}M-wrW+81}%)_HHE$0 ztgcb!H;k0s?0o`Gl~GpGOw`{C`$TZZq8)viXjj<#C2U6DzHDKlJ1Km?H|rYff5U_T zZgnGZtK-6?nHl9(2b2Uc)$uV(tBmvsP zS1mx=MMICPk3(}DS-78Ze7SCQORjIR=6L?*%ah~kgr;2<{@~XGPjPEf`o1y=#1?(E zE*D7s>dPwJzWLQouO?0RL%v8&k*03GTl&I{&AlqvuxkQo*fKYpwmhr*%12!8x1tk&jiVA3f&3+q15_W_owBbn$~&mR)GqK9U3g^7$?`|L?rb(Syj??vpejKXoEyIy$;bl91DQUunW*8#jb z3Zaorlf88DcFi?KhV7h?Og$H>Mz|ur#~5A}ISQMvb&Ea3!MK(jQPXgJ6eue|+lz zEEXB@n`=th1rGt!)u)iA8AmMEz$h&;6y@WOXs43xS@RSItO*uA)eiGm2cvd_Ps(2ip*rQ~8OfSS4_@FcMwwkU)EfE~QRP2e`q_!r zJLf?^*Y`&0qA#m2N&|)1(aiZrb7M(PlT66ytU7#9k$<6k-xBjfcu%7CK=Y>z1U{p;%P7=%1er z7(03}GQ#D`1H$Sdj0BO{<&<=mdbo3oxh3};6e**lw3$uonnuC=yw|ZTY*HfxOI0s! z1tQ)drRF3rcX@oXOoj2w=hu;9P2bC$I#>{--7^3set~Gd8%4;zN1cnpXq*R8@I2j4 zJQb(KLIAV{pWt&RzvvQNwo$5pAU?1~sOk;QuGBI^Tmy8f?C7m~%L?7C_<$nsas0cM zRaRMvA^q~>q?(pB-T;ZO&v;K#zqhQ5wo44Vm!Et*Y1u&DN{j~co@SA@ZmP&ij=w8E z%@b>q+Z@|E<&_knggSwCylVR(hGV;<8t$?I~; zadNx#x=_XMZ|-y(IG56!ihNgN@7hlDWo5SYE3PJM+Rn-YWOkqNUH|yrc3$5uv+rJU z{qtnu+-gVWFqrRViM0K)PZoLnuHt45=hpsf0P-}4@6VQg`_)vt|M9ypZ-`6#^};Rk zvYQWc^sfD8T~_w$dj;mKrv1-;fb7i*-|g@3?U?g+SJ`;CN)>_#>cUna~&n43nG*%Ru1f zXX2J4@ai-1su7oO%}XOPE_5@2(g4EsOu~Hx(Rn5j1_6g;!3i0N$+L**7)V&NNO&1Y zMYBke3}h-tE@z;r&!TBt zqG1Kl4l~@J%DTV6K)0Snx6eR-o<)ygKtLF&_fh03i{wEWA4AM9lott>GbvT%z)IQ7 zT8u0P*(~OatTx%KPK<0G*=+unU|PUEG$TiHHb({{XMQ$kIU`qnHdh-XcV9NA3Yu~| z6Xf=Elj;qlzXecunMoxZtcvExUBSc85ujrdWX%!eWfBt2!3ZIlgjJY?>Et+d0)@?) zL~U|JotVTta>V?Z#KUsLW0)k8a|G2HdDb%-1m$=o`*>AQgbH%Z)GK%sIWn^=gsVBo zeJ0uS99ayL93)qckXfEQS03{WJ6C~Iu2Wt#R}smqq>`(o#jI?Qt8C7!Vw0<4vnu0Z zC7>?HoWBAreI`ZSD@W6Nqqo;x zhS}e`b&Jjvx~<#A2(rbV+ljOgsH&h}i2^+QGd$=3o|2YeG@FQck5`!1>+^18=7zU{ zy>}N|GU1x96Nm0p!Q*vX&fPA)N5BBRwSWwJ8E9eJuwr1ny$S2xOdm(^@Rm8U@FOm3 zhIwJewtbj7Yq&RiW)OQsq}>~GPP=UO?6mdBwtTUU{HS`nXcY&s3HH3H!Wi>yw{yE# z&LDmRbX*K`e05H|3TV@HgTTK4)Pfe0F4{=kc&%5I)K{!oZ<}nx@qXAgRc}q7SK-lm zu}tPxz_4Ok`4+m#KE02lnv)&#k+<;Uxphb}uvTj`LyIf)eCzHwGQA5ko$|9hcCuI< zB6+v7k({~eoY8LGxdz2emYmHt#rbU|A~W&=-kgNgmTIC(MaS8my!OSMge3}F8ePSu zgrz=H#X1YyW$VQVZUq_qU_PVZ3JhnZ8%q_Wu!^M6gterveyv*Y`A5-`r^_4`dR&8| z>(89*>K%6K!wMS`*c%y(8wEK(CzpI4Dr{PCbgt*hZ`)~BP?QO>dKF_8ub|YHz1o() zO(@;n?i5p!!PZH_T}JKb%gC+gZQmnmEwqWQ|n_s7FzU{LP>utZ?-pxDaUJ@*5@o;!GyHmLQ zyr?TjI)57v6ex1jJ?^2EsI~Q-uymr0ZE~n!(!8v~g9q);V-&{Imr&N1_98fY?`b6W zTy$%K?L46xwXa zlJO9#$nmR`!&|J@OtikI*{++|PdM@Fc<}lK@&1l1H^AlE^3L1JX4%d!-(F`KKt8W+ z+n?>*uN&VFA9}G*zP+Dpb5P8FIGcZXY|}(?;6i<{$jG-OstCW~eic+)xR1ZWxJ5y? zhqsG{L*>r}UvywRD%OK4v?D7v5}bR|oDK6UuFCn0Z5*$MwywwX%&VQAHu3&RDE%|c zi%AIHbKAlAKfmSNzLj(U^sfU>^09!t*lY#Z?azgv@<5y|pc&h#D6cxQ{EV;@GGf&s zS%zb{brDnn<;wF*IGjx5H^_FuEpfqP+QIAQ-x+cym_8U>a3<8w-&=Mf3Row)c7|W? z!%1CSjj4 zSkZ0_9NKw|T{fz62r@hbJ_3vzRI~8yosX}wKDF=ks7Cr8Q--^hr@5vPa&4s@bL3Q4 zxAD&o@zu5+*Dh3sO;z3Bai)7`b9-L30IB55;o`?B;O7z$;5!tMJp#%e6gt_0O$Atp zI*HAy$xTm0+}+sRYjnM9*wgtr-rY?+yPFle;nxTf)SQGa@JsKw@ceQk+7P6_J)j4= z5g)koU%0zsgh=U67#|kIsaM6T^C=h#66>6hyB{cCScwK7u?6rd|6&t=TFdcVILPgk zri4ee`VjUkD?mYT(tU4`7cfh9}9<1(swy<7f zNbe#WB|`d6MDSDH=oP)Ro^!GKiK(o;$d^|-0Rm8Wck>fly{MDv^D`67nM#AJ-P_zr|L=nJf4&ji@q!NP*J530cvOm?;vCBtV)Dz!?U z_73S=<~jT-?V^tErH&PXv;MU&`0`Z^U#XpVJi9nj_X)Pr7Ih`Ra1|0D2A#IBI>jp- z3&~#KJvt^1Ip2*IeO0reFyzBt#@*!7jR(;@wicV^_r%BZdh>7M8uhD$JJoY z-KV|5kiyMq8m9l*g|^C~%@;6F*+|0^5+$hrSn$o0QB{x`Jt z-}(2yx-J95U;F*8FrAI<&VJ|R;rXws^#3>T`~L^4(*Li!y8l1MU9v&VY9UUJZpPZchOMv^lH4!x`G_KLR^}HTnaoK zq8#iT%d-|2(~W@jv#wgE;=3e~C?Z9LGN*$G=eye0;Jym*cK1nGm1+ZwScmP!6KM zGzS$C0rg$rcOj%9CcIBVNJmVF_=nM8BOziTg)`pODw7e@lak&iC8Z_%f8@V09pq#T zbH481?y>9&xZ3Fff|kXR@JXdBG&)BEsh) z&E+J`?JUjjC?#wqAz>;h^GHTsPf1;0SI@}6)Y8n-!PegCm9tBLyHl9=%h;gTN#TBZ z@d26fu{nRsdx}41R(;5ai>>Yaq?{{va*|FtY4{*}ik5r6Y<)FQ(0B*O3?+TtJG;xBMv`cKTx-lEQuUCxUm zPU@16I`Vb~TBg1X&5n*w-_SuOiNyEm}`1B zR4jEzkaCG$iZSYS-7RChXleZ0ZJwj&aoKqC>zf^gM9?aGD1&CKp0M>JwfHw*E1z*? ze1|5yc!2v=<^02|%+(}yrC$cQmbq!(R|y9|7d{E>eE)=<62|7Hv-+^Ohwn26s(u#7 zx?+ML#x~zQwk{*XCt@lVWB}(MZa?UIBS_b_D|UWW)P4WG7wIKN>1-|Uk*w<5bMXmz zy?UYRc8Sjq_lwG0d>2H>8blL7>oJoUFgTf`3b^e+53v4}Co?w#k~f;Fxd|5#A!E5w zS=7-JE2sy4ax;n1Qr_&VaY!u2`^<#rVdOrLO0u8PvaA%$@sA9s-mwm9Rx2o~uSO7s zBmns1;;%FWAF#ramRW3qQ|@x|O2XL)WTGnjC_Te)pqckAZS|X=-w`wL)NA1_9qJG4 zh1xP_1QTY#AK8s!v$QkB24!bO+i!Qi9;)`xJ?Sn8oTHoPgOby+K|Y&*Bul!hlE z=N8BGNN_|`VNk;q=T9VzKew!ifXcG`Wzy;ed)i#2@s`JX8%a3Zt+C*?Y+k|@UpfAG zNo>kA9mi-hKKc6{x!H_{5qE3?)AfLNA2N6Q9w!XiDrPLM3}7qJW}})WvI|rhPyHp{ zFh;Ro4#*iL8_PjPlRvW*J{2rxD&qs9ArbU6FRK+D24+kc-wq5omBlevM??#ej>#e5 zf*oi;3TuJ=(4cZzL}xxkI_?MP09eBG9x-nMB;wAdeMP{J$eF@#IX}e6BKE(lGDc3c z5KZ42Nv{muu!`~YM|)llcHn=j5}(N@q2{g`{E@S;5`}xZI)ZKSS-UYaxoB4IGcnmO zBnZL$tdW2PIkTVA9)qZvtv z)ChUm8HTCo4JOJ(^u7(Rcsjg`1Yv#O!CiIrKZR_5j=g1$sh0atfXBH5{l<_MR7TJI z>=s`)?i7@LKT;;r<<QfZ2(7Fbs28_&P-Go$mDU2@v@o^cVJb8i#8p; zP5t}}K+px+o6jMML3|?MDwOdTgDBcWSV_@cUSu}>|=wJo_toAkuqYxJSbzH zQ50N#x3Zy?G|9ChD_-zr=bLJ>FE=gT3$>B9Rqg~RW-Pg8=5zn?QXJwN1FI}?f=19x zx$li4bp2HK&EP#Hseb05pk1NZknh$v!4L|tQ9(XdOAjSCCH zu%4%rag=KjQiCaMX8FbfTj{nEuLF>D#@Lz_PwaEK*S*_({} zTXLkGnu6z<>ip~a*?uk9^3(QQWBw>_lQvh6Y6i}T=K2$;v+^Xv8#s5%gb--0t0V%& zQ$|)o(-Hvh(z7dB@z@O%(H%Y~m`>}Fz&W0CKk}ew7y03K|EMMMTXkcF?ZUiio)Xp&Q~u$rw&45K4uD z)5>^ZG1CqN->-cZXx2!K{FxNoAQvY*AdbaOxhZE>3MIO^17O;+<${8jNGZEIfx?23 zBIIj9FB^$_wz7kt4u%VGU4FG&c!>FCp1LmDO!ZA;0JWF6GAcIrd-$wJp9S3#5uvFt zJ# z_uqDHq^^IA#?;pqXzn?fUeC@9*Vi|E+jH`{o?ASJJEsX|xUe+}y*~P?3VoUR>85Yq zjumb?!$aa7o+ow?cJX@jXPqhA5lPwZ*@F4#hR2u0`;MAoZqTJXqQ zk(Qk>_ELijN%hjx>?hap+kT8O8Qm+PkQGLHi9ti*{f5K2wNR|jgQi+8?*h!$s5gj) z40$O7!f)0D`#*anCc^zsT9jF0B}S9T4nuuDtY6Yyd<)HR-`VxuLK;d=ymLAUN}T(} zK_oft$@D7af#0qj(O1vPg|p(P4;D4rAC7b~UF6dguA8@u4@x|{sN1pHf0*Sn{|9;6 z-raI&@!-Z86mTBUd|#9*!21_z`$do8hwUU;iEb)-k7_35Ns?Ie(wl|feO%_Jc<~y2 z^q*2n-nXusur<$&Se~}LTR5++xL%ZTemxd&bCN0Ry{oP5U58_SP}+|_w6}MisO`7g z*ncxER&l*T+IFF|A-yJ#adzHsF1-BJ(6;i8t<>ZiHsoJrgj(uHSsaG!v*J?kzg)SGW`)*(&S(@d5#4L}A8#yk$oGQti-!GM6b$#Sq%6l@DSGR_5- zlnH@BfgeyXu*Sh60hyafi@ld*){13nqBF94xyC>Z}KOqZ7K+^E((P6ggn*@L0`b$jv}xTqZR}^}~1Uz(3tM zoN`umq>&KG597u@6I=FaTc)X_LAP=-37N2?YOVJum=G{>{*nlzDs8V5nidC3g7fYb zWxyh`qB0fIUuztR1Dp`qNpXpm%dyLYq5w{~b!IFG2DlS3;!#<^!yI`NSfV`%{%q#Q zd{6|xoI4u&JsT?=4b|aBsNDpxnU!>tgzEtEoz(N}uZW!0^YpWGF(D>}VcvxiX@!wZh0(KxF;|6g z)I|xBMTsUw$=*dNX+>#GMIUC1s{4RCqu^}G;#`yBeDC7IwBq8X;?mjT@~h%X>XK^7 zl3J6Jdhe3Pw34Q#l9t($wyToXZSVsCP>~p9KUYb3U3nylWpy{J=L)g`R8gi^Q8!o7 z&Q;M}S0QMs8KtUW%~)2Wq#`a5=H_bdIZQS0bu~Xtji6KwK@`?*6RCM6mT+^8^jr<{ zx<-zs7U=`&@g}tz#ZpMGRd24rgcH zmQwXrTs1VK;HReb4$bwBbM;PmmA2{i&Qc98O&dI->Rf$DANe%+&NcX7H}Ix6h*mYA zO&h~}8Y6rvgG@<7(i>y08{@7UqaKpJrTLuf^Eu_Z{+$$QQu^nN>(80b>(aSMKhiYi z`!p3ktjVDv%}Z}8ziz6Wt17`GEu(3!_i1i4t*p5wsY`EeyKe4ySkb&g(n{0P=hIRt z)xx9OGBDRNyz_bJ3(42(mI>3=2n>> z04|GVsdOsd#6cInyjgnQdcMqT={M+p}C5Efb4 z?lxEPRt`qT-C>#uO&A53W@6=LVV$Ji?cAP2+;yy;r`in8!Ro0y0+=oW;ya+Hk~j%+ z)Clg1Xcu(|cZGsRPuyV}H*H`2PS+;@RPLr?ri5gcrow#`K!AXW@7^tuS4e*CX4{3T zarbyQR?vNIi-&h(j%J~T+!aLpIMj#%l@_p53)qyl!tFzUVr9Rj^kBimKAW#~H&Tt* z*L~tQ{l}6xiqaKvh+ao-7^h=JT^81(4;_*%ou`olXR`y*8bhX)Ly5j$;?vtt9R_W= zyZ_KsexR+;iSDlFuE?ORpn}81rF&gkz~S&gGyHF7xL-~=zx20&$#ps#TfV(XhkQDO zT}gHD`3_>I_pw&>9aDdeod0@s)d%}JfTpb&a=iQO-pfTp$6LUc+=IvJ-%dEcWJ*-b ze*Fd_XuMwu{Z-oDqEWeSMzT3SyjzNOVm5TZ{bk>*A_|aZi$CPU-BT`IfpPrGia)Xy z-2wI+_xHh!!eoY9&4yFIHl}|aHsv20;~tC~g&tphz4;1_KO83FA2qGK8%!QjA?z`cCr|8W%TkIYW9jjr z-5ygN8r0W25Tl-xU{Y768&f=7#|?{dfl}RXdqmr<^I=+&HeV>x*U zs((nY{4;Y!3rhsR&K~xr+#k37(^0(Fk@jaUb#9dTXtd+WeBax_mwxj@t@BM>lOMj! zkKX?|fFYP2fAVwcNkx|oNsr&p`Ms$hJS1~Je=a{6{dJ#YNoHZw@5>qi$;QWp{cl}6 ze~9<~ESx@RJ=!BadGhP(ZOg?^;@_>m0GQ@K--vJTFG8G}fo;TK|3&r!gVzxK#{&A@-n zC}Yi}ZOv?9%^b6aqFc8_u3MR}+xV~BWvn~2tvfEPJ7Lyc7S?S>!SXslb2Sp<_Z!}A z8yMe(4S&oAnr<@)xfx=<8Rowkk+B)swi&&!xw1hLL${TH+)6axO7`DMxdWowwvyXO zKVY^p>F$=2w{y+6^ZmD9?{5{hZI>==mt(f?n2YrC?P~L#djFlqjGZR)?b^1THq1^3 z-EJ3hSE?bi$A5PqV|S=+_x-}oSIq7x-QGBIuXmVa!hdfjV{bNQXSi)|0kgMAx1YGM zw`{(@?tceEy;{xK-(A?>$L#H3_K%SVr!l)n<_DJ<2Um1E7i|X^%mH9z>kr)_=;<~_WMDi(DP~eC>;0XTdkh1-V_F$j-*AasLcoB2N_!M)@%D2ZH zaLn0$+>>$4eS6G5vPVRJBK-8EbN^WM(}^Vgws`vq^7bTY;Y3dMR4MjQ=;^8Ir_&Yx z)AnIdTt{@q64cUelRpmHbh+V}31H2<^J-3noF}S0Emy6KUa#+f!4ws$LGi`*!0hQw|WmqP_ zw@sc6wdomvEhZP`+y48ZGpR2cHhH-v_xmkwC(OF>vSsY@zgy<^Gz;O9v?*W7jyyEB01H*ayXAkD8~uk^4pU0~6eI9MDyQPK{^89`Q9 z1v@v!eijD{MFq0}&LxdtI(#_2x6p;#8>(%n>BtqkE+i6-jk^Si>VUpU2~z^Jos2-e zouQ{A(7J#q02UK5QxL9J;$jYzSYDZ3J=eI0U-^xAB%z@3YGsc~%zYVu5S8BQzd($; zIfnlRV$j|G>`B$%(8`eU+g`O&>v$lCi;x~=wg+cEd`Hb+m)OzCn#C`w>xO>BQTQ;K zOdOT4*%_LNCGFr18X^fK$>1y+JS_x$)JUKfhYlrk0&za_4z8tjbQL^=s574puyv}i zMq{U-1#ES38KX(Wxx4Lf6{2V;iZJZDn{IEIqHqyb!W~NS%8ru&cGqs<-eG=9&C=96 z5M!a$@AfZ<@#RzRTlx{Imz({9QMA^@xj|c&lxeJ*%x0)76>SBeyL7@peEvg6sch?P zHQiUr8q4)O?NuXrpc9JsE_@f9n>XPsuZ369Z}HVSLf)c`KqtUWQLfG=U-R4ibnSAI8|XVyb@8(fh8{^hjkYjC z4VO+KiyU_aVF|{#8t7i4izd=uYCu$uC{)zMz98>hNx6cD5K_+l29%(Q&{cS+PPVj4 za-VB$>;a;zx`+4((7ZZ85@eDaudytp&0E5`$JeS(Yp?W9=Z9ZzygEO}Spp5k4^X`+ z{bXghG8rl>TnV>SgZLhb-^x%zRb#3P^w1@k81+ZVgSdMgl{*sLcUWVRYMcMrCSATu z)HXvMEgz#9g2@f(Lkho%eCK}9eA@p|Yei1Q>Bm)Vh@ii})r7CuRW8ZQ6_*8e0sUaL znc9>W5d=9vGi^XGk?q37L2em>70&5{U8Ig;*2kD) zKeA3f@0aoX>G|o&#?Js8q}NjTM&ZSWHxH1n*WNe$@N!HIM|y7+&=3D!De6c1>^1NW zUTu8Fk@Y=Fy}(=@jXaR`oBmSp#P8x)_*0wnje>Un>w|vTfIk--?E$y9I4A&ETn?Lj z6pf>V!p7Wdl!J(l1`>s!KrG_&xce1&PH071;YN8vkI`UykOfp(T!AEcG=xpb0{3yF z0(t#tC|`&LzO}d__0(vXSZx-~cn1)4j3#jM0)V*rl^Ds#A|5DNk|Z@Mv5Jnp(GIaB z%M(}TG#HCC?6D-TYgFd-7>jxe%AsHbU_h6nq65!T`yTL(MdcA@Drh=Uq7By5n|14&Cx5IB9C@WvF3gC`JwqaNxYqEH;*4i zLc{X^Fm{i@mHh4A=wsWO*tTt3lgY%kolI^~ieoh6Ou^X4l8_LdQEcKgl!pkU_SwZpZd)O4P~YPD{48P5EjBzBT9f5 zwOnWk3(*tl=?`4>-^d{r;`PJIA3W;+fEWqVGw)y3fgr|-7*C{7TqqF4m^hNY(o#(Z zf*42Yr61a_su_#(87!4s@)0GlzW4LRuhQZeZ@F=@^f!dBC(E?H2AEW33m&D?Vnl*sQ%k|HdsR z&avEAA-*0gxat})FuCyUiP|4B`fPa$54Fj(MoIuDbFF=G0nFXC+r<5BWh*tUsE1+8 zAyx7&ZGgUz^9vVrHrK> zDv9c+`S$r!q+0YhW)M{C@^IK?a3W~JU6&M?wTDY%P|zv{^|#f{5y4&*Lbr<`(~21Y z%s2a%<;woA3^lMFXbJt6(u{(+v>PN;3H=R!q$t2_Ko!n|K=K$!O>3j#$|sjcu`6ru zLdT4;#-3`iO6)^srXvO;mxnPg>8Lv2Hzk+T!jl`je^m3EhnuZ<{7R`uU5hs%-An=X z<-Ya~;{Coj=n*c})D3a?dVsXl*RQg9;r_Iv$*aYi>vs9Y{Gw+O!hN;N=8u%%HA(vG z?p{gC^S;Z-+7>C&!x*35c_x{_JSor|dG5bI=cd!toBBO!fkO9#fmjoYeR-*2;|ewI zdw&h5NBCh1W$@w~UKoqJ~ZO6q#kAA!qnL3~cTlhL)n~K{s^>=6cVE3q$SuBIp<) z`YwT1>@kRL<%n&lyGH~~J(PeR2J64RfAr=2b2E1@shOal5hIuCyP$J?8wng31~|S& z=UtRwHzIg&0A7@~NFMgav6Ph8th1&#mrH=Zh<_h=vY>03*2bxpc`l@jb~hSK528&v z$l`#YTV2}5`LY)X!L&gxs8a!yNjNyc_BB-7(#ECxkoV?8r+eqq#?=pKpKVAXk6!G} z>o6&wUCb_zL9Wf4xG&AS|E-(v|Ouh}%f=6$i0@2N(Y z*JAVLLv@(%xv7x%>eA+8^N{bQV_Z<2fuLU(wBI%2f%gvf*7FcF(oI5_&mmV1#i+aA zeWB1tjBw8D(opAhWsdKqJCX0&li%||oWOP5*87o^-pfpv-{YR*$3@tWcY!Crm!&NL zNB-x>L)WL+K@RX=Sa=vT7lgbU3<2Ylts6pJ_@{6;q)Runcmz~%H*A4$CQL3|e>cK; zHvD`y(tY>oUNIo17^AiCF{I>U^|}Q0;$w}!a2rj=nv=1bgU4Fw zF#`xN0w3=wNQEFB?;{X|5*;59PpEeu9||5HP97gA7$0pI zAL}0Q5`~6foWVwXIJO{ywp0eN^IJxZF`N#c}YtcbV z2)P=glUL$Y91gr@V2ao5O7^1Qf~Q4yCQ~+Ot$WukkI7TYUP^o6Q!o8Wa%EGyEmQCJ zQ_`zbImc6<Y^59fazs&xip7rIPr3wVZQkc$S+mDE&Wc~BfM3@t%OJ7A-V;tw;XD6QF-Jo? zC+b8_0+rW7fzg82M2)e)EWF&Jw#MQ&j(YPLO}!ZP#7I&F<$35~Mo?!qm>Ou4 z?~5LgTILH2j*wH9uB059!IFR$X!(Q6Vyocuz$M{_MX5}!{W2}@2}K`QQoIenR$VTSqELGhvc?vDi78=VT3`;3+D~Z0Op&Tp8n6n8fG%2ntWTGo+3M=U; zD~W|G85+x(11pXTD_I*0*$*pHkgK^Hv%e{HXgOB%5oZfDbOu z-eBaiOM{nhXuvEhf;uUt&W+bntkrRR%V8$1q{!W)Z>@J-YYtf(C!foiliLdRZy8wY zSol_(3Bv9XL`)sfv)J_Wfkjkz&H@f|SZ3&If&&e76=vJOLjt-$5Kv7EB8Qn<0&xUn{{vA(deaj>!Z zu(1WXxsAEGL$SHbvAHL)xv#N#V7hszp~p!agjdrIYBGLWDYw|Td9H!lKEHV>0DJkc zd5sBsjk$Gu0dvcte z3lnsgSg@Cb5wOdk8%^!u4?PWHO%Ryx4?@(rOWX?zV-Szz0TLDuWFAKGhy7_%N73Sq zkf%Z5w{a0Y{1LQ`C<#TW1~FchMde!31}wy#2>b=J2SMX8r>WD(RNz7V1JloeXB#Q0 zjDzElAxCY(%h^j}#w^+mQOOhh`&a_=IQFM{AjY!^nIdQ}j=w`~FzF$LjBo%QYCP+* zOi>9$p8;IjIyQch2@!#jWkawzK_Cwfva<>(?QaOEcv&M(Gx(l8S?vP?<+#&uh}if9 z(B%Y6GfCY^Q{b9+6D*vRGDtosqS*6KS!Q@gPHd2p*fLKDiv1wkfJ8p5A-U~DZI@)8 zNi$mj67iFV(V%}KVR~}@FC_me45i#)1!4dDV+hp_xaAg5hfTDK)?mnR#IEi`@9Z91 zL6kg8h_Y}bC4UIXWq2hIi1;Q5olCfS;A2fcgdJ!^`&C3I`%R{%zRZVaL9AZ`wTM?Y#v%$;r#mkGs%ge{hE2yh$tg9Q!t6R>i zJISki&8r8qt4Fu1r_ihC)T@^w`xmTW(PtaJQ0~{zVb?He*RaLcaLw27L)QpP*N8{gNKe3Nr{`G3K{&;;uqcqK*EY<@IaJr@j?3VLOS7=V07#YNbI#)& zj$<1Y6iD)|S#Dkxa#dlvSJHRIl6VkfdeGvU(O$a$ zTKs_0==#2LuUpImogO4694sc?M8Ep*cH*ip)C%p7AL#HXj?zTS>-Hw&X8Oqu{hY}e zlF8GOXIY(N)$A5ojxV|G#;TzP?*I}Q?nZO#_6qvs;NB9@LJI>hzzr0JAd!8NC|RYn zdV2A6_YmSv6@joahLGS64k%$v<$c7M-p&d-(OL3>q2&>49^9)Zbb|La` zp>j932XUf$b~1ko?Rp6Nkq350<8!Q?14mnIUS4ulS}Igl7S>o!RZ|i6S}8>fc2`;r zy;$?~;-M29f$b$O?2$_I6tet8aq9l~@vowNH^`{`YE<=rvs zJxcrD6INgUgQ}S*FJPG|RprekuA$({Bkc1z^kPmLhZG>pUFPjjzCQ{ref&P8EuLs@h z#%Ebg8`E$z>E09Jz7oK_{E3H~4#omx3)w3+%_XiH5Mk{fPW>!??HefUbv5OpH}r6A z-@+6B+`#3*km$#4|KrJg>eZd_bm((`{>L6@xB%GJS89uE;@)65Y*w3pKnyf0)e4K7 ze}fpuH)O*=5QCMRU3NR;$G<@g`E;-+6mrWu%E@26?ziVBcU054#0q)QmiN@EDQwno zwx{g{w^?-zew5I0oWzHwg0RvVHPl3oAGSnmx(XR;GXrVg<5sE#44Q774(Emj*s z09_ysFidyXAd5$#SzQ=PV$xqip$+h|ayarLkCRmkMrisMi1GS#cXjnCW4uR!ls^r#jVGx?#v3GIZQ+(F<3%Ugsj^&GJ*l!iPyYciUZ`>d;CQKjhv0cp z=S9%AQRm0-zEWq~^uAF35~xXlF8FEHMpK;S^$&=_OIsQ~%L4Vw4l3O$Q>wx+>{sC^ zFI{EhUl6196wZRsrC$W9ybKJ7zIFi5`(GeN{RHnDeZ$OO5Mx2do1tmtFNm?>C0E+K z^B2T8$na)tJNXM@><6wfcHI00F&tLGm zVVmSRqpzIcdwXY_=6xdg3t|Y|PD}j-F%YOWfFOpP@70{zH(!p$%c=~HrSIMhc0l+G z2x63me&<}Z)c0*#wQcuhU$Y+*aG!LX^X1y4Tgw81815a-TLJKdEZaf&e$U+@WS!i5 z>h>Gl`w3(fE&D0okRJEatUEnBlAVDd2DUjN5X7)PYdtAVi)}ltbe?QGtJOkkKW}7H zY`#uQ%X>n zsL~Kn1YY2R;D;$vsaXf=kH3+^-VL~Y3Uutm=?elPlzzZ|rjlRt*K@1DDryIU3}z5L z_osD1f}Q)kdlOS&fC!tElAy;4=a8yGf*-JSgWsubVr>`jW7=G!gc%6G&pW_?B=-a_ z2BBjoH}`UG2!}G+sNuu<=Nvb$rBO(`zE`3#UMAU;Dx7Y6st5YGUuej9`Pg z#aZm8w3(Otapa~W*6cI9h*g><1-e=-6jCeDg z@-FNM2IW)f)|@az+A$V}?O2w&|E-cyYE?ik?-9=9b(3tHLB`PcvkLA6H4;ib75fQC z8lnj{;8@Ndb4Ln-Nv9WWMNF8TDPRii9t~}X-#k;>Qb_?t9UXkzFcXD#GQ=oW)T=<8 zIz<9PLAw_f%e5a*X5|mI&P@7pQa>Nr3Cy70~`pw3{HcXAn5W(Anf~ z*iJ-blo7zOgm)@RH$h#og!H%)g{V*PcjK>0#en<*+LL10 zS^d@94Zeb57}bATFqnVNKus4d)l`ZJek!w=Mo*bgM7lxNvH2-~3?o=%d@bNo?*o6kzh2E8l#mYyNZT%jC01 zxAijH-1+#2$?vXw>*Kb$3jp|F@&~8i21Re_h7x2BM6cL}WNYa`@?#Drqu+s5Yw5-6 zWDaGk*gK|5mL@hmRRSCy)Sny zLxKR7_#pay67<$#NkP`cq>6nCw$>3L$*QD$`U4uZ)=|w)*3|ln0|sZ$;e>%&*k1ZW zmZa8kGeNeDxr#%M`ql|MKek_c^hZ2%t&?t@Y}t1eM*?@PQ+{@Av0sz-gwWfjLj~FM z&?}E6*xF`d{Ti~Ib${a)w?d_MvKO&co+voC&1D1FOT-vXRg&7~iv&5!)GALk>f08o z{5UF%8P2{Y;Z3jsVo?eQ-Yp5P+m<>395q1<=Z5I*%Y%ZPbxD=yrflsilYX2H`3x79 zYVE6wot#bew&zN5Uk5=VS$=X=UN|PT{~N@(bgggSxXk7(9w9IW_^&}^Ah{vkW?g-` zZr=g`xVpg^uLICKwxNW$d(o?|L)bcYkbZFYlQG^zsCDdOb#V`}**W+g;V)-k-2oM% zJ?5>FIF?@6X??H^E+A8x~N&FJ2KTv;)yhf`#U5S|mVgA2BjLy64&;J9&u+F{_p5|Rto3!s@+L#S+=e2>c zx0lQ0hvt*+Sn!>G9)#IL5oc{x2`0eWh9t3OJM&I<_@YV^T zib&oI6#(Ab@ItqPLSTTq>Q6G9-=Bd06U1O72ItHL7bJ#|{GT9(0pumH?jLX?Lb#Wu zk339x0RYX0-PY5a|MtG)e{~~#ji`@;kpsXLfhG+=+$8?L2QiS`wgH%1dw&RDZ~R|( zx(l<2;p!mYaS5v@^pWRt_C~gWJr`)e6|qhdjQ-#MKOjaPF%l^WRvrl2|1+*l2a~J5p zUu79m59R{0jL?Kd=mG=&1!C}Ilkpbi^H!1ZHRbbllJO7b^G}iqEanSrk_jIE7l>iZ z-?Yox^c(R|pMrPuMTV@}*N_8mfTL*}H_`||B7)WsK%ET6*AOIWM=s@7Amv9cT^A%B zOD>bTFI@&MTT~!hRlu7oCYJ{;KUg3?NiLu9ZxDkg9$e|MKnY-?6bR1a53Ul}$Axpi zMP8^%Tgb&;s3u6E&U?Tq4+Jp^HB>1$O@JTDD(~~STOz#Vi-IYvLH|zVjUX5f&T+ym>CHM84FUHNFEyV zg8v0E^orOB#LNi6&E1O3-6)v}z?nh7+5QD$um-XI3&dzEVxkUW8mF{fG_!pK`wL=R zn%SKO{sUqh+3$imV*LliSOjC74|E3F=ixAbxMmsJ&GVBQ!T+`O&xH~XjAP}Qx09~(7M9VszO~i3*A$SaKNFdLF}yfh{O|oWjvg(nmW@$=Z;1}sU5m950SSlR55YJ0J+%|)c7*c>r0Zx1`A5Mf% zQ>o7))vr2mzsVE1%Ok&6s%)rZe5>O4j2kl4Zyv*S>! zk}%0r-B9ZA#FE0);|Q#xNV_uThLU1I@aWJ}v(b|1+2a_X+VNUaR%d2|bP|t8Q}HO8 zI9bNXTw2Lknk0FWEL)oLNK0Q5NX$%zwojBsyN{in%ORNs7)dzs%Gl)+?D1|ZZ3s2_ zHA|JXTb#9Onf-c{eMzH&MV(7{oJ(8so6{ms^f*tmcPX`!A~Q3iE! z*>Q1GNl7nt>0}A;`zp&jE$gI=Z!7D06|KOdsiZuq+_b6^J#oG~t$L*$Ck>7L{+G!m&Yua&o&@pNK2kr1rkws_Sap&N1$s?Twz`DEWu)EBvoRHp@ z(k6kCK9Q4th483Pw7CD4c0lKZx*{)imq;{r8;Kr3{zg(RMoWieVoaSuBN0f36CF4T z#WI2auY!K%GwB+Ds`POt}>XL)qpV9e+h*_=Z=hOKDrk$Y8)( z`A6^~QnE5i(KcGAvUJsAG4C+e&ej^MVhN3AnXq)3)^dgNXhpQbxu|lrieaEEU=67p zda%-C_9CqpVmR^lu%rpfwf>eMD2@*(ZH48w;@S49`A+Bg&aL_GEd3t9BnPWx56o&` z^k84d^uWnQmUAuLIm{wg<%1Z}m3Y4C+Y(w){kJOiUizP976Y zp1iJ}22GwLub!a}as(Ooi|o~^>@}L~gFEdH?W*3JC_WU+J~o*Eu~mRercchIPXH5$ zS`mn|*;%#~=-DwS9r(p!)dgcs1!v8r;I$KH@fF|_LdhJmx{@wj6vyBiy@TO4w)l;u zx=yg#>(&-cnF%hc2d>x#K4%}k&jw)(SktOef-`-|u5LNKM!I7@cy-Y1tky=l_$y{C znSLj{(W7)UIJHOTyFm}K!mvKX&}RVEXNfaoDTgWr^JcLNbOc%%N!b^;`Hpx`Wz^v! z_(Gs;RyBJgmA9cgvg}vskN$wYEK5Q)dz|ndoco(hK<%$iW?3Xwk}xKJJSU|?dZZuV zWI}~xVov0Ar@$#R?V7AQdUfBdSkauFSm!_t17gA5V+8Akv?6B-vu-ohG zdh6&j8F15TahGoC*Xyd=0!5>GagJG`!~$+KjYMCwDB;*zZnD25Rlw4*u_Xnt4N;@BO3+%1OIjWT-U z`7IkZS%pwvojt3oqvUlG9y_FzYYHv9SrnKCA3Kwj3(7Odkfw_q${kFQ(S1hV79$&O zy2#hehp%FH(n}}Ane4L22NRtfNMnt1M6}#P?AofV3i)iaR(1Msg;ag@26JpQ;Ekn7 zt}4~HMpTW)OSC3j4<>3&ruvVfnLTFT9`NtBpyG%n)bphLw>oY7_;~sD--0)f+ zCG%W$lGu5tA9ok8WrrGdrygDx9}YGj+IX!T^jY=oS^3)U3`v{$-&_QcYhrY6&Q9+@ z={QxX8dZ<%Tmf9gYH2K{L@sW9U}j-0)HR&A4xHkBwkQ^j7RdGKshrwsR-SO+SX%^^hGEirE~ox%3I2sHmEiz+IJd>YRm|ZR(st+HYOV zJ(BENAe64dtliCuLEW_)*IsYMy&Z6}xxCEwScrP+>zcjiTE1?15Fc^dwm%@+vvIkz z#XoVPKzrz&H9FjJB(^&nFnJ_lKMII>fR?j{G}oo@xrNF-s^Pn&g|!q$iQ?sgx;rlai;LW$h^tlm_xgjj^aFVf3K60y_@_fH*wFh^nxN@Z= zVo9Xp0i0lYDaAPjJy|;+)h81@^vH4*7<;Dba~1w*DP(fN^M5fDYPd1uzz+5D`~=Ua z&xOCNMD6Cr2^R6r>}jlil^XMWnr-%7a`QVo_xs^&zs8Xd<-vpOfr{OtPsWYT)cTu_ z>x_~&naPWmiZg}J%Q(ofz?!Gu&7)AOJ-i&WDeA?Yh{X`Fhfv>ZD$r+1h(}-&Do;fR|*0 z68}I{;D9k-v2_iWlh4NFjRbynMvhx1n{!!l0A9KeQM>m}Z+q<8OGiG__?<(%G2_G? zfbZkg+Y$YBQivt!%_on@t=HZ*U#k^c-_upjOGJ#LQSH5u%Qrm=6w3Xzn5x>sefO%A zYH^5r#QkIB)6pjC4@dih?N;kbvrE<3dsXH^&fDt*bbBHfOA`3C)7(do)N>uv`!tu& z4F1OqUt>RX=XUiCp0>}9_1lfzxku1%I2{4xbr!(EO>6O6oA(D?(4R3KKaw>bJ9}rj zJFeBY8vC&Z|0Vu_&sT*m-^nwV^|z~awq|8;Uo3dv`m2u+u9|Z`nhWFRi!H&+ZyiNZ zFA>I#SD7!v5te&H2Ceu)!r{1LgYtMB){6~lE%AnZA?L)B$=ob?yl$t=X7eool`p(; zL?WT@7O^HWNmO!)YORT;V=3F+zEQY$-xM;rx;*Dvlgy{G*8HI`dD*Es^Q96f1*~E$ z)r#fIzm{{Rl(Cm<)tddmi?Pw&1T82koH*Dy`Uc4dWFmq0+X>)OF?f^)1xoh4!JY(s9?vkO`!I>*O5HHz77mC2{IJi@eCh58 zZdwPj1QZ0=LP#a2k)Bk8NC(Pa4!0w{+2NxO)P>ygr=`d_8M5W5^K|wi` zr(@CRlY7J_Je5_P3=$)HrJUQ8RS{`6iu&YgL0QDh#4AF@(UcH4@Gxa41_#u(yyyls zENwKZ@eLPLH2b}D5$b?5*;JQEqvW9)$OBAOm-VvgHPdJk02>M`Tj_spN9k+#RduvG zD;8Td3%-%Xu#Di4MYGL8DDmHp8(&R4T6Kd$6CPHeNATSd^hFCGTlFakfg-w0gTZrP z%s^uMDvL^yG|H&LH{TSgBC=@6swwb%+^eZ5k(YHqvvF9v6sf zkJlFpCsk{g?KfC*S1}qF&sQB_%?a0i2+f!`13@;wv{Fg5RBtJ1!e*T^S$?=VGw@yA zIx~q8WsT29af*f$s}Hqt{x-L)@zy~xgN9nW7_w^H`y%1<#J3$I?mkq}5#m8)!!TALAcHUwi0v8C|v z0>QIzgt#&pI)WagjFU(zLNulM-nJ6PVNaevv)YuiY`=UsCPvY<5v>VH)bnC9&ZcQ7 zd&Q1{okz>?xr4O8I>M_zb^ly{ba*ujX7R8^*c>U)*&v`{#Ta)x@yWaRkb_VwpvkI*yzI zw8=znS<2K~?&9D)j9Lwe(;Bp>k2ie)z4?g*4l_eE%s7Q#FLONWE1Gq81q?oms5~4V z`p*&eO;(!u@f`j+)tTfXqSBXAzvrMLj)x)svK~y&>3f1X{NmElkyP=?z9RPTCf`?K z)1^dN6NU231ui_NhC~!|GWU;a-+2n3VduFa3R6WggQkP4ZX>_?l+d?JcQbKbq+%_Y zN_vlka)S)#qksZOzC|J#57rip&Tm6$jLxP?&c%@>OTwC-#`#SL)v`T63$@@P4oW`K z2{q~|t38Ms_Xicd=MM27&&0J2?*VVGPW4hp)%!NAvXx>^kppmA%k(hIzapB}n~{vZ zcs`UHVA6?dv`*LYvcm`qpMe1M&BqA0Z!5u9l5h`R$J#bilu0+N^Iq{tk_BmNJbfq) z4dGJCq-~1syWs>Z@Q^Wd&WqC(#&~w}kTZI(8K0CZ$`$F-=Oxj?cneI_3-Q*bkCT$L zCajW0M>JHuFe?l{Y#qv-vqIZ$VLsXH#20u~z!{e+aa=E(UfGs56tvP&$IJDebW|l3 zN@B;=OWhxiXVXNZGyDs_c~;J1W;_PbEg_h*Zzm{NMpF>3bS(4Cdrny7QjA!&7V%E2 z?pt?~X)Mu)@_x5KczFe98cZKbt)_`4&)>`NW|2%hm`QUZ_auB}ko=kCgJjYMD*}fngq&hQ3S}CTETnnu5V?i$KZ$GZDk+0SBnA);0_?LsiKT&nPgh4y~cMZLMHls~fP z>knyghU55$%qX~Xqv`v_uUKwEyN1|C7%5|qt~Ns1pvXg)9!$%*j|OETYI%#vUpOy@ z4DxC(G9QOaeF4t?Y&;fzSa?0$a`$=o=f^antGtOtE+GstJNtDheVLn6B6*n{ajH-K z1(TO<329cTRj;0*5;pgvZz+yP8H+QyGy-KR`&KB%>-Wl3aSJnFJ%^3Q`W2aU!dK(y z*zi{X9&!qADgb0`xIUbAO`C=gRAlQRvem~AZlTl*WG{ZPWy?WHp;;emFK)8+@kfq^ zp~|E5KC$uJV|(k9msR1R%Zb#G~sVLNA{c_SaoB0<$3J=YI8+#IOVaRSE1l)hHSPTggQ7BXLw;de`<0G#VlA_ zHUc)4x!EXF6S!ih+rJC({bFYjS}H$0Fi^@(|Z837Zc0q84f~x(LD*_{z#YG@l<@ZX_>59di6At zg7ac*&#moiiT&>i`%93j%lPtCnAleS^KH>+lHRK-ysG#8;d$ao1M5c;S(R}4HOUsLt=EmBnnQ-2~#L27&fA<~Dg{6_&whj>W_PMlraE?j=kad!`(JAhs> zp75E8aJ2U>)dn$z;m{&-IZ=^NGo+{vnn`nt5$C#-5#{MJ{?X!;slX5gy6+Aw;mJal z1B8qVvGOg6>Rb{809Ks3|xYes7KLE)_tPYX!EQh=*N^n}vz!-BEL(N#D}inX&w z>xTiyhrfxodvQ$*fGRf8q2a-C+}Yp+S5vv|PCJ{dilr}~6Bo>tQAOLb?2yzGs>Hv}MnTg5HVOU51axg2J=+BR=MBbzEU^Opwe}40Ny)VV%U}_6M;UW`nSi#^HLz)=A*y4B*QN;9aX=S{6ax z5@8MoZ8#>$611MgiDKTILqP{`=(zlHk3z6I(YP5y8&q;`#!QzsAlsIhi(|`4RQYP> zO#kA@B~#1wq8I}b_a0ggt2DulX#atSW@LfN1WiLvKlW!^&O7$>ah0a=yuw6#j2)Zm z%Yuq;a`hLX5snn;+`}6`dUfE(ld)wZa&#sNiWiGez5-!I!cv3{nPY&i7FW55MM9Ry zl)52Iy8m6L{b zb{{8GLd;W!W1>?ThQ&rp)4YS4XQ*PKZ)woZWt<*;&gwc2Uanp4$RzmaWDtJuw6z{+owzX{bT*GMqK_?C96(A=ngz>cP+W=}FdeIBEmIjsAp z?f~74{(Dh|MZpA?Lr?B89}n9!iZzmYKRGiXuSTl^Aa*_7{=SdC+N3QR-uI>Rf?x@Xgf$lMioZ3<@ z+GJWmZE~JG!8Qy_MS0C;X>-AO9OlIf1{`BJRT_q^X?9&t>{pAfXZN&**h({1_SR4K z=6Ak3X%0&Z4kzw?C8-G6V^$Y%*3c5xQEApu3)XQOs`!U!r-n%HJ49Ax{$l+ff?7ss z%U(PW1`G4%*6Ma$R2Jw%hTpL5^_zVkAAM|YvB!zih^vU=Sw!3us~ext{Mh-1fHk-h|>zCdNN%LMJ=gB;iNF~)Al-U`LmiD zzO@*>#vT|kd{~U$`eGBs=<&N&$k?JjF|xWM2P*8GFkTh?1|o6Ch^AI;~`B& z#>I55+VsfD_8A6~w5RCW5ToG9|96Uk1h%moR?41oiaCr0#dC_ZQ!R-4bEU2w15IDi0~T=U-_ezxRmIH&&Rb|bsz zaBMAb^+Z?G$$qhI(Jd_u!7bveaI+h-if@g6dWwehl7q#wp?VO5NcECyjiqV}==$ny zot&~Vk&?OUL%bOAJHyFBIdZ4AjPEE5nWx;+6;oWqrNsCLWkoi)v{lb4-zKEeV4L3Y zLgIvnP2}7UOf>(s!LPNrE{<-Qa)p`rIB{2Ar9+<8-pA@)8cwr3WgO{QGHo>qc;%?y zWN))$J8pF|Xw~;^i80Gmlxjxe~ z$r2~{S4v5-x61`iiiUT}*LLrhbXNt;j-{Ij&~If!DK#^E%}QR)NezD*B@+HX>UQk? zZYj|fuN45!usqJMyW8tSxg@a5@JMM_F~;%C%&g4u#*+AIyCfHm4C_tDTY86+J?NQl z$m8QZFD1mQyA@_Xm*!liZEUaAr)4-=%rD;*B0mnH&>^NPshdX`Y3Y{xJ-8d@99-yr z4`T@gGai5NQ^IsEW3cu9Cw5U~wP&)3L}rXv6$f2UA8z%xpTlD>J*K!>Ea^>%|_w zLVP-^gbwqt`Kx#4?IvF0MzpfTcq2+OBH>peLACn0evN90An!hHQD*6O{1RXk5Ihwx z!aXL2*cnKAaZGFd@%b%=ho_-*dQzs<3;VeQm0(!w+wjlTb_UocviE9p$+F_Mkp*|l zm<>@9$>})0cihAqWxbx z{|(drmrx7bf&cHI{sY$j)oT9%YcUYv|3%gQdy4>%fdG#V4~Gs1hYbh!<)1BZ|La}lfWYlv;}+#_fWYm)0%UFpfYL205+NG${|E{pIxwhT(9sBh z((OOk?H5cmVoWp=Of*tVRA9)k(I~LdDgOqO0vn4Q8n~CtRo6ACk%}$8JMTpB!ipNj>SI-ruCJ~~c;HM@RrXd%jB^Re5lVT=Q z1zNd4F_(o*ot@$v2eknMlMx%cjv$Y+f}ps%q@1a;s)>$~vu2c+=$sGVKZ-5?e-zvQ zK(>DWf^7d^itXipDYkzJ+kYvx;#d9>!2F}t0;$@6wAz4wgSFQ{vo=unFKQbk_fO<+ zf)#Fp6>ow0H)IPWZ2uJ?VGG1-Rqw)pa_v8OZJ5Sg*niC0NbUO+P_5s?`fo*Wq#mK@=q9vAU5F*PkMD>c0!BeN_st1>62 zCii!JadBr?$MVG3&fM(Y#>(;T=Gn!;_3Q21`}4=g+yAC;(P?%6P2p0?3)dP+MBuQY zHI)1}gw=MB1tk1jRWWIaJE=E zUp7m2!FU!zqf$>|)#X?%7W|Ld7rCa2m3k6$0C*Hay0CU$1wYv&!|SHf`N5w!(6RKEG6`#g6Wcg?$owUtWK%P!Y-%(P$X> z_(5`Q`b$wrZwG!fQtbqvQiNvucl~b4@u~g}o$2=;5Kaw;fRd!IIo~p3d|<2YjfXI*~3rL&V|ik~9>0oPkmW5g9Y) zx^C?sC7D_jWy9p@T4mt{DWFIzx!Q_lum{NwgFI;=+}YaO5rBgTDtCRSuZModf|gWK zGH9z$|;vupGS$$&`==p zYF4&vCO2EzqFFG^Zx-z}M1~fOOH&&Y!!`wcF*+Tj#;`)1UUcpE3w;S6jR0IyHXt_@sh7 zOxCi8zWIE*GQPVnwi;fI9I`z28Sjoio*fLf^^+NF1PAsQ^-M^t#_L{4GP4$j+{*!B zV5(EkWtcxEcMk~%d;=i@7Z3Wwd42#+U|{Jpx%-stn{x8ds&3bZ^IDuMt;6W0s?;IC z_Ve}VsE!eu@mZwbZ*5oz{u3OA|FVQ^YJ9hwZHhOp`wh7!tXxi#II)WidGV8&HIDbL zMeGs$$lp4i`z}0zdoF8?thMH}6F8*3yC~?4;H0BImjA-PHk|*m0vs8)5Bmqd3Kr7k z`<)M}buZ6VOBL^f5ph*pUoWFP7(c82WGuvd&P^Qp2|xWS-ywSW0P{$&;v*DMj2f!CqR^#D3poc(WS1`Fqagjl!bYbQXD*G7kb zNcWHKy)UwTDWv-W{Vc?>5n^*Aoz&6;w27vAfXuMA@mx_iYD8P&cWB;amRKnaBf=;U zE$naH$gJJU#LY%SaBo`i>xE=r64`=KeW_7A{>0h{W2B;P+(-y)f}+8&k&~`GbjN+Y zNr?A>!;~zPyGFzke(2#p?9MHoH0#zOt{XRt8eGM7VU6cNM4@Z#zcf^cWjY@ky`xFWl*|Q|bu^|&0 z?$dElAB-+EDszahtW-*K^6ZDuJmEV;VjGLH+OMnWtQvpFPU-E-v>HI>FaEI^Zjao= zoTcb6^cE zO&gsr;(aJpjww?wmR%^*c_`DKDAQ~nU8wQ`R=N?(wTEOE>oOiHEELLhmPQww+8!z$ zV#;-4>jFvWd*D1KfTicrrOwxfYJbEE18BMBUcASeaD@sZ?6KuR-pAVbm7 zv9--hO~fn>QO!u@FdBoMmSKe|r?j#4L*A#>>6j{)V!4e|ou{_ti7L0|v5iZwr}k~c zYL6kg&08Z9SjTuVsG__eUhzHbvBe|{D)u+zqiE6*6vkjVI5n9^+hp)SeYAbBG zMU9n&0>PnB+})kx+Ts*<_u}pz+@-invEmMGakt{`?j9sP`M&+{bH+G(jD4G{HP*^S zGT*tL>BJTYP}oBF`1Bj7R2M?PY$%{j!KkT%7)qzG{a){>_rs)9c!~;OLS*0%5vV>= zR$&J_+pFJs8eSdAZwJ5gX@EVxKDI{a9j({^h-5- zT|;8h_#UkgWQ0TW=BpFhKBFFFR9mDjHA7;b*%vZq3~~(&{ba$B4H>sqx`jHoDx|Vj zK_;By8CnbK~ba|h$pfghhz)rFZ~g5*x7ww)os&E?UTWYEJK z2BYY6v+vlei?U9qklz=|7VXN&`b-Rgj5)attylb{;p`>u^BJ#i^#gGPB?HcLBiv+n%bzYQS}eTZM{qRVg@c1PULT=i%> z^(XNQeBMN4bDLP~zN#2c8Rt2&n+ALEW`AxR0{i#FYcGf=^;f$WJdV=x z?#BrHZ-)$qj=xU5(q)re{{(lhyo^6gRKY_6KXk3eK$RZ%MJU0e53gfj(fb)Pqeoq^ z*X<&PMdN1Smer=inI7lM25R>yJ|A?jS^2d?8M^+}%HBiEZ&fR3=$+@@P{4a_b4#%6 z8c!gDYG4}JFM!W|6hCM`L;rWHzQCPfkd~XjY|x078(y0WWm^zEzxfPZ;NKzZc{;b# zLA!$m`_nRC>PG;^qCK@$h}dH2;DZw<(AfzPL|CEknjy)595eW_Z9_eTuNgW&+{S=8h97(kunW!B#P8UTf z9+ln}We$#_D2&Sa5DkAAMGhZbTAqYS$Ao~FN?W(Y|$CQLW|obp8=-O@YV zIy2q2J>A|W&0;y-i7>-OAj3^3!x)n8k(uGsp5eEg5uih(c9#(%@I6fDdxSumm-qMR z_V2OF-{Vof$K8ET7RXH1$#l;Ao}QVR)t;FHN&UW@SwNUoB#^}g$t>~Cs>saBvdOAk z&Z>oEg^py^31m0vWZN@jw`68_v}bEYWp_cce-q|N9cTCIXFf9T{cLECfJ+A~*{bGHcd;vl&@I(Y|>j6LtXllDB<%)B#5-j#Ry z1!4Z3PQIQ%{zGQ|^Ks^Adp;DBuN##QCs=?~nSwx+PHhZ|H^x0kWRkE^b!$xV2~vHh zTd1#-9#bH6>%^hXAOQM;MYUDP^%;Sf5tj)GhZYXSv>>JG=AEzraIXl6W>(0}nD#|S zDDDa%@wZR`i38<|Wu23R`nizZxrnJAh^w2zuFERcUSf+=$U{`BfPxox#n0-Kc2x)3 zQo}kl=8($5m9)i`vBhHaNr@I?6>l#Q6)cAR#+5Bnr}G z0n)ey8j4sW`$5puI{|tm9C~$*{RUB+y#m4x){AK%E*7vORGdZ-1jNCx7A$iJEt4+h zPN*xYLI8eoEicW2t4W5#Am^@@D6|@_6i9*V3gO~PgtPsEkatqn!I-L&Bq(yi5+{Zn zNX~_Q#d5BKY=eu@M5|1dC}P20y<5yWs*BwA1=(Y(iYZtkD+O-%3f9`KO1P~~qh{*3 zb=^#bv)Kch*GZ%N{(&L}OwNK+!eqiugjeQ5teOQjKl8HslqqCY#%uwbqmdG)S)*0z zuoJnZiUDTi@V0+hZJ*%~nyPS7Q@e?nxx@j9m?+m*>=7w&6e}RI-!-=?$Yj}Y)i}tP zU$F$qq1?%TS@DATTB5tIit* zZr^ZQUfFFIl~tUy8Fsewpx_NMHv7et>6*1@OJZ5eH`uKL_3AqG3J@H#;Y3dvt0h}; zohvpas*ieWMWcDxOW4x!d&bJuqu6;Ueg%FM~F%o|REy6l*RX-vae#iWA^>h`5$d&FwTO;CCU0Sov+ikG||ae2RK`p?B4`$ju#$ z9@CZjdTKh^l^9}`qLSROO8K^noRL|tHDfW0{t)XKtQDfB@E#}bCADg{8|pzk%t81) zjiKItd?;!)HI|$yWNjGW^WA@KIC(sOT3{rdIWNI)Br7Ldt$rlWJ~#Juq-Z=xony32 zKgZQ&w9-BsetER^b+nFntl`sGlm1wX-&pt`B>ycy$n;px>)3DN@!n74{rcmBe&fSA zbYy`b!`gzIt52EjUYUY#4_y&2k^uMeig$b6PtYZ z2J>TPu!U!E4QBBDXFlZ45DCvXZ2{ca@%)?sABAVB4Q6TmXX$gHvy9!dxafdjV13mei@qXEu~OE(QoX)H5V!KFaHUpwwaH-h4Q*A3Vzs4v zwQGI#EOu3}aJ5HxtzUTccP>t^!G9>+T>mxxq_uI9^;u~5(xd^-wD9^;?z)e`I;->g zkv_&V=EhD9MuN(ePY}lW)#OtFMqJ|Lb|OaHGyw7&bn?0pzl97T-+-uKm=~-=-!|{Z z*IBmL537q~owj0vHmr@OlB+f#K^PW6lb7oo4~ZCWZ|e{zBk!y2T*Ab@B-WQQ0`E z2Hq#`$plOuB<`J0Z{CS*%57|%#9|~kfjBRa*_3v9FOW%<_8~#L4#pUdTf3IfO|f`v ziTFt$CyevDtwTQ$#2DigZsS<^08$4!cEW%%1Yq2e?8?VaY6buvjbRtMv!lgj6Z4o-lWu1QVMZfX1x zTfl|^bn7VyBOi2_ns++-?U*+BSc>$hX!7`n;hvKd#uGdDQS8aZ+DTOWPNW0i2z@s@ ze)4t#D5$jGk$2uVaY|Ev5Ox7-yFhm7IXYZB2_(nBaM&H)m>h=!j^d6c0+7w)PZN}m z9)Ity#t5`1y26EJyQfZ?fhjb(JtpMRgzeN9QR z2Y^X8WZMqLTXEzM4&*>1j6?L=lc#{mSg{L-UnfV^#c-F%j`@=Wco(|A9usPAqb44M z$ey0Z?o+3A&2!B42{dtNPg)D<0q!f_Ue2A3;gd`Y}^$$WZ2_f2s z6c|0PusjorKbQS_o{4+@Q21O;_R@d;j1B+N5ctxm_=08f(zf|hTl0eX=cPyVwG{mo zqkg_W|8?oxD+mjy46S*c{<-FPHKU9*Hxu~Qe-4;^GU3XdYbuIeL zZP54Ncyh4-X2bsPs=NO;3O6(O6)hMzvkjwgu@1s2dIw^Oq~l1Xv(%5($`o@&!ih9a z)GJ|$=|Gmosb;M~cfh-knrDlIWI-o)nVRQQjo;RL!ar(V=y$lEZwzE>T^jcIzd_#- zYhM}nhNF`mbZR>5_Q#QkMiA@Vn2)Bh7!AgHT_5CT3I{@wNp$b5XG;}@4sv|9Z5C<_ zenpVzJ=o7TV@wX_{x1r5wdGvz$!P~h;a;M4@wyyLb@3vOpb{u6|1VD3FBYKX8 zJA?G$^AL#~wOkOA>xPajTI95eY?9|NKR8#6$bc&ttKa4hOOA&}GRIRvgF5#M;y3jv z2`m3A6=8T5t2}pd8(9S59d7`(*A5C5yw_TiRUYST6dkF1vM^P!bBM52o-B67-(|0Z z&xg5g2R49Mr2d(CVmlk@R&hNX_eND`6wXC8;mL5TJe6O~xYH~^A94~8>WaT}p6kY^5D5gK=El|LVCx!e2K-0HFQk{kAc@BURZPGzz&_Eee#F1NGOu`5`{IAYzOkE z9s!&yGreS2OAoysPcf@J%R`ElbEHJ*k`fM4LOF?-Pjj|erB-~)WS%3a%k2(X`FA+) znzfl-WTI1F92@YRUMS(`p`%e z_6_{MQn;GaAq4%#wq8zvEVut3g}bfrOb);UI-&5^BNChc4~5%r0&;JYBz>3$iz1m~ zhV%a)6s~;{$rCwH1nvqH6eM}p^uH-wvkwFOGMwo%u~t%MMDuO`2ZbBE{_z4cl5kEL z6ySwO`u|b5lz8oOGQ8OF9#@F3n&gqpg8!v(X?fZ|D|yVOxOO3uPI>}_{AN?jr7RdV z+P`QP-Jl0s7k+gaoQMfwtB6225!N5J%@c&KWN>MQ!QUlF-{}+WTWCIpr z{`y}Ex4C_STkUVw8jQjn5KuDn`KmBZ4Wn?|l{{=`bMz&wg!ToLeHLz$=0BAS-?u9V zJaBnjHmQAj6Hp1kSI>qEPZmS(P>JAm%K&O5OOObvMr*odJ%yD^^K_`jvtk!XC0ol% z3#uhITo;SHxB0Bmp_cA&UBdsxM&3g3Z(NVM3`ePrlDn-+b_1|n=$);~>GD^cH}$yv zX)xiqHijo~{)h5CwW_H3958LQ0QD zXqml7L)qDV z2E?(LEf-3=@$+>Y(ww>-hc0jPQa0DGUl>K5YC#O$tGB-~dr!m|LPa#X&;HnZ5mwDR z?d@W@ zi=|6y@u~T$n9itH8FQMQnFX__ca5$ldPesr%i0hD9#dM^tZ-Y)$pW1T$4Q24zFkZH z#mrI{L$uuUuEV4q9S)xZ*8-lC!)7?$X|M-<;k>D}6kkU{v=S;iiLgx; zl`(vhXU*BUpAqiW7K$fJ>n0eDgYLEN-FAlZn3P^{ z{U3dV?M(?*m-gxr$xs`*8G*eR9+(gHrNZBActBfM*DoVHyY_`0eHK?Y9tS;p?zXO!~&j-6j z;}rc)nTvjW?5*CDeNwKuk83>qkKWU4h;D@h2AooSKC>S~-Aeg#*%dr}=KdkL|IjjE zQ*ZTIkneY`@f2p)e)L&->~pWrAYn7+^Ie+Bd#L@Hd#>a8vRWll4zT}oq35)2b)t^k zF6*a6%}+dneURDxxV{}IN`TUXS2>QmarIvIwYe^wo?uD%lCVvvgx%2-Ws8I|jc)k; zLmC|3IP~|0<>#OyQDdLT?*Yj1fn9&75*lS9S#=zG`&yEvBi5$O9#y|CjcDQ{6L4QR zNmb#rFI@+vC5`L*C3K$+AU(<2n_%5~$$r4+h*+VRFiy%6uZ@-tA*_x?Q-~RA9=~RD ztvS{@R}s%u(ku^*+tQm(2>6Go%<0`0`a%d7=3J4{phGyp8G}HL*f@+M?F7EBg7fkU z10)i=P#}sI{*L_f>$NX`c`ORRp5bmC=1Tw3{zt|cmG~JdB2JK)vsaj)0FuSb$C0Y6 z^btZ=lMhROf4^*tMMnNX8V-^{L0lQZp^(CLwFbMfBX%>u{t^;+ehvcggU?QLDs^x$ z)S>Cbd-)`|X+FVWZb!e^>A?m%UF>JQ5UNa58{!ch688!MzDx;WIegyg477fUM~D#c zQ;hf#J{P;hc__e38&HHrC`O$nH}gRbOKflq(Jctz9*K{w-tQJ9CLIJ2td_iw>Xe^r zSD2H^-tAXPZC6H;&cGQ^RSGZ|>dDbTVPL>LXidZyRm*E}u zhJvYwL%4@SrG~@Qhr`W>Bix34#zQrBlLek+q~yY4`iEoZhU4~z>WvLmkk-j&kFp<`v?9VUy0f zlRK$NyRnm}b7jZ&lagLaXLpl!vr3z8lb6)W*6)>fVHt(`l$qeviNe%G>0Ff3Nc1+!V&Pvf0hlKcq>xfkb$gG6bIKRjFy9s*0)UH1ato_Y~-tWhkmA1^pxm^Fhe#)FD)g2w+MWWgc!8*Npu)ce!fiN@Q z)x7VAP-7nE{#nE`PEGTgsx4hjePK;E_UbLld9?u+ob|8j&1xjy=CR*><)WNBW>@D^ zK|14P^JcF`6k6=|VfE40a+O{@JYh0S)A9_jG4IyugcfP}cWc@=v+(k$G0m&6goiEZ z%m$tpIcvnbgtK(G)OF1Ql)kZ|#gIgmE`gi1UFWM}YXFhmOYz;63G3Ri8jRuZv`2gp zaV99)YE+qcO(7RQr{6n!d{)(r~pPx-y_AcjGFonJ$>iQrG z)y)>*>F!XkSPANu7%+t@s`3fXNIOwwHKS)+lvXycR7tCENw5eCDH~QKigVxg_ zF+<_{RcZRo1#6=d%VUZ$P|Qh2BX{e+|!0_Ae3F0SS_p5->a$2LL4_J{Os!m@3mJd=VuRMjxGj`` zVRHN(3fdh?-W@8L9qJxg(hCzZc<6il4@ieSGP~TGW>mak5+A|@olwcrr5jUr1@JosTg-m;?S5M55I!)gy4@8`?-0W` zFQ?j*(CmBF#GS$>pC_jG0NbDd(zh}guTDqt#|HrPxUvYm9vF^|U9<0!#4*R0O zGERr>k-dZ7Qmw;>Qz}Q{Wtj9)-+#LTxWt6pgZdOGa_PE4-SUF{Ktw*EEEX>~Az&7# znDBSxP+o1D0(OK#9a8jZn}UMSv`Oo@+O)UauHRId9`uO8t}$t!d&jXdkm%uEDF{7= z57Ux9VGkeL3J}YY16_i{%>RhUe-5e_$gwj)7^lcovFY)40{a|W6^ii3r;8Tn0lX5^ zTHvz1>C+$j2t6=ED=bghKOBD*AaK>jskY2?{?o(tA=no3kv|q7n+PZP^s$FE$KxqT z&>3uP)6*JZhbVvx?JxwFN1%2TW(Bq54sVM$Fr?d35Vox%t zZXfEKbU9wb_}s+XOuJ+qaCAJX3x_REmvt)PpHF{Ip6z;uba0xZJ`_8DE5OVZ-E&Y< zJ)Z+PY(J3gh~#)C+IM^i_R#^~8-jgwaJ<<6$eDbD(Ax0j0OZ(FPg^cV`Yv*UBfU9} zaw^iJLAKYVj!#LVuS%%TlECK_I9Km54Eo?ShL54_1Z-%bfyO6+-$Mpo0L>ggHa@MqyUr=1L(Z6IdXi0Rja<<8Q;{$}3=7m=|3lKES(bgVAJx&e{O3C$QkvjjReh z8vrqs9iA=WI#4_8o)=N>!);)JE9XD3xHf=+4=58EW&lA5Z3}hQz6A0`sxITPW4dB* z-pF{~$%60XGVVT?-+gJllOMWMSiDn&A-Ios%7A+nf_qiEdo{lMud?^*TK5`O_nMyf zTHt%_jC&Y@tJ`|7H*~MRcyDlcZ}@m`1b8qecrc-RFy(tNlYKDPda$s1u=ISe0zX)1 zJlK>!*tR~{4L#T|K72cTaCm%h1UxzsJUY`oy70jUU?1JI9^I`TJv<*h!JhkGLEg~v zN1xV5-=Rmp#Yg|c$AHJjK)_QF!Ba5ZQwZNvsO(di)>F9EQ-tRe80;0URS;SJ6y5q1 zGxQX@_!M{e6#w{?@bd|7))R#slFSE5k%gpcLDH-s>7I}bFywm%B(ofn)e6ZTg5)eh zat|SSkC1%8bHS9izbKintT&$6bBWe-snv5Cj9&mhS7bc@D1WYOeXbgMu3mhuIee~t zeEtb|sUvu)r+aC*d`@lkq%ZVLaePK|dT9l}v}L^f$5m*3=^T3LT72m~eCc_7`2~3W zP4N1M?zNZiwNLi7U+Z;%z^{xC;xm-gOb03b`GQ&ZIyUq=zW6$E_zInTe4PTkO%uG$ z(7ny_z5SJao6~xmw|ZOfd|L#+EoHnd6TEe3JtvoY;wQb91p1Eu9NYvzw+NuybkH3> z=&meuPb->*&9Cwa;rZP_2s$#-l~8vl0y!8G*z5PIvMw zJFS2BR{tJ6|2@J$-i&{c@_)~*|6Ys&&#d4LnqFH215n^10T@s$=Kn?Ez7t6-kdTf* zqmb~c814;^Atd6NJzAqVsm*c>)L`{j#-JULu%-)dRxP*W^fx#fjFa;`&0${SJLp~Ya3*kfG@CD8trtltLhS{^|MdWQNM_5-RNXICSv$r(=FV{VR;ZT@*coQMm7c#_aEiyvRe4 z5gN%u(FKRM*kBayc3Ai8tUOzn`7kP&#OH|u+!@JF8AWpuG8WZV(MB1=vJo=I!ZFHE z71z4tLKP1cIEkcU5q^Gx9X^k8QYT3heWqsqFNOQ1=Y~2}^$Q9O(|;*k&Dw_lP`Jl5 zjQ^!@D^gu(vurA(%ILp!z;s)O2+sddxSz}E{!8Kdxa^?N{g=WGacCH!-Xfn3)8qn1 zq^f~YWc5vBNn~dLgf{z9{C~X}4Lk}>A4z^}q_AB{nrUF&wjg|pgn#QT2A)R%y z6~;Ho|H{xm7bWQYqx1_7dL^NJ<4I+m5A$Yq18gLhqc1gwskW<E^|A{Fy^pQ#t~ zL>Ij;?1)0-w7N-nRhwmc>Am7u%W5xWOzY=9Y=^cz!J7ScRmUF=nWf*CSv#+6Sw_1I zz@}_V0S7|7zg|s~he3jKnCvC;6q;A2AZe+jUg02|>vEj0`Y`Y}f3)7GMon^Js4jx} zhJ$)F+GUjK@;%xZE8<7jFnnx1`-#CF1knyZ!^+N=PZ8}L=|i2 zjMRi*=CwOJ?>h^f&Uv~`LSg!@1?sOT8n3H@hvLuhkGyNhI`5%a(#+!p8W^Gcp{?aU zF{7TF0p;)8D#L&IJXJ?8j(XL`i?TvOQ?>Z3BQouJ1fu98CL526$FzN#%Zu|mS~M4H z7I@Cxb)pUCtYv9en^8U6ch__Mw0?@hvl;aBC*jgDs z3$5;0lxT=)QatSdgWC0HO=1H4iBf5<`S_U9E7Pvu+H@RBiLuX|X3N;(VWigks-!u% z!2FEhFdG`6loJB?6+MTrEjVEvLPd_qz~76GZ62WXz0691P7FSQ;@g4ToAzu8PQW5b@6ieOxeoIw_>%c@>}k&<6?cc{Lqu2E&EQKh$EDM1pA zqTsiSg0)_t`rhn=F)v0<<}5r({X(a}g{P%9KVYi@zco%hLMv zl{{@f_eFr}#qk(bedn}QVRWm)1f2zwyik?&eOl)F*o@a?&5lv$2_R)9l zMCJi+(IWgSOQ-aBfTw2z?xk0=?nXGTTN5o588;73v%dB*^c{|glpJu?Ov0qctLoDK z`bD;*;jq>_cgoR#QU4dVm-rxw)hlwke_d4=DxdBWL&Pe!Zr`DsY}fJwnjcMst! zYb3wol~U$_aXuyfs9HMvEWO|Uh?-_!hP#EO@Fx{^-*g-^%L;2nzXO2^?@$&?meQT- zh4|56&|UYfoO8Aw=`H?GCg@vZqC5Q-<;TZ1358l0@0G8If`Yv=rL1anar?|alRH%> zxV^+<=amAVRf=fOiKpd}?mHk8(NV4(I_D>6f1XpE(^A9M?4kC7$2}zrTO5TOt)is(bFW><6EPmhnLRjgS$GOC_F_9rVV? zA^iier2YVQz85^3VKA`i2Ki3;m_wBaDXNpZzOlBo8tGgT_%4a#@8H4 znRBVv!KHXW$<>=OI}a9Dd1Na(Ro8S^qFgqWS1I19$_8IB_xReS8A?!I`Gb_Swl_st z@7EvNui%iI3U((%(iS_f{{#qN_th>1q^uugw3;4hC3&zuzHS-sHGP-0KbT2L2iX{M zNGIhzKc3_QsxO7)%q|rYPX!|UYCH1f<9#V_SAIuWwufY*3epLE=upe!+^@3RSIaZV zuTbfkD^7yzR z-VgogV?-QHNfxX>oM}o?XbSN8%ea7>%&-hh-NIhQqPDI z;Tv+>06pW{1N9R{lZz#jmOY*xYQFsq-UiBvt5DIoa{q@u$7mqe+#$C;NGZY$Pjf6_ z#mc{y2A5(-;0qm_ASL*Z8g&3Ii)zuG^C3q7Y;e__P9)q`g32!9J(jKo1C-LzclN-y zVe^|HMfV#;CY)?PO2HC86)z9C@S_nVGA*j=-4%0jgs{^MAItNht@#G+B#&x+Gj8A zrj#>}Rz$=M6Le4!_QU5y%N{hV*-=hOlZWxcM!S+e`$RJ8E>!d^G=Njm`67htiI%Mz z=vo%Z@pQo2FXuQ3bfgTec{t$Q0y?hr{yZ7Z#XnAfJFUB+Wx2D2a$FrGQrkJ=kGMRP zCBrds4NEu@Au_8lacO5ZKa_E{DOu*pOWQ6<6ES+&mUwJf$Qqg!8``8xoIJSyFm5>j z8#2l#{}5x`HmyY?D`SX`D5#$<&yF7!o-2=>E9W@t4O%&5&jIFOA4Rc;{@9@7TI&s3 zIAI|U{j(tgC_3eCEY@{D!PO5_!az_o_XV#rE?64DHxoz94vLuI=#g+F3Q8IP_3XjvY6LB zhhe&2nmG$DM;R;WrSCU<;?E<~zeRCUtUQ|t)U&`Yk-fi0l-fS$1UI_hCI**z^I1J- zLqa6SHnz>-FyL%zj*fLn!vDbLA3NeqfPF&USzgCQ;@RQY16$r`2+Pf}NRC4e?MNT( z2=nkcQwf{sD}p7Xwcw6Jp#(#i#J5Y@xuS;CE2v>p?nwLfet?E zZNZA8+CCo}eGL2apE7$dw~P+nCk zB@GAkV$P$k(~ur$Rnz70ZISmUis;X>$+A0-O5V|uv8%j_g>kf)$REj!kF?djWj{sl z`d~M=szL7PU@F&zbsLJ1|A#2qe(A|hLAtO!k%5^7^V~Gz#X?oqJ z0^*WO>=Lp|W|s0obKTBc)yk+-cJeSDK`1)iSv0pK)o#dB!*HD`^S0(0i(doH&&wgT z80>tP27EjJ${Spm1c-R`4Za<3gineFQmy~2 zqo`2~HIB8&T_hJKy%t$ha~U)9c&`;#lVp{9@)KLCLX*wV4@!L3xw?9lgIdErjv}QW zmpe3`$Pa01z1)Y+x73#97OZOysJZoPKLZf8LQDq(D{!;QGGx4QC?+FE4jg8Lb^3rt9 z>u(nRyqlco{rQE@>XDC0iC^-e{JGEpfl`N*Zk)#I-`Zvpf^Bk(()pJO1INV_54Tj> zRxY;34mG2zh9^UbM`NwIk2G+x|3ZO|ET&cp!xp9TDd!%_Kee8j91!deVz+kJ6Oyt) z${RZtq%}?-T_YX8JIh1f-MS<1&LaP8OV>ll=;SZ?fb{+A7X)fJGt4j(zIFO%vnAG+ zC+-LG#=3;djb9RliW_>&Ak$pIy<9TuJT3^>5yknd6X$8IY7rCRH!Bh{L7Fw#h?b|? ztE7&wpz|lel9*|zs6xl-eB1X8yDZtuEYSy2pU0m;o)w*I6+gfJxWy27pe~@L7x_cO z>8g6`?M58hG`G-^zS~i21@{v*>?a1G&e7Uk3ylHhvsKoax%y;xvTK*oTVOz%=w{;M z<8|{oPLA^RM9^CubyE4xQ}eyjFcRb%nLao2*B(BHV@tKd3w4V65MzZIYd+f{&vvC? zXf?Ed+j+^RbD0>11WJsVcl>SM^_FVb%3F2Fj~R*F1+{%`Z+qdnT6ykQz7>t68>B<7 z0|>d3wV>(<@|pQ;TR%6f`i{tYQ2$}iDeuA!F=)=194q!2m%VB^{aWQIgcx2Jg(?`0 zI@KrJ*slz$gl8Yrp}uuUO3!@kj{W8PNbHLoP2cS(xPy12P=4N{H9LB%u&~F5)vTuGWDEHWW}AUjfs`@@9X{uSxhNb><$TfLXFr})Yt>>Y z9U6^})E~1N%7rp%9be`d)nOFwd~~xqjKclngU6F@uhVEQS*p>QUZbn*xILJLn(_5N z6zSNgVcXN|(h>G#Ag3BaKIS1|qqC(hH+=2tL)0OY6ZygQWiQMM(=+x2ifK{`Vu zx8u%qvEFJi-e24Ea`TTb25+99_wApcLbkR5e~HJ7j}q1VfjcrUM9$vC?f=Z6U;fb> zy`L`40+!g6Bf7u;B3=-0J6%ymZf;wNQYtY}S;OANSdIQia7?mE%0^zQ<$zJOwo9dd z>?htE0$M!*hO5HhAZ=BB!x-mkb>o!8$GGOd>XPR}v-+Wmyesyul&$MUgp;4Q%aUl@ z8OjSSvkvRrYCBkdtWL_G_oCu--41gnbaMfGF1w#dlM_UqFIFpxVQ(j1;_E}lZt>yY zF;6RJV}5e_BW~hdssi{JtD>q&Z$DRw%C#2V_gNk?J&P$jKG&~!{AK1Vz7CQC`v;RI zq!dEc=8{1T$9@H_$xn!i+_MpAE^?G)UjLZ}qmuZ%?qhc|V)BFeVU#%uy05lu)??rD zfuoS5Y}{sEGDVnYKK62gZ})70>g|O3v+}>Ez1t}SMD*0@cUaPHGe8pexn8;EqSQWl z(Q);!O7eGiUsd1-&2iL>6x;_jzBP?&keHn(Es%ZdZXPyBy5ngLjG$T2-m54?UN+BI zpIv4v#!Fe@tP#dp4J9%?D*U#6$4e#Hx9+I#GKPMokMLL8$>80p`;`H3H?5ME$;}!C8dHm@R>Gs+Az3Ew zrYlu(nCxR)Sv4qVS3|ffXhLkXuBu69r*Xc3L<N%dhrwAnH=~7F1g^E*|Ds(R zKRKe_RY?DeaqE%lUUBPHkj|Bv*Lp;vY^pUe{kUpNozAqhRBPH^)prrGE3}7nDbPn{ zc-`jO1#66WkI8?%%{fdwQZ@GpMbw&T@Jv2Ouka0eCROgG!@a>9@RJwcRG$O4KeS)^ zTSsl`9uUAzj*bEXu$G|MyT69uoH#eXOX4EQ{YLA$Fu|0B8ZYC1heuwZ1%kqiFR7O} z-oKv;nfYVv!QCbfN*)UJ>(d-7;FE|+O|)FV(R%;bByrK4h|h*(gyzdBNwmPuz*jQ5 zzW|OVi7o}3K`1aopVBE-envthi%e46q-Yy#K`N1yePu^=%OkA89SymtZA)QvSj@?IuU<3KduvpY!Ttnxq!RKZ2{{?U z8`Y@sHOh~K?-hhOag$Q_s87|TUeV8zU&l%+d6)Z@-X{XGP5uDHs74Xr|42oBg=6%b z9-tcz2F)AmrS<|p>CDc?w)o+*mNpMwU#XGz_-#PPf<|JFCyv9y`!-;+QwjtD7>U8e zWRMa8Macsv|CqBcR3sx44nDWpTe#&kY|Fn~%Um_Kj!JMMrzZ)!Qld4?C-Ca6M}1Gk z0MC1LeB?m+{b3ha*DPHeD@!Gu6ZZo-T4DAc{dg?q-=YtSWt zP1;ruCB@BnZ$K~kf-D<}@b$YpY%we8hiqK52EKW?C8We=xLD^lOGxUNmuy6>-DRg# zlc`*QD^sf$-4s+iYXfh>H@e&`qgC%LJ^&3!iwtDcC@@Q9R>u<5==PqjM1$x_H9yyw z65%8my<;N#Y`5|^FD;9DzVLG+$|~8YX001Kn!uR1lG_O{=Z1>5<;t<3Hz?y*Q%X>+ z$ZrJd;iql@{flpTI4j!6Ys^i1CagOiQmKc0a%Y1gqh;((r$yId30i}=$Y z(tY^zrqyeq!B}U!91{2=R_ZtE9MDeA3C*VwoSKT%?yQ+Q-S*;gf9dp?7TpC8fo!9P z1AD#dU!4aJEbp>ZMg2D(8Tw6*A$R2X)Q8%sCW(giHmKx)oyN9!U=gj50V}$Jo7~@Snr03Lz>p zdgRpUtfisa*4fez2dBBKJa#aVdel?po>}m{EYIY5G{cIf-(W@4ZBoznsoV?q)|d6` zJkRdS+)MvQ-<1JUum6Xwy9{cpT^lxxL(t&v?(W51i(7#L#VHhbcQ5X)!QG{}LveTa z;@XCfKF{8J-X9-x&YCroynAB^*EBneRE{GQ8CtKMs z?Q4;Yw5;zHLByiI`;pln7*FEtR#|hOC*8oe`J_H4A9G(8TEO>pxjq-)a$h$d!H>P9 zzSrM#e;@Gvcu1@{1*iaAbQBP`7FRoCp+0gFo(VlD3{#>C!vIAiqfPgw6$~6#O6?K6PrOw`8x+>c_ z7)hcZ=?4&5ciI&S`E6_(IS8DGNqCJZ#*QWBfF)OlrF4y@%8sq+fUR4HZE%fk%#LH` zfMZpMV|$I`z>e!uhb>r#OBxU2fz~o9M&hr=5Mn_tMZh%JZXE&Q@y5gFu@e+K5R}ys zR9zF)u@g2q5VqA3c3l(pvJ(wD5RKLmOp*y8D%92wi{8M|&6 zdpVc}9hpY!nI>UcsTnwJd z8-}`iwu>7!bWV0`CwBY>cH&!ha!wBFL?)yL4tUO-JPwA}8$1JOHt1UpF-|TiCoZ`L zE~Q&8RZebACvM#aZi8EHV@@73CmyQ?9@|?U2Top>TMlS-);Ak1E+@`95T{=QZ_F)U zJSTs$6MuRGfA%eZKBqvjlR#O6K-H~49j9QElVDqeVAri+FXsmzCsq*_z7WoUu{kO~ zC!v)Fp^aOx&<>~Yfs^n_gYdkBcHA>qiiK}zTxH!vrB*{QRKzMS=hB(VcG|I-@$;NZZB|FQdH|{|g5&JjF z6+6q9HOg1r$=7iyG~IoG>>WSQiyQlge33YUa^Z_S(9GXykqo z_AUheUpDZs8HkQb_+J~46a(!&l7Gy=cQ%j+6O9xLNR9>k>jA!pgHDBmPW^AV7&PzU zVbbAa(&J;j$3TF^NQli$jKfZX!$JH{B)D9pxZGrTJn#P|kmK{cM?oM!`EL3V2vHFV zQxl5N5Q)7~?mk0;=@Hnm4NB)l}DEA%xW4ZoleerlI+n2E{xrW2xB%c3@f}%m~1N4oc znL^n_27@sT@|lu~K5U=ng_6RqkxP-Wy3|{5;j!c6&5ksF17N z)qa1r++edc)z$I%Yr7vDMf$P3^ZE98?p+k@?s|Q^+8fXP_@n#J>(lMo*3Tb5-rgYK z=(hb~a4fe25NJT#fyg|^+d)8Sx}9JwEz6w{Jaf=aD3R;&P8eAz-EKHlisfzuT?uG6 zlBxN4H;QfOT@>V6wA_o~I|S{;et0mq%<#-;S^MqVtrZ$ zDk(oLuWUX&tpL{!F}$yxTC_f^D$@%&tL}U_J*(+~V?3`Nz_IySp-5bDUO&NecHS^8 z&1hRAq-1l^v}|5+(Y)@8RIXG?Lw4D^pJH>_c3e_%*?!)9cG+BK1o#`1}^&-$#UiBgKo?rC?Wtgr9u(ZEk58_!=UJntuonH@=g)!ZX z0Bc@t74mWv-sc6ioZpPI4Kv+Na4mgx8a~eXs#ba^UfKIo6rTBRS`ydxZbp{2>TXt% z_u_6&MTYr)UPIgVenH2g>V8q5_D^kFPVBzbPXP3vo)yc|s)zTPKNk;c_QTAN>&{EI zj~nhsRgd6J@5hVBE&q2>a69-HN@L$aC<;dD0YhcL8ongU^L~=H-Sa`3MfLMxmfPj? zQC=9!%W+Yv-OCB6wEE?=vgOkA$j-+9sWsboprO^QRH+Tn`FQ#Is|TL-_tgOIx8K(z zv^BqPCU}4SzMYm~{c|_3{q4{Fvc<38`&MsRY!_Ls&R$RmBC)RfLp6Eem-Cii;Mc2R z*0T<~ALf001air{D5!TGsWVZ4(=sy1;&~lqgj|R> zEIY)JaUE@`SV*umGQ`t<9b;c;`AU`$?>3F6HGm^^bi!QVHhns}gsW6; z(pv8}V|k*4r{zC)5s*vyhUKOlGj6kZMGx6YpXDW$XM(8msDFL+;L(p94@U#99Kd*u zc3?wrriD`-vVV&U3OwD;6Ic!q#~qsv6}Za>#(*SgjoknK~wXe?>ti_DJ>>6NJ6`w8=_ycEac>&xeM* z`>(9h3h$y|N@JVszoK9{4(|U%!M+Ea|B8Y)I5;i-A@*Sk`n%mwI5qB4j46Lb!4~X_ z@V}yAL*ee)$lkwPj%>9jSaeVWkJ+&(@{9P0j+*0;0z7mG$XpJlBDoGFZY3*mDY6oZaG!%0kj#}or)3Ly4w9j|@00Z@56#wFKvj3C zAX_}uk?BOSP0}H>QmWG}%U^71Z>@5D-|b_DyiBmPT+1iS^u?`G#{^HJKCbvHd#K|6 zB!O;2zEZtK0A%!>z)E9v42O-a!U4n5VvEiYhkc9wItw9g+bGJd)9}Q)rf5sMWvm^T zp>}P9$HJ}CKGezcsB-ghwXN$8c98b&cZBj?+t260Uw-fxTM+M}U_vVtg&D&~%;~ut zKFtx*(Uv)Q2W46ncMvuIPyB!|1=2O z&qeA3gc0eHg_Q)8TH70?Gdw{e+u4&kmD7vf%;iE<1)wl}unvfR*?W6(F9VZ0T89*Q zl2!VKS0F*z=)CnGtctQ%k(!)^O(ZXMUUJvI)!l|5c##c&+r;Aj0L^FzR-oG|B?Zoa zM!&x_V$?l|*D?dk+%n0xT@l&=6n0Kd8)qo0ZsN-ub^)EQvU^M%@mwhBTm-4oqxRefk^3vSr3G7*|Fxf&fzBle#FGJw!o5V3JpuG-O+&K)- zXGJdTK_U$d1gUqBYsm;N!0%oJn|6_ZVwGJg{sq+eEpd)WF1SJr<}e7Ge|`P-G2Bh* z8tsPH^zub{WP>=tE#!{)2h{Vc1e9MKgak!)lyqmIZJB!ntLf~kvlSk#2TvSyoWBS8 zkprOBKWhm{Z2>HW^L&eQEOzr`l>xHR0y(s8-c+1W(ZBGg0{vXjJ9wRkuFz$&3tn?`j&r%rn?NhkO6uvxxtb9!LNYAJPi! zDh*^D37kxEo;lQ=GY?uyv4yS+(sl!iv;t>_T@Iv!Pt1Lg0)odD5U&=4(b&HsUAsCQ z0gq+eeuo0jhC}km>~lr!zsUL_)&XMjp!toUQFzs3A0YlbhQgtTeW&y%+J_==3lq6Q zNiX#W&^hMFIAXX1G4R4`%mbii9FIT>AWa_BJlbHpn|RAC`cvrCtcC5y;nG@Bz+0 zX}mL+oj+;^jSU0GEnI}&AtFGq#1q;atq)QeP}&l>YT;TN?plu!@)g$?CO;m=A?nB? z1Z5@)c_sw9&g~5%^jh2gRwfiF9`LrEkbDJ35b=*53pcuLH1e7^0-%R=arv{T_zPV@ zi>YY9<$HKP#bh6a`SE!cKRO<|1IuWEVd224((qdN@9;Y|&AhY>B)*_Cy1rQ^%nhP+{0IR&%mp5SspiWJ!{F9$q8< zvM2sKd_Z(r;C?GG$UOi$KH#l37I`K%VgyKr_uW@25D@Uyqzz~q0c3eXn}7>?TXt4? z1lsBX`P1~);ZotqQvv9~W$r*{Fd)8?F8-p~=dCsvX(rgO45(@eB;p5Z@S&5H`Ranw zki-(8u0!A<(~-&35q1(-bpgp&XzyPRB&SEG@vGaqf1G|odznvEF^%ELgBF2+kyL@n zZ}x|p3Cmx~03w7Jl{$X30+v~XH!a5UJbFgs1?sjXLj@EV0-Oh>flsnogH~DTPhT@- zy$6pX_|t&AbdmEbwn74S?)1UsIzAixu3Pjuith0!Vo`|3Q6bOqC#6w32=>t@zP-n8 z{UZrxbinT_Fyas}LUGaK?un7ORsi{!KA0p?HW(=*7*L!4u2DWsSUwDUETLWiiF_to zSSCtcCX$1b&Pn*~2oQXakn+fv^^8{t+xz`}+!l&)A<~ZXdjBs9TMp4fDWtSC@g&RVuD1L4}A<`GSiK3w_Px{fBf zZB(n;Ejh*#sP`P6fEU3O>BU+Od;tMvOS8U5rl1;oCuP(?1(YoUiol+!3vNDnW2sP( zIdXbAySQn#OGUvEQQF~Y>XB}Bk-*sW1pm@v6jgvJ0zg^?27;hu>`C&b(FiWG5~?@R z=~$iVD$%VKTw+@eg9!3)%mA+Hl@`Efx-o>~v^Efc0_qn_iRlVR-L<<{w0k^2bjMz4 z;aTajHOP=<@d9PgWrfqDg*v5Ws1cFKCp8t}z-mx%kwA{JWjVkh2R1(E0nShpp-%m! z96+A?CYoyuO8C-R{5o0z4GEB)uInv_?zc{ye2UIauZ)4u7(Z3FLaeg&gi)xCN#ku; zkuP;A&#zj{XVMODz$v&y_)Zg9O(y_q8?I*d^kRtwvFWAU>J>hC*6<-lYVu}pg*N4s zHyO2L1L{&YPwb2{i*A~0l`@*2Ttlk#fE4(-m|j5Wu;O?tOVs>acO-!PbR8*UN%~4O z5S*Gg{ge(#m$A59|J52sVH$@0%ps03Hlf0r?^Bz{siW6RLxx~MT?_E$sV)CCnQ_dk z1gR!c9vFSvhy>XLATP7wcj31N!g`cxGooi%r)EZ`A_R0m&!ox<3_mX-I8 zH($yX!y6|wT2~B)*F8Tcy!GV5Ljn}-VZ2|VO$4A}FdtQ_ zusy5f@jcfC0+jeO5zv#$I?s&!5BE#r*n1fPK5xM>&# zvM$l>7H(1K7mG@21>mX;qy?pM#4EJ;RlO1rmLsYPm!M4|+L8ZLEZ);-%SnTJI1HfRgbg}rG6t-brGH^NMj9f1wPhe$aUfEi)~GhZ46^$i8}40%|D_9 z3Rywz*?e)Z(Lt*v;|ug1F8p>sCgM=DQu`Ev)s_>0-l5&FUR&f&M_O>_G!xMEck{3f za8wYu#NLUcUakJRYEEb-L@Qei$G7Q_?1YtD}qZpSm<_#dSLs}`r-)NF% zD5vn582t*wjc&I5vl&&7Hbo&vTkS{-vTFRqaudAwfDTd>wKeIHb21fPxeWQPK8zaab$7q zV`hMpT1DALfBlA0XWK$>&o7GU&h%cbkBDt5D`hQ3`NM?nTMqP>--coT5#+gTljc5Z;=a3DrXYa9>-+J-p!r(Sr$MAYKy+oGt#TnO zO+Z#X^OYTiV83gipa&;?nsk1`}Ji}?`RxVF;z<7mXx{N zl=c!<>=L?e32J5uHvSSZz?ZEW$Q%Ro;633X>BEdad0v@BRRuh;z;3VCiEsCjk3&Ix zt_Qq8z-)C1LFCI5!)oNg-d_M!FEbih7Fwsaf=9Zsw^pI17CsUU4k))jdL6O|r09GF zlK(iTe0#(;yg>@s=~XHtx(r$&De79kfMVZ8*WV4P1`7O$XPBB05!rx;++&@(91z@N zRXX8e`IQFV0PNho^D5fFO$B=xL+g8#)O)>}DgDp$hNLiZRWOQVTY5$hYMQI+!syjB z*B#Xd-#(5({3-o~aHubLKJg962+o*>WnV<7dxUn#`ilDWjpeE7Lr=1N)3WOk^A>vh z;L-eJkKg8#=Sfq6KzW_}@wcN}x{KNv<-54cS;Ms9#ppfew#ky8K$Tor2=;?f3`(hB zh#BMlL1Y|8MN{{@-oOwT0IL3gj>B#cJdI+U(N3RqEU8!|p6V=BWHR$M_>a@c&4FUZ zM*GYF|Lx%qyY!-kr5cc`Y^v|Mf(U7R0AqBT%{4|eZW*KPyG!I1XVZ^#8toys>PMazOma> zH4=FP`I^r1KRZuwh~}v~$!++(KNE7~N9x4o2NZ&{tjs z(q~={SkVfJCI0%De=2w?EOt$SRRacpvQd?3vDTQC?T<_n>t#bh>_hmR!N!s`t4g~Y z{!{f#-1aox09=jvUz zW7p_^1P3w5_8NN0H5)kysIi$^=sA|qIGAYF?o5sCQ#0fmAdROMUDU7I6cf$~a5l_c zuG#l`sfRn3wo(|R&#%dCq(&BIhK(Tk8-w(rMPx}NJRtv{}bMO!#}ugx07Pn+ce zo>-i*zmM0>^TOt6E{I^psVNTHy*L3~XS|H<)9hobQ=B?2>Bghmr8<|QS(@m2d^g$mF^&oNNBY;)@^-{`u!%a5Xt-fvnn=P zPMi2idyWdigIJ3WL8R}V@Km37LM;0Q36v7dJE^!YsK-1pIx|{QD)^D;^fCSSKh}4JzrP(zGNW&*iTFDMYr@b2+&Za zY2pLvTl>SzCw)R)E=z6fXSNF%-XFV0>+nXT%ZJJi6L!U!A*Rt}EqlLu&c{>kriy1^ ziaghAEm+-w(c);_P_Q)XZ@T-+EYctG%aEe60Ro9ul0p7D&#{sU7B=EdXHzc)oW@<5 zEoCzkwTm7t8hplG6uCmK43ze=UqXkglISgM`x6V+}8#u+mRXWChpV&vVbCnEIjbU;SAODPR>)tkhpc`9C zmG$95PQ@fADNU`(kLy}~a6RJ=R2pmsl@HGkf|MXKfnt>ARI(|jk(+-2OF4yHdmpD0 zzAo+xi_FM;yW9Ingl3j3FjZs^5Lo|Uq4u+Z>ryN*3m}3%BHPikNBUB$AoBY<$?2TZ zWpa94Q0)kRJE`ImclveDVZ@5x=X!jz^xZ3rdAXlJ&Zf#j>;(#}QV0Xi8$u98*X zPH5t@RvFf6<5dquuEZChG>f7F>c>F0=20mbmez{zJ&G)(58=bZScxN}lR=}cY+)7` z#;8tAylpRWVM30^U-Z)Unhv?)gcbv$oWoOy-#~VbOZl-&hR;On7sE;z9^W0OJT0ZD2j0fY2op3e@3dV_$u%TLmoOL zbyT3Bgcl{*m;kd%k>6aItS*EOXSvFr`JQt))Vfo6Ib-*%;(3ubW11fCH&|G^P)WVq7NkSd`VSt~XQ1Xhvt2;qUA3#yX!I&yQh^ zJO7|LDzaSsSq@`yoI%?sSt3319p#(vvK!3X3;1IR$1+ffH?m%67E$@SoE#P9)EPul z^9R1?t?v6LBO2n|{>ImE8UB!k6E8FQ^AS27b&1A& zy4rcc2bPtQp@_xL7}4Ip`-u%LOa+dO^?Z_i9O+s7ngmT}PwX=BBAjK6j=`wl$6Sp> zE@TC@X#L~*f?D{I?RM~}h{cMUB}T+Q82qaWs1Tg|Af2`p!lq45ZaC=f3<<(66K+h(LL>ter0)YY#@pI<_$f@$4*Ci8qP{z{H#u30gPsU~NAwM0)YTv~ zpAqtS?FyF*HjBygiY4`KW|BTDBO{!OvKSIU+Rd zCq%W)h57b`^<6Rfh{8Ks(s>#YXMySBJzL>j_~4yIJEg{k9n;FP5JFiP;oo0yt~cO> z2k(s6(GZ@To(Jz72WP7SuT+mdH7!}PEm`7Ejn&wyGSIq$fTK@=L$O+(^;B#m5S0*w zsNFf5sLsDZSxZzjNSxJ1GEcEHH@HjKmvdI)7uTeVMEinA`>Z2=97I`khFkKQT9Q~= zn#pv*7-?miR?{fpd(&suz~c1O$KlO0))rPzSTlbT)~F6YQ%vSsuq@FU~qv@S*A=7x=F%hMe%z0q-*6Nh=1LZZVf^8^v*8iz$Iuhptus7L z2dus&yt{i?=-5xcY1ree2&X)<5m}X6hL6Wz!)#i!45C<&p|}v#_Fd&gC{=<{9%oYnmZ*q|pW* z@-7fl9%6X-tZKW?0O zG{ubTR$_wbQ~{X`HVXWUkjL^Yq>}wQH`L0BRRwgDLL$SEv=fMy z(3qFf;}|d|BccfhCp0$GpIQsjMvu7HJ(@I5izD*0H&drI76z6U?>0wZKd->3xjplj zF{?SOuHR|S7EuyaAmh1vE(h+6&7!Q8SLiUAjeKK5jFnsavAv82KyQIvi8ISzuL5i3 zZEs`%B4?mCvw)lPd|heT#px)BiyaKR4!x<HCvUm93f>O+pQxv z6|qR1t#GM>nz5l2x~NPtk>EnS$-PYv*E^z7Bc))rcmIjZB(kTfQN|@h77SY=myH3e zHneElJRgiu=};X`{?Y+;sDkp@KZLuONQYZ~VImn#gauKQ1@VE{)bNY+lMqojHPXvu z5<+j~t7db4`CP1=wRz1I6!Evt;$6N6C`6^&j@W+{rm zE;s5g_)L*pJg3}tUm*L%*j56RZBIYD)|M2n7ZqjRFf)};o|Y`1g7cm-A6&M!*H=g6 z_lXVnYi&*AhYo*V5XrObn%*B~jhL=tTdbKOw*4`MvQtz|u~M5_D}9lKzx+hXF~cf7 z!#2g*hi#ofc8WG+rg*=dZZE}az7Bay5ZoHj%3zsM@kNz5x0zkM17A8k*0?0ka>iG@ zh9-`Ndw*IgYev(y!Q7T{@UTf3$&SZrO?Zx~#2}gGXo>x3gL&IoxF+uWEdA-skIayH z@x)zv)1%rb!^lu}ve8@XT&wajb^8dd+3!r%Ze7*bvD}kY|$AL!eNVtG_iK8%HYHkPQKrHxHXjidr6Ys8ejz`V2Z)R_IbBT?|*~ z(KZ=|O~$a!-D%DbV$Dj#&TCe$W*RflS}spn^!D)_ATv`ghH%cw6M00AFOLyOiP8Ak zzkeukDs;D;5Mm0xXFD0!o8#Gk!Zx56!dt9XlUb}JqdEE0WV&R#20>~;^X+8){vr|f zk`DKBb}xH(%1SGCd*4ud($o&e~bq@ z?$PU1r8OH>ZEQItPj_$}ZtKe2d05{Bv~4CsaoA`{+4!y$o$Trem3xLOa5XMkoc?5> z)MBEX8v%cmzvm*S!}GPe&;Dq^f=0~+?Uy|ds)K(hqLNuGi$`ownhVd?Qt6b-6)1q{ zIN~Nk)Nmc~Hy{rMRwR0q~LF`)&u}pQMD~+lt(8m=%Y?>~|IF1`#b} z(!3@p;=5df53;F?a$)K6tVUhR#fo9C7|37Ur7yKzyHs)a)N+N`OEWa!y|r+EYr{7& z^8F6v3nz+0wdivj&!HL44IpR@7|H!jX#_>r`Wx@t%f|1o8CSoBcppNf9{#94%$6R8 z4oB7bn1+Afw?gxhtACgcaPB6wPk;^gd$R*zxknlG1|z=pnuOaM_i4XTHCw}8@BYxN zU=x=-P$er5A;-+%7Xlhe z`^jLd?aBfYu<1Xh5YbcY%b*gn=+x?fjVbz}QE)J*_>3MZS730MKDZn84ItuhS}#vS zn##sgD(0w+7F_H%+X7&bz%n}9TQ*Ax;6mw`Ixedj7-iv=^P3;$P~2Y>QJkUR*q@jcx6g8V17TqwYP4C0+8iDBCttTN^;=<3MItKPr-J|hVSSLkaev?p zY+nYd>aJt}HogsV#_5*Km5>65vaU+8LO2`#9F{w$v2qr`g9Dt-H8)%I9HUh*-*_Si z#)i?vQlc}KL>DtE#zvy*giX;g%@4uReP4cxqfa%lEp8x+pc;&>@PU00yU+n^IU*F$ z7-JI650}oBG#ZX>j%YQ6ZvoErSj3ksxeq3==4cwqV5=L1Ta#*F4_&hryC_-v)=xY< zlO!i}L?o$g!e!vXVf;AeD(8|qFGERfN+U;eA8hE!+~%RGC^R!qB7HsBqV6Ml5{Bg$ zeLzd*j|(_Pz*c2*FbYJnJJ{AntEAouwkmTmhO>7VG)5Kib`K6$)jQZYMSH6rrXj~hzl+<#6>_QyXslvRSji`R(H`LQzeWPnc6CzE)v@Jz-kjY zMjJcFr66!yOs4>(mWo}_%}TSSOzb4hWhwIk=pJ(EkLH<(RjF9nm-JY<;_ftNTXN|L z!KArD7j9~*3b13#U_uSi-T`!JAfzN3|9tInP;9KGRuR00Y*{gr(TfC-jA2F+OM?w+ z8I)fR(uoqPBG51eba|@AAZ_qfShnF{Wkht)V4JE8V$lOX1R_TjiI2dA5GJ-|-Cp+)JVK1~!RfsAAcve1SWNZ=;}3vQs%j98l|k>LS$W1a3&ybcyZQ zV5$0CjwY!?NIMQ2RFW%EJF7I;t=}&YwmT8Srpc;jTn7UI@M5Vg2l`KO~reTG*3HXuLPgtXBrR#(#qn zQpi$Nd(;45h|a0m65nsQG6P+WLxrjpw?f=5r7UYsFg%I6m@SmvI<@1nZ{@sN6o0?0 z)F{e8G9>x~ly<|gRTVXpf&O{Wg!4vl2D(`TL~alPlFH0q^Ro{0Rf34_wppY^1H+4q zLOAdkovD!w%5;*-=Y>Kw*o}_V`oYfQ2isBwr*c9bnMW&u4hi&F4b!{&hMXQUuHi1jaMq}y& zmA~YD{DoJ@LGtrk+}7sr;-ms(Ci;Z;*&+ouFv0Z52$8#EB>l6)!`Lu!I2l>RJi+|2 zwsx!p^H6vMkP#-963+A($Yav(7z?9CX0WO|h{n7co!xYZhl9ppxZUN3X zZiw)PQIk&3LO1fbT_Rw=sqsrnq)&>Iq#_A`W1XlI)gUJVx^AjUY6C{6>={O$@#z(7ee3C7i#gyzN)A!cj!iq(bs=B8?;uf|A>I^xLUz`!SH z(sMR=-bzRmGhjdNEPb*7jkUjrhJGQz(Xb~J#+T$o1r)nHXkP*`0Jt&`r;`k>qdFhO zE-i@oXv^`N`=RTbccK4xY4=4^F!+9$_=<5G z60@}jPM9qavvM1jv$Yr1mCe(_#!&2O2hC@@pZJt5jOXs5#Yom7Kcf}~2KzD_9!3G` z=h%899EQZ#F8#xBhyrRZNW`~!7W^^)&`aMI)E(?!q=DyQxJ=3)^6z|&?TgLeZtiNQsxyPz_N8tx zcWn^!xysfKs%ve33FieI>d!W0Q-q-G>vNIa6uj@A(P_HylcHV%sd0o2MlPw_ma;Yh z)oWE;1oO3UJdM2_Ta#R!d(6K)<~lYXx_P^AtA6?1c5J1G_6gNbgz-LgY{QB0^ZK6p!)F*Q083mwHmKXNC$lzRk2{T6kAmRUT=rLUl|1Wu&E zpa5X-!`1*i)qU7h%%M(&f*aNDKvx(Jr#hhIy%6k=d} zWD@fY)%R6SU1x@G0?Yj@4|R!M=jODY(?Q@{{=yyPsYNg!UUzK>lMeY$3gt9SJagN9 zI07|B3y=H`W?V&P0R%4Xz*bvDSVq(Q_0MT{Q=@Tv94cVslph}sIcuILow{#x-aZ^l zu)fSBZr&JPX%s8eyeu?y-&gwyoqu6{U772CX#OU2K+ozCv-FH)xGX+g#uj452>EM) zX1ky>@CK_whdjaYIlt>diwtk`3zx4rR#EK}BbP6d;ZxsUFT`_p;*Z~lA|fwyHQ@V( zAAc_WM1JqFzCF+V06+W?0pHfV{ki?|27VKPh|GO@Cb_bL+yH#W5)Hs4Ld1wm6O3Q) z@4;-Q#}#6hgsuv48VnhlmO9kPMJIyX<%WEa>%{^y~|Q_hMpLrk??70RTNnq9O719bmXO*)BUIX81OyXaGTVK6CvJ^n|$t7LLrA*1qv&Xzi!7SX1$pwkY1W8K( z85q6}Z7u~9X);zuB;&s$q&gL4ivZ6;aK9tP*iNy_49PTPf;m#ab4e-kP$&YX6oo4i zMWqtMDH0>05~nE=XQ7hdDUuMTl9VozRHl;BDw5JN6?UX#@}#8YAq&KUM2DG1yYokl zD;%}W|4_ERm0UpI3@hkK2!ASyR%rr64v5AUVAFyB?DKif=aE5Q>;ot ztwvL<#zL*mQ>-pbtsz~kp-io*Rjg@9tz}-UWp|(jF8X*=Boj!f9B2yBmZ-Dhua&j` zi78h{#R#^3|JFE9p<7CDi0E(xyw5OHs1!@B99Z}nOl<^LVuVU#j8kGvLSsTxV!}f6 zg{S0;Fpa5niK#M;nO4dBC$_nHi8(6G=UpmvzvZ9szW)@k%t?Pgz2hevgT^w9l94dW0PFXw&eF9Bc0tR7%H|=L)EW6M(#X{Dxi)wDa-7p&l)PrnxfBMEX&@c&p9m1xunm1D9Z)Y z=fRcdp)%y-l;@K$6wp{_*O$FJ11XMDLGCB1JgD>>($KIu3K{gDbWw|@AW&NAK=RXJ zu?z-mk?BiZowc6x?cWEc8d&8hC1_#W;@0f*NPTj#@5h^)>y{2l!~?- z#`cnm_G-qC=8BGP#?GON&XlvJ68a)NzOas!D1IkQ;T9t!_Ohe|CLv~EVu9d^SOe3L{Be6{H1Br)r&w7;^>wRG( zi>W-JzV^88c!;0rSD&XVpYnpb9C(5jkNt{7WA?{1d*bayu1_jN+}tOuiVGNo!Ihk3Q6YPFhq?R^JfH}m>X z)%p~ed1J9^W0QIFuxj&?dF!EStKg!$xpMsFEZCpf#x;N0x`*D;cKh;dOPFO}x_V!k zww8y!tT3V$acbX{z!ELtGjG%RZ=d*<^dylVy*G<*d2-tefS0sQP@0?FEGm$T+J0K>orcz^;GpKP0el~%dRxyiSJG@8O!ne4nPLG8$;Fy z^O^@c)<@TxM_<;b(3+=M*5{O(=N#6TlA4!l*4O5m*Y0nxS~W{kUvC9|-HLy^qo|%x zW_^2j-}=Q00bdJ&#s-O73rWfbMOzES$_C9_3oXJ1BlEsGk_}e->h1Jfn)TYBdUJ4} zNiD1&8$wtu!gn@6YAqm_4Y9Nq5tsE*R|5!WA zpfNE^Qz)**-L<&8yBBM4C|=y5v;_(jcMA^1Demr2G-$)+|DN~WdG9@Q zzTKHMd-fy~nS9uj{XEZat>5Q3+>SUYF2or%Bn6x=R(_;aoMcTkWL=!(gEiz6oD}ml z6ziOn`!$q*I7t(0s9edYP;05NxxhrVU@9&e##$P7F50f$7w-UCxmr3kE_&S;*IOOEDnuKjCaDfGVOr;tQOO{XYxu|9J`v0~`Al4%Vv|ZX1M)ON@_4`j7DcYb7JV zCnq4FBqX3BBzzGy5h0kEh=!P$hJ=Lnzl)TF?%yJ%BmHk8Bc&rFr6nh&{bxf)|G&jR zM)rTiNJhp;PWG}gy@>oDF~5k6>$ewE=_Ks43a0 zDLAMpIKhmZ_4w3nX)qa7q|IxoF?J%W_2(`<9Xl%{P2=#yTLSsk0;Mdw$FPQZw-RoGr z>qNcl1pS*>!<$crHwnf!nN~NsuCPomSXS^&O2|1RX2~^v$SS_wD5lmZyu>&-&l-~B z9-iy}sUS2yKk0LBR(f7uc42W&R(VcBV?kKk*XaJLWN7Wzrn=hl+RpN((W;KQy1v!E zvE9|Ry%(*o@2{`_*Sf#Haj>~@cyRFN>iiaVd3Sksb+EO+Hb1{QJGnYDwlY1wGC93E zy09^_{GV{PL?{|A4RPstVegAu8$(>F+h%tp8l&w01!oVZFungboXyUnSnsD%tPqE7 zJ@=Iv#5h_Y9)>}o_+M}~X{FtitwafJk!ae(1he)xy}EzH*=DwUeM2w9uQ8TWN5bWE zHWRh3oB6ys=@rV&=2!o~*;VUZ_#<=HEX{8XTf;vLGzi_gZ4LS%DCH~v17}lF{azJr zzLM;TUS+c(Z)LL>kN9n2@(-LnuO||gF5>I;d#G`FDWR>!%QCO}UvRdcYJ8ISZ~yQOJAS7W zY4N`M7o065!oOs3v#U$#3O$Tk54?)G*$4;z|AMpW65ulbBbjmEs(|7{@51ie4IBS{Vx2;nAFE~5XCfimwM&>A^ z3Az0R&aTeAd?W4Jf#68Xis-bFEf2&vO=dxyqbWqECuY=&=3Cd2clEH|Nq2V}V;Q`iEAJv|WoTYshgd9PlpP${ zysE#Z*Gu+=J&JMJ9Q)%!>pX%xS!%Q-Ffh6=jF~gqVI>={C=>J&vhgV?Zl|cWRK`vP z-GzhvD`^#2Qqn3Bl29GSk6V^R;Ll~|{uSYUb$7g%eInWEaU^0#(J!HC_C#Q>DW3Me z!jZ^G;>MTVx#psG2&A=;6-O!o8Q>xathEsiWI~Vi|ShzrK(Mo zlsJUhn~h3(64kNP93oU{;ttOV4$a!m6WJHO=ux76#tII0AwytQdtB`!!*;na1VT+#`$Q ziXL_On3Z-Zs7q7Xu=?{iZyj_;mNd&68(!dS=Wiw~%S%f-RR%4UF1||4OP8=FsBwyG zn9|BtuzmA@%1@8-@Ri+nw=MP~Z(rc-RTkc+)&<@(@4AuIb(f~LjfPX-UZu6Ugr*lb z`}D)_k+t!kO&#aoP6D=-)(6I$I`4Q-g04nP+s~T10EEXMk(ABiu$rN02|FQpqh@Gq z&D|i`wJ=&`^9Ye2J;dY35!|EZ2(NzhQu9^kNh)u#h#vMasn&eb9o-^qyX)sjsEM;x z-X>kX8xR<;NwA!$byW}H4dfW)x2xW!xgAQGPSN7014o1@(^6g#qdHC^Sj*!hV^L{c z($SdhusKHIsbhI&uGSLz}WDfsv%*p z=D7ydvqEb8m`N@LwKm4n=pE%TwH!W*B$};M8@UakeCeuklGpVI48)MDhI<68SFeF% z7k=Rkly9vy{}@mQV#y`3=Q;c0N#h-wp*HrLhbX0NgIgJVB?3ik`5*ns!#SEnDXBp! zh1=6sd)|3X$qA0zNaT3L@{I5$Wi&6eT&n&DRDKQMy?NhGxY1j~!|ao++9wO<6m+C$xlIxy)}FE&OM1E_Sw| z|M*KUb1Xj4GxWS@244+Uvq+AuAdP_Jl_^UA^uQEsqs8?UFB8meM~_pYxz2_PR8g$% z+s{+{a<=Ud!siTOT*z5D*NGB>CZqE%KOS?g%hBu=#uRP0V$Y-eCI7W{9YqISQD;M? z&4(uf#Wy$AA)#$S@YO`W=xy9RKLF#7GS(Y;C|05mYVvU>wsarnU-bd+^+kz<$@jt2 zh5UUD!-ugVA?pBsEG6S4hOzQ3;w`vo3lx)^F1$Ma;VvX!%RjvB0>;WGpao*4!XLx zB}!Puo&#KXD8wcc;5dYr0dqjCLC)M@NuBfE7RQ_1_t3a?G(Paq9`cK}0}*CIe$9E# z?_q7o`cTV*ly4n@MUKq_5K7{Yh&VpcMA%-Y?fE zW05w6A#FPPl!i7f1U?tKM3;o8&PAzz_lvu8gb>?2ZtxfAS?M;%Iy8EIV*+`AY%TU( zV2w^d_lVRe$Mf%K&*IjP;&wW>whyI=EyS+KAyN0R1gQK=nnv6JF%G(!tMv=*qr zI=rzl@qx*@f(ZK&B=ki+X1+NjMh@gC0CM5Lw2{M#BTNwViEuIV7PLz^yTdkc!<@H) zTT}TZAlJmu>bdNrcxMn|smiD9@kKc_CAXmkcA~}a-r3zzL!x|>&^|aX&n3Mk`GkcY z^NeQQvz0V=kcfm3gm{+>tU)eAjbr#=iF|<4%7CTT6oE1osVR%5-|XC%9-JQ?NO&Kn z^&NY7&m*-Y1O>qrgAoK^PVdl5nDh;WFvp`7@$~JbYTPHOFQzCQf?6Ac=}MCgV&W+T zK_>bj7iu?t!E|09PnSYWohIy`CFv>R5r~`Unzxbte%Z@5u8$B$7eEjxBZ%AHWnv-r zPCOB*2;J>4Lwh(D;XbyrG^ts~KiVF2ppNxf+|H-a@d0X`NQC`+F;0^ilnR%_ifzWk zFL7i%@JzqYFgi@`YQ&`1x8KoCDkQNCgke1}*(}L|9Llin)UnphoP+jq&gX5PpxDRi zUe6o|t$SEcli2focEC-P3n_V~ei|P+)AF`qpazpiV@si@63bFn`eEOr^ z8Y8jA_yZyuU7kR`*n;ttx>&n~SSRAXN_trP=UBTO`2ty4h?{9JeXKQrC&NNM-+*m2 zV_>gdf#+Nfk9oT1ckJINh|6xi1-6k$?jKDB5PbM;A3?d2B$+aTnbh{NJL(7_exNxH zFAKgLo~aM!17Ec6vAxVn=NdHo<{`}u| zrN0{yn5;`Z&AvszN~1VX51B!FW@wS5npjiXkw1tLi;%M&O100!@*g6+prwf2DA`9b z75-@X0ti&vWjNI_?uwv(3ds-;Kel=hT>J2YkR+hCeX6?NoN5FCPOvvcwE-rIFt7QxNmgV| z$TvduU89D{v679&XaY<*l3drtNzmd>=@UYVM?-m6Ln$&+rI}2Ou1R?rLY5Rl$+cYn zBN>PJnEbYgdfJ^@;j#YjL!CWdovve@5g8>18HKcCy#NasH>5$Eta0*!(8{n8!LZJq zjQ%wZsq$k3=VPOhQj@l0GtVYPPd7$OAplVW*8qKh)f_v@HqmZQ#a)#0_h3@`D8ccQ#Unv4~=jSoly@%U=LGn z&ztrh)|DQ%rydUSUM}HY9;05qz+Qpe-gi$u1k?yULilKA7~|)!Cjgiw8$eYkP>usA zd5$CoMG~e);s79R81@6r5odY{iYH%78TCyjp)2G9l~4NAS^Kq|`t6($JAM$9LHng& zV@`rF<=cU>lYL?vNE*WZc5wq7)Mbj@ui-8y{gWJn-Y0#2P6Gi>{Tzh|Mj;p>uLq}- z`n;S5tt$p&UUvqK5 z0>>6|$Cld1R#wJvHhLRb@m~p#$A5h$55QMla=EC|cemO8eyNw@|FVlW?*r+{!L|<0)9cRCyZa z^5hg{hqh*q>Y#-!#n^jFDM1VgxEjg#sZ#3~D=R*&^XZKzVwogNuqSeI9X;(e}pB6NzkJZ>sz%N*!Nvr~+;2q~GEKFB1q>a4TXv#aX-J9X2Sqh^*WVykY*%h#GK z)aZudXqo_E?gpklHH(KdW=RL~JZSc>6tdn1i-L-vp*k9lILd^@RCOjv)O|;3pl)^2as@*Js0%=Lp;od! zT_7NwE9ISQIGtJpp#QDIJgi-lm*$>okb-o&Rp1-W`IS`)n*m=jb`BlaIk&yDQw_grtr*8CQb^f*< zR8tjm++YK^C54=3C1?(^sX@7{B|67Fz8V!wIH%5P61?l)hd=QdWE8(gy~gG8l^?z4 z0B*ja+&znN{gz`*64bc=onVQ;L~RC7y_1GzB6K=DcpbQ{K!GXwVHJ~2mAmqcUpE23 zDtauBuTK5q)*XC^Zg$)mDzv7)KMZI6GCoVWI>l>=iPww1BChK&YxY&tzy>6!K8b9d z#I|aJ!f=XYOwF>K08mp`LUTJqgCMO@BHZMG#3qrAHxzf+Sd7JGHuKr=UZ!S12sYv( zhbG*%X&^N-Hpz|C!%HCI`Z)m@;hOTodSe~A03jqd}Brhvk-$>nZj&7!t4rQ z4qY&(b(qUD%#G^SL+sYe^w!6;AFmLlwf#15{Wkdd7D9CwDs~rcdKdZeF1p~Zbp=H> z3BX*0;9qt3S?oU5^gjLL{l_YlxHw#NGoUl%zL4tSi`c{GDwN0{%^$L4~^)~?6)iANQN~P zW#Acs9*p3Ygz8icoap+yvi^7N&y!L$%0SmW(RUPI4&eJ-_)!=9WF3C?3_quOz7%`D zHhqSDd_FAz`ijG;r(Uw^kpKu%8{(nJn3U3)>YI|0m=vPn#8VsC0?u&bzD$i`Sxnzt zc_4}Aj{IkO5{#B&n{CDPx5l0A(Ev2^6kg}GKKrYoJTwmeA4OU357fWNm=8gUr)>w& zeEoADa0!MxVjfYpbP6K6g7YbAO^%++*$OSJ*zXiN)3-pw}-0O0jwt{>A(!Vxn*Z+M- zk@s+%Jdj~r)gGpEb5bg~VKpXY$Uh^jzlpX;AzTtCR26SK`qrprY)vnPJxa9petLhZ zQZ6_6$@}JbmBc1$c=hovY{T>uV}VKGhtrp{mT{tUH{fnZqg-%@%=~0Ni`B!zq6#UMo(z6T#=z!PIX&G9dHg{f>W4;i`!O|D<{ zh4q@8taZ{SLzLw^)8%h_pB$CBvT{EUakpuCsz67*u72_SjfHb_2pm5hsS1}|YRYol zjw+~$e{l4itbP!_P?K`R^_nUo_2!urEQ`HX1hVz>yjQ_duh&ezT;S1C7P`Twljf&u z&^nPOc(D|wLQI=gF%D`ddQVc}qG{~Adn2xId&;Y4&KQ3)uMs7~x44bg+R(M18o_7q zCVs45-@aMGzj2vzK7~)v)zq^$C-`Bpgp6c>SJlw6#rhV{B3eIu^|VxEZY`cq zuxUNGe~~E9bEHVJm}dH-$ut;aj)<0c!TG4~WWaqK_Fyed(y42H2 zDkg{^{;b6J!Tw0gBx~0`A%UbgtOW~|R;c+b%UV4mec>qGApw=@&97z@%iP%k?BkN6 zyzHYNhdyQYI)7v}vtxUQznu3}LGAG3Zigi=VlR@nzSJ!9t(<#nh~~KZ-0SUI$a5&} zTLjU}ujr;BsQEZ(m5R1_A)GS2yY{0rFGFiwg`-ARvVZ?uAR;|4>^WcKU3}#y+J%-E zJKPd@M`!L!Noygmu#GoYEQjTvD&;$flg^M>lH0f2d2s6oLl?C>`6jY|@dn;9u;quZ zzy3#Oeq!k1v*F+xTwOyf`E+X&OSbweXorPr;Kd$35h(8Dn9Y6oE<`6998HE#c?Lt-ppXPRf~iVF&-)kH*wF+hop~F zzYD(uUW$-O&X&&toBdF5BLPja;{o^bYkMYE$LejnJ3rHBzi1IENsj1Qi^YXGPT5Qe z&X^0mFBt47{SHveI0AAb{1Sl*)gf1MYd=JATvH;G-Gvv=2@Sk6lRcro@PjDFI)LA2 z03VJNsJ|6JU3I+{9wH<(g57j&L zAL!er%)dqu6;pwlh&wcbJq)v#jc>`}i_(lHthnp6dwt=IO2*b)l=ys`rYZ%{)159IRdE>oWb%iRul(|qmzA<%3u$G8{9Ezt1Fiui|Y{>Ch~^bNX-_Yp~TYrXZG z*~*xnL&F%pA*Be-pPmkm*C?TIf{>M2Uazri(?b-!HVl}OX5X4g#uvTbEry@*4MgT( z$AW!YeHr7f6ZS^=0yZB{v9_ibOF>oF-@n|?BtJm}X@;nOLv0>3*z6ouQ zBNB6E^ZAoNU88r+M@!auIA~%)|83)iJ1}>o{&qcD3tU3L} zjJ=AeQ&Q0i8$$peUPg5|JzEGG$w?7z2Edc*w$NH>vI;u`+Lys@9`VtLWb`*HA_LSY zMzLByQgc8DXC^R46fT8l+9*x`@RX=%MTZyUB}Jd=gCogmfM=k3^+nKThq6dw>{F-w zm+rtAZ=5f<#MfT3C+g@01Yo>mLn(R?xKaDL7+dkUyMVnUQqr_<2J*9^)~8)x^3Dlc z-r2KY{vnaZjg&U)KvMRTvnIcu#pHLD+Uo1qN7AG3=3B5}Vk_b?YTQdxueT)_=rEmy zkAF=Q2{tvd7vV_4jU=b-COu@)+@p2y9%r8Q!sxk@WrXSblzaARH^D_LBI{y2Kma(>O0O+SiQrMK~(xqBEr1!EC&ZH!}7l-*V6g ze0p1V^U##c!m(q9c-!+JF`_x7v*~t?J5QL7Dq3K?_jjn>LArk&Pf6>jZz=K)+t~#4 zLPv02O&Gq8?^!RCFOIyFKidJ|LeVL8USBCl>tx1pEB-4fuVlZKe4MT`ta z7`;E~oq`-(NY8(*{xxnTPMs<6l$Oz_Xcg-=&Xz|%{reRUcM$qWRl_`|uNBQSW_SS7 z`kL7D;P^L)pDrH7VZ6?}p=D!quQQ#?cG%54`xlg{<<={L{il9#m&fm0hm)VEyuFk8 zhYf88ICZxMk7@dFcy7+!Yi{^p830K|d2{AawLzsWdUG9sD|K+M1DtWat^XDLubV`-`Dh`(x%oeYot(lF8uoSx!_2{lUIHO}<_ zzp`{x=cIU9hGoC!_hBIx0&t`72r9g4N1W-_k_<0GYDV_@N~QcxsZaua#yZH zt6n&ei>2YuGS9adZjM*=ApCBJ?98iT0i)wG>AG+p+C1kgQspad`Ep=ZwiuamN>{Id z3R2yWxxjmtOwZ*O2_;?pr!<5Y0YewV7yzK$%g)@?uDT9HdVzPO?6$ zmMEvqWTr+1I55B2Z%+Q!oM!+{V!$de-@K%A|1n7tWXa*+#i}(Uixo3q z9+>GiJm6xL?MgmieQL4iu886DsV& z=!q3$sxj^D!xH5cqy56L&*Ojk{fa7#uDFBnm;Q=!LwxZN$42{9`IG=0!l0d0tg(vb z=LoHk2N+z)3!Fn7KOpglD@FJrF-*P^kPmHDj;3qItTYR)+ffP=51UI$|6VxKO&84v zL8_hngg%5cral@X5GqXlx-tnM02&=u4r_;|qfILR*ilNgLmHfk9kfG&FA|UPHHVGN zyh1lq`AR-Y?uR7c_saDiB0M>^x-+(RJ+=-U-@qT=q#NJj8Q+#3-#HnZJQunz#+0xJ#Y5 z|2pwdKk?W%@ia5>cV_~AJ@E{j1Q1Lj&`%=rP9n)n0<~YRe3K~Nlc*7sXlaw^-zG5{ zCSScIa>o!VcTZxaacF1|V%<#QShHh|rGh%}akVveaW(J=roxn`)MH|ZzfBQ}Xb`JR z5zK1L)M}7W$P*!JI4n+qZ&>xar$}WqRRpJLRi=sPrx^)Yss6$V$gMRo^QOp7HJD~K zyF8|;MKmggr|3n7SXQUGyvx~CrdhP9sAtvr#-_=5e+#71^C15&yq_jdo90c^5ZwLE z>@oeO<2Pl)Zw~EgPVL`fr@y7OXJo8rWW8tPB4*^%W)!~7C^pO}_0K5J&Zz9psNT$| zMNGVV`F8ZPn!K~`WoEUsXSJzx3tpjL9&5YAf-Z zW^K{vs6c>$Mht?>0lDu&l#H2m|e-7H5{JB7ZN~aSwfYGHiQE==-i>Hl@i84GzuBNvdl7oayP`` zfZV;%NCk)7ZRYwVg*pS)QMk+pvBFwbh@8rO9+id_GT1EV6 z@YC4D8;Tm(Yy>=jWN)H+SATiE2V~jWaLbGgZqD>XFlE_V0#X*fN{D*xLgir=^=bh1 zl{i2Zu!d)XDx0)Uo37gtl+`%9B-;#6RjK|W&9MqVF+=#y*haABXJ()pnyaLdUpJeY zoxG*KX;I6Y9k^l8eMoXyNz!S&<_=h@oQi7Jrj&0^CCuIimXf?Y0(9Ftr(ZeWHOLr7 z?ODwZ1Z=_dw}A)bj5?I)vRm>Ax*cy(J*#(md9xe)Q?K*3W@P}g5i8r>so9*sxjYKx z8Y7PJm;IJ{%!>A$1!h8)3gPZ9<_^LqMAYo|YTlG9>~ zV$A?%y=xp*>Amz~0TBQnuw`B#RT)n;XV|y+nbm(|1KikAvZq2!TXxLL; z%yxqu_$Aq?Ztc6+?0Y9fxg|t#GT5T7rB)tVc;!=h4jA}$;&<0r8m8O&qpV$wr7ExC ze(*bQYkc(1cI*-#jX;*cz35D!~XipiO3!GCRL4UEnSie5%XqhNvWO)^{C z$Zkjln|b_PdjmBAW&%hT4&5OTB@*C9gJEj=Zd!tE<(fgxxY;H07NLRVWgbGMjfn-J zDNsG%ooQ9g?=UajE=+Wncv+b5ao10zA6I|t^VRMgo6KlD+Fs- zb1nQf4;YSc2v_;A>Zcdw1=?)H3_nT(x>RS%%iDhnwr%KiY}_+Yq(N1LIK9MUEUQLA z6P%ngH{0imuk@W`Yb>GPt)sOBB=|98sg= z2VNwI0 z{&P8-ZRIZC)u8cD7=v9%kIQMo8Jg`}cG@{clbg}E^H=ldn6|U8_s_9W-J^q6K#Ui- zRqwI+FYtBU@pUfjC6 zFX{N<26VcY3|;yRzL!i<`b-&@Z^ZQ9G+nZy>a)&YvQ6l*-ClBJ=y4ETahd9I@n7*U z>hb7a@%_=|^Su&i(iO^0rB`T(ee{&`NJda6mE%^c%b6!gqSXpRa z%kt|2!T@NQ5QTzk?1eB5`H1$ZoPQ#mZm-o)Z`6ryG#GC*`ETCK-Dv6FXxrZC_}=J7 z-RMzyTL?r*s3R#BT+4T<{O!9zzk_H{qi7L_3xURld0-oQVPez~TGWvu2RFtOYDTwV zhwi^Dn_vg$VOmVc*o9tb2WpB`Knt`HM@HWRJs9@TjcWnKO)lQU_jVWRg_#L(h3`+G zGa*_mjQY;su2LgwW?s7z!GehHHpG!E+>qvH)Oe{Q9jNXi)#4=tki#d`G>L&xO?NYT zNEVY2xH586`&}Xt#{0W4I9((!;66n+PJ%cBZWLJ}exLFDN}MSIu7#4>bl-Z8^uF*u zXaBx_=sxeyePO|;g8hkXqK9IBj4$hI#c~hdC(ysmt9|!$C@ybu;h6@4s+w#px&As%7PfkF;J*kgaT zz6&BI4%UQvSwrAEw$JBc$n_i_L)_r+q0gTZg9%=yUMt{XfM~6+W>7uZ*O(HazGxWA z2OOIv)}PSenuN%*eKA08+}Gb;f_W`Ute}8~I1C93LQcg%J)FVbOfK8$3i~UD@!WU5 zmnVl;jFW|uQLt;vBdY1IiWywaN7u|VrJ5z0l@2#==Dz=m?y-ZTh0Rb~1Y41l)HfW9 zXOpjj$c8nymlLRBGx4P-=?JI;Kc&$OPi-pw3`NCbbGqZ$>idL8I(Br&xij>cQAt#2 zhDE~qm*ThSQI6Bm=gYz%)Coa6K+YC8s?;8yT#^H$1AMlxxQUVDK{J@b!(-~Az z6#jR59ujYxM#Y`fZ%MpLvv{UVT++O9j4*s6aZP*)qE|n_@obuD6Ga{b79y!I1a~aa zi1inP3%k!Fr9uiz=eR;oHlq}^IljJT4$icCjqmZdW-#428#t8u28^Ff9b761d`obQDP_My+uNpP${f~arMIt6>&6*)e^%^& ziJfU~^?77#zxWmKyJ>SNmaRoOeuS;F4z_IDc7-9#0q?$;b7XIReiL9-_{{ZmE_R4w z#L-V+XtdvrM!W2)h57h+(F+KBDj7U83FP|4{3pF;pz0?JK_||{o4O&a`O&K3H^=SV z6B0Em9{G-f zaDg3?H{$}k{eqN&ds$8XTDy68A6oW`V)GYv@^dIp56a3rx%Nxi*6xmKMzD;ItCn5v zPg;)8JWrb*MM)0YUR4Dgc9B(So%gbI`CklD6~Lb^r=r%{uezkfe&bkp)rj1#20V-0 zZN`d;-tXpo6n!`>?-G4HZF?4dx)>1?BT+kt65PzL2mh54Na7R&ATdD^aH}CG!qkX( z(VdJS`i~C*6wlBowgU&1O`Pe zYZ3t!#cF5Ka)pOeiIKu|G~IUn5_9lDn}k5RPK>M}1M{itxJycY;8!{p z=3g557oUYWe=)uvt{E?@O-p!9&uq!8#FXv9Sn5U3_S>h*=(5(dI+va!>_e}?(N21Y zu+5rLgSP7p*p z2W2!%(`?D9V&q@pMrQ61ZY)NK7N!ImWZK@sCe_Z+uk#KbZ3XA~RdTi7=XBtImZ}_9 zaoj1!Sl^bG>9ECe?^B~lI;Uh@=pMgRp{3FxUgufqMuUBmqF~dOBW(7?3@oIj*c9)h zY&6I64($E1iPSGRzNzUxBmu`dO6ntQ)s6S6pZT`UBz<>~gqb1RgTaYez;M2a=~_*j zZ_EUIw=yLnT1ZQIcQA0*=oatYS4?h#yiUkfl;C<kc@(D2T-=%4#M_@rZW7vvq-X zW* zK_&Q0PJ**pQ9$<4OWt%crmI&m?&b)PK29h`Chj`G$L$#Q<6_>kxtGjhb&YUF0_%+t zEhQBu72^sHdhL-^AUp^fMRx+h8h7cT_`FedceJ6~RXazq17f}X9)hh1lI&c|K@n_3 z)gRWJtG(NGx^Fc54SSnvlErh%MHaL58{=Cb{@B2~>*Wa5zTyGC?>&M}M%!J%p%n9( zm28+`A11#E``}Rx}Ja<)h>q$0lSbO5)n=Q3@hf?s`{PQawUZ@|uWd zJnba$!cC%-9^K;Q-LPL-^vlwSU#zk1H09Equ^Y{DCY<8*P$V!Fd?&(L*YGWxNkc9m zY@Ukndh!m)ftvv-s8=Ec`@*J;OCyEwl~8?hA8PLO%7vg)$o!?WBVF)gEBfSw#`F}t zyQFfV+zt^(-#?g3dZe zd-R`+zo7)rN$jwxTT->`%F>)cO=1=Oa4`xl-!arA1V$rLwHV7~*ivA-9fZuSZ1)OX zUl{U~F9tZN9^`B*8@+SAAOFyJn{T|dFXqZVNpjXxj2VC6_!7eqAMEwDE(F=3xtJ=^ z5A~LZVsiw8m?{UBPe@%6w*jWx`J%f)*s0ISzg%eiY2VPBg56l-z%V5X3$h*X*XO4i`M%`jw9FEb)-3(ng z*kr>!kph$xnP!CXeXZptX$PF*)2J;J*PhJz% zk^t`zAID3Pk81G;(+W+R5V%YbxL{LNAPK%+huMYk4N2U(fyJP3eTo?g(nutsYN`AF zZC1k2+(kjGh9epy)JA{IZ)$u~)PdNmRMFbgG*?T5`80g)lsa zVDd|2T3Vw5G0kX5c)x{k^{VVyFL(niq@YJrYBPKvqVGOIxB;%br==tf4I1lKxY?u3 z-GZI$(0Hl!>vt2{g$mKxzDo@ww?Z@y*(ke5U@*v$5wsoHrK?L01Dkyn@a|?vqK%13 z*TA*b`O3%+rXP=A6RZx)OI|Y4w(Xpy5oIz={+m--gXGLxeCyO>R2e3KM*g98R#Zz$ zUv^V}Iy0d%HM!E7pJ2&VTbF2v-q<72cTB6FB~YNVoWors`A{g?PhcS3M( znLcw)vPsg`X!V{Cc6zJ^W_oJT=%9MpA-$J#cy>Df!D}>cCzMXGDYU3ASlz_PsZZ zys=UW5TG=qDYzUcF!Qq&o5~N#nScewxc85DZ^aiDEbU`uBNle=Hbf=GEkr$ z^u?I83trw83_(#A2iB80w6OFrup)MsD-V^w@jeFniFYBgLSN?4!pnK>k2w`yOg*6} zRsfXn7dYDqMg9cEsDgvCqUR^;$S>^Pf$&~`O+;n!E*I#~n$wUAq|ZUT`}@M=HSQpc zWgP46@B<5w{M)a_iWfNhp`CSR$DTz2(6z++GRZf7S@AksgAU6+Ku&UwMP}Q}KHb0tF2i5VcUJD`I1j^|SJxET6rd;& zmjnMwR6D?`|Ma@e3!FW@*CW2ar36GfIXXH;O=4q9i)AVLd35G7tNHUy|Jeyc71Qk5 zX@b%juIm=eD)J5c{Q%At;ZIrx@nZ}2KU`<| zKVGrPus+IGJ%(y7hN|(q&8kJtLer|A{ip7OKi`bAucV(G|G>RzoxZ|#LkNH(bWQ(_ zoOt)N^Q^-`ihRy6%#QT&6a{W4zI`;t=zWgD;e!$1vxhQ-GqzajXPGr`CR~Hh)IBs-6#qA_m`UI`Bs#twzx*{0%u#hKb)Nt z6a9gG*94VMBkprfk=8I2)!df4CsRuDlGF0e&=ip{Q;2yWZ&uT)0Em!kQT#YSRq+5v z0QK<&b;0>9Qw>JlIgH0JoO1gXU$XpYO`dI;9>hX7SW7c|MB(c(8!Z0UMU$#TbElSF z`K9|9c)6RM$mE&`2S1w?p%~F=g^(Nd+>NJc`}YVH*5)u2vzl_>$=CL}ogUc$@FCDA z7bs-_?$dW%{yKL2jmm zDIuO~l&i|E&nP=@FHF2-|NImvaF_d7uTq}GcN>d^=c-V^1M`Q>W* z`3Kd>Tip-NYxL1ue)~+j>Zew5{Z9IY`uB#NaR8+W0z#9wP?xt65g+02OTPIAR*rbYy3 zSZ(ypSuh{vC!Z~y26mn6`TRx=IWNumdPmgTN2pJwIPb-@kKOwl{W?P>OLo_s2J7c= zH?>;;PE*CnwNqH5vl5#+_AX)FAI~TkUu>B5`=$?VCq~;!wgGQFT$^?Ds9C)x`eu0lAzIqe4lOEzP7a&&*vQ8w zftTYdq;6mRD=>A^LsGhm;Uvas>E_Ul$!T28k=>w#*611Eu;ZR4FmYce?-(!~9WflIYm!20WeN@?-psH+-Up#td&7td|5383f;6Z+J#L;iBSOnRE7f8U(W9!VE9ux5*)dO=zkIS zmO*W{4YY0&2v96(ahFmY3KXX;THIY)ytuoRHn>A@cZULj;#Q=^CAd4KKrPS~f;61; z{ocL5z0aI|ex5V4elVF~fSJsM`+C;Bu2&21pKOfuZp{3dr|Ri23YmZ2JH^(&lJ#Wu z&65>;%OGiw{eI>H62E88yYH9|_~WAQ$L&)T{(BTe z`jqPZDgN!TbKl&fr(Z{&9?U=e)%Zkn<0*tKV2gIUUklc9oewQxPx$sG&_wv zG0($=&NO?iBI!^(3dwYb*`n9#EZSY^j(SyEC5jo68BPXuMoo5$SNbM1pv)`8eCdYAD*5b+aqm(`F=@Mf!W! zPoCsV!f0W2-E&q`;Ud{Luj`_G9OtWastkK`eZS0m$j2+jr>KnG=Qip36`$?zzWqKF zzr9A>%X5Dug~MM`;`8zZp@>?`k%{oJ$a0hYa$iBP|Bvl~XsX)+A6n!)o+Z)P?oV#J zKXym59u{?YU0V;R(OYX2`{W9CF0yw*B$`VxF84cSrW7d@!Iul`hR6B zvsU!_Ts!wcWQlb?l%>wid?3^DNs!39lIMJPpS5=Mu`t1;=76Zjq|OLK;Mds^rch$t zQI-&W0V$$qYVNV?znmcKG>Qqj<6NKX9)9F$nryD2aCADwKS~u)lbKyYho|djs_0FL zWJwHbh$Y7AOaQz3_?DTa%7xv6)RX`( zKG(M4`b4VdsIE1{E)^lP6nI=uRb}EjWwbr&5ou*)K0rR-1KO6EHx^CNFf_5rb~V&; zC@aV`m4|%vTX*d(Am4cY0sBZZdFF{2rNNo8eB#W;i$&&(udb_~j7~R=4s)6YTR*~h z2+zCpNX;MZM$)*gXxg)2$dIx1t!QhdM@c?5Ngw}o%)@6BKRVUvS?x>y)QxIybj)qVCvYqEG+Gh{MP3KD;nQk5ye3#KbdU`(9eLAe?9#iqGYtIE}p^q9E z__ktGb60EQ#3UfPf@GxA54#!ab>G2jB1OwwU{b{0++rGdzR3Gi!M=>dTJ<(?cfnxh z-H}z2AA`<{&5xIUgJq&Os0~-0eE+Roaa5O|b2p#Ye#VT&o04q*tv7r|3!N4uE+qJa zcQ;$Ac)wGGI|LJ1l%y*5xmJXc_Xrg2AjSBHni@mm%r>qAvZA*gzu8ug!|#5_Py163 zkCZsxzO{@g1z;wgDH?;02pxJwdw`*S>x>t)qg^s2gkcmsMNFuaI3iKL@SHW~>&NH; zY~207VlP4b%FMdNIb-iL0K7H%yM)=lIHSMp-T!^@QBdxgcG`1wzyPR#Zm?cP z(xr?p5j-N!=aKX}$nx$;w9*q(Yx1%koA%rQso&r;r||TTd=~(G123t5%5#J~=E+x*TH&PnW)8)+wn6!CvAc!AqYXj9>Utt2~ zbaRq=Q6fAzc)e=W%yXSm5;s@{PmhIcxXFNH2UP~yG`$ujC21}ZIP_=Q8cf{Km{s9V z80fbcPIqqA|WlYLT1ZggSoSZ=wG!-qK4`m)R!`cE<8 zt(cNo<68HSla>?mXOeS|(|xkoemx+AadieKWi+#L*FBhtGpw#QD7IrcGF#_d?p$gu zk)vSMiSJrok#&M%uOhad$VPit&Xnona1k`cEj~H2syp+^e^}73%x9R{q0{x18Uw6b zt?^h&$mwMHy@Xcj{LZ3LPIB@tB70d*#iJG8{J|Mw0FjwAtksJwWtKM`-54B%^t^Oo zwSR|;Abi*HyIwao{W|^N(EnZMc=_i-I!VVfeMm5Ze@m4{a6wbO752rDyA8PYW@n!~ zQ?4p-CU}Lb;iBN%;!v>G)yinpV&4PGY0rTU3#{z5emb9#Rwf<^q6;YTR6xB*tb9@C z=06XH$0M@h;5a8!u*nH;-c@9Py;_wF?{4qF0qHqq0J;P5?akYNIk+qlq; zv))W#Tk%}MsTNJp=8r|eMw0KI^KP@M`qZnjtt6|i+atRhk|uRO{S3@rB;h&+j0cH$YzT~|o){ps++`Qf%?nxZmD*hbwEr%ZEd$dX&=ikzhKWMwKL zC`vNd6k_*EvbOovUUkOfc(YonwT0Jbvb*uzms{@5n|>Wyef6Cl@pa5Ot?o5#($jRk z=D8^8{G*G(#w?CL2gU0z5AZzQhJCqhEUrWM2d59a2QK1M+Od85%8`34k?uK=^KGVQ z53Ri$yu;1b+jXN{GVovcbke;z{zL4)NjJp<7}DtX$hcyxemXuEl&|&U>Dp3c6R`s? zBW-*T-hRq1XJa@6?P+ziba80HbKXLl`1j=dB`NV5p@me1rmr4S7ZI7sJlz4!Tuxi; z5*ob?X>wIMUI#zH3h$rn<)~rLvHXYjcoRW(g+U0qOv@oMr!Sl{{s$!~?r<^gtE?=E zhvnM|&y_8x&~7J>13ZZ)K6n2@pDXpv%Dy%eT3wjS{IjOV@ChRlL;byLJ7hLExh+=j zdFOzAoxRmtbfpT!F5%=W_x#PlCgIC3bGv5|z~4awm#h!}+?42;H`Lq!X$Bh@TatCN zYe7^$&IW%lh@&VMfV6G{l!w3rmx1ftQ0m-qnpdHWCj&GdUw->(o^Lg-?YS2oJ-qn- zkie1kcGB*a+i@dX6Fth?g@*t%*6jBw0dw59Y9X{yvO1H=r`hA6Kr5Oa$U%VYSME=n z{E>KCP})f?y>zS7r4q*C67a(ry~!CTPUyF}=|4Wm9Y3NEhxX$UJlS8h2)YvqUJesH zQhRsvBOy~85bSz_=RWmXmN3%l3v8E&u92jok>OaK-nxZ`O-dPdm8+@}r#+Y7tE_Xx(LQ0gES zZVBjD0m1Dk7AnOg9A7JPv6tYVe6&C7N%Zb+!$Tj~cv70D?%1U;*f+Dg-(~bHhlIy7 z2BuzoKP`d@%|_f?W}f0q(P3s#w&js3mNq#Sk>$ghbH<;FFZ?^1T$||J3|heVpIdYyHd%dLdMKHTQ5f zj@p~Vjg^F%p-JG5J6CJn7Cdn~JrSWRFt#+q_xr2Ji%|BOpAd8c|2jAj}?s@eiX;&}NPpABWDN;<+ zQjNHe-y|2kddErQDKJYm((E?BHvc5!(Q^m2g~R#PmBv5cy(ND>67_82zkVmWPby=j zA)^x^bMd2ybb4kd?%uD*X5{x6gcZdEPANoK-2|wtGd1Jm`9W?$UxU~nQQkmh**LRMO}Z``U|~G7SVA2__9RQiDGdtpLE}0 zsd(WVRdf8-*9BdXVbe#gaz)+@PYi68M6o}nF2GUL1M)Jb?E_rS>64$^@zTqhbG5f^ zKXz0%b$3gSC}@3`%toiD6{56)N35TA~y|t`#m9e!l*}okngsUv9TV zP8M9rk6JY2FPzod?TIch_N~A9CJa5P{K;vJT;IfNZ;A%T^0;;TzqzD(@!sg}E<2#f zPe5saDrPxPs7*18&m!d9emyqu4~2G#nB^yb^ho@PHIa-abDJ)Y95R-x>J&r~B@TS?X9pZ(uWWB7Q_m>S7(wxu_x{17e0WBE&8> z#>vdJRv;KlsA4F2v3OiXKwM2nTs=CjNj$zaAifhFXXXgS^h@%I`>j8S|9%nuu{Jz5 zATf3&rl_Sjz%_P=8VX>6ehq-4#FKvqBwuzU|3N1MCE(yd_?^`xoY15p@#x01ZwHMp zw!qL4ibONz#8pg3>XVMj{w%u;Y8qg2>@6(m3p(jeV7f|Yy2fQX{s0_81HC5^9iASv zsTuwtrEOoVY~v5IXJHI0FZmk$9P%vYH%AlWt}beFyou$7!6^ zKXYC@#{Dw4JuAoWqcol>j3X1^-jo(jlOCOuJ$0EsD^ai*Sg_hzu(_HvCXr1M$WKEP zJ|TWIot=AHliAc+^u;i5YV@O|QLgRRtkA&xF`D%4z!I9S5(deV9FxM&ml?It3?u$PQW$kNfLlRU($dCGlfL94sEGHP=!fX#fz&7E6GX|>=hf6=-`I(23HKZ zTka#tB7D)VvWthzfd5W;<^UQ1Yd{;||2E}GLo9|BP>97dGkX*%=u)n3*_Pm^oQldG53FV#CJD%g)Nf&B`Oh z%pu9dCe3(Xj)7Hyf%O>!t0E)IGe%Yg?2F7i5-b8j_r>_`KjC4O=3I-#i-j9YM4LR0HIq$vp^$8;lJ-(F z+tnb?+brMTB0tDF|FvCym{Wd)TVAwxUTi>aTu^rGtF)-sNfF^O;Zc!cF`=RHZ(vCw zZ;}JvqYc9VnX2uXs_vGe;*z4^lp^Pt{?sY!v2(7J zYoUZk=@YMNIiI&mJ`HN#O*$U$j9uEy9Xf1Yb~#vgyPEfUn)UgZ_WPL*_?r#*KOYD* z9}2Sg5NtmD%6tN5z7S!t9b<7EXYnK6;w-`9SAxZFY!WT8IZv`WPqO}-WSevN%X7Hh zc?vf6=cx|oX^!V)7wIk+8Lk(ZZWo#E7g-(`S)Lc!UKcsu7dbu`xqj$8Z2Zyr z0qBAtbU`q>@D;i!1YPtRT?|8)gkF|}U6zJlmPTBbMPY+3i$<5lqD$h=3ln~3rXR!e zcB4vHLdzFIDyD-g#zM-6B1*d>OFE*9TH*>2iFt1ma%ABUJc{Mo&wRweg zg(dZ+NjkMombbJNIK}gX=&?ldHeH!va)U^`vHf{-`}5Y{anJwkdtxU( z54U$d@9Z4?H@io>d&mDydH!)ewTBOc6OeH~A4QbNM@F!!<}0UIm&8XBJ8q25B1@8E z0STex&(Qc6`5RcmSu zR5O|ln?F#b88zk%#%(J2kyX7bnDaaPaGtiVRlFBQ_{=E%g-+R7>Y7?@`nGN*C{OYk zb%vFG&AmF)$$&*}L%5kr;l_BzOQS}i_hBC;GCvzP%T44y>k_V?uX3(w`?$7LzuaLx zkyKyT=K7-B>r3Isy+JS$B{xCij@KY=)o2=z#dJ^S&(Fx@Rb`<^lUD9Ls_J zyA_PVZ|;a1zdD;WDzZTzbI`oWbv@s<2i-F+4kc(iqzxz8J7bQxcNi5OIds?PdCYUa z<4;+ZlK6LG^>YID3|B)U$KtF4FA7Ze0?!NsKbP2N1(l%|jgo#0_^-UGS+Hk%eR)Tv z{EZSGXKv~{YGtCZJI!r7d^)NUFEhGMVGp9rqK=QNilYeGS!^>M3k)4hOAm8-+R*Iz z7{Ngin-|CR?MA_pSC>`EiJL~%ucKKBC+v&)YRk(sxCvf{>+MB3y7#}#+4U?nbpF=5 z!oMhAV^@fMFLSr4F8Sy8)7~!--U_^*^!g6oHdptVqys$4ymIx;5H~Gt*(m$uS%msnofut8MRuKRITsju4)*=xmaLW_9EZ z{iDdu)ep4bW?`kLPe7?Hh`#+f{n$IUpGXFu?-x>milK!_nWO&KoVwWN;JmgHiSN9A zcmLp`v3>pTrRVO7LI%w=g$cFaYu|xE z^wIc0VrUNz>IYzkV2c=mf=DW(LIu9+;wHC;3&L4&2iF;BR0VJZ737IAM$mp5m{>GV z4~*Cv5c+eP8Snn672zRS4E+a$JWaxGv=tOan*_xd#C6Bl*SAJhisS9vu_QIj2GWc& z!#>BB5DeZAqaLSzRzko`qM2O`Aods}FVrCr|l3}DWX+Z0JU38ZC92MQ&NKZ+K${)G=kGbhbrOv#5yOlC($~j6&4u&P8&-xGoV$r60U% zAI*DnA3LWMb@~;MxO1lk_p7`jIW8=LU7U=wIYCjlElU*4uHU67?|!EM#5%;%bm#MWo)W~ z`q-QpA7QN_7&xEb>|S+iS&l+8>mM-qr05b9>ZGWubPwO7(Wt|3pp zlC>T2#j)4}5(N@uY5Mhs>GO6MSEE>Ba>xPhx8w6*860982SwVjY}w1C-Le7sVX9_j zlk=u!?Cht*qv3wyan+0Fg()X!#_rZj-V(s*XpN9UzTQtyW8(1uMO<8@ZdTmxJ3`x? zm-Eml5dxuJaY|LZ(Xpra9xxmV0!Hxb$G}}a7!EaB32%G^K)T{R0$c>(6T_oo?GPXZ zzpdnq9&5A}&FH`*SUL&91}MB*NH1Q9amUQUnDm$fNX1EUcrEQD?FE3kTQZkx=wzl_ z@v&POY&XRSMyxI|5<{9M&f>JLAQj}}?GU9_Wc70I>D62j4*+k2*i=3EYQC7XwOUEz zL^tnhp<1)G)@bU)u={Eek<|LuUgL}D`qfg$bZdkE)ED#XtL1*uHbk_>S8KZKl~K*M z=B%l&c2d`?$fUNGDvfVWX4h*g(`{|-Q{UWzuh(}-+dD=yzI)|eZyag1cP&qS_v^mi zL}8~>KWqF5TEE^xWA{=orhdG>zTO5vI{NW7QDJm9I|N!CSg8*xO6q18n%wb$L-RDw z>}HSJ-k-kjl!WWo2k|G>cq5ozK@!N<1LD;kanW@6DMSNCvJ6!g>$1$x|07RLe>*Jg zwRM`mup#aZC7?`r*Tw*oXHvdEYqAT3dmP>8P{xiec$gtf+W|8gCd2lMY^x`Y^Uh&9c#`m8z+2I^l@GhBg&);?K`#5INnj}lJX+a%+ z*ryJ$Pp2`-cj#^Ce<4-YT^rstT@-wG(0V*qGmC?wkpFSJbNwi22WT@nbixbi@pghG z@f$be?<1~+z0N>`U&8M&j)r^}l&N34E&GwCmG`OF%6C$02LhUnCg((=i-;76sE}g< zZ{4&P#q38#Zj~T!F>WL+5De3AX4#(ww~*~G@^lLpbmCp8P$_Z?ju@&@QEr&u*-u=^ zar8oA* zW>OYLg(5PH)+dv}5&G}7D@UA#0yDkNClSapdUVk zfkH_*`y-xsL>PT0VHJRhDB(-Y`ni%tW*ZSJb3m1gfsbTJq#a`p^<<_y&h^ z#*A9g>kb3Gp}{r*^klF{BUadN_uCSHNu-3`LSJdGgn>fw$CUgDIH9T>IOQEAA~A6@ zI=~=;*LzAZkSuVY8M-?{##IgJsTR%2CKK8recv92=75$E5F0Loe^n*So)V2+ByeO0 z>{NwIdM2*M#P+QO5OWN2@4Ky+K{&ivRYmyxmm>rXo9oLziu$rB8nGL7ONtMV+H_6Ei%*oEl$?eR^ zU(G4J%qgbHEtSYEH_5FG%&pGJt?kTxyPDf@nTw#wYnI4sG0AHS%>*~zwS+s4TowUni$Rjb zxTeK;LB#~Q#e`kO#B0T*SH)1;l6#URr0pcO%`f+4q7>aBWiI|S71Eo|epds@zBnwD{6TAsz zg&1Onl9-Xqp-4n!AR#IR>qwGKfvhXS#y?k>M&JYx#|(kbQ%^{D&-=KE)S0B?%H|#q zlp?rk5#Hp4vZ0TEw}>R(w#45+;H>80NC0rP*U7M^uD$+h9go%oZqhSmh}5agDuQGk zLH30?>Vph1^cteiLu!EnzaEwvM76zGCk}*@3?N&y=vp5Owib>H6Jx&d7EB=ptS#6A3qfIZBXM;?me2S%BrU)#(0c zhH>BrB*{BUES$T<1u_C|0laxw$V3ZD2Uf8_s8~s<=pj@z5Nb*&E!kaqEcT`#W2U0O zs$TwjUjAcsp`&5LhKYuag_ez#_5lkWI}_H`LeEK0&&9~V&BVmZ!otVOij}H7WVlLxmpCVfB*%lt9QUO;S!K9bWVu*nIaw7r?<;e%X|l5!ay~HQ zWVhhtu;Svh;^M-_f}8sVR?EW8qsPOm!NaS>_fUafK=GlVvY@cqBT-FZF)dMXZ81q* ziKhlnW#CwA z>Wr|qZ+EcmakYByZqe`YV!+F6!29{2-;1F@i;qF(W3OM#hCSbietr`7;w-`Z_rLjv z4E+ZPVVO{}?O!bPmkIrgg)Y*Z{^tLVh5lhe*;ppzjn45w=lY`mlA!=}e&D}Y=wC8~ z#X@heWatu0hD!e@8H&6tkGd?6zATSLmnHlzg`X8?eJw0F%rDu=tz6BiTF9!J$t)kv zDCtWtYEREcr03S8WtF9-7o?rv=GPiSGF0! zmYKn(SwT8kf$C*ZrVVLsEjfW*B@yqdlLqTEhMS8=+bYI7>&AN#`a4Gl`$s-} z{P=NnaCoYJc(!k3v3qQ-dt$S9a;txOduVp|!`%MI`TgPf{gL_o@x}eArTv-ZgW2W% zg_XUf)xDMV{q@a*^?%ebSUb$t)~BtlgKccKKm7+FVI4951xWwruXnL*Y4><iE^V&V1$biW{sb#R)^=CwO+b(ckPleA}0RY z4$plje$IAn*-yBH{VM&44#61YjJFv5prxq_$1d@LLVbeYr&Qpg2-A*P+Uw+LXP%6VJ@$ou~D> zYv<|Gx_du~(uOBzoEI36O5iiS&z#QZ%>>~khy6tHxg-66eU)d6fyNb8i$NhRN`@w= zF|i`E-($WOuYqhd+L2j=>pa{M#k@(s&{!Pp&yrPOfY%cYR0gQ}wR zkjo2;jIb9f#i96Ks})(P!W|~|cU8qpaxnG{nTJsfK}U8mp5qes9=@e9RfVr4cQ{Hu zP MG2aOaOFjX|9LmgT0@+@La(0$iWIYWuN{>Nh5o8ocao1X#y5(51RhuqZX4j_% z-g%q-JjN=j#Sd-8;U2`g$IxrS-#lk26K<*ly7Ce8>clXy1qU zAIP*^&a1EWjQ8{%MYQh$(}JlKQ(J^bPyL7E|Cvr77LmDo1Wk@>i-Lwwj=(9Op({j|2t$V>?9>1X1+Rl z^M8a)pBt{f_gs9x{?U*B@CNmP%Kheal%w(HY*OsU%}=D#!#}?kjNJeHUa@cdbH3sK z zQvQhb#l#s;mQuEle&i22jkhE&qaINn7Ro(Ma8NI!T^=14?K(~LNGPNKtUMyQcA6A0 zS;lxVI`Z`DG#N%*&Wx`zDo1+;k5MmYr5YPmlsrp;CzP{ssEnzao~33_ma~hEjcEp* zr4*k)NSF2ZW8;y+{cAaG)5-ND@RVJ{i=FE=C3V#2w3G=J7tbXE3foPRU zYucaLqw1AHS!0uSl0S2h36;WCDpO9T^Bfk&&&2xfl9(yTa1c9u6vL#1_1-xknmHPl zF854;*dhqLig6eYp?EZl9+J;7F~ib*Da2&iY3x?;VX-cq1oxyL#CzG%a-Uh?J}4wR zF+sSPLm0?gGrUB^1YeM`zyJQifHtT`{+>&9xYLR)!!Y8rbRjY^QdFOMUoBG2Q3&Fj z4`Y`#judy%)d|+U&(W`41CS_RrR|{Mbft|NOQ+%J08$Ot zXxkvm3BDEA$OWsCInmpI8PNmJz;ndqq^L4a0y(@m?PwHvMC41$qsN)MKmlH12D}$w z#rWOOM>p~%lhAD*Ip}>n`cQg8*E*SgZn!fqIaqWShU3s2?un6SaHH6v7Z4~o2CzK# zv19?i9YFfPcbJIbm>Ri20)wchI3Qx}TDis3HB^S5BzerqV}O*22Z|M^wu4uT{R%S1 zk7}0*R&_EWi1ZWCrx6+)l#4%2=5c9nu{U-Q7?0NaGL1u%7wP6T!o84-V10W_aDrQ< zhuhtZB&7abD^rd@zPuSC-s7wHqZog2_UW89x?n_pQEm23Er@gwp~FePwJ*ojw3Mu6d%$Hk9l#yMF_7ehk( zL3b4$3oN(nZftr_2u^&e5lHf6En=ycJOmD=vq)dCHSwK=^6{@C9C)Jrq1-q6B}dspIG<3nq3Xp^wuK`C zmJ={e0^3F%fE^_#{$8KHy5(=M~?xU*+H{V*|sqfC3 zYxoGLszpUg{tmVkaF^8gc*%Y1*IV#i#Ak@>7);5+?SqhMG$DwLq@`(#dh#`(w@%wO z-LOrC)IyXzm-Oz<`SklXA>^<}*mi?oNjW>S&NqQj_jx#IWrYv&5S|#-*LJ6i9f*?) zFrkZI4Yum{5y#W?uBwIL{G{JTx`Om<68+e5#VWE8hqkal zsScy^7~&&tQ}vS6BEXr~a8D>mvep5SfGke);z90JQO5XeClcn14^4w+2ijUU_TB`$ ze|n^Wn6O~{NxiN|e9&>{kzw)4pWUA7>IxPd?*6zMZk!|G*-#fpxdi#>A0RsA;5En6 z^QkQwoLl8!@OSl4Vgv(Dq5(7bYbAZ|%C|z|4w#H6%s*eia>kS6n+VkmdRPi`3Qz7i z;Ly4pH^ZD|&-5IMVOwXxn4iUv-XkTgtGPVPuWGH{6Qh}{rEbh`L~`#}d#&rWb4;8I-vqyJ}9@XkQ%bK}4l)Ak{CinfS()x2^c6+rl(|6vEnfdcQ z`1X1S@*X{+g*nT+y*bi)f3-Y=Iq$yxgGzpX^I7ZmYW)_2o_UYCn7PGV-`)bKVIXlB zt}zTR0EV5&A?$z=ufRyrFer8CJ@HU-<50?gQ0nYZ+Ky2Al~6`>C^K~!t9TfjaTt3* z7-x1EcSjiSN*F&nOn^FENIYEFI2^n5BAy+Ny_xiQCHyHmT!uPAPCP=vIKpi~0gE_s zVE|cZh${k2r40auM(l=1s8)yI0u=VrA~*a2`)QG21b8zVphEBzdwD_$@LHGPscm)C z&bz4Hkx0dA>6ZepJ;b9`WN`yJqF=2{AQ~R6}O19D3l8bfipnGK$?=NUaMI&qzwmY-8$8t!pY)`d)Uk@F6OJLWmBG6w3g>W4z3nIYazxaJ1Uj_? zN1^Fv?AVhu@uWbSE!?jLk$$6`zK2M{K7r^%hB{`YvLRCWE>i_1(nMlGPQ_%Bt0a$O z6K|pEqXOyA0@ELHLDg~yLA&YN$6zV#&?W#8LK|#={UfzAxI2MU01~8S^5bKo8#FP@ zG0}<{&l-j!UJOp+f=b#Fwe0{wf?z!lqHHecj)2FI0I>xsXJjQ4)I?aGBX17HGlqr6 zae-K%AaOywM_eRx9w06_D1j@d&5}%C2K*73Bsxoq`VEOw$;7P!arY-MXp??o&YQC& zbF3n)L;6s5G2PT&ukB5~QG^Vp)H;-Z^N2PXq*VwsdyAtJXu^!Oq)ciN_JPWM5H7g z`xt|w+VAEFM1KV_MZD z&Q7^LEK3pr!04l+!NoX+0${Bj&?97Z(n&Sn4z8{?_~}k$h%!J*8?1$@&R?rZJi*mR z;^M)gaXf&zCpFb;HJaLBN$qM`aexLh7+WA{xvJI{0Q;lE@jYr=*XokSLHYvzGBE&y z9o)X4w~1>Y1LlCI9d&%Lx5(PJl*n)#?YGFF`th|W34*%3p!($#T)mxIkpQ6XPW|B( zt|p@1K%nk0sNMiOf7yYvxz@0K;vlLFFpz2d#tkO745tTxubdh*k+>qp^#E zbvV8ZczGQ3dbzpk1&zSL_XfI=~VPqZx(YAuo;Eh=h_ zI&k@SGA-UT;mUQ5yp}`_03w;|dW{Lh3+DzbIe&c+O)dfws=5o5q*SLX;Vc+xanL#CrNua=J)EKblBlGl|l3HA&QXFzr!zSQ8< zh2!+&RtI-KDt=289FCT3?pp^9tc4S4gFobT@ymc6*25`^dl1e&7T4kAPL}m~&OI|k z5qQ{JXQ(a(Gw>hP2pj~CKC(Ms3akO`k&gjrc=YY$)$;C?Kk3Fcsc;PdU|#6^M>`;1 z0N4PD`|dg#2M+wPUUhVWdrkumUc+U8bw&_Wk;8!W*ncnKKnf24&pH_p_+Q?X`%kIq zC9sN=lmZ(Fgz_$w`rbXPX_%gpf{}`f`9EG^TAKTGH23Lg*cfR44LvOzHviEE)6=mt z&~q{}a4|7*Gc)lpGykvD2@9UE5qxm}(F0adb{0tv<|iD?(i}{(oc}Y-a-1x3T&!}O z_vN_QwR$1 z$KaCD;IheA<;d6NixH)p$@z!5S>Fm%&Po!`%i_>jj#D1<7wG)${6t=sMf|M*VT(Xm z=z~Q+*j`Z4o4*C2!jKDWSqKY;@`L_zB5Z>Q+atnaBW!Yf(b#?w7AIkgM%cO$wseH8 z9$}N=_P2?I?IU56=KK$ea=b`&{M%Ma!N&eCrTW`qvi-}g{?aRKwFz5rvOLE&o&Lt+ zJmGKt)}InAe#TgxL|AWz+RVSUnFz5N4z~UfWH}gUF^KI@`I!v(8Vz_G^n2^~d+GOj zn{@hFwgfmd1bbA4_!NcuXGH|2!~{jh2Lz`C`eg)o<_5SF1UQrg*j5HuR0dg=zji1O zcQ1?aFG&h3Nr@^+jVnn{D9uPJ%Y>I_rBvpmzb(vaF3W4L%0o;86LS62{Kmo3=Kk`=?&|vX+WPj!#?Hp(&gSOs=GN}k-|TH|?Qi{uM*Z7v z`cKCRTW$JpyXk+Fnu0%#FTM{0K`8&0n*QZYP1bes)F#+cQDx@KF`F<#ha&Bw;U_P=+-^`(B)gQjIbcf)d+@vTMx$tuT9axe{A=M+|p>? zXcg^`UZYH=UnT$i9E^3XG;k#U{u0paJmNi)bn#=S7c)bn)%Pk;;%I)vWQH;6`od#t zwCHv?@z1sE*%$Yr%J*+XopCvfX>lpDheHV}b)xZTEj>cP6xz%z;CuSUOOe!e)w@yj zUKxgFE}frLo_o$3EWZdmUd*xx{ev}DL_Mf9wn>tuT(wQN%A~Q+4LRI*C@HYZbyC1i zWV$rZ8q&FS9xs`BXcHRcdyX-TY-AuMlnQ*7eLD;M{C%j*1AMdX59yC9#s!#X~! zm%1!LnBQ*SM*Oh4?EYiF!~6GT@VMBV6j-efQZUNg5_D;8clHj_bU@wt@j`w7CY37x7lj*V+;sw%s<>+1W02vSwXRqN_|zGXUl zbf2GmX&fL`b7>lh>f{ZWl2l`CnN?N$mUs3d{#*XK*ZQ}1r-=BS4p^=lXSew0w?B=X ze$$u6oKDAE$DMD{8TVy;op86oL=md=gR+9SYw;S_YU>(>Hc+YRTXA1LbnBXYYV5ar z?9w#scOw|UDos@1;;C&`-@0r!vE8;AbX|{`bgbUx=nT~i_&FUx)$lXgxwqS}r-0xE zm-)FhH+4cD>r&18RPjH*s&TY5emme>B(|oQPDna0n`^0`rchp@Q1wI1e*FG>0M1>bv_8pV)XmQ6UP2`_5x5OqLo3 z@0>Q^{EYPzGjNCEas-szF-3(@PZr~9^be2*A;RxmVtJFY9Heq5f>RyKn??u8t9K#= z5=w~emF1}$cA~^5OGy1kIG{_i#Zlt{WUGoTCb%EJtx5?+_01L%%ejKhin?MmRwL zc+@^NP$A4+9RIL+!VidQ<@rlZ z0I?+vpgK&j{}RIO;!`g0%}zDt6hdL^o%@1XQQdz{jdx*?vc-59RG9;Q2{53++o{p@ zR)LWOSmFR-8~|=qGO2=Zjqy~iVf*-EL(uO!te@C;M0Ke-_xD=|jXKli@ujw|-}N4e zbnEOi zYbS>F69=8YE5`bXmDJYeuzuodjrzZS;-#+hzkcF+7kf3VpZL73V+!jho>tBWq&g5bGyKCN})_6Q7t~bgfJ^_(jvjt7_n@Pn%EM%3$b;_Y*e2(_>R`6F<8Cpiy9zYjoOvqjK~bf{7gzsdl; z3-A5*B8zy~6Y}<}4XtqvoB)p(YM)@lY@m&Ac+|8llT^}gyo)c)e3Q)Q@@e31ra-vf zO+v)4c6tiUnCKCnaC$RwYS>#)=cjOiN` zkHD5WDgsf44@!Z(N=w*d5JM1yV(~HeBt2e+B5>f=GM-Rw+fXlY2^Mos)I*GH^?-qd zj*xa3_?{e)?be3r=q>!!Wm6L9=g{OU_Gp=69nL!rvdrJJtC)Iqb^=yl+8akcVYjE? zC()fVZ~WY|AO#M00`_SnJG??!_zqP#*ofTh1exCJ?1b#Vv^PC`NO8TaU!%ijsx?Kr zx!ID~Mr;a0GG&PAHNJ2Y*fJg^03~sSh`GNA5@WUXk+pDACB0uvC4Rr8PXoYvm;<=}GeM6&%TW03b7#@R|#V!6m=_)?AN1cQ=j(gK-+qr^(DHV#1D zI0RLFVy(Y>f9Oi(GA&Sx4`5D@Jju(9RzP=^u#;z`!E6yseVOPIZt^g9wsOYr)94T} zHx|dT{e8})=zEH3bU<667q(5bE^`Uyah6t1tNuk0QQ zMCZA}fYicyqq%stU}{^Spp@~lXkohytJ`mqv3|y+*LZl^o4$oq<7;o(-Q{49M?J~1 znS5sA;y;^TkVN(__rPRYzV-fmWv2W+hrKcMa+X+zaA5e;?+e7OPMEpnr?0ohUi**q zJwNF6eGWO7ET`gyTI$oHZlHL~9|w}WEX(NmwVEH&8i)Dx*f1>i6H0L+f{0aM^hs_b zl9gH^KDvzCw<}FDl^8yFkoFMe(&*_s|65OnM;6QuDd zz5jW>{jIh4TIU)^{Zp2+u4B&g_(csKM-5X&kBS2;ujtQS(G#iBQw`BG6VY?W(F;^D zOX4vrMlow%F&n8dTMaQ^CV&&dF*{VTd*ZPNMzM!pvB#;grwy^cCSuQyV?opyumlEb zj3MyG5T#*A8Zl&(7>W}NoI38ZMBG*5xa;0=RB3TEjd667aSSJM2o#M(BrVSiMMvw;*KhoAt1-RM+F6gbs)ZrCqjBzR> zNK=C=brb=2*-R40qy1|o0*C|#GKM6-3(p*OC!g0(WJ08^^V=s=Cxxa#2fZ_HcL3*2@yCqGI;)@) zsuU|{+Gqv<#DORls3{h6$fvYP*R;_=oRHehcm{MvlN~8Qqp)0=49Lt?v&2@ zuuVEgDUGVW&^3E8(FmOi511p)T0ms2Y~rsX@k3K_fN|Ig-w=h*zlq0tghP%Z+K|Q* z{QJaE*&I8nuoqw9N#I>FUT*jrnqvA8#>Ah0Xa)->)@)78S(wZ<$-%z|C%1&>UNOm~ zOwXmA%4MX7S-NfT8%R9&Bi5$Xi(&P)#fJJ=r88G?tjrk9T^Y8DF&1#29=0Hq` zbCn`;H%fEA!1EZ@$ZwTWY$5YxwToW%0x}y4oz0~7;bQIEY2Zugm1*Ru_%!LEc4UF2 zInrDCNHyT!Ut=5VYL}k-ZGj^4BsXr#cNJNT9V4GxAivWH`-vp2t%4M7DJmkNN(gv0 za4-_2QAKhh3vOlwAY81sIXSi1c?{TiOj&sBm~OZ;@jheW4P+Mz;1+wzC+RIL z?ItGeEG1=+l(D`oYp#wo)mAXpQ_?fKrFrkR>H}qEbCuhVRBu_U-m+Cyc2rlfRZ+LO zt@%h<&qDd0rJChE6+1&!CqvaI2HJs!ccYE;lJ4ncKG4mx(k`{tsV+Ffwfa14^)+vMX4M_$@G;SAH7j5*|M@Xc zL@5M{C>H_H1+ZKCgDwDW0YHnar?`33U&I2y6>(j|6&z?Km|Z4{sdqZ7nC9% zpcEH;0@zpmJDG@;hL}Iw71Qmw|$R~W2f)qc3zm@%H%0Arg`Ewh-OVq1-dFdw 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 FacPhOHImHL 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%0Am5It9`8b6hf7{2J>vED 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