VS2005 编译 FFmpeg 实战:从工程配置到 RTMP 推流避坑指南
简介这份ffmpeg_vs2005工程资源面向需要在Windows平台、以Visual Studio 2005为开发环境编译FFmpeg的C/C开发者与音视频学习者重点解决旧版IDE下配置libavcodec、libavformat、libavfilter、libavutil等组件时遇到的工程设置与依赖链接问题。压缩包为rar格式整体约30.52MB上游未提供具体文件清单因此文件总数与类型明细暂无数据但可预期包含VS2005项目文件、源码目录及必要的库配置参考。资源描述中梳理了获取源码、创建Win32控制台工程、配置包含路径与预处理器宏、链接外部库、处理zlib等第三方依赖以及使用Intel C Compiler 9.0时的兼容性与优化选项等关键环节能帮助读者少走弯路。目前已有177人学习下载适合希望复现经典FFmpeg构建流程、理解旧版工具链配置思路的开发者参考。1. 从一份 VS2005 工程说起为什么还有人用它编译 FFmpeg如果你手头维护的是 Windows 上的老项目尤其是工控、医疗设备、安防客户端这类生命周期动辄十年起步的软件大概率会遇到一个尴尬局面新版本的 FFmpeg 官方预编译包全是 MSVC 2019/2022 或者 MinGW 的产物直接塞进 VS2005 的工程里链接轻则 LNK 报错重则运行时堆栈直接崩。这份ffmpeg_vs2005工程就是冲着这个场景来的——它把 FFmpeg 的源码、头文件、静态库以及一个能在 Visual Studio 2005 里直接打开编译的解决方案打包在一起省去你自己折腾命令行、改 Makefile、处理 C99 语法兼容的麻烦。它解决的核心问题不是“怎么用 FFmpeg 做播放器”而是“怎么让 FFmpeg 在 VS2005 这套老工具链下活下来”。适合两类人一是维护遗留 C 项目的工程师需要把 FFmpeg 当解码库嵌进去二是教学或实验环境机器上只装了 VS2005不想额外配 MinGW 或新版 MSVC。如果你只是想在命令行里跑ffmpeg -i转个码那直接用官网的二进制包更省事这份工程对你意义不大。2. 工程结构与编译链路先看清 VS2005 到底卡在哪2.1 目录里有什么以及为什么这样分拿到压缩包后别急着双击.sln。先看根目录通常会有这么几块ffmpeg/放的是 FFmpeg 源码版本一般不会太新因为 VS2005 的 C 编译器对 C99 支持极差新版本源码里大量for(int i...)、变长数组、stdint.h缺失都会直接编译失败include/是预生成的头文件lib/下是已经编译好的.lib静态库分 debug 和 release 两套vs2005/里才是真正的解决方案文件可能叫ffmpeg.sln或者ffmpeg_static.sln。为什么要把源码和预编译库都放进去因为实际开发中你大概率要改配置。比如项目只需要 H.264 解码不需要编码器和网络模块那就得重新跑一遍configure再编译这时候源码和脚本就是必需的。如果只给.lib你连关掉某个模块都做不到。常见做法是先用预编译库把工程跑通确认链接没问题再根据功能裁剪去动源码。我一般会先看lib/下的库文件名比如avcodec.lib、avformat.lib、avutil.lib、swscale.lib这几个是核心。如果带了avfilter.lib和swresample.lib说明音频重采样和滤镜也编进去了。2.2 用 VS2005 打开工程后必须改的三个地方假设你已经装好了 VS2005最好是带 SP1 的版本否则某些 STL 头文件会报错双击.sln打开。这时候别直接按 F7先做三件事。第一检查平台工具集。VS2005 没有“平台工具集”这个概念但你要确认项目属性里C/C - 语言 - 强制 for 循环作用域是“否”。FFmpeg 源码里大量for(int i0;...)VS2005 默认按 C89 处理会报error C2143: 语法错误 : 缺少“;”(在“类型”的前面)。关掉这个选项能救回一大半编译错误。第二看stdint.h是否存在。VS2005 不自带这个头文件工程里通常会有一个compat/目录放着手写的stdint.h和inttypes.h。你需要在项目属性的C/C - 常规 - 附加包含目录里把compat的路径加进去并且确保它排在系统目录前面。第三链接器输入。打开项目属性 - 链接器 - 输入 - 附加依赖项把avcodec.lib;avformat.lib;avutil.lib;swscale.lib;加进去。如果是 debug 配置库文件名可能带d后缀比如avcoded.lib这个要看lib/下实际的文件名别照抄。# 如果你需要自己重新生成 .lib而不是用预编译的大致流程如下 # 注意这是在 VS2005 命令提示符下执行不是普通 cmd cd ffmpeg_source # 先跑 configure关掉不需要的模块减少编译量 configure --toolchainmsvc --disable-shared --enable-static \ --disable-encoders --disable-muxers --disable-network \ --disable-avfilter --disable-swresample # 然后调用 VS2005 的 nmake nmake /f Makefile这段命令的逻辑是--toolchainmsvc告诉 configure 用微软编译器--disable-shared --enable-static生成静态库方便嵌进 VS2005 工程后面一串--disable-*是裁剪只留解码和封装格式解析。参数怎么改取决于你的项目如果要做推流到 SRS那--disable-network必须去掉还得把--enable-protocolrtmp加上否则avformat_alloc_output_context2会返回空。提示VS2005 的nmake对长命令行支持不好如果 configure 生成的 Makefile 里某一行太长会报fatal error U1095: expanded command line too long。解决办法是手动把那一行拆成多行或者改用msbuild调用.vcproj。2.3 链接时的符号冲突与运行库选择编译通过不代表链接能过。VS2005 默认用/MDd或/MD运行库而 FFmpeg 的静态库如果是在/MT下编的链接时会报LNK2005: _malloc 已经在 libcmt.lib 中定义。这时候要么把工程改成/MT要么重新编译 FFmpeg 时指定/MD。我一般倾向于统一用/MT因为老项目部署时经常不带 VC 运行库静态链接省事。另一个高频问题是_snprintf和snprintf的映射。VS2005 只有_snprintf没有snprintf。FFmpeg 源码里用了snprintf你需要在compat/里加一个宏#define snprintf _snprintf或者直接在项目属性里预定义snprintf_snprintf。这个坑不解决会报一堆error C3861: “snprintf”: 找不到标识符。3. 把 FFmpeg 嵌进 VS2005 工程从初始化到解码一帧3.1 初始化与注册别漏了 av_register_all在 VS2005 里新建一个 Win32 控制台工程把 FFmpeg 的头文件目录和库目录配好然后写一段最小解码代码。注意FFmpeg 4.0 之后av_register_all被废弃了但这份 VS2005 工程带的版本大概率是 2.x 或 3.x所以还是得调。// minimal_decoder.cpp : 在 VS2005 下解码一帧 H.264 #include stdafx.h extern C { #include libavformat/avformat.h #include libavcodec/avcodec.h #include libswscale/swscale.h } int _tmain(int argc, _TCHAR* argv[]) { av_register_all(); // 注册所有封装格式和编解码器 avcodec_register_all(); // 注册编解码器2.x 版本需要单独调 AVFormatContext *pFormatCtx NULL; // 打开输入文件最后一个参数是选项字典这里传 NULL if (avformat_open_input(pFormatCtx, test.mp4, NULL, NULL) ! 0) { printf(avformat_open_input failed\n); return -1; } // 查找流信息这一步会填充 pFormatCtx-streams if (avformat_find_stream_info(pFormatCtx, NULL) 0) { printf(avformat_find_stream_info failed\n); return -1; } // 找第一个视频流 int videoStream -1; for (int i 0; i pFormatCtx-nb_streams; i) { if (pFormatCtx-streams[i]-codec-codec_type AVMEDIA_TYPE_VIDEO) { videoStream i; break; } } if (videoStream -1) { printf(no video stream\n); return -1; } // 根据 codec_id 找解码器 AVCodecContext *pCodecCtx pFormatCtx-streams[videoStream]-codec; AVCodec *pCodec avcodec_find_decoder(pCodecCtx-codec_id); if (pCodec NULL) { printf(unsupported codec\n); return -1; } // 打开解码器 if (avcodec_open2(pCodecCtx, pCodec, NULL) 0) { printf(avcodec_open2 failed\n); return -1; } // 后面就是 av_read_frame 循环和 avcodec_decode_video2 调用 // 篇幅原因不展开核心是 AVPacket 和 AVFrame 的配合 return 0; }这段代码的关键点extern C必须加否则 C 编译器会对 FFmpeg 的 C 函数做名字修饰链接时找不到符号。av_register_all和avcodec_register_all在 2.x 版本里是分开的3.x 之后合并了但调两次也不报错。avformat_open_input的第三个参数是输入格式传 NULL 表示自动探测如果你明确知道是 RTMP 流可以传av_find_input_format(flv)减少探测时间。参数说明pCodecCtx-thread_count可以设成 2 或 4 来开多线程解码但 VS2005 下如果链接的是单线程库设了也没用。pCodecCtx-flags | CODEC_FLAG_TRUNCATED在某些裸流场景下需要加否则av_read_frame会一直返回AVERROR_INVALIDDATA。3.2 内存管理与 AVPacket/AVFrame 的释放顺序FFmpeg 的内存管理是手动引用计数VS2005 没有 C11 的智能指针所以必须自己管。最常见的翻车场景是av_read_frame拿到 packet 后解码完忘了av_packet_unref循环几次内存就爆了。AVPacket packet; AVFrame *pFrame av_frame_alloc(); // 分配 AVFrame内部缓冲区还没分配 av_init_packet(packet); // 初始化 packet 结构 while (av_read_frame(pFormatCtx, packet) 0) { if (packet.stream_index videoStream) { int gotPicture 0; // 解码一帧注意 avcodec_decode_video2 在 3.x 之后被废弃 // 但 VS2005 工程带的版本大概率还能用 avcodec_decode_video2(pCodecCtx, pFrame, gotPicture, packet); if (gotPicture) { // 处理 pFrame比如转成 RGB 再显示 } } av_packet_unref(packet); // 必须调否则 packet 内部的 data 不会释放 } av_frame_free(pFrame); // 释放 AVFrame avcodec_close(pCodecCtx); // 关闭解码器 avformat_close_input(pFormatCtx); // 关闭输入上下文释放顺序很重要先关解码器再关输入上下文最后释放 frame。如果反过来avcodec_close可能会访问已经释放的pCodecCtx直接崩。av_packet_unref在旧版本里叫av_free_packet如果你的工程编译报找不到 av_packet_unref就换成av_free_packet(packet)。注意VS2005 的调试器对 FFmpeg 的宏展开支持不好av_err2str这种宏在 watch 窗口里看不了。排查错误时直接用printf(%d\n, ret)打印返回值然后去libavutil/error.h里对照错误码。4. 避坑与排查VS2005 下编译 FFmpeg 的五个血泪经验4.1 现象编译时报error C2059: 语法错误 : “类型”原因VS2005 默认按 C89 编译遇到for(int i0;...)或者结构体成员后面直接跟类型定义就会报这个。FFmpeg 源码里大量这种写法。解决项目属性 - C/C - 语言 - 强制 for 循环作用域改为“否”。如果还报检查是不是某个头文件里用了inline关键字VS2005 的 C 编译器不支持inline需要在预处理器里加#define inline __inline。4.2 现象链接时报LNK2019: 无法解析的外部符号 _avcodec_open2原因库的顺序不对或者库文件名写错了。VS2005 的链接器对库顺序敏感avcodec.lib依赖avutil.lib所以avutil.lib必须排在avcodec.lib后面。解决在附加依赖项里按avformat.lib;avcodec.lib;swscale.lib;avutil.lib;的顺序写。如果还报用dumpbin /symbols avcodec.lib | findstr avcodec_open2确认库里到底有没有这个符号。有时候预编译库是 release 版而你工程是 debug 版符号名会带_debug后缀对不上。4.3 现象运行时崩溃在avformat_open_input错误码 -1094995529原因这个错误码是AVERROR_INVALIDDATA通常是因为输入文件路径带中文而 VS2005 默认用 ANSI 编码FFmpeg 内部按 UTF-8 处理。解决把文件路径转成 UTF-8 再传进去。可以用MultiByteToWideChar转成宽字符再用WideCharToMultiByte转成 UTF-8。或者简单点把文件放到纯英文路径下测试。4.4 现象解码出来的图像颜色不对偏绿或偏紫原因sws_scale的目标像素格式设错了。VS2005 工程里如果用的是PIX_FMT_RGB24但显示控件按PIX_FMT_BGR24渲染颜色通道就反了。解决确认sws_getContext的第六个参数和目标缓冲区格式一致。常见做法是统一用PIX_FMT_BGR24因为 Windows 的 GDI 和大部分显示控件都按 BGR 排列。4.5 现象推流到 SRS 延迟越来越高最后卡死原因av_interleaved_write_frame在 VS2005 下单线程阻塞如果网络抖动packet 会堆积在内部队列里没有及时丢弃。解决设置AVFormatContext的max_delay和AVCodecContext的rc_buffer_size并且在推流循环里加超时判断。如果延迟要求高把AVFMT_FLAG_NOBUFFER打开禁用内部缓冲。但注意这个 flag 在旧版本 FFmpeg 里可能不存在需要看avformat.h里的宏定义。5. 进阶用 VS2005 工程做 RTMP 推流与码率控制5.1 推流初始化的关键参数如果你不只是解码还要把摄像头数据推给 SRS那avformat_alloc_output_context2的用法就很重要。下面这段代码在 VS2005 下编译通过前提是 configure 时加了--enable-protocolrtmp和--enable-muxerflv。AVFormatContext *pOutCtx NULL; // 指定输出格式为 flvSRS 默认接受 RTMP 流 avformat_alloc_output_context2(pOutCtx, NULL, flv, rtmp://127.0.0.1/live/stream); if (!pOutCtx) { printf(alloc output context failed\n); return -1; } // 添加视频流 AVStream *pStream avformat_new_stream(pOutCtx, NULL); AVCodecContext *pOutCodecCtx pStream-codec; pOutCodecCtx-codec_id AV_CODEC_ID_H264; pOutCodecCtx-codec_type AVMEDIA_TYPE_VIDEO; pOutCodecCtx-bit_rate 500000; // 码率 500kbps按需调整 pOutCodecCtx-width 640; pOutCodecCtx-height 480; pOutCodecCtx-time_base.num 1; pOutCodecCtx-time_base.den 25; // 帧率 25 pOutCodecCtx-gop_size 25; // 关键帧间隔 pOutCodecCtx-pix_fmt PIX_FMT_YUV420P; // 打开编码器 AVCodec *pOutCodec avcodec_find_encoder(AV_CODEC_ID_H264); if (avcodec_open2(pOutCodecCtx, pOutCodec, NULL) 0) { printf(open encoder failed\n); return -1; } // 打开输出 URL if (avio_open(pOutCtx-pb, rtmp://127.0.0.1/live/stream, AVIO_FLAG_WRITE) 0) { printf(avio_open failed\n); return -1; } // 写文件头 avformat_write_header(pOutCtx, NULL);参数说明bit_rate直接决定推流带宽500kbps 适合 640x48025fps 的监控场景。gop_size设成帧率的值意味着每秒一个关键帧SRS 端首屏加载会快一些。time_base必须和采集端一致否则时间戳会乱SRS 会丢弃异常包。5.2 码率控制与延迟优化FFmpeg 的 H.264 编码器支持crf和bit_rate两种模式。VS2005 工程里如果用的是libx264可以在avcodec_open2之前设置av_opt_set(pOutCodecCtx-priv_data, preset, ultrafast, 0)这样编码速度最快延迟最低但画质会差一些。如果追求画质用medium或slow但 VS2005 的 CPU 占用会很高。降低延迟的另一个关键是av_interleaved_write_frame的调用频率。不要攒够一秒钟的 packet 再发每编码一帧就发一次。同时把pOutCtx-flags | AVFMT_FLAG_FLUSH_PACKETS打开强制每次写完就刷缓冲区。这个 flag 在旧版本里可能叫AVFMT_FLAG_NOBUFFER具体看头文件。验证方法用ffplay rtmp://127.0.0.1/live/stream拉流观察画面延迟。如果延迟超过 2 秒检查gop_size是不是设太大了或者 SRS 配置里的gop_cache是不是开着。SRS 默认会缓存一个 GOP关掉它能降延迟但首屏会花屏。从那以后我每次拿到一份老工程都强制先跑一遍最小解码用例确认av_register_all、avcodec_open2、av_read_frame这三个环节不报错再去动业务代码。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

编程智能体装上“感官”与“骨架”:余额、任务、番茄钟三插件实践

编程智能体装上“感官”与“骨架”:余额、任务、番茄钟三插件实践

1. 三个插件到底在补什么:从“会写代码”到“会自己安排干活”先说个场景。我用了很长一段时间的 DeepSeek 编程智能体,最初的感觉是“这家伙代码能力确实猛”,重构接口、补测试、写脚本都是分分钟的事。但用着用着就发现一个问题&#xff1a…

2026/10/13 6:26:46 阅读更多 →
MinGW 64位 gcc 4.9.2 安装配置与编译实战指南

MinGW 64位 gcc 4.9.2 安装配置与编译实战指南

简介:MinGW64 64位 gcc 4.9.2 是一套面向 Windows 平台的 GNU 编译工具链,专为需要构建 64 位 C/C 程序的开发者准备。它基于 GCC 4.9.2 发行版,支持 gcc、g 编译、静态与动态链接、GDB 源码级调试以及 Makefile 自动化构建,适合从…

2026/10/13 6:26:46 阅读更多 →
OpenCV直方图反向投影:构建HSV概率映射的目标定位方法

OpenCV直方图反向投影:构建HSV概率映射的目标定位方法

/* 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 6:26:46 阅读更多 →

最新新闻

Ubuntu下ORB-SLAM2编译安装全攻略:依赖解析与避坑指南

Ubuntu下ORB-SLAM2编译安装全攻略:依赖解析与避坑指南

1. 为什么 ORB-SLAM2 的编译安装值得单独写一篇ORB-SLAM2 是视觉 SLAM 领域里被引用最多、被复现最多的开源系统之一,支持单目、双目和 RGB-D 三种传感器模式,能做实时定位与稀疏建图。很多人第一次接触它,都是被论文里的轨迹图和回环效果吸引…

2026/10/13 7:56:22 阅读更多 →
Windows批量部署实战:从PXE到MDT的标准化系统交付

Windows批量部署实战:从PXE到MDT的标准化系统交付

1. 这不是重装系统,是批量部署——为什么“批量安装Windows系统”正在成为一线运维的硬通货你有没有遇到过这样的场景:刚接手一个新机房,20台全新裸机整齐排开,每台都要手动插U盘、选分区、输密钥、装驱动、打补丁、配策略……光是…

2026/10/13 7:56:22 阅读更多 →
WSL与GitHub Copilot组合实战:从环境搭建到效率翻倍

WSL与GitHub Copilot组合实战:从环境搭建到效率翻倍

1. 环境准备:把WSL这套地基彻底打牢 1.1 为什么我最终选择WSL而不是双系统或虚拟机 这两年我一直在Windows上做后端和前端开发,一直在折腾环境。双系统切来切去太费时间,虚拟机虽然隔离性好但资源开销大,硬盘空间和内存都被吃掉一…

2026/10/13 7:56:22 阅读更多 →
基于梯度缺陷ANCF梁单元的单悬臂梁重力弯曲仿真全解析

基于梯度缺陷ANCF梁单元的单悬臂梁重力弯曲仿真全解析

在结构力学与计算仿真这个圈子里,悬臂梁是一个绕不开的经典基准模型,但最近我做的这个项目——基于梯度缺陷ANCF梁单元的单悬臂梁重力弯曲仿真,可以说是在经典基础上叠了一层很有意思的buff。它不仅是把一根梁一端固定、让它自己在重力下垂下…

2026/10/13 7:56:22 阅读更多 →
Windows Server上搭建PostgreSQL测试库:安装配置与备份恢复实战指南

Windows Server上搭建PostgreSQL测试库:安装配置与备份恢复实战指南

做数据库测试环境搭建,听起来好像就是装个数据库、建几个库的问题,实际上真到落地的时候,版本选择、编码格式、账号权限、远程访问、备份恢复,哪一环松了都会在工作日晚上还回来。前一阵我们小组接到一个内部订单系统的测试环境需…

2026/10/13 7:56:22 阅读更多 →
SQL UNIQUE约束详解:原理、数据库差异与防重复设计实践

SQL UNIQUE约束详解:原理、数据库差异与防重复设计实践

1. UNIQUE约束到底是什么,为什么你需要它做数据库设计这些年,我见过太多因为“忘记加唯一约束”而崩溃的业务系统。最典型的场景:用户注册接口被脚本刷了一遍,username重复了;订单表里同一笔订单被回调程序insert了两次…

2026/10/13 7:55:19 阅读更多 →

日新闻

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

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

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

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/12 0:16:38 阅读更多 →
影刀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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →