找回密码
 立即注册
查看: 277|回复: 18

[进阶教程] 万字经验,一文带你入门frigate AI监控

[复制链接]

24

主题

123

回帖

1127

积分

论坛UI达人

积分
1127
金钱
980
HASS币
10
发表于 昨天 11:44 | 显示全部楼层 |阅读模式
本帖最后由 gasment 于 2025-5-20 11:39 编辑

我使用frigate 做nvr(网络录像机)来替代群晖的Surveillance Station已有半年,
期间尝试过的方案也不少,踩坑也不少,从单纯的录像,到HA联动,到人在检测,
现在已达成一套比较稳定的方案,可以拿出来供大家参考了

需要注意,frigate并不是一个轻量级的应用,要实现比较理想的运行效果,平台需要一定的性能,
(推荐为4核心带GPU的处理器,8G以上内存)
如果你只是需要一个简单的NVR,frigate并不适合你


那frigate可以做什么呢?
1、传统NVR 24x7监控录制,多种回看模式
2、基于本地特化AI模型推理的的对象识别
3、联动homeassistant,拓展为各类传感器
···
frigate(0.15.1)目前缺点:
1、没有移动端app,移动端浏览器回看操作不方便
2、资源占用比较大
3、没有汉化界面
···
看完以上,对部署frigate有兴趣的,可以进入正文了:
本文目录:

一、设备选型
二、frigate容器搭建参考
三、frigate配置参考
四、联动HA
五、其他问题

                               
登录/注册后可看大图


一、设备选型参考
先说明下几个会提到的术语
  • 编解码:frigate需要解码视频流才可以进行后续处理,而编码是可选的(在保存视频格式不符需求时使用),编解码是资源密集型任务,需要占用一定性能
  • 推理:frigate对象识别需要根据不同的模型进行推理识别,其单帧耗时为推理速度,推理速度跟模型参数量和处理的硬件水平有关,以官方推荐的Coral TPU为例子,其典型推理速为10ms,每秒可处理1000/10=100帧画面,再多就会丢失部分检测或排队阻塞,官方推荐每个视频流检测帧数为5,也就是最大可能接入20个视频流
  • 模型:模型的类型与frigate检测器相关,模型有参数量大小之分,参数量大的模型,识别越精确,代价是推理速度的相应增加,比如yolo_nas模型分yolo_nas_s/m/l 三种

目前实践过的设备方案情况(功耗不含硬盘):
G4560(双核四线程)+ iGPU编解码+iGPU推理,平台功耗20~30W
  • OpenVino/ssdlite_mobilenet_v2模型推理速度:10-20ms,CPU平均占用50%,峰值70%;
  • OpenVino/yolo_nas_s模型推理速度:20-30ms,CPU平均占用60%,峰值80%;


G4560(双核四线程)+ iGPU编解码+Coral推理,平台功耗20~30W
  • TensorFlow Lite模型推理速度:<10ms,CPU平均占用50%,峰值70%


I3-8100T(四核四线程)+ iGPU编解码+iGPU推理,平台功耗20~30W
  • OpenVino/ssdlite_mobilenet_v2模型推理速度:10-20ms,CPU平均占用30%,峰值50%;
  • OpenVino/yolo_nas_s模型推理速度:20-30ms,CPU平均占用40%,峰值70%;

I3-8100T(四核四线程)+ iGPU编解码+Coral推理,平台功耗20~30W
  • TensorFlow Lite模型推理速度:<10ms,CPU平均占用30%,峰值50%

I3-8100T(四核四线程)+ nvidia T600编解码+nvidia T600推理,单显卡功耗20-30W
  • yolov7-320模型推理速度:20-30ms,CPU平均占用20%,峰值40%

N100(四核四线程)+iGPU编解码+iGPU推理,平台功耗10~20W
  • OpenVino/ssdlite_mobilenet_v2模型推理速度:10-20ms,CPU平均占用30%,峰值50%;

RK3588(八核ARM) + VPU编解码+NPU推理,平台功耗5~8W
  • rknn/yolo_nas_s模型推理速度:30-40ms,CPU平均占用30%,峰值50%;
  • rknn/yolo_nas_m模型推理速度:40-50ms,CPU平均占用30%,峰值50%;

总结参考
性价比之选
intel 4核,6代及以上CPU + 8G及以上内存+OpenVino/ssdlite_mobilenet_v2模型
一个CPU即可包揽编解码和检测,而且与大部分人在用的设备重合度高,基本不用新增额外设备即可食用,缺点是模型识别精度较低;
intel 6核以上,可以使用yolo_nas模型,提高识别精度同时降低CPU整体占用
锦上添花之选
如果你有大量摄像头需要跑检测,而且对识别精度有一定要求,可以在性价比之选上,额外增加一个Coral TPU
Coral推荐买M.2接口的,实测群晖、飞牛OS都可以编译驱动,威联通官方有这玩意,但是注意适配机型
M.2接口版本市场价300左右,USB版无需驱动,兼容性更强,但是贵了1倍多,不是很推荐
不差钱之选:
4核以上CPU + 8G及以上内存 + NVIDIA (RTX)显卡 + yolov模型
各项性能都可以,就是功耗不行,性价比低,不差钱或者有其他用途的可以考虑下
极致低功耗之选:
RK3588 + 8G及以上内存 +yolo_nas_s/m模型
一个芯片同时具备编解码的VPU和推理的NPU,整合度很高,跑yolo_nas_m模型大概可同时检测5-7条视频流
不含硬盘时极致低功耗,日常运行5-7W !
缺点是RK3588整机略贵,8G版市场价600~800,16G价格起飞,8G基本跑了frigate就干不了其他事了,属于专机专用

  • PS:A卡/APU也可以跑,官方文档也有提到,具体情况我没硬件测试不了
监控摄像头输入
每个摄像头提供至少一条RTSP协议视频流即可,视频格式最好调整为H264或H265,音频为ACC,其他格式则需要额外重编码;
如果同时有最低720P的5FPS的子码流最好



                               
登录/注册后可看大图

二、frigate容器搭建参考
docker容器统一使用docker-compose部署,怎么玩docker-compose就不讨论了,可以自行学习
frigate的web默认端口为5000和8971,5000无密码,注意保护,8971为有密码的https

方案1:Intel CPU+ iGPU编解码+iGPU或Coral推理
排版可能有问题,可下载yaml文件:
游客,如果您要查看本帖隐藏内容请回复
注意#号后注释说明!
version: "3.9"
  services:
    frigate:
      container_name: frigate
      privileged: true # 使用特权模式
      restart: unless-stopped
      image: ghcr.io/blakeblackshear/frigate:0.15.1
      shm_size: "512mb" # 这个根据视频流数量来定,我这边7条流
      devices:
        - /dev/dri/renderD128:/dev/dri/renderD128  # GPU透传
       #- /dev/apex_0:/dev/apex_0  #使用Coral推理,请取消#注释
      volumes:
        - /etc/localtime:/etc/localtime:ro
        - /volume1/docker/frigate/config:/config   #配置存放目录,请修改
        - /volume4/NVR/frigate:/media/frigate     #录像存放目录,请修改
        - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
          target: /tmp/cache
          tmpfs:
          size: 1000000000
      ports:
        - "1984:1984" # go2rtc web
        - "8971:8971"
        - "5000:5000" # 群晖会冲突,修改为其他如5555:5000
        - "8554:8554" # RTSP feeds
        - "8555:8555/tcp" # WebRTC over tcp
        - "8555:8555/udp" # WebRTC over udp
      environment:
        FRIGATE_RTSP_PASSWORD: "passwd"

方案2:NVIDIA (RTX)显卡编解码+NVIDIA (RTX)显卡推理,容器首次启动会比较耗时,需要等待模型构建完成
排版可能有问题,可下载yaml文件:
游客,如果您要查看本帖隐藏内容请回复
version: "3.9"
  services:
    frigate:
      container_name: frigate
      privileged: true # 使用特权模式
      restart: unless-stopped
      image: ghcr.io/blakeblackshear/frigate:0.15.1-tensorrt   #使用特定镜像
      deploy: 
        resources:
          reservations:
            devices:
              - driver: nvidia
                capabilities: [gpu]
      shm_size: "512mb"  # 这个根据视频流数量来定,我这边7条流
      volumes:
        - /etc/localtime:/etc/localtime:ro
        - /volume1/docker/frigate/config:/config   #配置存放目录,请修改
        - /volume4/NVR/frigate:/media/frigate     #录像存放目录,请修改
        - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
          target: /tmp/cache
          tmpfs:
            size: 1000000000
      ports:
        - "1984:1984" # go2rtc web
        - "8971:8971"
        - "5000:5000" # 群晖会冲突,修改为其他如5555:5000
        - "8554:8554" # RTSP feeds
        - "8555:8555/tcp" # WebRTC over tcp
        - "8555:8555/udp" # WebRTC over udp
      environment:
        FRIGATE_RTSP_PASSWORD: "passwd"

方案3:rockchip平台,由于frigate-rk镜像带的go2rtc无法调用rk的硬件编解码加速,这里需要另起一个go2rtc容器来处理前期的转码工作
排版可能有问题,可下载yaml文件:
游客,如果您要查看本帖隐藏内容请回复
注意#号后注释说明!
services:
  go2rtc:
    container_name: go2rtc
    image: alexxit/go2rtc:master-rockchip   #使用特定镜像
    network_mode: bridge
    ports:
      - 11984:1984
      - 18554:8554   
      - 18555:8555            #端口需与frigate错开
    privileged: true         # 使用特权模式
    restart: unless-stopped  
    environment:
      - TZ=Atlantic/Shanghai 
    volumes:
      - "/mnt/docker-data/go2rtc:/config"   #配置存放目录,请修改
version: "3.9"
  services:
    frigate:
      container_name: frigate
      privileged: true # 使用特权模式
      restart: unless-stopped
      image: ghcr.io/blakeblackshear/frigate:0.15.1-rk  #使用特定镜像
      shm_size: "512mb"  # 这个根据视频流数量来定,我这边7条流
      volumes:
        - /etc/localtime:/etc/localtime:ro
        - /volume1/docker/frigate/config:/config   #配置存放目录,请修改
        - /volume4/NVR/frigate:/media/frigate     #录像存放目录,请修改
        - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
          target: /tmp/cache
          tmpfs:
            size: 1000000000
     ports:
       - "1984:1984" # go2rtc web
       - "8971:8971"
       - "5000:5000" 
       - "8554:8554" # RTSP feeds
       - "8555:8555/tcp" # WebRTC over tcp
       - "8555:8555/udp" # WebRTC over udp
     environment:
       FRIGATE_RTSP_PASSWORD: "passwd"

三、frigate配置参考
frigate的大部分设置由一个config文件来配置,在web配置的功能比较少,这也是上手难度比较大的原因
进入frigate web->Config Editor进行在线编辑,以下提供的配置参考,请按顺序逐项添加

由于yaml对缩进格式要求严格,如有排版错误,可下载完整配置,逐项对比修改:
游客,如果您要查看本帖隐藏内容请回复

注意#号后注释说明!
1、mqtt配置:
version: 0.15-1
mqtt:
  enabled: true   #如有mqtt服务器,请改为true,否则false
  host: 192.168.32.26   #mqtt服务器ip、用户名、密码
  user: 
  password: 
2、go2rtc配置
使用go2rtc前,请在go2rtc的web页(frigate ip + 1984端口)-> add ->ffmpeg hardware 处确认是否有"OK"状态的编解码器
  • intel/nvidia/rk3588(不转码)

go2rtc:
  streams:
    main-door-right:   #摄像头名称,爱自己喜好修改
      - rtsp://视频流地址      #主码流地址
      - "ffmpeg:main-door-right#audio=acc"     #启用重新编码音频为ACC
      - "ffmpeg:main-door-right#video=h264#audio=acc#hardware"  #启用重新编码视频为为H264,音频ACC,启用硬件加速
      #rk3588请勿使用以上转码参数,如需转码,请按docker容器部署方法,部署专用go2rtc容器
    main-door-right-sub: #摄像头子码流名称(如有)
      - rtsp://视频流地址                        #子码流地址
  • rk3588-go2rtc专用配置(注意是go2rtc自己的config配置,不是frigate中的)

streams:
  main-door-right:   #摄像头名称,爱自己喜好修改
    - ffmpeg:rtsp://视频流地址#video=copy#audio=aac#hardware=rkmpp  #启用重新编码音频为ACC
  main-door-right:  #摄像头名称,爱自己喜好修改
    - ffmpeg:rtsp://视频流地址#video=h264#audio=aac#hardware=rkmpp  #启用重新编码视频为为H264,音频ACC,启用硬件加速
然后frigate中的视频流连接修改为外部专用go2rtc重编码的连接
go2rtc:
  streams:
    main-door-right:   #摄像头名称,爱自己喜好修改
      - rtsp://专用go2rtc所在ip:18554/cam-name


3、ffmpeg全局预设(选其一)

ffmpeg:
  hwaccel_args: preset-vaapi  #intel/amd
  hwaccel_args: preset-nvidia  #nvidia
  hwaccel_args: preset-rk-h265  #rk3588
#rk也有preset-rk-h264,如果你的视频流混杂h265和h264,可以在h264的摄像头字段下另起“hwaccel_args: preset-rk-h264”,后文提及
4、摄像头全局配置
全局配置可以简化一些重复的摄像头配置,如果有不一样的,可以在后面对应的字段修改,字段配置优先级比全局高
detect:  #统一检测帧规格为720p 5fps
  enabled: true
  width: 1280  
  height: 720
  #分辨率不是越大越好,需要根据检测物体的尺寸在画面中的比例来确定,详情见  #https://docs.frigate.video/frigate/camera_setup#choosing-a-detect-resolution
  fps: 5
  #5fps为官方推荐制,对于快速运动的画面,可以稍作调高,最高不要高于10
objects:
  track:  #需要跟踪检测的对象类型
    - person
    - bicycle
    - car
    - motorcycle
    - cat
    - dog
record:  #录制时长,我这里是全时录制,保存18天
  enabled: true
  retain:
    days: 18
    mode: all
  alerts: #告警片段也保存18天,基于运动检测的保留
    retain:
      days: 18
      mode: motion

5、检测模型配置
  • coral pcie (intel/amd)  (容器自带模型)
detectors:
  coral:
    type: edgetpu
    device: pci
#无需配置model
  • openvino/ssdlite_mobilenet_v2 (intel)(容器自带模型)
detectors:
  ov:
    ype: openvino
    device: GPU
model:  
  width: 300
  height: 300
  input_tensor: nhwc
  input_pixel_format: bgr
  path: /openvino-model/ssdlite_mobilenet_v2.xml
  labelmap_path: /openvino-model/coco_91cl_bkgr.txt
  • openvino/yolonas (intel)(需要自行构建)
yolonas模型不自带,参考https://docs.frigate.video/confi ... rsopenvino-detector来获取模型
(页面有一个google colab的连接,进入该连接,逐条执行写好的python命令,之后就可以下载得到预训练的模型)
detectors:
  ov:
    type: openvino
    device: GPU
model: 
  model_type: yolonas
  width: 320
  height: 320
  input_tensor: nchw
  input_pixel_format: bgr
  path: /config/yolo_nas_s.onnx #将模型放入此路径
  labelmap_path: /labelmap/coco-80.txt
  • tensorrt-yolov7 (nvidia)  (需要本地构建)
此模型需要本机在线构建,网络不好容易构建失败(最好有科学上网)
detectors:
  tensorrt:
    type: tensorrt
    device: 0
model:  
  path: /config/model_cache/tensorrt/yolov7-320.trt
  labelmap_path: /labelmap/coco-80.txt
  input_tensor: nchw
  input_pixel_format: rgb
  width: 320
  height: 320
  • rknn/yolonas (rk3588)  (容器模型自带)
detectors:
  rknn:
    type: rknn
    num_cores: 3   #启用全部3个npu
model:
  path: deci-fp16-yolonas_s
  #以下模型可选:
  #deci-fp16-yolonas_s
  #deci-fp16-yolonas_m
  #deci-fp16-yolonas_l
  #可以自建模型,存放路径:
  #/config/model_cache/your_custom_model.rknn
  width: 320
  height: 320
  input_pixel_format: bgr
  input_tensor: nhwc
  labelmap_path: /labelmap/coco-80.txt
6、摄像头配置
示例为单个摄像头,多个摄像头就按格式新建多个字段即可
cameras:
  main-door-right: #摄像头名称,与go2rtc中配置的一致
    ffmpeg:
      hwaccel_args: preset-rk-h265 #ffmpeg预设,根据视频流格式来定,如preset-vaapi、preset-nvidia、preset-rk-h264
      output_args:
        record: preset-record-generic-audio-copy
        #音频保存格式,目前15.1正式版本还是不支持acc外的音频格式(测试版16已支持)
        #官方预设preset-record-generic-audio-aac会导致录制视频没有音频流,需要在go2rtc中预先转码,然后使用copy参数
      inputs:
        - path: rtsp://127.0.0.1:8554/main-door-right #本地go2rtc-rtsp复用,对应你的摄像头名称
          roles:
            - record #摄像头功能:开启录制
            - detect #摄像头功能:开启检测
    onvif: #支持onvif和云台功能的摄像头可以配置云台功能
      host: 192.168.x.x
      port: 80
      user: admin
      password: admin

main-door-left: #配置第二个摄像头

如果有全局配置中不适用的小项,可以在ffmpeg同层级添加对应的配置,这里的配置优先级比全局高,如修改不同于全局的单个摄像头录制保留时间:
cameras:
  main-door-right: 
    ffmpeg:
      hwaccel_args: preset-rk-h264 
      output_args:
      ---
      inputs:
      ---
    onvif: 
    ---
    detect: 
      enabled: false
    record: #录制时长,我这里是全时录制,保存18天
      enabled: true
       retain:
        days: 7
       mode: all
       alerts: #告警片段也保存18天,基于运动检测的保留
         retain:
           days: 7
           mode: motion

main-door-left: #配置第二个摄像头


7、按顺序完成以上配置后,重启frigate,观察frigate web上的日志是否有报错或警告
8、web相关配置
  • 进入frigate的5000端口web管理页,进入setting->UI Settings->First Weekday,这里可改成monday
  • 进入Users,新建一个用户,用于8971端口登录,可以删掉原有的admin用户
  • 进入Masks / Zones,配置某个摄像头的区域:
  • zones:为检测区域,比如想检测人在,就框起来一个区域,Objects选person
  • Motion Masks:运动遮罩区域,用于排除一些固定存在的元素,比如摄像头带的水印、OSD时间戳等,区域大小不要过大,不要滥用Motion Masks来限制检测,会造成对象跟踪困难
  • Object Masks:对象遮罩,用于排除一些固定的误报区域,比如风吹动的树,固定停放的车等
  • 进入Motion Tuner,可以调整触发运动检测的阈值,可以使用隔壁的debug画面来调试
  • 完成以上,记得重启frigate容器
9、摄像头补充配置(review/snapshots)
cameras:
  main-door-right:
    ffmpeg:
    ---
    onvif:
    ---
    zones:
    ---
    motion:
    ---
    review: #回放页面
      alerts:  #告警片段仅记录特定区域中的特定对象
        required_zones:
         - zones-name
      labels:
        - person
    snapshots:  #快照仅记录特定区域
      required_zones:
        - zones-name

四、联动homeassistant
  • HA集成方式
HACS商店直接搜索frigate安装集成即可,接入后就有很丰富的实体,这是最简单直接的方法
  • MQTT
需要搭建MQTT服务器,比如EMQX,在frigate配置中配置mqtt参数后,其他mqtt客户端就可以订阅相关主题,自动化可以配合nodered食用
https://docs.frigate.video/integrations/mqtt
  • HTTP API
使用http get/post等协议来获取一些数据,或者控制一些参数
https://docs.frigate.video/integrations/api/frigate-http-api
  • 视频流实时查看卡片
官方的Advanced Camera Card功能太杂,我用的WebRTC Camera集成,配置集成连接frigate的go2rtc端口1984即可
卡片模板:
type: custom:webrtc-camera
url: #在go2rtc中配置的摄像头名字,如main-door-right

五、其他问题
1、如果你的视频流是h265,需要使用支持HEVC的浏览器才可以正常预览视频
  • windows10及以上可以安装HEVC Video Extensions扩展+EDGE/Chrome浏览器
  • linux(debian/ubuntu等)可以使用Chromium浏览器,配合启动参数:
--enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder
我在debian12+kde桌面环境上测试成功
        手机iOS使用Safari、edge等都可,安卓我使用小米自带浏览器也可
2、检查rk3588 NPU的使用率(这个功能在下个大版本16.x会集成到web)
cat /sys/kernel/debug/rknpu/load
NPU load:  Core0:  0%, Core1:  0%, Core2:  0%
3、群晖、飞牛OS使用N卡,安装商店提供的驱动即可
4、群晖、飞牛OS使用coral TPU(pcie),需要编译驱动文件,加载后才可使用
或我部署的静态文档:https://dsm7-build-model.netlify.app/

评分

参与人数 2金钱 +22 收起 理由
隔壁的王叔叔 + 12 高手,这是高手!
qjrxsoft + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

2

主题

180

回帖

1528

积分

金牌会员

积分
1528
金钱
1346
HASS币
0
发表于 昨天 13:08 | 显示全部楼层
大佬分享的挺详细的,我计划用rk3588的方案在搞一套,但是苦于没有rk3588的测试说明,我个人是反对all in one,所有的东西都放一台设备上,太没有安全感了,我一直非常喜欢ARM低功耗平台,有了楼主这篇参考,我可以入手搞了。
回复

使用道具 举报

30

主题

1413

回帖

6458

积分

元老级技术达人

积分
6458
金钱
4990
HASS币
100
发表于 昨天 13:15 | 显示全部楼层
优秀
回复

使用道具 举报

hhh. 手机认证

9

主题

303

回帖

2816

积分

论坛UI达人

积分
2816
金钱
2504
HASS币
0
发表于 昨天 13:17 | 显示全部楼层
feigate   个人首推 G7505 这个U硬件配置,11代的Intel核显,性能强劲,整体功耗较低,可以AIO,也可物理HA或ikuai。
回复

使用道具 举报

24

主题

123

回帖

1127

积分

论坛UI达人

积分
1127
金钱
980
HASS币
10
 楼主| 发表于 昨天 13:23 | 显示全部楼层
qjrxsoft 发表于 2025-5-20 13:08
大佬分享的挺详细的,我计划用rk3588的方案在搞一套,但是苦于没有rk3588的测试说明,我个人是反对all in o ...

我现在就是3588在单独跑frigate,整体表现还是挺不错的,就是NPU不够顶,我这里7条检测流基本就快跑满了
回复

使用道具 举报

0

主题

15

回帖

148

积分

注册会员

积分
148
金钱
133
HASS币
0
发表于 昨天 13:33 | 显示全部楼层
感谢分享
回复

使用道具 举报

2

主题

180

回帖

1528

积分

金牌会员

积分
1528
金钱
1346
HASS币
0
发表于 昨天 13:46 | 显示全部楼层
gasment 发表于 2025-5-20 13:23
我现在就是3588在单独跑frigate,整体表现还是挺不错的,就是NPU不够顶,我这里7条检测流基本就快跑满了 ...

可以跑7条已经足够家用,我的实际场景也就4条,我现在的方案是:家了原有一套海康威视的监控,有5个摄像头,存储到海康威视的NVR里,我查了一下,我这个型号的摄像头可以支持2路取流(可以接入两台NVR),再取一组流到RK3588跑的frigate,实现视频的识别,存储还是存到海康的NVR上,这样弄投入少架构也简单。
回复

使用道具 举报

2

主题

389

回帖

2656

积分

金牌会员

积分
2656
金钱
2260
HASS币
30
发表于 昨天 14:25 | 显示全部楼层
謝謝大佬,我也玩了一段時間
回复

使用道具 举报

14

主题

1547

回帖

5038

积分

论坛元老

积分
5038
金钱
3477
HASS币
0
发表于 昨天 14:55 | 显示全部楼层
学习一下,正想折腾这个呢
回复

使用道具 举报

3

主题

192

回帖

3540

积分

论坛元老

积分
3540
金钱
3345
HASS币
0
发表于 昨天 15:05 | 显示全部楼层
学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-5-21 03:35 , Processed in 0.178953 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表