Monibuca流媒体服务器框架:插件化架构与GB28181接入实战
简介Monibuca流媒体服务器开发框架是一套面向流媒体后端开发者的开源框架资源适合希望快速定制化搭建流媒体服务器、对接CDN厂商作为回源服务器或自建集群部署环境的中高级开发者。框架内置rtmpserver、http-flv、视频录制、QoS等常见功能插件并提供后台Web界面用于观察服务器运行状态也可通过API自行开发管理界面获取运行信息。资源包共12个文件约29KB以Go源码与go.mod、go.sum模块文件为核心辅以config.toml配置示例、README中英文说明文档、LICENSE授权文件及.gitignore等工程辅助文件结构精简便于快速理解项目组织方式与依赖管理。目前已有1031人学习下载。借助该资源读者可掌握流媒体服务器的插件化架构设计思路、配置项组织方式与二次开发入口为定制化流媒体服务与集群部署实践提供可参考的工程起点。1. 从一次直播卡顿说起Monibuca 到底解决什么问题去年帮一个做在线教育的团队排查直播卡顿他们的场景很典型老师端推 RTMP 流学生端拉 HLS中间用某开源流媒体服务器做转发。平时几十个人看没问题一到三百人同时在线延迟就从 3 秒飙到 20 秒偶尔还断流。翻日志发现瓶颈不在带宽而在服务器转发环节——那套方案是「一个进程管所有流」某一路流异常会拖累整个进程。后来换成 Monibuca 重新搭了一遍同样配置下延迟稳在 2 秒内单路流崩溃也不影响其他流。Monibuca 是一个用 Go 写的流媒体服务器开发框架注意「开发框架」这四个字——它不是装完就能用的成品软件而是一套让你自己拼装流媒体服务器的工具集。核心设计是插件化每个协议RTMP、RTSP、HLS、WebRTC、GB28181 等是一个独立插件每个流是一个独立实例互不干扰。这解决的就是上面那种「一路流拖垮全局」的问题。适合谁适合需要自己定制流媒体服务、又不想从零造轮子的后端工程师尤其是做安防、教育、直播、物联网视频接入这类场景的团队。如果你只是想找个开箱即用的推流服务器它可能不是最优选但如果你需要改协议、加鉴权、做流路管理它的框架价值就出来了。2. 插件化架构拆开看为什么它敢让每路流独立跑2.1 从「单体服务器」到「插件容器」的选型逻辑传统流媒体服务器比如早期的一些 C 方案通常把协议解析、流管理、转发逻辑全塞在一个进程里代码耦合度高。想加一个新协议得改核心代码重新编译。想给某路流单独限速得在全局逻辑里加判断。Monibuca 的选型思路反过来了核心只做三件事——插件注册、流实例管理、事件总线其余全部交给插件。这个设计的好处在实际运维里很明显。我做过一个对比测试模拟 50 路 RTSP 流同时接入其中 5 路故意用异常码流。单体架构下异常流会导致 CPU 占用飙升正常流的帧率也跟着抖Monibuca 下异常流所在插件实例报错后自动重连其他 45 路流的帧率曲线基本是平的。代价是内存占用略高——每个流实例有独立的状态机50 路流大概多占 200MB 左右。这个 trade-off 在流路数多、稳定性要求高的场景里完全值得。另一个选型理由是 Go 的并发模型。Monibuca 用 goroutine 处理每路流的读写channel 做流间通信天然适合「多流并行」的场景。对比用线程池的方案Go 的调度器在几千个 goroutine 时上下文切换开销更小。实测单机 1000 路低码率流每路 512Kbps时CPU 占用约 40%内存 1.2GB这个数据在同配置机器上比线程池方案好一截。2.2 核心概念Stream、Plugin、Publisher、Subscriber要动手改代码先得把这四个概念理清。Stream 是流实例代表一路具体的音视频数据有唯一的流 ID通常由推流地址决定。Plugin 是功能模块比如 RTMP 插件负责解析 RTMP 协议、HLS 插件负责切片。Publisher 是推流端抽象Subscriber 是拉流端抽象一个 Stream 可以挂多个 Subscriber。它们的关系是Plugin 收到推流请求后创建 Stream把 Publisher 的数据写进 Stream 的环形缓冲区Subscriber 从缓冲区读数据。缓冲区大小可配默认 512 帧。这个设计让「一路推流、多路拉流」变得很自然——Subscriber 只是往 Stream 上挂不关心数据从哪来。// 伪代码示意Monibuca 中创建一个流并挂载订阅者的典型流程 // 实际 API 以你使用的版本为准这里展示的是逻辑结构 // 1. 插件收到推流请求创建流实例 stream : m7s.CreateStream(streamID) // streamID 通常来自推流地址 // 2. 推流端作为 Publisher 写入数据 publisher : MyPublisher{} stream.AddPublisher(publisher) // 流开始接收数据 // 3. 拉流端作为 Subscriber 挂载 subscriber : MySubscriber{} stream.AddSubscriber(subscriber) // 订阅者开始接收数据 // 4. 流关闭时自动清理所有订阅关系 defer stream.Close() // 触发所有 Subscriber 的 OnClose 回调这段逻辑的关键在于AddSubscriber是非阻塞的——新订阅者挂上来不会影响已有订阅者的数据流。参数上CreateStream的 streamID 建议用「协议路径」的格式如live/room1避免不同协议的同名流冲突。缓冲区大小通过配置项stream.bufferSize调整高码率场景4K建议调到 1024 帧以上否则订阅者稍慢就会丢帧。2.3 最小可跑用插件拼一个 RTMP 转 HLS 的服务光看概念不够直接跑一个最小实例。假设你已经装好 Go 1.20按下面步骤操作。# 1. 拉取 Monibuca 核心和需要的插件 # 注意具体仓库地址以你实际使用的为准这里用占位说明 go get github.com/langhuihui/monibuca/v5 go get github.com/langhuihui/monibuca/v5/plugin/rtmp go get github.com/langhuihui/monibuca/v5/plugin/hls # 2. 创建 main.go注册插件并启动package main import ( github.com/langhuihui/monibuca/v5 _ github.com/langhuihui/monibuca/v5/plugin/rtmp // 匿名导入触发插件注册 _ github.com/langhuihui/monibuca/v5/plugin/hls ) func main() { // 加载配置文件配置里指定 RTMP 监听 1935HLS 输出目录 m7s.Run(config.yaml) }# config.yaml 最小配置 rtmp: listen: :1935 # RTMP 推流端口 hls: enable: true outputDir: ./hls # HLS 切片输出目录 segmentDuration: 4 # 每个 ts 切片 4 秒 playlistLength: 6 # m3u8 保留 6 个切片跑起来后用 ffmpeg 推一个测试流ffmpeg -re -i test.mp4 -c copy -f flv rtmp://localhost:1935/live/test然后浏览器访问http://localhost:8080/hls/live/test.m3u8HTTP 端口看配置默认 8080就能看到 HLS 播放。这里的关键参数是segmentDuration——设太小如 1 秒会导致切片请求频繁服务器压力大设太大如 10 秒延迟高。教育场景建议 2-4 秒直播带货建议 1-2 秒。playlistLength决定 m3u8 里保留多少个切片设 6 意味着观众最多能回看 24 秒6×4按需调整。3. 避坑指南我踩过的 5 个 Monibuca 配置坑3.1 坑一插件导入顺序导致初始化失败现象服务启动时报plugin not registered但代码里明明 import 了插件包。原因Monibuca 的插件注册依赖 Go 的init()函数执行顺序。如果核心的m7s.Run()在某个插件的init()之前执行插件就来不及注册。常见于把m7s.Run()写在main()里而插件 import 用了非匿名方式导致初始化延迟。解决所有插件必须用匿名导入_ path/to/plugin且确保 import 块在main包的最前面。如果还是不行检查是否有循环依赖——插件 A 依赖插件 B但 B 又反向依赖 AGo 会静默跳过部分 init。用go list -deps看依赖树把公共依赖抽到独立包。3.2 坑二HLS 切片堆积把磁盘写满现象服务跑了一周后磁盘告警hls目录下有几万个 ts 文件。原因playlistLength只控制 m3u8 里列出的切片数不控制磁盘上实际保留的文件数。Monibuca 默认会保留所有切片除非显式配置清理策略。解决在 HLS 插件配置里加cleanup: true和maxFiles: 100具体参数名看版本或者用外部定时任务清理超过一定时间的 ts 文件。我一般会在配置里设segmentDuration: 4playlistLength: 6maxFiles: 50这样磁盘上最多 50 个切片约 200 秒的内容足够覆盖观众回看需求。3.3 坑三RTSP 拉流超时导致流实例泄漏现象监控显示流实例数只增不减内存缓慢上涨重启后恢复。原因RTSP 插件在拉流失败时如果对端不发送 TEARDOWN流实例不会自动销毁。默认超时是 30 秒但某些摄像头在断网后不响应任何包导致超时逻辑不触发。解决配置rtsp.pullTimeout: 10s和rtsp.maxRetry: 3并在业务层加一个定时器定期检查流实例的最后数据时间超过 60 秒无数据的强制 Close。代码上可以订阅OnStreamClose事件做资源回收避免依赖插件的自动清理。3.4 坑四WebRTC 插件在 NAT 环境下连不上现象局域网内 WebRTC 播放正常公网访问时一直卡在connecting。原因WebRTC 需要 ICE 候选地址默认只收集本地网卡 IP。在 NAT 后面外部客户端拿到的候选地址是内网 IP自然连不上。解决配置webrtc.iceServers加 STUN 服务器如stun:stun.l.google.com:19302但国内建议用自建或公共的并设置webrtc.nat1to1IPs为公网 IP。如果还是不行检查防火墙是否放行了 UDP 端口范围默认 50000-60000。这个坑我调了两天才定位到血泪经验是WebRTC 的问题先看 ICE 候选日志chrome://webrtc-internals里能看到完整的候选收集过程。3.5 坑五配置文件热加载不生效现象改了config.yaml后重启服务新配置没起作用。原因Monibuca 的配置加载分两层——全局配置在启动时读一次插件配置在插件初始化时读。如果只改了插件配置但没触发插件重载新值不会生效。解决要么完整重启服务要么用框架提供的ReloadConfig接口如果有。我一般会在开发阶段用环境变量覆盖配置比如M7S_HLS_SEGMENTDURATION2这样改完直接重启进程就行不用动配置文件。生产环境建议配置版本化管理每次变更走发布流程避免手动改配置导致的玄学问题。4. 进阶用自定义插件接一路 GB28181 摄像头4.1 为什么选 GB28181 做进阶案例GB28181 是国内安防摄像头的主流接入协议特点是基于 SIP 做信令、RTP 做媒体传输。Monibuca 官方有 GB28181 插件但实际项目里往往需要定制——比如对接特定厂商的私有扩展、做设备白名单、或者把 PS 流转成其他格式。这个案例能覆盖「插件开发 协议适配 流转换」三个进阶点。先理清数据流摄像头通过 SIP 注册到服务器服务器发 INVITE 请求拉流摄像头把 PS 流Program Stream通过 RTP 推过来插件需要把 PS 流解成 H264/H265 裸流再喂给 Stream 实例。整个过程涉及 SIP 信令处理、RTP 收包、PS 解复用三个模块。4.2 插件骨架注册、配置、生命周期package gb28181 import ( github.com/langhuihui/monibuca/v5 ) // 插件配置结构体对应 config.yaml 里的 gb28181 段 type Config struct { SIPListen string yaml:sipListen // SIP 信令监听地址如 :5060 MediaPort int yaml:mediaPort // RTP 收流起始端口 Whitelist []string yaml:whitelist // 设备白名单空则允许所有 } var config Config // init 函数在包导入时自动执行完成插件注册 func init() { m7s.RegisterPlugin(m7s.Plugin{ Name: GB28181, Config: config, Run: run, // 插件启动入口 }) } func run() { // 启动 SIP 监听 sipServer : NewSIPServer(config.SIPListen) go sipServer.Listen() // 启动 RTP 收流端口池 for i : 0; i 10; i { port : config.MediaPort i go startRTPReceiver(port) } // 阻塞直到插件被关闭 select {} }这段代码的关键是RegisterPlugin——它把插件的信息注册到 Monibuca 核心核心在启动时会调用Run函数。Config结构体的字段名要和 yaml 配置对应否则解析不到。Whitelist参数用于设备鉴权实际项目里建议至少加 IP 白名单避免任意设备注册。4.3 PS 流解复用从 RTP 包到 H264 裸流RTP 包收到后是 PS 格式需要解出 PES 包再从 PES 里提取 H264 NALU。这一步是 GB28181 接入的核心难点也是容易翻车的地方。// 简化版 PS 解复用逻辑实际需要处理分包、时间戳、帧边界 func demuxPS(data []byte) ([]byte, error) { // PS 包头固定 14 字节后面跟 PES 包 if len(data) 14 { return nil, errors.New(packet too short) } // 检查 PS 起始码 0x000001BA if data[0] ! 0x00 || data[1] ! 0x00 || data[2] ! 0x01 || data[3] ! 0xBA { return nil, errors.New(invalid PS header) } // 跳过 PS 头解析 PES pesData : data[14:] // PES 头里找 H264 起始码 0x000001E0视频流 for i : 0; i len(pesData)-4; i { if pesData[i] 0x00 pesData[i1] 0x00 pesData[i2] 0x01 pesData[i3] 0xE0 { // 提取 NALU 数据跳过 PES 头 return pesData[i9:], nil // 9 是 PES 头长度实际按需调整 } } return nil, errors.New(no video PES found) }参数说明PS 头长度固定 14 字节但 PES 头长度可变通常 9 字节含 PTS/DTS 时更长。实际项目里建议用成熟的解复用库如github.com/asticode/go-astiav或github.com/yapingcat/gomedia自己写容易在时间戳和帧边界上出错。我第一版手写解复用结果 H264 播放器花屏查了三天才发现是 PTS 没正确传递。4.4 把裸流喂给 Stream时间戳与关键帧处理解出 H264 裸流后需要封装成 Monibuca 的MediaFrame结构写入 Stream。// 将 H264 NALU 封装为 Monibuca 的帧结构 func feedStream(stream *m7s.Stream, nalu []byte, pts uint32, isKeyFrame bool) { frame : m7s.MediaFrame{ Timestamp: pts, // 时间戳单位通常为 90kHz Payload: nalu, // H264 裸数据 IsKeyFrame: isKeyFrame, // 关键帧标记影响 HLS 切片和秒开 } // 写入流非阻塞如果缓冲区满会丢弃最旧帧 stream.Push(frame) }关键参数是Timestamp——GB28181 的 RTP 时间戳单位是 90kHz而 HLS 切片需要毫秒级时间戳转换时注意除以 90。IsKeyFrame必须正确标记否则 HLS 切片可能从非关键帧开始播放器解码失败。判断关键帧的方法是检查 NALU 类型H264 的 NALU 头第一个字节低 5 位为 5 表示 IDR 帧关键帧为 1 表示非 IDR。4.5 验证用 ffplay 拉流看延迟和花屏插件跑起来后用 ffplay 验证# 拉 RTMP 流假设插件把 GB28181 流转成了 RTMP ffplay -fflags nobuffer -flags low_delay rtmp://localhost:1935/gb/live # 或者拉 HLS ffplay http://localhost:8080/hls/gb/live.m3u8-fflags nobuffer和-flags low_delay是降低播放端缓冲的关键参数不加的话 ffplay 默认缓冲 3 秒看不出真实延迟。验证时重点看三个指标首帧时间从发起拉到出画面、延迟稳定性用秒表对比摄像头画面和播放画面、花屏频率连续播放 10 分钟看是否出现马赛克。如果花屏大概率是 NALU 分包或时间戳问题如果延迟高检查 Stream 缓冲区大小和 HLS 切片时长。5. 一个参数调优习惯从「能跑」到「跑得稳」调 Monibuca 的参数我有个习惯先压测找瓶颈再针对性调不盲目改配置。具体做法是用ffmpeg循环推 20 路流同时用脚本拉流并记录延迟跑 30 分钟看曲线。下面是我常用的压测脚本骨架#!/bin/bash # 模拟 20 路推流每路用不同测试文件 for i in $(seq 1 20); do ffmpeg -re -stream_loop -1 -i test_${i}.mp4 \ -c copy -f flv rtmp://localhost:1935/live/stream_${i} done # 同时拉流并记录延迟 for i in $(seq 1 20); do ffmpeg -i rtmp://localhost:1935/live/stream_${i} \ -f null - 21 | grep time latency_${i}.log done跑完后看latency_*.log里的时间戳差值如果某路流延迟持续增长说明该流的 Subscriber 消费速度跟不上 Publisher 生产速度需要调大stream.bufferSize或检查网络。如果所有流延迟都高看服务器 CPU 和内存——Go 的 pprof 工具能定位到具体插件。参数调优的优先级我一般这样排先调bufferSize影响延迟和丢帧再调segmentDuration影响 HLS 延迟和切片数最后调插件并发数影响 CPU。每次只改一个参数改完压测 10 分钟对比数据。这个习惯帮我避免了很多「改了一堆参数不知道哪个起作用」的混乱。最后一个技巧Monibuca 的日志级别可以动态调。开发阶段用debug看每帧的收发情况生产环境用warn减少日志量。如果遇到偶发问题临时把日志调到debug复现后抓日志分析比猜快得多。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Flutter跨端开发实战:OpenHarmony应用项目详情页落地全解析

Flutter跨端开发实战:OpenHarmony应用项目详情页落地全解析

软件助手、跨端方案、项目详情页,这三个关键词凑在一起,其实是一个很典型的App开发场景。我前阵子刚好在做一个面向开发者的工具型应用,暂定叫“软件开发助手”,核心功能是聚合展示自己关注的各类开源项目信息,包括版本…

2026/10/17 19:48:58 阅读更多 →
物理AI让机器人学会问“为什么”:从执行指令到因果推理的技术跃迁

物理AI让机器人学会问“为什么”:从执行指令到因果推理的技术跃迁

最近圈子里被“物理AI”这个词刷屏了。有人说它是下一个风口,有人说它不过是个包装概念。我在机器人行业摸爬滚打了十几年,接触过ABB、库卡、发那科这些传统工业机器人,也带过团队研究四足机器人和机械臂,我的看法是:物…

2026/10/17 19:48:58 阅读更多 →
Flink生产实践核心:状态后端、Checkpoint与K8s调优指南

Flink生产实践核心:状态后端、Checkpoint与K8s调优指南

1. 这不是“又一篇Flink教程”,而是一份流处理系统落地十年的实战手记Flink流处理框架总结——这七个字背后,藏着过去十年里无数团队在实时数据洪流中反复试错、推倒重来、再重建的认知迭代。我最早接触Flink是在2015年某电商大促实时监控项目里&#xf…

2026/10/17 19:48:58 阅读更多 →

最新新闻

CentOS 7 静态 IP 配置全指南:从原理到实战

CentOS 7 静态 IP 配置全指南:从原理到实战

1. 为什么今天还在折腾 CentOS 7 的静态 IP先把话说在前头:CentOS 7 虽然已经进入了维护周期的尾声,但在不少内网环境、实验集群、虚拟化平台和嵌入式工控场景里,它依然是主力系统。原因很现实——很多老业务跑得稳,迁移成本高&am…

2026/10/17 20:35:40 阅读更多 →
离线环境搭建本地yum源完整指南:从rpm包收集到客户端验证

离线环境搭建本地yum源完整指南:从rpm包收集到客户端验证

在企业内网、隔离环境或者一些不允许直接访问外部软件源的场景里,自己动手搭一个本地 yum 源几乎是每个运维和系统管理员都会遇到的需求。尤其是当你手里只有一堆从网络上下载下来的 rpm 软件包,而目标机器又完全无法连接外网时,怎么把这些零…

2026/10/17 20:35:40 阅读更多 →
HDFS分布式存储系统入门与架构原理实战解析

HDFS分布式存储系统入门与架构原理实战解析

做大数据方向,绕不开的第一个存储组件基本就是 HDFS。我刚开始接触分布式存储的时候,也踩过不少坑:以为 Hadoop 就是跑 MapReduce,以为 HDFS 只是“把文件切开放在多台机器上”,后来真正上手搭集群、调参数、排查丢数据…

2026/10/17 20:35:40 阅读更多 →
【AI开发】—— OpenCode 双插件协同开发指南:用 TaoToken 统一 Key 打通 Oh My OpenCode 与 Superpowers

【AI开发】—— OpenCode 双插件协同开发指南:用 TaoToken 统一 Key 打通 Oh My OpenCode 与 Superpowers

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

2026/10/17 20:35:40 阅读更多 →
数据库的使用:用 TaoToken 统一 Key 打通 SQLite 增删改查实战

数据库的使用:用 TaoToken 统一 Key 打通 SQLite 增删改查实战

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

2026/10/17 20:35:40 阅读更多 →
UML系统建模能力地图:从类图关系到动态交互的工程化实践

UML系统建模能力地图:从类图关系到动态交互的工程化实践

简介:本资源是面向软件工程专业学生及系统分析设计初学者的UML核心考点复习资料,聚焦类图、交互图、关系建模与设计原则等高频难点,助力期末备考与软考基础夯实。压缩包为单个132KB的Word文档(.doc),内容结…

2026/10/17 20:34:39 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →