VS2017编译librtmp.lib:Win10下RTMP推流的静态库构建方案
简介本资源是一套专为Windows平台开发者准备的librtmp静态库编译工程面向使用Visual Studio 2017进行音视频流媒体开发的中高级程序员解决在Win10环境下难以直接编译librtmp源码、依赖库缺失或链接失败等常见问题。压缩包共238个文件涵盖163个头文件.h与7个核心C源文件如rtmp.c、amf.c、parseurl.c完整包含openssl-1.0.1c和zlib-1.2.8依赖库、预配置的vs2017工程librtmp.sln、以及编译所需的.cnf配置、.vcxproj项目文件和调试符号.pdb/.ipch总大小49.12MB结构清晰、开箱即用。已有637人学习下载用户可直接加载解决方案一键编译生成librtmp.lib无需自行配置OpenSSL与zlib路径大幅降低RTMP协议集成门槛并可深入研读源码逻辑、调试日志输出log.c及SWF哈希处理hashswf.c等关键模块。1. vs2017编译librtmp.lib不是“点一下就完事”的黑匣子而是Win10环境下绕不开的RTMP底层链路补全方案你有没有遇到过这种场景用C写一个推流客户端调用ffmpeg的avformat_open_input失败报错Unknown input format: rtmp或者自己手撸socket发RTMP握手包结果在connect()之后卡死在send()——不是网络问题是Windows下缺了真正能跑通的librtmp静态库。vs2017编译librtmp.lib这个资源就是为这类问题准备的“最后一块拼图”它不是封装好的DLL或NuGet包而是一份带完整依赖树、可直连VS2017工程、经Win10实测通过的源码级构建产物。它包含openssl-1.0.2u、zlib-1.2.11两个关键引用库的预编译头文件与lib以及librtmp原始源码含patched的win32兼容层所有路径、宏定义、运行时库/MT均已对齐vs2017默认配置。适合正在做音视频采集推流、自研RTMP协议栈、或需要脱离ffmpeg独立控制RTMP连接生命周期的C开发者。如果你还在用别人编译好的librtmp.dll、或者靠MinGW交叉编译凑合那这份资源能帮你把整个RTMP链路从“玄学调通”拉回“可控调试”。2. 编译前必须理清的三件事为什么非得是vs2017 Win10 静态lib2.1 为什么不是vs2019/vs2022——ABI兼容性不是选择题是硬约束vs2017使用的MSVC v141工具集_MSC_VER1916与Win10 SDK 10.0.17763.0深度绑定而librtmp中大量使用#ifdef _WIN32分支下的WSAStartup、ioctlsocket等Winsock 2 API其结构体定义如struct sockaddr_in6在vs2019的SDK中存在字段偏移变化。某次我尝试用vs2019重编译同一份源码链接时出现unresolved external symbol __imp__getaddrinfo16——不是函数没实现是vs2019默认启用/D_WIN32_WINNT0x0A00导致getaddrinfo被映射到ws2_32.dll新导出表而librtmp源码里仍按旧版ws2_32.lib链接。vs2017则天然匹配_WIN32_WINNT0x0601Win7Win10向下兼容无压力。2.2 为什么必须带openssl和zlib——RTMP协议栈的“呼吸器官”不能缺librtmp本身不处理TLS/SSL加密和FLV头压缩但实际生产环境99%的RTMP URL都是rtmps://或带?token参数的加密流。源码中RTMP_Connect0函数内部会调用SSL_library_init()若缺失openssl.lib链接器直接报LNK2019: unresolved external symbol SSL_library_init而zlib用于解压服务器返回的setDataFrame中的AMF0压缩数据比如Flash播放器发送的元数据。本资源包内deps\openssl\lib\openssl.lib是vs2017 x64静态编译版/MTdeps\zlib\lib\zlibstatic.lib同样为/MT模式二者与librtmp.lib的C运行时完全一致——这是避免LNK2005: _malloc already defined的核心前提。2.3 为什么坚持静态lib.lib而非DLL——调试时堆栈不跳转才是真可控动态链接librtmp.dll时一旦RTMP_Read内部触发select()超时VS调试器会直接跳出源码视图进入ntdll.dll!NtWaitForSingleObject黑盒而静态链接后所有符号包括openssl的SSL_read、zlib的inflate全部展开你能在rtmp.c第1892行nBytes SSL_read(r-m_pSSL, ...)处设断点逐行看SSL握手状态机流转。更重要的是静态库允许你修改#define RTMP_DEBUG宏打开RTMP_LogPrintf日志日志输出直接打到VS输出窗口无需额外配置DLL调试符号路径。提示本资源不提供CMakeLists.txt或vcpkg集成方案。它面向的是需要将librtmp嵌入现有MFC/Qt/C CLI项目的工程师而非从零构建新项目。若你用CMake需手动在target_link_libraries中添加librtmp.lib及ws2_32.lib ssl.lib crypto.lib zlibstatic.lib并确保include_directories指向deps\openssl\include和deps\zlib\include。3. 五步完成编译从解压到生成librtmp.lib的完整流水线3.1 解压与目录结构确认别让路径空格毁掉整个编译下载解压后你会看到如下结构vs2017_librtmp/ ├── librtmp/ # librtmp原始源码含win32补丁 ├── deps/ │ ├── openssl/ # openssl-1.0.2u头文件lib/MT │ └── zlib/ # zlib-1.2.11头文件lib/MT ├── build_vs2017/ # vs2017工程文件夹 │ └── librtmp.sln # 已配置好所有依赖路径的解决方案 └── README.md关键动作将整个vs2017_librtmp文件夹放在无中文、无空格、路径长度120字符的位置例如D:\dev\librtmp_vs2017。曾有同事放在C:\Users\张三\Downloads\下编译时cl.exe报错fatal error C1083: Cannot open source file: D:\Users\...: No such file or directory——不是文件不存在是Windows命令行对UTF-8路径解析失败。3.2 打开解决方案并校验平台工具集双击build_vs2017\librtmp.sln用vs2017打开不要用vs2019兼容模式打开。右键解决方案 →属性→常规→ 确认平台工具集为Visual Studio 2017 (v141)Windows SDK版本为10.0.17763.0。若显示Inherit from parent or project defaults点击下拉箭头手动选中。这一步漏掉后续所有编译都会因SDK头文件不匹配而失败。3.3 修改项目属性三处必须改的配置项右键librtmp项目 →属性→ 进入配置属性页按顺序修改C/C → 常规 → 附加包含目录填入$(ProjectDir)..\deps\openssl\include;$(ProjectDir)..\deps\zlib\include;$(ProjectDir)..说明$(ProjectDir)..\指向librtmp/目录其中log.h等头文件在此..\deps\是openssl/zlib头文件根目录。注意路径间用分号隔开末尾不加反斜杠。链接器 → 常规 → 附加库目录填入$(ProjectDir)..\deps\openssl\lib;$(ProjectDir)..\deps\zlib\lib说明此处只填路径不填具体lib名。lib名在下一步指定。链接器 → 输入 → 附加依赖项填入ws2_32.lib ssl.lib crypto.lib zlibstatic.lib说明顺序不能乱ws2_32.lib必须在最前librtmp依赖Winsockssl.lib和crypto.lib是openssl的两个libopenssl-1.0.2u已拆分zlibstatic.lib是zlib静态库。若漏掉crypto.lib链接时会报LNK2019: unresolved external symbol RSA_new。3.4 编译前最后检查预处理器定义与运行时库仍在此项目属性页进入C/C → 预处理器 → 预处理器定义确认包含以下宏已预置WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;OPENSSL_NO_KRB5;ZLIB_WINAPI说明_CRT_SECURE_NO_WARNINGS关闭安全函数警告避免strcpy报错OPENSSL_NO_KRB5禁用Kerberoslibrtmp不用ZLIB_WINAPI启用Windows API风格zlib调用与zlibstatic.lib匹配。再进入C/C → 代码生成 → 运行时库确认为多线程(/MT)不是/MD。这是与deps\openssl\lib\openssl.lib和deps\zlib\lib\zlibstatic.lib保持一致的关键——若选/MD链接时会出现LNK2038: mismatch detected for RuntimeLibrary。3.5 执行编译并验证输出点击菜单栏生成 → 重新生成解决方案。正常情况下输出窗口应显示1------ 已启动重新生成: 项目: librtmp, 配置: Release Win32 ------ 1 rtmp.c 1 log.c 1 parseurl.c 1 Generating Code... 1 librtmp.vcxproj - D:\dev\librtmp_vs2017\build_vs2017\Release\librtmp.lib编译成功后在build_vs2017\Release\目录下会生成librtmp.lib约380KB和librtmp.pdb调试符号。用dumpbin /exports librtmp.lib可验证导出函数dumpbin /exports librtmp.lib | findstr RTMP_应看到RTMP_Alloc,RTMP_Init,RTMP_SetupURL,RTMP_Connect,RTMP_Read等核心函数——说明符号导出正常不是空壳lib。4. 避坑指南那些让你编译失败三次才找到原因的典型问题4.1 现象LNK2019: unresolved external symbol _getaddrinfo16原因getaddrinfo是Winsock2函数但项目未链接ws2_32.lib或链接顺序错误ws2_32.lib不在附加依赖项最前面。解决回到链接器 → 输入 → 附加依赖项确认ws2_32.lib是第一个且没有拼写错误注意是ws2_32.lib不是wsock32.lib。4.2 现象error C2065: INT_MAX : undeclared identifier原因librtmp/rtmp.h中引用了limits.h但vs2017默认不自动包含该头文件且deps\openssl\include\openssl\ossl_typ.h中#define OPENSSL_NO_INTTYPES_H导致类型定义缺失。解决在librtmp项目属性 →C/C → 预处理器 → 预处理器定义中追加_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;OPENSSL_NO_KRB5;ZLIB_WINAPI;_USE_32BIT_TIME_T注意新增_USE_32BIT_TIME_T并在C/C → 常规 → 附加包含目录最前面加上$(VC_IncludePath)让编译器优先找VS自带头文件。4.3 现象LNK2005: _malloc already defined in libucrt.lib(malloc.obj)原因deps\openssl\lib\openssl.lib和deps\zlib\lib\zlibstatic.lib是用/MT编译的但你的项目属性中运行时库误设为/MD动态链接CRT导致CRT库冲突。解决严格检查C/C → 代码生成 → 运行时库是否为多线程(/MT)。若已设对但仍报错右键项目 →清理再重新生成——有时旧obj文件残留会触发此错误。4.4 现象RTMP_Connect返回0但RTMP_GetError(r)返回-1无日志输出原因未初始化Winsock或RTMP_LogSetLevel(RTMP_LOGDEBUG)未在RTMP_Alloc前调用。解决在调用librtmp任何函数前插入// 初始化Winsock WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), wsaData); // 设置日志级别必须在RTMP_Alloc前 RTMP_LogSetLevel(RTMP_LOGDEBUG); RTMP_LogSetOutput(stderr); // 输出到控制台4.5 现象编译通过但运行时报0xC0000005: Access violation reading location 0x00000000原因RTMP *r RTMP_Alloc();后未调用RTMP_Init(r)直接RTMP_SetupURL(r, rtmp://...)导致r-m_sb.sb_socket为0connect()时访问空指针。解决强制遵循librtmp初始化四步曲RTMP *r RTMP_Alloc(); RTMP_Init(r); // 必须 RTMP_SetupURL(r, rtmp://example.com/live/stream); RTMP_EnableWrite(r); // 推流必需5. 在你的项目中调用librtmp.lib从链接到推流的最小可行验证5.1 新建测试工程并配置依赖新建一个Win32控制台应用空项目在项目属性 → 配置属性中设置C/C → 常规 → 附加包含目录D:\dev\librtmp_vs2017\librtmp;D:\dev\librtmp_vs2017\deps\openssl\include;D:\dev\librtmp_vs2017\deps\zlib\include链接器 → 常规 → 附加库目录D:\dev\librtmp_vs2017\build_vs2017\Release;D:\dev\librtmp_vs2017\deps\openssl\lib;D:\dev\librtmp_vs2017\deps\zlib\lib链接器 → 输入 → 附加依赖项librtmp.lib ws2_32.lib ssl.lib crypto.lib zlibstatic.lib注意路径必须与你解压的实际位置一致。建议用绝对路径避免相对路径在不同配置下失效。5.2 编写最小推流验证代码创建main.cpp内容如下仅12行核心逻辑无异常处理#include stdio.h #include stdlib.h #include librtmp/rtmp.h int main() { // 1. 初始化Winsock WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), wsaData); // 2. 创建并初始化RTMP对象 RTMP *r RTMP_Alloc(); RTMP_Init(r); // 3. 设置RTMP URL替换为你自己的推流地址 RTMP_SetupURL(r, rtmp://127.0.0.1:1935/live/test); // 4. 启用写入推流必需 RTMP_EnableWrite(r); // 5. 连接 if (!RTMP_Connect(r, NULL)) { printf(Connect failed!\n); return -1; } printf(Connected successfully!\n); // 6. 发送发布命令关键否则服务器拒绝推流 if (!RTMP_ConnectStream(r, 0)) { printf(Stream connect failed!\n); return -1; } printf(Stream published!\n); RTMP_Close(r); RTMP_Free(r); WSACleanup(); return 0; }5.3 编译并运行验证点击生成 → 生成解决方案若无错误运行生成的exe。预期输出Connected successfully! Stream published!此时用VLC打开rtmp://127.0.0.1:1935/live/test应能看到黑屏因未发送视频帧但连接已建立——证明librtmp.lib已成功集成。提示若连接失败请打开RTMP_LogSetLevel(RTMP_LOGDEBUG)并重定向日志到文件观察握手过程哪一步卡住。常见于防火墙拦截1935端口或Nginx-rtmp模块未正确配置application live { }。6. 进阶技巧如何用这个librtmp.lib做真正的音视频推流6.1 构建FLV封装器把原始H.264/AVC帧塞进RTMP流librtmp不处理编码只负责传输。要推流你得自己构造FLV格式的onMetaData、AVC sequence header和AVC NALU。核心是RTMP_Write函数// 假设frame_data是H.264的SPSPPSNALUframe_len是总长度 // flv_tag_header[11] {0x09, 0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00}; // FLV video tag头 uint8_t flv_tag_header[11] {0}; flv_tag_header[0] 0x09; // video tag flv_tag_header[4] (frame_len 16) 0xFF; // data size flv_tag_header[5] (frame_len 8) 0xFF; flv_tag_header[6] frame_len 0xFF; flv_tag_header[10] 0x01; // AVC NALU // 写入tag头 RTMP_Write(r, flv_tag_header, 11); // 写入时间戳毫秒 uint32_t timestamp htonl(0); // 时间戳 RTMP_Write(r, (char*)timestamp, 3); // 只写低3字节 // 写入NALU数据 RTMP_Write(r, (char*)frame_data, frame_len);关键点RTMP_Write第二个参数是char*第三个是int字节数。flv_tag_header必须严格按FLV规范构造否则播放器无法解析。SPS/PPS需在首帧前发送一次后续帧只发NALU。6.2 处理RTMP重连当网络抖动时不让推流中断librtmp原生不支持自动重连需手动实现。核心逻辑是捕获RTMP_IsConnected(r) FALSE然后重建连接while (is_running) { if (!RTMP_IsConnected(r)) { printf(Connection lost, reconnecting...\n); RTMP_Close(r); RTMP_Free(r); r RTMP_Alloc(); RTMP_Init(r); RTMP_SetupURL(r, url); RTMP_EnableWrite(r); if (RTMP_Connect(r, NULL) RTMP_ConnectStream(r, 0)) { printf(Reconnected!\n); } else { Sleep(1000); // 重试间隔 continue; } } // 正常推流逻辑... }血泪经验RTMP_ConnectStream(r, 0)必须在每次重连后调用否则服务器认为未发布流拒绝接收数据。Sleep(1000)防止高频重连打爆服务器。6.3 调试技巧用Wireshark抓包验证RTMP握手是否合规当推流失败又无日志时用Wireshark过滤tcp.port1935观察三次握手后是否出现connect、createStream、publishAMF0消息。正常流程应为Client → Serverconnect含appliveServer → Client_result含streamId1Client → ServercreateStreamServer → Client_result含streamId2Client → Serverpublish streamNametest若卡在第2步说明RTMP_SetupURL参数错误如app名不匹配Nginx配置若卡在第4步说明RTMP_ConnectStream未调用。从那以后我每次集成librtmp.lib都强制走一遍dumpbin /exports验证符号、用RTMP_LogSetLevel(RTMP_LOGDEBUG)开日志、用Wireshark抓包三件套——少一次就可能多花半天在“为什么连不上”上兜圈子。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

BERT面试深度拆解:从架构原理到微调避坑实战指南

BERT面试深度拆解:从架构原理到微调避坑实战指南

1. 为什么BERT值得花时间深挖如果你最近在准备算法岗面试,或者想从传统机器学习转向NLP方向,大概率绕不开BERT这个模型。面试官问BERT,不是想听你背“Bidirectional Encoder Representations from Transformers”这个全称,而是想通…

2026/10/16 16:57:53 阅读更多 →
云原生学习路线图:分层能力地图与实战跃迁指南

云原生学习路线图:分层能力地图与实战跃迁指南

简介:本资源是一份系统化、分层级的云原生技术学习路线图,面向开发者、运维工程师及希望转型云原生领域的IT从业者,解决技术栈庞杂、学习路径不清晰、各组件关系难把握等核心痛点。路线图PDF文件共1个,大小1.29MB,内容…

2026/10/16 16:57:53 阅读更多 →
从信令风暴到Agent协作:多Agent系统防崩的七条设计原则

从信令风暴到Agent协作:多Agent系统防崩的七条设计原则

1. 从一场信令风暴说起:所有设备都在“正确工作”,系统却崩了几年前我还在做通信网络维护时,经历过一次真正让我失眠的故障。节假日的业务高峰,话务量比平时翻了好几倍,核心网突然开始大面积丢消息。我盯着监控大屏&am…

2026/10/16 16:57:53 阅读更多 →

最新新闻

深度学习环境配置终极指南:PyTorch+CUDA+cuDNN版本匹配实战

深度学习环境配置终极指南:PyTorch+CUDA+cuDNN版本匹配实战

搞了这么多年深度学习,我发现自己花在“配置环境”上的时间,一点不比调模型的时间少。PyTorch CUDA cuDNN这套组合,几乎是每个深度学习开发者的必经之路,也是最容易让人劝退的一步。网上教程一搜一大把,但版本匹配问…

2026/10/16 17:29:44 阅读更多 →
OpenCV霍夫变换圆检测原理与工程调优实战

OpenCV霍夫变换圆检测原理与工程调优实战

1. 项目概述:为什么圆检测不是“画个圈”那么简单OpenCV里的霍夫变换圆检测,听起来像是调个函数、设几个参数就能出结果的“一键操作”。但我在带某高校图像处理实验课时发现,超过七成的学生第一次跑通代码后,要么根本检不出图中的…

2026/10/16 17:29:43 阅读更多 →
从VGG16看卷积网络深度设计:小卷积核堆叠与迁移学习价值

从VGG16看卷积网络深度设计:小卷积核堆叠与迁移学习价值

前两天有个朋友发来一段代码,说他在某个小数据集上用VGG16做迁移学习,效果比一些看起来“更新”的网络还好,就是跑得慢。我顺手把2014年那篇《Very Deep Convolutional Networks for Large-Scale Image Recognition》翻出来又读了一遍。这篇论…

2026/10/16 17:29:43 阅读更多 →
会务小程序行政自己能搭吗?卡点就三步,附一张能当场验的清单

会务小程序行政自己能搭吗?卡点就三步,附一张能当场验的清单

单位办会,最常听到的一句话是"要做会务小程序啊?这个得找技术部门"。这句话现在不太站得住了。会务小程序这件事,早就过了要技术介入的阶段。真正卡住行政的不是能力,是三个很具体的坎:不会设计、不会配置、…

2026/10/16 17:28:42 阅读更多 →
StandardScaler保存的正确姿势:跨版本兼容与安全序列化

StandardScaler保存的正确姿势:跨版本兼容与安全序列化

1. 为什么StandardScaler的“保存”不是调用save()那么简单刚接触机器学习模型持久化的开发者,常会下意识地在StandardScaler对象上调用.save()或.dump()——结果要么报错AttributeError,要么保存下来的东西根本没法用。这不是你记错了API,而…

2026/10/16 17:28:42 阅读更多 →
GPT生成式预训练全解析:从架构原理到微调实践

GPT生成式预训练全解析:从架构原理到微调实践

1. 生成式预训练到底解决了什么问题先把话说在前面:GPT这几年几乎成了大模型的代名词,但很多人其实没搞明白,它最初提出的"生成式预训练"到底解决了什么问题。如果你把时间拨回2018年,那时候做NLP的主流思路是&#xff…

2026/10/16 17:28:42 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* 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 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/15 19:41:51 阅读更多 →
影刀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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →