go2rtc终极指南:构建零延迟、零依赖的专业级摄像头流媒体服务器
go2rtc终极指南构建零延迟、零依赖的专业级摄像头流媒体服务器【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc在当今智能监控和物联网时代高效稳定的摄像头流媒体服务成为技术架构中的关键组件。go2rtc作为一款专业的摄像头流媒体解决方案为中级用户和开发者提供了零依赖、低延迟的多协议流媒体处理能力。这款跨平台应用支持RTSP、WebRTC、HomeKit、FFmpeg等主流协议能够高效整合各类摄像头设备实现智能家居和监控系统的无缝对接。本文将深度解析go2rtc的核心架构提供实战部署指南并分享专业级优化策略。技术架构深度解析模块化设计的流媒体引擎go2rtc采用清晰的模块化设计将复杂的流媒体处理分解为输入、处理和输出三个层次。其核心优势在于极低的延迟性能——WebRTC协议下延迟可控制在500ms以内为实时监控和智能家居场景提供了理想的技术基础。从源码结构来看go2rtc的组织架构体现了专业级流媒体服务器的设计理念核心流处理模块internal/streams/目录包含了流媒体的核心管理逻辑负责流的生命周期管理和数据分发协议支持层internal/webrtc/、internal/rtsp/、internal/hls/等目录分别实现了不同协议的适配和优化设备集成模块internal/ffmpeg/、internal/homekit/、internal/onvif/等模块提供了与各类摄像头设备和外部系统的对接能力编解码处理pkg/h264/、pkg/h265/、pkg/aac/等包实现了高效的音视频编解码处理这种分层架构使得go2rtc能够灵活扩展新的协议和设备支持同时保持核心逻辑的简洁性。项目采用Go语言开发天然具备跨平台特性和卓越的并发处理能力能够轻松应对高并发流媒体场景。部署架构设计与实战安装指南Docker容器化部署方案对于生产环境推荐使用Docker部署go2rtc这确保了环境的一致性和部署的便捷性# 拉取最新版本镜像 docker pull alexxit/go2rtc:latest # 运行容器支持多架构 docker run -d \ --name go2rtc \ --restart unless-stopped \ --network host \ -p 1984:1984 \ -p 8554:8554 \ -p 8555:8555 \ -v /etc/go2rtc:/config \ alexxit/go2rtc容器启动后您可以通过浏览器访问http://localhost:1984/进入Web管理界面。Docker镜像已预装FFmpeg和必要的依赖支持硬件加速转码功能。对于需要GPU加速的场景可以添加--gpus all参数。二进制文件直接部署对于需要深度定制或资源受限的边缘计算环境可以直接下载二进制文件# 根据系统架构选择对应版本 wget https://gitcode.com/GitHub_Trending/go/go2rtc/-/releases/latest/download/go2rtc_linux_amd64 chmod x go2rtc_linux_amd64 # 创建配置文件目录 mkdir -p /etc/go2rtc cp config.yaml /etc/go2rtc/ # 启动服务 ./go2rtc_linux_amd64 -c /etc/go2rtc/config.yaml二进制部署的优势在于资源占用更少启动速度更快特别适合在树莓派等资源受限的边缘设备上运行。系统服务集成部署对于需要长期稳定运行的生产环境建议配置为系统服务# 创建systemd服务文件 cat /etc/systemd/system/go2rtc.service EOF [Unit] Descriptiongo2rtc Camera Streaming Server Afternetwork.target [Service] Typesimple Usergo2rtc Groupgo2rtc WorkingDirectory/opt/go2rtc ExecStart/opt/go2rtc/go2rtc -c /etc/go2rtc/config.yaml Restartalways RestartSec10 [Install] WantedBymulti-user.target EOF # 启动并启用服务 systemctl daemon-reload systemctl enable go2rtc systemctl start go2rtc多协议摄像头集成与高级配置技巧RTSP摄像头的高级配置策略go2rtc对RTSP协议的支持非常完善可以连接市面上绝大多数网络摄像头streams: # 海康威视摄像头配置示例 hikvision_camera: - rtsp://admin:yourpassword192.168.1.100/Streaming/Channels/101 - rtsp://admin:yourpassword192.168.1.100/Streaming/Channels/102#backchannel0 # 大华摄像头双码流配置 dahua_camera: - rtsp://admin:password192.168.1.101/cam/realmonitor?channel1subtype0 # 主码流 - rtsp://admin:password192.168.1.101/cam/realmonitor?channel1subtype1 # 子码流 # ONVIF兼容摄像头自动发现 onvif_camera: - onvif://admin:password192.168.1.102/onvif/device_service # 支持音频传输的配置 audio_camera: - rtsp://admin:password192.168.1.103/stream#audiopcmaWebRTC流媒体配置与性能优化WebRTC是go2rtc的核心功能之一通过以下配置可以实现最优的实时流媒体体验webrtc: # 监听端口配置 listen: :8555 # 公网访问地址NAT穿透必需 public: your-public-domain.com:8555 # ICE服务器配置 ice_servers: - urls: stun:stun.l.google.com:19302 - urls: stun:stun.cloudflare.com:3478 - urls: turn:turn.server.com:3478 username: user credential: pass # 编解码器配置 codecs: video: vp8,vp9,h264,h265 audio: opus,aac # 带宽自适应配置 bandwidth: 2mbps simulcast: true # 启用分层编码 sdp_semantics: unified-plan # 使用现代SDP格式HomeKit摄像头集成实战配置go2rtc是全球首个支持从HomeKit摄像头拉流的开源项目配置示例如下streams: homekit_camera: # 通过Home Assistant集成 - hass:Camera-Office-AB12 # 直接连接HomeKit摄像头 - homekit:accessory_id00:11:22:33:44:55 # 音频转码配置 - ffmpeg:homekit_camera#audioaac#audioopus#videoh264 # HomeKit视频流输出配置 homekit_output: - homekit:streambackyard_camera#videoh264#audioaac高级功能配置与性能调优策略FFmpeg转码与硬件加速配置go2rtc内置FFmpeg支持可以实现灵活的转码和视频处理ffmpeg: # FFmpeg二进制路径 bin: /usr/bin/ffmpeg # 硬件加速配置Intel QSV hwaccel: qsv decoder: h264_qsv # 硬件加速配置NVIDIA NVENC hwaccel: cuda decoder: h264_cuvid # 视频转码参数优化 h264: -codec:v h264_qsv -g:v 30 -preset:v medium -tune:v zerolatency -profile:v high vp8: -codec:v vp8_qsv -g:v 30 -quality:v good -deadline:v realtime # 音频转码参数 audio: -codec:a aac -ar 44100 -ac 2 -b:a 128k # 视频处理滤镜 filters: - scale1280:720 - fps30 - drawtexttext%{localtime}:x10:y10:fontsize24:fontcolorwhite双向音频通信与对讲功能go2rtc支持与兼容摄像头的双向音频通信适用于对讲和语音监控场景streams: # RTSP双向音频ONVIF Profile T标准 two_way_audio: - rtsp://admin:password192.168.1.200/stream#backchannel1 # TP-Link Tapo摄像头双向音频 tapo_camera: - tapo:username:password192.168.1.201#backchannel1 # Hikvision ISAPI接口双向音频 isapi_camera: - isapi:admin:password192.168.1.202#backchannel1 # 外部音频输入配置 external_audio: - exec:arecord -f cd - | ffmpeg -f s16le -ar 44100 -ac 2 -i - -f alaw -ar 8000 -ac 1 - # 音频转码和混音配置 audio_mixer: - ffmpeg:rtsp://camera192.168.1.203/stream#audioaac#audioopus#mix2负载均衡与高可用架构设计对于大规模部署场景可以通过以下配置实现负载均衡和高可用# 多实例负载均衡配置 api: listen: :1984 proxy: - http://192.168.1.10:1984 - http://192.168.1.11:1984 - http://192.168.1.12:1984 # 健康检查配置 health_check: interval: 30s timeout: 5s unhealthy_threshold: 3 healthy_threshold: 2 # 流媒体缓存和重试机制 streams: cached_camera: - rtsp://camera192.168.1.100/stream cache: 5s # 5秒缓存平滑网络波动 retry: 3 # 重试3次 timeout: 10s # 连接超时时间 reconnect: true # 自动重连 # 故障转移配置 failover_camera: - rtsp://primary192.168.1.101/stream - rtsp://backup192.168.1.102/stream failover: true # 启用故障转移网络监控与故障排查专业指南实时网络状态监控与分析go2rtc提供了强大的网络监控功能可以通过Web界面实时查看流媒体传输状态# 启用详细日志和监控 log: level: debug file: /var/log/go2rtc.log max_size: 10MB max_backups: 3 format: json # JSON格式便于日志分析 # 性能监控配置 debug: metrics: true profiler: :6060 # 性能分析端口 trace: :8081 # 分布式追踪端口 # Prometheus监控集成 metrics: enable: true path: /metrics port: 9090常见故障排查方法与解决方案问题1RTSP连接失败或频繁断开# 测试RTSP流可用性 ffprobe -i rtsp://camera192.168.1.100/stream # 检查网络连通性和端口状态 nc -zv 192.168.1.100 554 # 查看详细连接日志 tail -f /var/log/go2rtc.log | grep -E (rtsp|connection|error) # 调整RTSP连接参数 rtsp: timeout: 30s keepalive: true tcp_interleaved: true # 启用TCP交错传输问题2WebRTC连接不稳定或延迟过高# 优化WebRTC配置 webrtc: # 强制使用TURN中继 ice_transport_policy: relay # 优化带宽使用 bundle_policy: max-bundle rtcp_mux_policy: require # 调整编解码器优先级 preferred_codecs: video: vp8,h264 audio: opus # 网络优化参数 sdp_semantics: unified-plan offer_extmap_allow_mixed: true dtls_role: auto问题3音频视频不同步问题# 音频同步配置优化 streams: synced_camera: - rtsp://camera192.168.1.100/stream audio_sync: true video_sync: true buffer_size: 100ms # 缓冲区大小 jitter_buffer: 200ms # 抖动缓冲区 # 时间戳校正 timestamp_correction: enable: true max_offset: 1000ms smooth_factor: 0.1安全配置与最佳实践指南访问控制与认证机制api: listen: :1984 # 基本认证配置 auth: - username: admin password: $2a$10$YourHashedPassword - username: viewer password: $2a$10$AnotherHashedPassword # IP访问控制 allow: - 192.168.1.0/24 - 10.0.0.0/8 # HTTPS安全配置 ssl: cert: /etc/go2rtc/cert.pem key: /etc/go2rtc/key.pem redirect: true # HTTP重定向到HTTPS hsts: true # 启用HSTS # API速率限制 rate_limit: requests: 100 period: 1m burst: 20 rtsp: listen: :8554 auth: digest # 使用摘要认证 allow_anonymous: false require_authentication: true流媒体传输安全加固# 流媒体访问控制 streams: secure_camera: - rtsp://camera192.168.1.100/stream access: - user: admin password: secret - ip: 192.168.1.50 encryption: true # 启用流加密 watermark: true # 添加数字水印 # 会话安全配置 session_security: timeout: 30m # 30分钟无活动自动断开 max_connections: 10 # 最大连接数限制 max_bandwidth: 10mbps # 带宽限制 require_encryption: true # 强制加密 # 审计日志配置 audit: enable: true log_connections: true log_disconnections: true log_errors: true集成应用场景与扩展开发Home Assistant智能家居集成go2rtc可以无缝集成到Home Assistant智能家居平台# Home Assistant配置示例 camera: - platform: go2rtc url: http://192.168.1.100:1984/api/streams/backyard name: Backyard Camera stream_source: rtsp://192.168.1.100:8554/backyard authentication: basic username: admin password: !secret go2rtc_password # 自动化规则示例 automation: - alias: Motion Detection Alert trigger: platform: state entity_id: camera.backyard to: on action: - service: notify.mobile_app data: message: Motion detected in backyard! data: image: {{ states.camera.backyard.attributes.entity_picture }} - alias: Record on Motion trigger: platform: state entity_id: binary_sensor.motion_backyard to: on action: - service: camera.record data: entity_id: camera.backyard filename: /media/motion_{{ now().strftime(%Y%m%d_%H%M%S) }}.mp4 duration: 30自定义模块开发与扩展go2rtc的模块化架构支持自定义扩展开发开发者可以基于现有接口实现新的流媒体协议或设备支持// 自定义流媒体生产者示例 package custom import ( context github.com/AlexxIT/go2rtc/pkg/core ) type CustomProducer struct { core.Producer conn net.Conn cancel context.CancelFunc } func NewCustomProducer(url string) (*CustomProducer, error) { p : CustomProducer{} p.Media []*core.Media{ { Kind: core.KindVideo, Direction: core.DirectionSendonly, Codecs: []*core.Codec{ {Name: core.CodecH264, ClockRate: 90000}, }, }, } return p, nil } func (p *CustomProducer) Start() error { ctx, cancel : context.WithCancel(context.Background()) p.cancel cancel // 实现自定义流媒体逻辑 go p.readLoop(ctx) return nil } func (p *CustomProducer) Stop() error { if p.cancel ! nil { p.cancel() } if p.conn ! nil { p.conn.Close() } return nil } func (p *CustomProducer) readLoop(ctx context.Context) { // 读取和处理流媒体数据 for { select { case -ctx.Done(): return default: // 读取数据并发送 } } }性能监控与优化最佳实践资源使用监控与调优# 监控go2rtc进程资源使用 top -p $(pgrep go2rtc) # 查看网络连接状态和带宽使用 ss -tunp | grep go2rtc iftop -i eth0 -f port 8554 or port 8555 # 监控内存使用情况 ps aux | grep go2rtc cat /proc/$(pgrep go2rtc)/status | grep -E VmRSS|VmSize # 性能分析 go tool pprof http://localhost:6060/debug/pprof/heap高级性能优化配置# 内存优化配置 memory: max_streams: 50 # 最大并发流数量 buffer_size: 10MB # 缓冲区大小 cache_ttl: 5m # 缓存生存时间 gc_percent: 100 # GC目标百分比 # 内存池配置 pool: enabled: true size: 1024 max_size: 8192 # CPU优化配置 cpu: workers: 4 # 工作线程数 priority: high # 进程优先级 affinity: 0,1,2,3 # CPU亲和性设置 gomaxprocs: 4 # 最大处理器数 # 协程池配置 goroutine_pool: size: 100 max_size: 1000 # 网络优化配置 network: tcp_keepalive: 30s udp_buffer: 64KB mtu: 1500 reuse_port: true # 端口复用 # TCP优化参数 tcp: nodelay: true keepalive: true keepidle: 60 keepintvl: 10 keepcnt: 6监控告警与自动化运维# Prometheus监控指标配置 monitoring: # 流媒体指标 streams: enabled: true metrics: - stream_count - stream_bitrate - stream_clients - stream_errors # 系统资源指标 system: enabled: true metrics: - cpu_usage - memory_usage - network_io - disk_io # 告警配置 alerts: - name: high_cpu_usage condition: cpu_usage 80 duration: 5m severity: warning - name: stream_disconnected condition: stream_count 0 duration: 1m severity: critical - name: high_memory_usage condition: memory_usage 90 duration: 10m severity: warning通过以上配置和优化技巧go2rtc能够在各种场景下提供稳定、高效、低延迟的流媒体服务。无论是家庭监控、企业安防还是物联网应用go2rtc都能作为可靠的技术基础帮助您构建专业的流媒体解决方案。记住良好的监控和定期维护是保证系统稳定运行的关键。建议定期检查日志、更新配置并根据实际使用情况调整优化参数以获得最佳的流媒体体验。【免费下载链接】go2rtcUltimate camera streaming application项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Java 集合深入理解

Java 集合深入理解

Java 集合深入理解一、集合体系结构 Collection 是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。 List 系列集合:添加的元素是有序、可重复、有索引。 Set 系列集合:添加的元素是无序、不重复、无索引。二、Collection 通用方…

2026/10/13 21:12:01 阅读更多 →
为什么选择gh_mirrors/do/dotfiles.zsh?揭秘顶级开发者的配置管理哲学

为什么选择gh_mirrors/do/dotfiles.zsh?揭秘顶级开发者的配置管理哲学

为什么选择gh_mirrors/do/dotfiles.zsh?揭秘顶级开发者的配置管理哲学 【免费下载链接】dotfiles.zsh Config files for ZSH, Java, Ruby, Go, Editors, Terminals and more. 项目地址: https://gitcode.com/gh_mirrors/do/dotfiles.zsh gh_mirrors/do/dotfi…

2026/10/13 1:25:48 阅读更多 →
B站m4s视频转换终极指南:如何快速将缓存视频无损转为MP4格式

B站m4s视频转换终极指南:如何快速将缓存视频无损转为MP4格式

B站m4s视频转换终极指南:如何快速将缓存视频无损转为MP4格式 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站下架视频而…

2026/9/29 1:49:39 阅读更多 →

最新新闻

基于Django与大数据的药材销售预测及可视化系统全解析

基于Django与大数据的药材销售预测及可视化系统全解析

做中药材销售类项目这么大半年,最常被问的一句话是“这行业的数据分析到底该从哪下手”。说实话,中药材销售和普通快消品差挺远的,品类复杂、产地分散、价格波动受天气和行情影响大,很多团队连一套能用的预测系统都搭不出来。今天…

2026/10/13 21:11:00 阅读更多 →
基于OpenCv的手势识别与交互系统的设计与实现(源码+报告)

基于OpenCv的手势识别与交互系统的设计与实现(源码+报告)

温馨提示: 本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示: 本人主页置顶文章(点我)开头有 CSDN平台官方提供的学长联系方式的名片! 温馨提示: 本人主页置顶文章(点我)开头有 CSDN 平…

2026/10/13 21:11:00 阅读更多 →
虚幻引擎效率翻倍:101个实战技巧与隐藏操作

虚幻引擎效率翻倍:101个实战技巧与隐藏操作

1. 这份清单到底在解决什么问题虚幻引擎这玩意儿,刚上手的时候特别容易陷入一种状态:功能明明就在那儿,但你就是不知道它藏在哪个菜单里。我见过太多人包括我自己,早期做一个简单的材质混合,硬是在节点编辑器里翻了二十…

2026/10/13 21:11:00 阅读更多 →
【高质量毕设开题】基于SpringBoot+Vue的非遗文化传承与推广平台设计与实现(源码+报告)

【高质量毕设开题】基于SpringBoot+Vue的非遗文化传承与推广平台设计与实现(源码+报告)

温馨提示: 本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示: 本人主页置顶文章(点我)开头有 CSDN平台官方提供的学长联系方式的名片! 温馨提示: 本人主页置顶文章(点我)开头有 CSDN 平…

2026/10/13 21:11:00 阅读更多 →
rea:用正则捕获组从日志中流式提取结构化字段的CLI工具

rea:用正则捕获组从日志中流式提取结构化字段的CLI工具

有段时间我几乎每周都要干同一件烦心事:面对一份几十万行的日志,把里面某个字段抠出来、按条件过滤、再排个序统计。文本过滤命令能看,sed 能替换,awk 能分列,但一旦字段本身带空格嵌套,或者需要同时提取五…

2026/10/13 21:11:00 阅读更多 →
基于STM32的GPS导航:从NMEA解析到控制量完整实现

基于STM32的GPS导航:从NMEA解析到控制量完整实现

简介:这是一份基于STM32微控制器与UC/GUI图形库的GPS导航系统相关工程源码,面向嵌入式开发者以及正在学习STM32、GPS应用和GUI编程的学生。资源以STM32为主控芯片,通过UART或SPI接口接收GPS模块的NMEA协议数据,完成经纬度解析、定…

2026/10/13 21:09:59 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →