[{"data":1,"prerenderedAt":1560},["ShallowReactive",2],{"manual-navigation":3,"\u002Fproducts\u002Fbrief\u002Farchitecture-en":62,"\u002Fproducts\u002Fbrief\u002Farchitecture-en-surround":1549},[4],{"title":5,"path":6,"stem":7,"children":8},"手册简介","\u002Fmanual\u002F3516cv610","manual\u002F3516cv610\u002Findex",[9,10,14,18,22,26,30,34,38,42,46,50,54,58],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"产品概述","\u002Fmanual\u002F3516cv610\u002Foverview","manual\u002F3516cv610\u002F1.overview",{"title":15,"path":16,"stem":17},"REST API","\u002Fmanual\u002F3516cv610\u002Fapi","manual\u002F3516cv610\u002F10.api",{"title":19,"path":20,"stem":21},"ONVIF \u002F GB28181","\u002Fmanual\u002F3516cv610\u002Fprotocol","manual\u002F3516cv610\u002F11.protocol",{"title":23,"path":24,"stem":25},"常见问题","\u002Fmanual\u002F3516cv610\u002Ffaq","manual\u002F3516cv610\u002F12.faq",{"title":27,"path":28,"stem":29},"更新日志","\u002Fmanual\u002F3516cv610\u002Fchangelog","manual\u002F3516cv610\u002F13.changelog",{"title":31,"path":32,"stem":33},"快速上手","\u002Fmanual\u002F3516cv610\u002Fquickstart","manual\u002F3516cv610\u002F2.quickstart",{"title":35,"path":36,"stem":37},"硬件说明","\u002Fmanual\u002F3516cv610\u002Fhardware","manual\u002F3516cv610\u002F3.hardware",{"title":39,"path":40,"stem":41},"安装部署","\u002Fmanual\u002F3516cv610\u002Finstallation","manual\u002F3516cv610\u002F4.installation",{"title":43,"path":44,"stem":45},"系统配置","\u002Fmanual\u002F3516cv610\u002Fconfiguration","manual\u002F3516cv610\u002F5.configuration",{"title":47,"path":48,"stem":49},"流媒体服务","\u002Fmanual\u002F3516cv610\u002Fstreaming","manual\u002F3516cv610\u002F6.streaming",{"title":51,"path":52,"stem":53},"AI 智能功能","\u002Fmanual\u002F3516cv610\u002Fai","manual\u002F3516cv610\u002F7.ai",{"title":55,"path":56,"stem":57},"存储管理","\u002Fmanual\u002F3516cv610\u002Fstorage","manual\u002F3516cv610\u002F8.storage",{"title":59,"path":60,"stem":61},"Web 管理界面","\u002Fmanual\u002F3516cv610\u002Fwebui","manual\u002F3516cv610\u002F9.webui",{"id":63,"title":64,"body":65,"category":1539,"description":1540,"extension":1541,"language":1542,"meta":1543,"navigation":1544,"path":1545,"seo":1546,"stem":1547,"__hash__":1548},"briefs\u002Fproducts\u002Fbrief\u002Farchitecture-en.md","Architecture Document",{"type":66,"value":67,"toc":1510},"minimark",[68,73,80,85,88,91,95,106,108,112,117,120,199,202,206,235,239,246,251,315,318,322,325,419,423,426,623,627,630,639,642,687,690,694,784,788,862,866,873,876,982,985,988,1026,1030,1067,1069,1073,1077,1083,1087,1093,1097,1103,1107,1113,1115,1119,1125,1127,1131,1135,1202,1206,1262,1266,1310,1312,1316,1401,1403,1407,1477,1479,1483,1506],[69,70,72],"h1",{"id":71},"endless-system-architecture","Endless System Architecture",[74,75,76],"blockquote",{},[77,78,79],"p",{},"Version 1.0 · March 2026",[81,82,84],"h2",{"id":83},"overview","Overview",[77,86,87],{},"Endless is structured as a strict layered architecture. Each layer exposes a well-defined interface to the layer above and depends only on the layer below. This design ensures hardware portability (swap SoC by reimplementing HAL), service modularity (compile only needed services), clear separation of concerns between media pipeline, AI services, and application logic, and a clean path for hardware\u002Fsoftware customization.",[89,90],"hr",{},[81,92,94],{"id":93},"architecture-diagram","Architecture Diagram",[96,97,102],"pre",{"className":98,"code":100,"language":101},[99],"language-text","┌─────────────────────────────────────────────────────────────────┐\n│  APPLICATION LAYER                                               │\n│                                                                  │\n│  ┌──────────────┐ ┌──────────┐ ┌────────┐ ┌───────────────┐   │\n│  │  Web UI      │ │ REST API │ │  ONVIF │ │   GB28181     │   │\n│  │  (Vue 3)     │ │ (HTTP\u002FS) │ │        │ │   (SIP\u002FPS)    │   │\n│  └──────────────┘ └──────────┘ └────────┘ └───────────────┘   │\n├─────────────────────────────────────────────────────────────────┤\n│  FOUNDATION SERVICES                                             │\n│                                                                  │\n│  ┌─────────────────┐  ┌───────────────────────────────────┐    │\n│  │  Stream Service  │  │        AI Services                │    │\n│  │  ┌────┐ ┌─────┐ │  │  ┌───────┐ ┌───────┐ ┌───────┐  │    │\n│  │  │RTSP│ │WebRTC│ │  │  │ Agent │ │ Qwen  │ │Xiaozhi│  │    │\n│  │  └────┘ └─────┘ │  │  └───────┘ └───────┘ └───────┘  │    │\n│  │  ┌────────────┐  │  └───────────────────────────────────┘    │\n│  │  │    RTMP    │  │                                            │\n│  │  └────────────┘  │                                            │\n│  └─────────────────┘                                            │\n├─────────────────────────────────────────────────────────────────┤\n│  BASE BUSINESS LAYER                                             │\n│                                                                  │\n│  ┌───────┐ ┌──────┐ ┌───────┐ ┌──────┐ ┌──────┐ ┌────────┐   │\n│  │ Media │ │Record│ │Storage│ │File  │ │Upgrad│ │  Rule  │   │\n│  │Service│ │ Mgr  │ │  Mgr  │ │ Mgr  │ │  e   │ │ Engine │   │\n│  └───────┘ └──────┘ └───────┘ └──────┘ └──────┘ └────────┘   │\n├─────────────────────────────────────────────────────────────────┤\n│  BASE SOFTWARE LAYER                                             │\n│                                                                  │\n│  ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌────────┐ ┌──────┐  │\n│  │Config Mgr│ │ Event Bus │ │ GStreamer  │ │ FFmpeg │ │SQLite│  │\n│  └──────────┘ └──────────┘ └───────────┘ └────────┘ └──────┘  │\n│  ┌──────────┐ ┌──────────┐ ┌───────────┐                        │\n│  │ OpenSSL  │ │  spdlog  │ │   libcurl │                        │\n│  └──────────┘ └──────────┘ └───────────┘                        │\n├─────────────────────────────────────────────────────────────────┤\n│  HAL — Hardware Abstraction Layer (pure C interface)             │\n│                                                                  │\n│  ┌───────┐ ┌───────┐ ┌────────┐ ┌────────────┐ ┌───────────┐  │\n│  │ Video │ │ Audio │ │  USB   │ │AI Accel    │ │Peripheral │  │\n│  │ (MPP) │ │       │ │(Audio) │ │(NPU\u002FDSP)   │ │GPIO\u002FIR\u002FWDT│  │\n│  └───────┘ └───────┘ └────────┘ └────────────┘ └───────────┘  │\n├─────────────────────────────────────────────────────────────────┤\n│  KERNEL LAYER: Linux 5.10                                        │\n│  SoC drivers, V4L2, ALSA, USB, network, watchdog               │\n├─────────────────────────────────────────────────────────────────┤\n│  HARDWARE                                                        │\n│  Hi3516CV610 · Hi3516CV608 · Hi3519DV500 · QEMU aarch64        │\n└─────────────────────────────────────────────────────────────────┘\n","text",[103,104,100],"code",{"__ignoreMap":105},"",[89,107],{},[81,109,111],{"id":110},"layer-descriptions","Layer Descriptions",[113,114,116],"h3",{"id":115},"_1-hardware-layer","1. Hardware Layer",[77,118,119],{},"Supported SoCs:",[121,122,123,142],"table",{},[124,125,126],"thead",{},[127,128,129,133,136,139],"tr",{},[130,131,132],"th",{},"SoC",[130,134,135],{},"Series",[130,137,138],{},"NPU",[130,140,141],{},"Target",[143,144,145,160,172,185],"tbody",{},[127,146,147,151,154,157],{},[148,149,150],"td",{},"Hisilicon 3516CV610",[148,152,153],{},"CV6xx",[148,155,156],{},"Yes",[148,158,159],{},"Commercial IP camera (Product PA)",[127,161,162,165,167,169],{},[148,163,164],{},"Hisilicon 3516CV608",[148,166,153],{},[148,168,156],{},[148,170,171],{},"Entry-level IP camera",[127,173,174,177,180,182],{},[148,175,176],{},"Hisilicon 3519DV500",[148,178,179],{},"DV5xx",[148,181,156],{},[148,183,184],{},"High-end AI camera",[127,186,187,190,193,196],{},[148,188,189],{},"QEMU aarch64",[148,191,192],{},"—",[148,194,195],{},"Emulated",[148,197,198],{},"Development & CI (Product PB)",[77,200,201],{},"All SoCs share the Hisilicon MPP (Media Processing Platform) SDK for video\u002Faudio pipeline access.",[113,203,205],{"id":204},"_2-kernel-layer","2. Kernel Layer",[207,208,209,217,223,229],"ul",{},[210,211,212,216],"li",{},[213,214,215],"strong",{},"Base",": Linux 5.10 LTS",[210,218,219,222],{},[213,220,221],{},"Build system",": Buildroot (generates full root filesystem)",[210,224,225,228],{},[213,226,227],{},"Key drivers",": MPP video driver, ALSA audio, USB audio gadget, watchdog, I2C, GPIO, RTC, IR-CUT",[210,230,231,234],{},[213,232,233],{},"Network stack",": Standard Linux TCP\u002FIP, conntrack, iptables",[113,236,238],{"id":237},"_3-hal-hardware-abstraction-layer","3. HAL — Hardware Abstraction Layer",[77,240,241,242,245],{},"The HAL exposes ",[213,243,244],{},"pure C interfaces"," to isolate all hardware-specific code. Upper layers never call MPP or SoC SDK directly.",[77,247,248],{},[213,249,250],{},"Key HAL subsystems:",[121,252,253,263],{},[124,254,255],{},[127,256,257,260],{},[130,258,259],{},"Subsystem",[130,261,262],{},"Responsibility",[143,264,265,275,285,295,305],{},[127,266,267,272],{},[148,268,269],{},[103,270,271],{},"hal\u002Fmpp\u002F",[148,273,274],{},"Video capture, encode, decode (H.264\u002FH.265\u002FMJPEG), VENC\u002FVPSS pipeline",[127,276,277,282],{},[148,278,279],{},[103,280,281],{},"hal\u002Fai\u002F",[148,283,284],{},"NPU model loading, inference scheduling, result extraction",[127,286,287,292],{},[148,288,289],{},[103,290,291],{},"hal\u002Fperipheral\u002F",[148,293,294],{},"GPIO alarm I\u002FO, IR-CUT switching, RTC clock, watchdog",[127,296,297,302],{},[148,298,299],{},[103,300,301],{},"hal\u002Fmpp\u002Faudio\u002F",[148,303,304],{},"Audio capture, playback, encoding (AAC\u002FG.711\u002FOpus)",[127,306,307,312],{},[148,308,309],{},[103,310,311],{},"hal\u002Fcommon\u002F",[148,313,314],{},"Platform-shared utilities",[77,316,317],{},"Porting to a new SoC mainly requires implementing HAL interfaces for that platform, while upper layers stay mostly unchanged; new board peripherals can also be extended independently in HAL and device configuration.",[113,319,321],{"id":320},"_4-base-software-layer","4. Base Software Layer",[77,323,324],{},"Provides shared infrastructure for all business services and a stable base for software tailoring and feature-level customization:",[121,326,327,337],{},[124,328,329],{},[127,330,331,334],{},[130,332,333],{},"Component",[130,335,336],{},"Role",[143,338,339,349,359,369,379,389,399,409],{},[127,340,341,346],{},[148,342,343],{},[213,344,345],{},"Config Manager",[148,347,348],{},"JSON-based hierarchical configuration, hot reload, path validation",[127,350,351,356],{},[148,352,353],{},[213,354,355],{},"Event Bus",[148,357,358],{},"Publish-subscribe event dispatch, cross-service decoupling",[127,360,361,366],{},[148,362,363],{},[213,364,365],{},"GStreamer 1.18",[148,367,368],{},"Media pipeline: WebRTC (ICE\u002FDTLS\u002FSRTP), RTSP source, audio\u002Fvideo mux",[127,370,371,376],{},[148,372,373],{},[213,374,375],{},"FFmpeg 4.x",[148,377,378],{},"Codec processing, format conversion, thumbnail extraction",[127,380,381,386],{},[148,382,383],{},[213,384,385],{},"SQLite 3.x",[148,387,388],{},"Recording index, event log, configuration cache",[127,390,391,396],{},[148,392,393],{},[213,394,395],{},"OpenSSL 1.1.1",[148,397,398],{},"TLS for HTTPS\u002FWSS, certificate management, data encryption",[127,400,401,406],{},[148,402,403],{},[213,404,405],{},"spdlog",[148,407,408],{},"Structured async logging with rotation",[127,410,411,416],{},[148,412,413],{},[213,414,415],{},"libcurl 7.x",[148,417,418],{},"HTTP client for cloud AI API calls",[113,420,422],{"id":421},"_5-base-business-layer","5. Base Business Layer",[77,424,425],{},"Core device functionality implemented as independent C++ services:",[121,427,428,441],{},[124,429,430],{},[127,431,432,435,438],{},[130,433,434],{},"Service",[130,436,437],{},"Location",[130,439,440],{},"Key responsibility",[143,442,443,458,473,488,503,518,533,548,563,578,593,608],{},[127,444,445,450,455],{},[148,446,447],{},[213,448,449],{},"Media Service",[148,451,452],{},[103,453,454],{},"base\u002Fmedia\u002F",[148,456,457],{},"Audio\u002Fvideo stream management, priority scheduling, interrupt\u002Fresume",[127,459,460,465,470],{},[148,461,462],{},[213,463,464],{},"Record Manager",[148,466,467],{},[103,468,469],{},"base\u002Frecord\u002F",[148,471,472],{},"Continuous recording, time-indexed MP4 segments, loop-overwrite policy",[127,474,475,480,485],{},[148,476,477],{},[213,478,479],{},"Storage Manager",[148,481,482],{},[103,483,484],{},"base\u002Fstorage\u002F",[148,486,487],{},"SD card lifecycle, format, hot-plug, space monitoring",[127,489,490,495,500],{},[148,491,492],{},[213,493,494],{},"File Manager",[148,496,497],{},[103,498,499],{},"base\u002Ffile_manager\u002F",[148,501,502],{},"Recording file CRUD, download API",[127,504,505,510,515],{},[148,506,507],{},[213,508,509],{},"Upgrade Service",[148,511,512],{},[103,513,514],{},"base\u002Fupgrade\u002F",[148,516,517],{},"Chunked firmware upload, signature verification, progress reporting",[127,519,520,525,530],{},[148,521,522],{},[213,523,524],{},"Rule Engine",[148,526,527],{},[103,528,529],{},"base\u002Frule_engine\u002F",[148,531,532],{},"Event-condition-action rules (e.g., AI detection → record + notify)",[127,534,535,540,545],{},[148,536,537],{},[213,538,539],{},"Discovery",[148,541,542],{},[103,543,544],{},"base\u002Fdiscovery\u002F",[148,546,547],{},"mDNS-based LAN device discovery",[127,549,550,555,560],{},[148,551,552],{},[213,553,554],{},"Database Service",[148,556,557],{},[103,558,559],{},"base\u002Fdatabase\u002F",[148,561,562],{},"SQLite abstraction layer, schema migration",[127,564,565,570,575],{},[148,566,567],{},[213,568,569],{},"Algo Manager",[148,571,572],{},[103,573,574],{},"base\u002Falgo\u002F",[148,576,577],{},"AI algorithm lifecycle, model hot-load, label management",[127,579,580,585,590],{},[148,581,582],{},[213,583,584],{},"System Service",[148,586,587],{},[103,588,589],{},"base\u002Fsystem_service\u002F",[148,591,592],{},"Watchdog feeding, system status, reboot, factory reset",[127,594,595,600,605],{},[148,596,597],{},[213,598,599],{},"Network",[148,601,602],{},[103,603,604],{},"base\u002Fnetwork\u002F",[148,606,607],{},"Ethernet config (DHCP\u002Fstatic), NTP sync",[127,609,610,615,620],{},[148,611,612],{},[213,613,614],{},"Web Server",[148,616,617],{},[103,618,619],{},"base\u002Fweb_server\u002F",[148,621,622],{},"HTTP\u002FHTTPS\u002FWebSocket server, request routing",[113,624,626],{"id":625},"_6-foundation-services","6. Foundation Services",[77,628,629],{},"Higher-level services that compose base layer capabilities:",[631,632,634,635,638],"h4",{"id":633},"_61-stream-service-foundationstream_service","6.1 Stream Service (",[103,636,637],{},"foundation\u002Fstream_service\u002F",")",[77,640,641],{},"Manages all outbound media streams:",[121,643,644,654],{},[124,645,646],{},[127,647,648,651],{},[130,649,650],{},"Protocol",[130,652,653],{},"Implementation",[143,655,656,668,676],{},[127,657,658,661],{},[148,659,660],{},"RTSP",[148,662,663,664,667],{},"GStreamer ",[103,665,666],{},"rtspclientsink"," \u002F custom RTSP server",[127,669,670,673],{},[148,671,672],{},"WebRTC",[148,674,675],{},"GStreamer WebRTC plugin, ICE\u002FSTUN\u002FTURN negotiation, signaling via WebSocket",[127,677,678,681],{},[148,679,680],{},"RTMP",[148,682,663,683,686],{},[103,684,685],{},"rtmpsink",", supports RTMPS (TLS)",[77,688,689],{},"The stream service arbitrates between stream consumers (RTSP clients, WebRTC browsers, RTMP destinations) and the single GStreamer source pipeline from HAL.",[631,691,693],{"id":692},"_62-ai-services","6.2 AI Services",[121,695,696,707],{},[124,697,698],{},[127,699,700,702,704],{},[130,701,434],{},[130,703,437],{},[130,705,706],{},"Description",[143,708,709,724,739,754,769],{},[127,710,711,716,721],{},[148,712,713],{},[213,714,715],{},"Agent",[148,717,718],{},[103,719,720],{},"foundation\u002Fagent\u002F",[148,722,723],{},"Multi-modal AI agent: voice input → LLM reasoning → tool call → voice output",[127,725,726,731,736],{},[148,727,728],{},[213,729,730],{},"Qwen",[148,732,733],{},[103,734,735],{},"foundation\u002Fqwen\u002F",[148,737,738],{},"Qwen3-Omni SDK adapter: real-time audio + video → text\u002Fspeech response",[127,740,741,746,751],{},[148,742,743],{},[213,744,745],{},"Aliyun",[148,747,748],{},[103,749,750],{},"foundation\u002Faliyun\u002F",[148,752,753],{},"Alibaba Cloud Qwen-VL REST client: snapshot → image understanding",[127,755,756,761,766],{},[148,757,758],{},[213,759,760],{},"Xiaozhi",[148,762,763],{},[103,764,765],{},"foundation\u002Fxiaozhi\u002F",[148,767,768],{},"Xiaozhi AI voice dialog: speech-to-text → dialog → text-to-speech",[127,770,771,776,781],{},[148,772,773],{},[213,774,775],{},"MCP",[148,777,778],{},[103,779,780],{},"foundation\u002Fmcp\u002F",[148,782,783],{},"Model Context Protocol server for agent tool exposure",[631,785,787],{"id":786},"_63-protocol-services","6.3 Protocol Services",[121,789,790,801],{},[124,791,792],{},[127,793,794,796,798],{},[130,795,434],{},[130,797,437],{},[130,799,800],{},"Standard",[143,802,803,818,833,848],{},[127,804,805,810,815],{},[148,806,807],{},[213,808,809],{},"ONVIF",[148,811,812],{},[103,813,814],{},"foundation\u002Fonvif\u002F",[148,816,817],{},"WS-Discovery, ONVIF media\u002Fdevice profile",[127,819,820,825,830],{},[148,821,822],{},[213,823,824],{},"GB28181",[148,826,827],{},[103,828,829],{},"foundation\u002Fgb28181\u002F",[148,831,832],{},"SIP UA, PS stream, catalog and real-play",[127,834,835,840,845],{},[148,836,837],{},[213,838,839],{},"RESTful API",[148,841,842],{},[103,843,844],{},"foundation\u002Frestful\u002F",[148,846,847],{},"JWT-secured HTTP API, full device control",[127,849,850,854,859],{},[148,851,852],{},[213,853,650],{},[148,855,856],{},[103,857,858],{},"foundation\u002Fprotocol\u002F",[148,860,861],{},"Abstract protocol adapter (WebSocket event framing)",[113,863,865],{"id":864},"_7-application-layer","7. Application Layer",[631,867,869,870,638],{"id":868},"web-ui-foundationweb_page","Web UI (",[103,871,872],{},"foundation\u002Fweb_page\u002F",[77,874,875],{},"Single-page application built with Vue 3:",[121,877,878,891],{},[124,879,880],{},[127,881,882,885,888],{},[130,883,884],{},"Module",[130,886,887],{},"Path",[130,889,890],{},"Function",[143,892,893,906,919,931,944,956,969],{},[127,894,895,898,903],{},[148,896,897],{},"Live Preview",[148,899,900],{},[103,901,902],{},"components\u002Flive\u002F",[148,904,905],{},"WebRTC player, AI detection overlay, screenshot",[127,907,908,911,916],{},[148,909,910],{},"Configuration",[148,912,913],{},[103,914,915],{},"components\u002Fcamera\u002F",[148,917,918],{},"Video, audio, OSD parameter forms",[127,920,921,923,928],{},[148,922,599],{},[148,924,925],{},[103,926,927],{},"components\u002Fnetwork\u002F",[148,929,930],{},"Ethernet, RTSP\u002FRTMP, GB28181, ONVIF config",[127,932,933,936,941],{},[148,934,935],{},"Intelligence",[148,937,938],{},[103,939,940],{},"components\u002Fintelligence\u002F",[148,942,943],{},"Algorithm enable\u002Fdisable, model upload, label editor",[127,945,946,948,953],{},[148,947,715],{},[148,949,950],{},[103,951,952],{},"components\u002Fagent\u002F",[148,954,955],{},"AI agent chat UI, Qwen config, voice testing",[127,957,958,961,966],{},[148,959,960],{},"Playback",[148,962,963],{},[103,964,965],{},"components\u002Frecord\u002F",[148,967,968],{},"Recording timeline, segment playback, download",[127,970,971,974,979],{},[148,972,973],{},"System",[148,975,976],{},[103,977,978],{},"components\u002Fsystem\u002F",[148,980,981],{},"User management, upgrade, web terminal, factory reset",[631,983,839],{"id":984},"restful-api",[77,986,987],{},"Full API surface over HTTP\u002FHTTPS. JWT tokens obtained via challenge-response login. Token auto-refresh on expiry.",[77,989,990,991,994,995,994,998,994,1001,994,1004,994,1007,994,1010,994,1013,994,1016,994,1019,994,1022,1025],{},"API groups: ",[103,992,993],{},"auth",", ",[103,996,997],{},"config",[103,999,1000],{},"device",[103,1002,1003],{},"network",[103,1005,1006],{},"media",[103,1008,1009],{},"record",[103,1011,1012],{},"upgrade",[103,1014,1015],{},"algo",[103,1017,1018],{},"agent",[103,1020,1021],{},"event",[103,1023,1024],{},"log",".",[113,1027,1029],{"id":1028},"_8-customization-path","8. Customization Path",[207,1031,1032,1045,1061],{},[210,1033,1034,1037,1038,1041,1042],{},[213,1035,1036],{},"Hardware customization",": add SoCs, board profiles, and peripherals such as GPIO, USB audio, IR-CUT, and watchdog primarily under ",[103,1039,1040],{},"device\u002F"," and ",[103,1043,1044],{},"hal\u002F",[210,1046,1047,1050,1051,994,1054,1057,1058],{},[213,1048,1049],{},"Software customization",": tailor streaming, AI, storage, protocol, web UI, and API modules primarily under ",[103,1052,1053],{},"base\u002F",[103,1055,1056],{},"foundation\u002F",", and ",[103,1059,1060],{},"applications\u002F",[210,1062,1063,1066],{},[213,1064,1065],{},"Delivery composition",": combine hardware platforms, protocol capabilities, AI services, and front-end experience into customer-specific product variants",[89,1068],{},[81,1070,1072],{"id":1071},"key-data-flows","Key Data Flows",[113,1074,1076],{"id":1075},"video-preview-webrtc","Video Preview (WebRTC)",[96,1078,1081],{"className":1079,"code":1080,"language":101},[99],"Camera Sensor\n    → HAL Video Capture (MPP VENC)\n    → GStreamer pipeline (H.264 encode)\n    → Stream Service WebRTC publisher\n    → ICE\u002FDTLS negotiation (WebSocket signaling at \u002Fv1\u002Fwebrtc)\n    → Browser WebRTC receiver\n    → Canvas render + AI overlay\n",[103,1082,1080],{"__ignoreMap":105},[113,1084,1086],{"id":1085},"ai-detection-local","AI Detection (Local)",[96,1088,1091],{"className":1089,"code":1090,"language":101},[99],"HAL Video Frame (YUV)\n    → HAL AI Accelerator (NPU inference, YOLOv8)\n    → Algo Manager (result parsing, label mapping)\n    → Event Bus (detection event published)\n    → Rule Engine (trigger check)\n    → WebSocket push to browser \u002F Record annotation\n",[103,1092,1090],{"__ignoreMap":105},[113,1094,1096],{"id":1095},"voice-agent-interaction","Voice Agent Interaction",[96,1098,1101],{"className":1099,"code":1100,"language":101},[99],"USB Microphone\n    → HAL Audio Capture\n    → Xiaozhi \u002F Qwen3-Omni (speech recognition)\n    → Agent (intent parsing, tool selection)\n    → Tool call: snapshot → Qwen-VL (image analysis)\n    → Agent (compose response)\n    → TTS → HAL Audio Playback → Speaker\n",[103,1102,1100],{"__ignoreMap":105},[113,1104,1106],{"id":1105},"firmware-upgrade","Firmware Upgrade",[96,1108,1111],{"className":1109,"code":1110,"language":101},[99],"Browser → POST \u002Fv1\u002Fupgrade\u002Fupload (multipart, chunked)\n    → Upgrade Service (signature verify)\n    → Flash write\n    → System reboot\n    → WebSocket progress events during all phases\n",[103,1112,1110],{"__ignoreMap":105},[89,1114],{},[81,1116,1118],{"id":1117},"directory-structure","Directory Structure",[96,1120,1123],{"className":1121,"code":1122,"language":101},[99],"endless\u002F\n├── applications\u002Fendless\u002F     # Main IPC application (service wiring, main loop)\n├── base\u002F                     # Base business services (media, record, storage …)\n├── common\u002Futils\u002F             # Shared utilities (thread pool, memory pool, log)\n├── device\u002F                   # Board & SoC configuration\n│   ├── board\u002F3516cv610\u002F      # Kernel config, rootfs overlay, product definition\n│   ├── board\u002F3516cv608\u002F\n│   ├── board\u002F3519dv500\u002F\n│   └── qemu\u002F                 # QEMU overlay, test assets\n├── foundation\u002F               # Higher-level services\n│   ├── agent\u002F                # AI Agent\n│   ├── aliyun\u002F               # Alibaba Cloud Qwen integration\n│   ├── qwen\u002F                 # Qwen SDK\n│   ├── xiaozhi\u002F              # Xiaozhi AI voice\n│   ├── mcp\u002F                  # MCP protocol\n│   ├── gb28181\u002F              # GB28181\n│   ├── onvif\u002F                # ONVIF\n│   ├── restful\u002F              # REST API\n│   ├── stream_service\u002F       # RTSP \u002F WebRTC \u002F RTMP\n│   ├── web_page\u002F             # Vue 3 frontend\n│   └── protocol\u002F             # Protocol abstraction\n├── hal\u002F                      # Hardware Abstraction Layer\n│   ├── mpp\u002F                  # Video\u002Faudio MPP\n│   ├── ai\u002F                   # NPU \u002F AI accelerator\n│   └── peripheral\u002F           # GPIO, IR-CUT, watchdog, RTC\n├── third_party\u002F              # Vendored dependencies\n├── docs\u002F                     # Project documentation\n├── build.sh                  # Top-level build script\n└── CMakeLists.txt            # Root CMake\n",[103,1124,1122],{"__ignoreMap":105},[89,1126],{},[81,1128,1130],{"id":1129},"build-system","Build System",[113,1132,1134],{"id":1133},"build-commands","Build Commands",[96,1136,1140],{"className":1137,"code":1138,"language":1139,"meta":105,"style":105},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Format: .\u002Fbuild.sh \u003Cproduct> \u003Ccommand> [mode]\n.\u002Fbuild.sh pa build release    # 3516CV610 release build\n.\u002Fbuild.sh pa all release      # Build + package firmware image\n.\u002Fbuild.sh pb build debug      # QEMU aarch64 debug build\n","bash",[103,1141,1142,1151,1171,1186],{"__ignoreMap":105},[1143,1144,1147],"span",{"class":1145,"line":1146},"line",1,[1143,1148,1150],{"class":1149},"sHwdD","# Format: .\u002Fbuild.sh \u003Cproduct> \u003Ccommand> [mode]\n",[1143,1152,1154,1158,1162,1165,1168],{"class":1145,"line":1153},2,[1143,1155,1157],{"class":1156},"sBMFI",".\u002Fbuild.sh",[1143,1159,1161],{"class":1160},"sfazB"," pa",[1143,1163,1164],{"class":1160}," build",[1143,1166,1167],{"class":1160}," release",[1143,1169,1170],{"class":1149},"    # 3516CV610 release build\n",[1143,1172,1174,1176,1178,1181,1183],{"class":1145,"line":1173},3,[1143,1175,1157],{"class":1156},[1143,1177,1161],{"class":1160},[1143,1179,1180],{"class":1160}," all",[1143,1182,1167],{"class":1160},[1143,1184,1185],{"class":1149},"      # Build + package firmware image\n",[1143,1187,1189,1191,1194,1196,1199],{"class":1145,"line":1188},4,[1143,1190,1157],{"class":1156},[1143,1192,1193],{"class":1160}," pb",[1143,1195,1164],{"class":1160},[1143,1197,1198],{"class":1160}," debug",[1143,1200,1201],{"class":1149},"      # QEMU aarch64 debug build\n",[113,1203,1205],{"id":1204},"outputs","Outputs",[121,1207,1208,1217],{},[124,1209,1210],{},[127,1211,1212,1214],{},[130,1213,887],{},[130,1215,1216],{},"Content",[143,1218,1219,1229,1239,1249],{},[127,1220,1221,1226],{},[148,1222,1223],{},[103,1224,1225],{},"out\u002Fbin\u002F",[148,1227,1228],{},"Executable binaries",[127,1230,1231,1236],{},[148,1232,1233],{},[103,1234,1235],{},"out\u002Flib\u002F",[148,1237,1238],{},"Shared libraries",[127,1240,1241,1246],{},[148,1242,1243],{},[103,1244,1245],{},"out\u002Fweb_page\u002F",[148,1247,1248],{},"Built Vue.js frontend",[127,1250,1251,1256],{},[148,1252,1253],{},[103,1254,1255],{},"out\u002Fimage\u002F",[148,1257,1258,1259,638],{},"Flashable firmware image (when using ",[103,1260,1261],{},"all",[113,1263,1265],{"id":1264},"toolchains","Toolchains",[121,1267,1268,1280],{},[124,1269,1270],{},[127,1271,1272,1275,1278],{},[130,1273,1274],{},"Platform",[130,1276,1277],{},"Compiler",[130,1279,887],{},[143,1281,1282,1297],{},[127,1283,1284,1287,1292],{},[148,1285,1286],{},"3516CV610 \u002F 3516CV608",[148,1288,1289],{},[103,1290,1291],{},"arm-v01c02-linux-musleabi-gcc",[148,1293,1294],{},[103,1295,1296],{},"device\u002Fsoc\u002Fhisilicon\u002F3516cv610",[127,1298,1299,1302,1307],{},[148,1300,1301],{},"aarch64 (QEMU)",[148,1303,1304],{},[103,1305,1306],{},"aarch64-linux-gnu-gcc",[148,1308,1309],{},"System or Buildroot",[89,1311],{},[81,1313,1315],{"id":1314},"performance-targets","Performance Targets",[121,1317,1318,1327],{},[124,1319,1320],{},[127,1321,1322,1325],{},[130,1323,1324],{},"Metric",[130,1326,141],{},[143,1328,1329,1337,1345,1353,1361,1369,1377,1385,1393],{},[127,1330,1331,1334],{},[148,1332,1333],{},"WebRTC latency",[148,1335,1336],{},"\u003C 500 ms",[127,1338,1339,1342],{},[148,1340,1341],{},"RTSP latency",[148,1343,1344],{},"\u003C 1 s",[127,1346,1347,1350],{},[148,1348,1349],{},"AI detection accuracy",[148,1351,1352],{},"> 85 % (person\u002Fvehicle)",[127,1354,1355,1358],{},[148,1356,1357],{},"24h recording capacity",[148,1359,1360],{},"32 GB SD card, 1080p, 1 Mbps",[127,1362,1363,1366],{},[148,1364,1365],{},"CPU usage (normal)",[148,1367,1368],{},"\u003C 70 %",[127,1370,1371,1374],{},[148,1372,1373],{},"Memory footprint",[148,1375,1376],{},"\u003C 256 MB",[127,1378,1379,1382],{},[148,1380,1381],{},"Cold boot time",[148,1383,1384],{},"\u003C 60 s",[127,1386,1387,1390],{},[148,1388,1389],{},"Concurrent RTSP clients",[148,1391,1392],{},"5",[127,1394,1395,1398],{},[148,1396,1397],{},"System stability target",[148,1399,1400],{},"7-day continuous operation without restart",[89,1402],{},[81,1404,1406],{"id":1405},"security-design","Security Design",[121,1408,1409,1419],{},[124,1410,1411],{},[127,1412,1413,1416],{},[130,1414,1415],{},"Area",[130,1417,1418],{},"Mechanism",[143,1420,1421,1429,1437,1445,1453,1461,1469],{},[127,1422,1423,1426],{},[148,1424,1425],{},"Transport",[148,1427,1428],{},"TLS 1.2+ for all HTTPS and WSS",[127,1430,1431,1434],{},[148,1432,1433],{},"Authentication",[148,1435,1436],{},"Challenge-response (HMAC-SHA256), anti-brute-force lockout",[127,1438,1439,1442],{},[148,1440,1441],{},"Session",[148,1443,1444],{},"JWT with short expiry + refresh token rotation",[127,1446,1447,1450],{},[148,1448,1449],{},"Config storage",[148,1451,1452],{},"AES encryption for secrets",[127,1454,1455,1458],{},[148,1456,1457],{},"Firmware integrity",[148,1459,1460],{},"RSA signature verification before flash",[127,1462,1463,1466],{},[148,1464,1465],{},"Secure boot",[148,1467,1468],{},"Platform-dependent (Hisilicon eFuse-based)",[127,1470,1471,1474],{},[148,1472,1473],{},"Vulnerability mgmt",[148,1475,1476],{},"Periodic dependency audit, Buildroot security patches",[89,1478],{},[81,1480,1482],{"id":1481},"contact","Contact",[207,1484,1485,1497],{},[210,1486,1487,1490,1491],{},[213,1488,1489],{},"GitHub",": ",[1492,1493,1494],"a",{"href":1494,"rel":1495},"https:\u002F\u002Fgithub.com\u002Fendless-sky-bee1\u002Fendless",[1496],"nofollow",[210,1498,1499,1490,1502],{},[213,1500,1501],{},"Email",[1492,1503,1505],{"href":1504},"mailto:endless@endless-sky.onaliyun.com","endless@endless-sky.onaliyun.com",[1507,1508,1509],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":105,"searchDepth":1153,"depth":1153,"links":1511},[1512,1513,1514,1524,1530,1531,1536,1537,1538],{"id":83,"depth":1153,"text":84},{"id":93,"depth":1153,"text":94},{"id":110,"depth":1153,"text":111,"children":1515},[1516,1517,1518,1519,1520,1521,1522,1523],{"id":115,"depth":1173,"text":116},{"id":204,"depth":1173,"text":205},{"id":237,"depth":1173,"text":238},{"id":320,"depth":1173,"text":321},{"id":421,"depth":1173,"text":422},{"id":625,"depth":1173,"text":626},{"id":864,"depth":1173,"text":865},{"id":1028,"depth":1173,"text":1029},{"id":1071,"depth":1153,"text":1072,"children":1525},[1526,1527,1528,1529],{"id":1075,"depth":1173,"text":1076},{"id":1085,"depth":1173,"text":1086},{"id":1095,"depth":1173,"text":1096},{"id":1105,"depth":1173,"text":1106},{"id":1117,"depth":1153,"text":1118},{"id":1129,"depth":1153,"text":1130,"children":1532},[1533,1534,1535],{"id":1133,"depth":1173,"text":1134},{"id":1204,"depth":1173,"text":1205},{"id":1264,"depth":1173,"text":1265},{"id":1314,"depth":1153,"text":1315},{"id":1405,"depth":1153,"text":1406},{"id":1481,"depth":1153,"text":1482},"Architecture","Detailed layered architecture, component boundaries and key flows for Endless.","md","English",{},true,"\u002Fproducts\u002Fbrief\u002Farchitecture-en",{"title":64,"description":1540},"products\u002Fbrief\u002Farchitecture-en","4Qg0UcndPUe3Kbj4PK-NYFK8jRjP-uDB3u-VgOp-66U",[1550,1555],{"title":1551,"path":1552,"stem":1553,"description":1554,"children":-1},"系统架构","\u002Fproducts\u002Fbrief\u002Farchitecture","products\u002Fbrief\u002Farchitecture","展开 Endless 从硬件到应用层的完整分层设计与关键数据流。",{"title":1556,"path":1557,"stem":1558,"description":1559,"children":-1},"功能列表","\u002Fproducts\u002Fbrief\u002Ffeatures","products\u002Fbrief\u002Ffeatures","按模块汇总 Endless 已实现与规划中的核心能力。",1775545641833]