1.0.2
1.0.2-202506241106
- Server
- Retail App HTTP API Added
- Device share list interface
- Add share interface
- MQTT API Added (new interfaces per new MQTT protocol specification)
- MQTT client online status keep-alive
- Get specified MQTT client online status
- Report MQTT client multiple classification information to server
- Get specified MQTT client multiple classification information reported to server
- Get specified MQTT client assigned ICE server
1.0.2-202505271541
- Web Client
- LOGO Icon Display Optimization: Vietnam customer customized version has multiple customization requirements, LOGO customization is one of them. Customer provided two LOGO icons for this, adapting to two platform themes. To reduce subsequent other customization development workload, main version was refactored. After refactoring completion, if LOGO replacement needed, only need to replace the following files:
/v2/img/logo-root.png
/v2/img/logo-dark.png
/favicon.ico: Based on customer-provided logo-root.png file, use online tool website to generate new icon, replace original /favicon.ico file
- BUG Fix: When latitude and longitude combined with
N (North), S (South), E (East), W (West) for display, should not show negative values.
- BUG Fix: Solved main interface top-left dropdown menu incomplete display issue.
- BUG Fix: Solved main interface bottom-left version number display issue. Previous version number display had redundant
v character prefix, causing poor display effect. For example, when version number is vi-1-v1.0.2, it would display as vvi-1-v1.0.2, appearing very uncoordinated. After fix, removed redundant v prefix, making version number display more universal and concise.
1.0.2-202505231644
- Server
- IOT Online Status Interface Handling: This part focuses on recorder device
mqtt_client online status management.
- Optimized original
emqx mqtt client online and offline notification code. On basis of original caching device webrtc program online status, added mqtt_client online status change maintenance and synchronized to cache.
- When multiple MQTT interfaces for interacting with recorder device
mqtt_client program are called, timely update mqtt_client online status to "online" and save to cache.
- MQTT interface supports batch querying multiple devices
mqtt_client online status.
- In multiple HTTP interface returned information, added
iot online status field, to more comprehensively present device status.
- IOT and webrtc Version Number Interface Handling: This part centers on recorder device
mqtt_client and webrtc reported version numbers.
- MQTT interface responsible for receiving recorder device
mqtt_client and webrtc program reported content (not limited to version numbers) and storing to cache, to meet future extension needs.
- MQTT interface supports batch querying multiple devices
mqtt_client and webrtc related information (not limited to version numbers), as long as device reported content can be queried.
- Web Client
- Optimized location icon display logic in live streaming and multi-screen live streaming interface device list:
- If device location information valid, displays different color location icons based on device
mqtt_client program online status. Location information originates from server-provided GPS_INFO data, when device mqtt_client program is "online", displays green location icon; if "offline", displays red location icon.
- If device location information invalid, location icon not displayed.
- Improved
Device running information interface, aiming to troubleshoot abnormal issues caused by device-side program version not updated, such as MQTT connection not auto-reconnect after network switch, WebRTC connection failure, etc.
- Added
mqtt_client program version number field, for displaying device mqtt_client program version information, this field only displays when switching to advanced mode.
- Added
webrtc program version number field, for displaying device webrtc program version information, this field also only displays when switching to advanced mode.
1.0.2-202505221751
- janus Installer
- Fixed issues discovered during testing:
- Fixed
coturn-external-ip parameter not taking effect issue.
- Fixed
ES_CENTER_SERVER_COTURN_DOMAIN_NAME internal replacement configuration variable not set issue.
1.0.2-202505211437
- Server
- Forwarding server configuration originally stored in server program configuration file. To achieve server runtime dynamic configuration, configuration data query order is now adjusted. After adjustment, system will query configuration in following order, once valid configuration found, will stop subsequent query process:
- Query current device number corresponding STUN, TURN configuration from database.
- If above step found no valid configuration, query current tenant STUN, TURN configuration from database.
- If still no valid configuration found, query global STUN, TURN configuration from database.
- If above steps all found no valid configuration, get global STUN, TURN configuration from configuration file.
- Previously, forwarding Janus interaction signaling used Janus number fixed as
janus-1. To achieve server runtime dynamic configuration, configuration data query order is now adjusted. After adjustment, system will query configuration in following order, once valid configuration found, will stop subsequent query process:
- Query current device number corresponding JANUS configuration from database.
- If above step found no valid configuration, query current tenant JANUS configuration from database.
- If still no valid configuration found, query global JANUS configuration from database.
- If above steps all found no valid configuration, return
janus-1.
1.0.2-202505201826
- Server
- Cleaned redundant code:
- Removed penetration technology integration-related database table creation and server implementation code (already switched to WebRTC solution)
- Optimized device data storage solution:
- Stopped original database storage device snapshot and historical data (battery/location, etc.) solution
- Subsequently will adopt Elasticsearch/Manticore Search and other distributed search engine replacement solution (addressing thousands-level device data volume)
- Middleware Upgrade
apache/activemq-artemis from 2.35.0 upgraded to 2.41.0-alpine: Multiple improvements including management API enhancement, message storage performance optimization, high availability improvement, TLS configuration simplification, added OAuth2 support and multiple security vulnerability fixes. Alpine image further reduced volume, optimized JVM parameters, and updated to latest Alpine Linux 3.18+ base system. Full Changelog
coturn/coturn from 4.6.2 upgraded to 4.6.3-alpine: Mainly fixed security vulnerabilities in STUN/TURN protocol implementation (such as CVE-2023-48790 buffer overflow risk), improved certificate validation logic, enhanced DTLS and TLS 1.3 support stability, and optimized resource occupation in Alpine environment. Additionally, updated Alpine base image to 3.18+, improving container security and performance. Full Changelog
nginx from 1.26.1-alpine upgraded to 1.28.0-alpine: Core module supports HTTP/3 early data feature; HTTP mapping module added map_hash_max_size and map_hash_bucket_size directives for optimizing hash table performance; Stream module added udp_stream directive to support UDP stream processing; updated PCRE2 library to 10.44 version to improve regex processing capability; fixed multiple HTTP/2 and HTTP/3 related stability issues, including frame processing and connection management defects; meanwhile Alpine base image update also brought system dependency component security fixes and performance optimization. Production environment upgrade recommended to verify application compatibility in test environment first.
bitnami/redis from 7.2.5 upgraded to 7.4.3: Redis kernel upgraded to 7.4.3 version, bringing new JSON.GET and JSON.SET commands to enhance JSON data processing capability; optimized memory management mechanism, reducing memory fragmentation for large key-value operations; improved RDB and AOF persistence performance, especially when handling large write operations; added CLIENT UNBLOCK command for more flexible blocking client management; fixed potential data sync delay issues and Lua script execution edge cases; Container image level optimized startup scripts, enhanced integration stability with Kubernetes and Helm; simultaneously updated underlying dependencies to fix security vulnerabilities, improving container security.
- Web Client
- Fixed location display issue in
Device running information.
- Unified multiple location display formats to be consistent with video location format.
- Adjusted page colors to be similar to previous version.
- Changed multicast interface alignment default from "end" to "start".
- Solved issue requiring manual page refresh to update static file cache after new version launch:
- In page HTTP meta information (HTTP Meta), added force no-cache setting through
http-equiv attribute.
- Added
build_time parameter to all jump HTTP URLs, parameter value is current Web project compile package time.
- Changed login interface background image to AI-generated image.
- MQTT Client optimization: Configured
reconnectPeriod: 5000 to implement auto-reconnect functionality, attempting reconnect every 5000 milliseconds; set keepalive: 30, leveraging MQTT protocol built-in heartbeat mechanism, client automatically sends PINGREQ message every 30 seconds to maintain connection stability.
1.0.2-202505170002
- Server
- Actual testing: In GPS_INFO
valid == 1, latitude and longitude valid. Modified server logic, caching more valid location data (only judging latitude and longitude > 0, ignoring valid judgment).
- Web Client
- Actual testing: In GPS_INFO
valid == 1, latitude and longitude valid. Modified Web Client logic after obtaining GPS_INFO (only judging latitude and longitude > 0, ignoring valid judgment)
1.0.2-202505161835
- Server
- Module dependency library optimization:
- Replaced log4j2 with slf4j.
- Removed references to disruptor, fastjson2 libraries.
- Startup speed optimization:
- Reduced @MapperScan and scanBasePackages scan scope.
- Performance optimization
- Replaced Spring Boot default integrated Tomcat with Undertow. Undertow advantages include: 1) NIO-based asynchronous non-blocking architecture, supporting higher concurrent connections; 2) Less memory usage (about 1/3 of Tomcat); 3) Deep integration with Spring WebFlux, more suitable for reactive programming scenarios; 4) Built-in HTTP/2 and WebSocket support, reducing protocol conversion overhead; 5) Lightweight design (jar package volume 60% smaller than Tomcat).
- Packaging optimization (Spring Boot JAR reduced 3MB, Docker image optimized 205MB):
- Build process uses differentiated image strategy:
- Compilation stage uses
eclipse-temurin:21-jdk-alpine image
- Image build stage uses
eclipse-temurin:21-jre-alpine image
- Technical solution explanation:
- By replacing OpenJDK with Eclipse Temurin official image
- Adopting JDK/JRE image separation strategy (JDK image volume 66MB larger than JRE image)
- Project build upgrade transformation
- Completed project build tool migration from Maven to Gradle, improving build efficiency and flexibility.
- Integrated Kotlin compilation and packaging functionality, simultaneously configured project multi-modules to support Java and Kotlin mixed compilation, preparing for full transition to Kotlin language development.
- Web Client
- Main interface bottom-left version number display optimization: Default displays version number only, mouse hover displays compile package time.
- BUG Fix: For GPS data validity judgment, on original basis of
valid > 1, added conditions latitude > 0 and longitude > 0. Investigation discovered that when valid = 128, exists latitude = 0 and longitude = 0 situation.
1.0.2-202505121512
- Server
- janus-gatewa service upgraded from v1.2.2 (April 2, 2024) to v1.3.1 (March 5, 2025), as official only provides source code, requires manual Docker image build
- emqx service upgraded from v5.6 (March 2024) to v5.8.6 (February 2025)
- Web Client
- Theme color detail optimization: With Tailwind CSS upgrade from v3 to v4, style definition method changed. Color representation also changed from hsl mode to oklch mode.
1.0.2-202505091620
- Server
- Server project cloud-native transformation (completed 10%): Integrated Native Maven plugin (
native-maven-plugin), achieving container image volume optimization and startup performance improvement through AOT compilation, providing technical support for subsequent containerized deployment resource efficiency and cold start response optimization
- Web Client
- In P2P live streaming interface, reused original microphone button component. Implemented clicking that button triggers corresponding logic via signaling, to enable or disable device audio output functionality. Meanwhile, microphone button status dynamically changes based on device-returned audio output status, that is, button enabled when audio output on, button disabled when audio output off.
- When WebRTC connection successful, system automatically obtains device-side audio output status once.
1.0.2-202504301555
- WEB CLIENT
- Interaction Experience Upgrade
- Main interface left menu defaults to collapsed, only displaying large icons, mouse hover shows brief prompt information.
- Technical Architecture Improvement
- Frontend framework upgrade: Upgraded shadcn-ui to new version. This upgrade prerequisite is Tailwind CSS upgraded from v3 to v4.
1.0.2-202504301121
- WEB CLIENT
- Core Functionality Fix
- Fixed live streaming interface data loading abnormality: Dynamically monitor tenant ID change to auto-trigger data update (previously required manual refresh)
- Optimized interface compatibility: New "Device Running Information" module, achieving phone/tablet/PC (wide screen/large screen display) multi-scenario adaptiveness
- Interaction Experience Upgrade
- Optimized device detail page logic: Auto-hide organization information field when not bound to organization
- Improved system response efficiency: Key operation response speed improved by 5%
- Completed localization resources: Updated Chinese term file (xlsx), added recent functionality corresponding internationalization content
- Technical Architecture Improvement
- Upgraded frontend framework: Tailwind CSS from v3 to v4
1.0.1-202504281555
- WEB CLIENT
- Removed unnecessary WebRTC API calls, such as
rtcPeerConnection.getTransceivers();.
- Added live streaming retry functionality: If WebRTC connection not successfully established within 8 seconds after live streaming signaling interaction start, will re-perform signaling interaction.
- Fixed MQTT client ping signaling timed interval issue before successful connection establishment, adjusted from 0.01 seconds to 0.1 seconds. When MQTT client successfully establishes connection and attempts to send ping signaling, interval time resets to default 3 seconds.
- Server
- Updated Maven compilation configuration, upgraded JDK version from 23 to 24, to adapt to Spring Boot 3.x main supported JDK version.
- Upgraded dependency libraries to latest stable versions, ensuring server program efficient and stable operation:
org.springframework.boot:spring-boot-starter-parent: 3.4.4 -> 3.4.5
com.baomidou:mybatis-plus-bom: 3.5.11 -> 3.5.12
com.baomidou:mybatis-plus: 3.5.11 -> 3.5.12
com.alicp.jetcache:jetcache-starter-redis-lettuce: 2.7.7 -> 2.7.8
com.alicp.jetcache:jetcache-anno: 2.7.7 -> 2.7.8
com.alicp.jetcache:jetcache-autoconfigure: 2.7.7 -> 2.7.8
org.apache.commons:commons-collections4: 4.4 -> 4.5.0
- Removed obsolete code, reducing unnecessary memory usage:
- Deleted Netty-based socket communication server API, totaling 61 files.
- Unified HTTP API exception handling:
- Multiple places involving password changes returned inconsistent error messages, now unified to consistent error messages.
- Docker Image
- Upgraded
es-center-server-main-service and es-center-server-device-service Docker parent image from openjdk:23-slim to openjdk:24-slim.
1.0.1-202504270954
- WEB CLIENT
- Live Streaming Interface Device Information Display Optimization
- Fixed 4G network information display BUG
- Made device TF card capacity display format consistent with device screen
- Main Interface Device List Refresh Adjustment: In main interface device list, adjusted "Select Device" device list timed refresh interval to 90 seconds
- Location Icon Display Improvement: Previously only obtained location information in map component, now optimized to also perform timed location information acquisition in device detail interface
- When user modifies password, if new password and confirm password inconsistent, system will prompt user to re-enter password
- Server
- Removed tenant switch recording switch time logic
- For all APIs with cache handling functionality, unified cache expiration time to 60 seconds. Original timed update cache method will be re-enabled after server configuration improvement.
1.0.1-202504230939
- WEB CLIENT
- In live streaming interface, improved device information display, added advanced/simple mode switch for displaying more device information, defaulting to simple mode.
1.0.1-202504221542
- Server
- MQTT subscribe device reported messages: GPS information validation logic adjusted, confirmed with Wei Gong,
valid === 0 indicates GPS information invalid, now modified to valid < 1.
- WEB CLIENT
- In live streaming interface, supplemented more device information display. Such as: LAN information, WIFI information, GPS information, etc.
- GPS information validation logic adjusted: Confirmed with Wei Gong,
valid === 0 indicates GPS information invalid, now modified to valid < 1.
- Installer
- Removed docker-buildx-plugin package, not needed in production environment. Docker Buildx enables developers to efficiently generate multi-platform compatible container images through consistent process, adapting modern multi-cloud, hybrid architecture deployment needs.
- Removed docker-ce-rootless-extras package, not needed in production environment. This component is key dependency for implementing Docker non-root permission operation, ensuring security while enabling ordinary users to conveniently manage containers, suitable for permission-restricted or multi-user sharing scenarios.
1.0.1-202504221352
- Updater
- Fixed source directory path error
- WEB CLIENT
- Auto-reload i18n resources every 30 seconds, ensuring internationalization content real-time update and accuracy.
1.0.1-202504220939
- Server program dependency library upgrade: Regularly update dependency libraries to latest stable versions, ensuring server program efficient and stable operation.
- spring-boot-starter-parent: 3.4.1 -> 3.4.4
- springdoc-openapi: 2.8.3 -> 2.8.6
- swagger-annotations-jakarta: 2.2.27 -> 2.2.30
- mybatis-plus: 3.5.10.1 -> 3.5.11
- java-jwt: 4.4.0 -> 4.5.0
- guava: 33.4.0-jre -> 33.4.8-jre
- hutool-bom: 5.8.35 -> 5.8.37
- Tasks assigned on redmine.netbodycamera.com processed
- WEB CLIENT
- For all functionality interfaces involving password input (such as modify password, retrieve password via email, retrieve password via phone verification code, tenant bind user, etc.):
- Regex expression modification: Removed
(?!.*(\w)\1\1) from original regex expression, this part was used to check for three consecutive identical characters.
- Error prompt message modification: Removed "cannot have consecutive identical characters" content from original prompt message.
1.0.1-202504171705
- Installer:
- Removed all services auto-start configuration except
es-center-server-launcher, changed to unified management by es-center-server-launcher service. This ensures various services start in predetermined order with appropriate delays between different services, avoiding resource competition and performance issues caused by concurrent startup.
- WEB CLIENT:
- Dependency Library Upgrade
- Upgraded from Remix v2 to React Router v7: As Remix v2 no longer maintained, decided to upgrade to React Router v7. This is preferred alternative after Remix v2 end of support. Remix v2 depends on React 18, while other library new versions depend on React 19. To maintain project consistency and avoid using obsolete technology, upgraded according to official documentation. Upgrade Guide
- Replaced remix-utils/promise with p-timeout: Due to Remix v2 upgraded to React Router v7, chose to use
p-timeout as remix-utils/promise replacement.
- Other Library Upgrades: All related libraries updated to latest versions, ensuring they compatible with React 19.
1.0.1-202504171342
- Installer:
- Removed step adding current user to
docker group, as customers usually use root account for installation. For non-root users, just need to add sudo before docker command.
1.0.202504161818
-
WEB CLIENT:
- BUG Fix:
- Adjusted GPS latitude value based on latitude direction, and adjusted GPS longitude value based on longitude direction.
- Fixed flickering issue in right playback interface when hiding device list in multi-screen live streaming mode.
- User Experience Improvement:
-
Installer:
- Docker Configuration Adjustment:
- Changed all services
docker-compose.yml file restart: on-failure:9 to restart: no.
- Added
restart_policy setting to all services docker-compose.yml files to implement delayed restart, avoiding CPU resource exhaustion caused by continuous restart.
- Default Data Directory Change:
- Default data directory changed from
/opt/es-center-server-data to /var/lib/es-center-server-data, to better follow Linux directory conventions.
cli upgrade-server Subcommand Logic Adjustment:
- Added handling
docker-compose.yml and related configuration file upgrade logic, to cope with possible upgrade scenarios.
cli install-server-coturn-service Subcommand Adjustment:
- Added
--internal-eth-name parameter, for specifying Coturn service internal network card name.
- Integrated
docker:cli Container:
- Integrated
docker:cli container, to start other Docker containers in specified order with delay after auto-start on boot. Reason is that multiple containers starting simultaneously puts huge pressure on low-spec servers at boot, possibly causing CPU to exceed 100%, making some services unable to start normally.
1.0.202504151416
- Server initialization:
- Before establishing MQTT connection with EMQX, write account, password and authorization scope to Redis integrated with EMQX.
- Server HTTP interface:
- Error codes reordered according to their occurrence order in lifecycle:
- 200: Successfully executed request, no errors occurred.
- 500: Internal server error occurred, usually meaning backend code encountered unexpected situation (such as database operation failure). At this time, user interface only displays "System Error", but detailed error information recorded for developer diagnosis.
- 1000: Authentication exception, occurs when authentication fails. Common scenarios include: user login input username or password incorrect, unable to pass verification; used token (such as JWT, OAuth2 token) invalid, expired or format incorrect; request header missing necessary authentication information, like basic authentication Authorization header; user attempting to use disabled, locked or expired account to login. Once these situations occur, Spring Security throws this exception, preventing user from continuing to access protected resources.
- 1001: Access denied exception, usually occurs when user already authenticated (logged in) but lacks target resource access permission, such as requested URL or method required role, permission expression (such as hasRole, hasAuthority) does not match user actual permissions, anonymous or "remember me" user accessing restricted resources, custom access decision logic refusal (such as AccessDecisionVoter vote failure), and request method, CSRF validation, session permission change etc. configuration causing authorization failure. Core reason is user authentication passed but authorization (permission check) failed.
- 1002: Occurs when HTTP request/response message conversion process fails, main scenarios include: request body (such as JSON/XML) unable to convert to target object (format error, type mismatch, etc.), or response body object unable to serialize to specified format (such as serialization rule conflict, field unable to process), essence is data format and target type conversion logic failure, common in frontend-backend data format mismatch or message converter configuration issues.
- 1003: Usually appears in controller method parameter validation failure scenarios. When using @Valid or @Validated annotations to validate method parameters (such as entity class, basic type or custom parameters), if client request parameters do not meet validation rules (such as @NotEmpty, @Size, @Pattern etc. annotation defined constraints), Spring triggers validation logic during parameter binding process. If validation fails, collects all error messages into BindingResult and throws MethodArgumentNotValidException. For example, frontend passed form data missing required fields, string length exceeds limit, format does not meet regex requirements, etc., will cause this exception, essence is parameter binding and validation failure unified encapsulation, facilitating centralized handling of request parameter legitimacy issues.
- 1004: Thrown when object validation fails. Common scenarios include: directly performing validation through validator (such as validator.validate(object)) on object, or when framework (such as Spring, Hibernate) automatically triggers validation logic (such as service layer parameter validation, JPA entity persistence before constraint check). When object properties violate validation annotation defined rules (such as @NotEmpty, @Size, @Pattern, etc.), all violated constraints collected as ConstraintViolation set and finally encapsulated as this exception, for centralized handling of parameter or entity legitimacy validation failure issues.
- 1005: Business logic validation failed. Means although request itself may be valid, problem discovered when attempting to execute specific business functionality. For example, if certain device ID does not exist in system, then even if request format correct, will produce this type of error due to unable to find associated data. Similarly, specific cause given in error field.
- Consumer mode category
- In device list interface, added collection server related fields to each device detail in list, such as: collection server number, collection server external address, etc.
- In device binding interface, now handled duplicate binding already deleted device situation (binding successful, then deleted related manufacturer data). Previously, this special case would cause SQL insert error, this problem now solved.
- TOKEN expiration time extended from 5 minutes to 30 minutes, preventing customer TOKEN expiration in short time when no operations performed.
- Server MQTT interface:
- Receiving device reported information interface specially handles GPS information, only storing to cache when GPS information valid.
- WEB CLIENT:
- Preloaded multi-language term files, ensuring user can switch language without page refresh for immediate effect.
- Installer:
- Removed automatic SSL certificate application functionality during installation, because Vietnam customer 1 provided Linux server port 80 already occupied, making this function unusable. Through subcommand
update-server-ssl, separately apply or update or apply SSL certificate.
- In update configuration subcommand, also removed automatic SSL certificate application support, reason is also Vietnam customer 1 provided Linux server port 80 already occupied, unable to use this functionality.
- Added following configurable items:
ES_CENTER_SERVER_JANUS_RTP_PORT_RANGE=40000-59999
ES_CENTER_SERVER_COTURN_LISTENING_PORT=3478
ES_CENTER_SERVER_COTURN_MIN_PORT=20000
ES_CENTER_SERVER_COTURN_MAX_PORT=39999
- Optimized spring-boot program default
JAVA_OPTS parameters, to better adapt 2 core 4GB memory server environment. Optimized parameters: -Xmx1024m -Xms512m -Xmn256m -XX:MaxDirectMemorySize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=200
- In deployed running spring-boot program
docker-compose.yml file, added mem_limit and mem_reservation configuration:
mem_limit: 2g: Limits container max memory usage to 2GB.
mem_reservation: 512m: Sets container expected memory usage to 512MB.
- Changed all
docker-compose.yml files restart: always to restart: on-failure:9, avoiding infinite restart loop.
1.0.202504011734
- Added automatic SSL certificate application functionality during installation.
- Added automatic SSL certificate application support in update configuration subcommand.
- Added independent subcommand
update-server-ssl, for separately updating or applying SSL certificate.
1.0.202503311844
- Optimized installation process, reducing resource exhaustion risk caused by concurrent installation on low-spec servers (such as 2 core 4G memory).
- Added upgrade functionality, supporting upgrade operations via command line execution.