Skip to content
LinuxSuRenPublic

About

ONVIF IP camera AI voice assistant — real-time RTSP video, speech recognition and LLM answers, TTS playback, in Go + Vue 3

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

ONVIF AI — 摄像头查看器

基于 ONVIF 协议的 IP 摄像头查看与语音对讲工具:自动发现局域网摄像头,浏览器实时观看画面与收听现场音频,按住按钮即可通过麦克风向摄像头扬声器喊话对讲。另提供可选的 AI 语音助手(问答 + 播报),默认收起不影响核心使用。

核心功能

  • 🔍 ONVIF 自动发现(WS-Discovery 组播 + Hello 监听,一键搜索并连接)
  • 🔐 设备认证(WS-Security UsernameToken Digest + 设备对时;RTSP 取流/对讲/快照自动携带凭证。设备列表展开详情即可填写账号,按设备地址记忆)
  • 📹 实时视频流(RTSP H.264 / 快照降级 1FPS,多画面预览)
  • 🔊 实时音频监听(RTSP 流内含 G.711 或 AAC-LC 音频轨时自动在浏览器播放,采样率随源动态适配;无音频轨不受影响。HE-AAC 等其他编码暂不支持,后端会记录告警)
  • 📣 语音对讲(按住说话,浏览器麦克风音频经 RTSP backchannel 实时推到摄像头扬声器;设备 SDP 需提供 G.711 回传轨,不支持的设备会明确提示并禁用入口)
  • 📡 流转发(把摄像头的 RTSP 流原样转推到流媒体服务器如 mediamtx,服务器离线自动重试,支持认证与 rtsps 加密,可选定期自动发现新设备并转发)
  • 📡 WebSocket 实时通信(视频帧、音频、状态全走 WS)

AI 语音助手(可选)

AI 相关功能默认收起在侧栏「AI 语音助手」折叠面板中,按需展开:

  • 🎙️ 浏览器语音识别(Chrome SpeechRecognition,无需 API Key)
  • 📷 摄像头麦克风收音(G.711 → Whisper STT)
  • 🤖 大模型对话(OpenAI 兼容接口,DeepSeek/SiliconFlow 等)
  • 🔊 TTS 语音播报(Edge TTS 免费 / 自定义接口;经对讲回传通道下发,与语音对讲互斥——对讲优先,占用中会提示稍后)

使用语音识别需要 Chrome 或 Edge 浏览器;需在「设备管理 → AI 模型配置」中填入 LLM API Key。

流转发到流媒体服务器(可选)

把已有摄像头的 RTSP 流转发(转推)到指定流媒体服务器(如 mediamtx),供第三方播放器或其他平台订阅:

  • 转发范围:已连接摄像头的每路画面(media profile)各转发一路;开启「自动发现设备」后,还会定期探测局域网 ONVIF 设备,新发现的设备匿名解析流地址并自动转发(要求认证的设备会记日志跳过)
  • 路径设计:每路画面发布为 onvif-ai/<设备地址>/<画面名>,路径稳定可读,可直接在流媒体服务器侧按路径订阅
  • 可靠性:源设备重启或流媒体服务器离线时按指数退避自动重试(5s 起步、30s 封顶),恢复后自动继续推送
  • 认证与加密:流媒体服务器开启认证时填写用户名/密码(注入推流地址 userinfo);需要加密时勾选 rtsps

配置入口在页面侧栏「设备管理 → 转发设置」,面板内可实时查看每路转发的状态(路径、转发中/重试中、最近错误)。也可通过 API 操作:GET/PUT /api/forward/config(读取时密码脱敏)与 GET /api/forward/status。

环境变量只是启动默认值,页面上保存的配置为内存态、立即生效,进程重启后回落到环境变量。

快速开始

环境要求

  • Go 1.21+
  • Node.js 18+
  • ONVIF 摄像头(可选,Demo 模式不需要)

配置

cp .env.example .env
# 仅使用查看与对讲无需配置;AI 语音助手才需要填 LLM API Key

启动

make deps     # 安装依赖并构建前端(go:embed 嵌入二进制)
make run      # 后端 :8080,前端已内嵌

打开 http://localhost:8080

前端开发(热更新)时另开终端执行 make web-dev(:5173),生产形态以嵌入版为准。

移动端

支持手机/平板浏览器访问(响应式布局,窄屏自动单栏堆叠):

  • PTZ 云台按钮使用 Pointer Events,触屏可按住操作
  • iOS 需系统 17.1+(iPhone 的 MSE 支持);更早版本仅可观看快照降级画面
  • 通过局域网访问:http://<运行机器IP>:8080

Docker

docker build -t onvif-ai .
# WS-Discovery 依赖 UDP 3702 组播,Linux 下建议 --network host
docker run --network host --env-file .env onvif-ai

镜像同时发布到 ghcr.io:ghcr.io/linuxsuren/onvif-ai:<version>

发布

推送 v* tag 触发 Release workflow:

make release VERSION=0.0.1

自动完成:多平台二进制(linux amd64/arm64/armv6/armv7、darwin amd64/arm64、windows amd64, 含前端静态资源)→ GitHub Release 附件;多架构 Docker 镜像(linux amd64/arm64)→ ghcr.io。

环境变量

变量 默认值 说明
ONVIF_ADDR 192.168.1.138:8089/onvif/device_service ONVIF 设备地址
LLM_BASE_URL https://api.openai.com LLM API 地址(AI 助手)
LLM_API_KEY — API Key(AI 助手)
LLM_MODEL gpt-3.5-turbo 模型名称(AI 助手)
TTS_PROVIDER edge-tts TTS 引擎 (edge-tts / http)(AI 助手)
TTS_VOICE zh-CN-XiaoxiaoNeural 语音名称(AI 助手)
MEDIAMTX_URL — 流媒体服务器地址,如 rtsp://192.168.1.10:8554(转发)
MEDIAMTX_USERNAME — 流媒体服务器用户名(转发)
MEDIAMTX_PASSWORD — 流媒体服务器密码(转发)
MEDIAMTX_TLS false true 时用 rtsps 加密推流(转发)
FORWARD_AUTODISCOVER false true 时定期自动发现 ONVIF 设备并转发
FORWARD_DISCOVER_INTERVAL 30 自动发现周期(秒,或 45s 形式)
PORT 8080 HTTP 端口

命令行参数 --port 可指定端口,优先级高于 PORT 环境变量:

./server --port 3000    # 监听 3000,忽略 PORT 环境变量

端口被占用时启动不失败,自动向后漂移到下一个可用端口(最多尝试 20 个连续端口),漂移会在日志中说明;权限不足等其他错误不漂移、直接失败。

架构

浏览器 ←─WebSocket(视频帧 / 音频 / 对讲 PCM)─→ Go 后端 ←─RTSP/ONVIF─→ IP 摄像头
                                                     │
                                                     ├─ 对讲:麦克风 PCM → RTSP backchannel(RTP)→ 摄像头扬声器
                                                     ├─ 转发(可选):摄像头 RTSP 拉流 → 原样转推 → 流媒体服务器(mediamtx)
                                                     └─ AI 助手(可选):LLM API + TTS Engine

项目结构

cmd/server/main.go     # 入口
internal/
  audio/               # G.711 编解码、PCM 工具
  forward/             # RTSP 流转发到流媒体服务器(重试/自动发现)
  llm/                 # LLM 客户端 (Chat + Whisper STT)
  tts/                 # TTS 客户端 (Edge TTS)
  onvif/               # ONVIF SOAP 客户端 + WS-Discovery
  rtsp/                # RTSP 流 + 音频回传
  ws/                  # WebSocket Hub + 协议
  server/              # HTTP 路由 + API
web/                   # Vue 3 前端

License

MIT

About

ONVIF IP camera AI voice assistant — real-time RTSP video, speech recognition and LLM answers, TTS playback, in Go + Vue 3

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages