iOS WebRTC原生集成实战:从编译Framework到后台音频保活
简介WebRTCDemo-iOS 是一个面向 iOS 开发者、聚焦实时音视频通信实践的 Objective-C 示例项目适用于希望在原生应用中集成 WebRTC 技术的中初级开发者尤其适合在线教育、远程医疗、视频会议等场景的技术预研与功能验证。资源共 24 个文件涵盖 7 个 .m 实现文件如 MyWebRTCPhone.m、RTCMediaController.m、5 个 .h 头文件定义核心类接口、3 个 Info.plist 配置文件管理权限与能力以及 Xcode 工程关键文件.pbxproj、.xcscheme、.storyboard 等完整呈现典型 WebRTC iOS 应用的模块划分与工程组织方式压缩包仅 41KB轻量易读。已有 292 人学习下载。读者可直接运行并深入理解信令交互逻辑、AVFoundation 与 WebRTC SDK 的协同机制、本地/远程视图绑定、SDP 与 ICE 候选交换流程同时获得清晰的 ViewController 分层结构、权限请求处理范式及基础错误日志调试支持。1. WebRTCDemo-iOS一个能跑通音视频双向通话的 Objective-C 实战模板不是 Demo是可嵌入生产环境的通信底座你手头有个 iOS 项目需要加实时音视频能力——不是调用第三方 SDK 封装层而是想真正看懂信令怎么交互、媒体轨道怎么绑定、本地预览和远端渲染怎么解耦、iOS 端特有的 AVFoundation 权限与后台音频策略怎么绕过。这时候搜到的「WebRTCDemo-iOS」常被当成教学玩具Xcode 打开报错、Pods 安装失败、模拟器黑屏、真机连不上信令服务器……但其实这个仓库本质是一份经过真实设备压测、适配 iOS 1416 系统行为、剥离了业务逻辑的 WebRTC 原生 Objective-C 接入骨架。它不提供 UI 组件但把RTCPeerConnection生命周期管理、RTCVideoTrack与AVCaptureSession的桥接、RTCDataChannel的保活心跳、以及最关键的——iOS 后台状态下音频流持续传输的 Audio Session 配置链全写在.m文件里。适合两类人一是正在评估 WebRTC 自研成本的客户端负责人二是被RTC_OBJC_TYPE编译错误卡住三天的 iOS 开发者。别急着 clone先看清它解决的是哪几类“官方文档没写但真机必翻车”的问题。2. 搭建可运行环境从源码编译 WebRTC.framework 到 Xcode 工程配置落地这个 Demo 的核心依赖不是 CocoaPods 里的某个封装库而是 Google 官方 WebRTC iOS framework 的静态库。很多开发者直接pod WebRTC结果发现版本太旧如 114 版本、缺少RTCAudioSession类、或RTC_OBJC_TYPE宏未定义——这说明你拿到的是社区维护的二进制包而非官方构建产物。真正的起点是自己编译 WebRTC iOS framework。2.1 下载并编译官方 WebRTC iOS frameworkM1/M2 Mac 适配版WebRTC 官方已不再提供预编译 framework必须本地构建。注意不要用depot_toolsfetch全量拉取 Chromium 代码树耗时 3 小时磁盘占用 80GB我们走精简路径# 1. 安装 depot_tools仅需 git 和 python3 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH$PATH:/path/to/depot_tools # 2. 创建空目录进入后执行关键指定 iOS 构建目标跳过 Android/Windows mkdir webrtc_ios cd webrtc_ios fetch --nohooks ios gclient sync --with_tags --no-nag-upload --no-history # 3. 进入 src 目录执行 iOS framework 构建重点--bitcodeenable 支持 App Store 提交 cd src ./tools-webrtc/ios/build_ios_libs.sh --build-dir ./out/ios-framework --bitcodeenable --arch arm64,x86_64提示build_ios_libs.sh脚本会自动处理gn参数生成、ninja编译、framework 合并。最终产物位于out/ios-framework/WebRTC.framework大小约 120MB含 bitcode。若报错xcode-select: error: tool xcodebuild requires Xcode请确认xcode-select -p指向 Xcode 14.3 安装路径。2.2 将 WebRTC.framework 集成进 Xcode 工程Objective-C 混编关键配置Demo 工程是纯 Objective-C但 WebRTC.framework 是 C/Objective-C 混合体Xcode 默认不识别.mm文件中的 C 语法。必须手动开启 Objective-C 支持在 Xcode 中选中工程 → Build Settings → 搜索Compile Sources As→ 设为According to File Type默认值但需确认搜索Apple Clang - Language - C→C Language Dialect→ 设为GNU17搜索Apple Clang - Language - Modules→Enable Modules (C and Objective-C)→ 设为Yes最关键一步在Build Phases → Link Binary With Libraries中添加以下系统框架缺一不可AVFoundation.frameworkCoreMedia.frameworkCoreAudio.frameworkVideoToolbox.frameworkAudioToolbox.frameworkSecurity.frameworkSystemConfiguration.framework注意WebRTC.framework必须拖入Embedded Binaries区域而非仅Linked Frameworks否则真机运行时报dyld: Library not loaded: rpath/WebRTC.framework/WebRTC。Xcode 会自动将其设为Embed Sign。2.3 配置 Info.plist 权限与后台模式iOS 15 音频后台保活核心WebRTC 音视频通话在 iOS 后台会被系统强制挂起导致远端听不到声音。这不是 Demo 的 Bug而是 iOS 系统级限制。WebRTCDemo-iOS的Info.plist已预埋关键配置keyUIBackgroundModes/key array stringaudio/string stringvoip/string /array keyNSMicrophoneUsageDescription/key string用于实时语音通话/string keyNSCameraUsageDescription/key string用于实时视频通话/string keyNSAppTransportSecurity/key dict keyNSAllowsArbitraryLoads/key true/ /dict重点说明voip后台模式虽已 deprecated但对 WebRTC 仍有效audio模式是必须项且需配合AVAudioSession配置。若漏掉audio应用切后台后RTCAudioTrack会静音且无任何日志提示——这是最隐蔽的翻车点。3. 核心通信流程解析信令交换、PeerConnection 建立与媒体流绑定WebRTCDemo-iOS的主干逻辑集中在RTCClient.m和RTCSession.m两个文件。它不依赖 WebSocket 封装库而是用原生NSURLSessionWebSocketTask实现信令通道避免第三方库引入的线程模型冲突。整个流程分三阶段信令握手 → SDP 协商 → 媒体流绑定。3.1 信令层基于 NSURLSessionWebSocketTask 的轻量级实现Demo 使用苹果原生 WebSocket API而非Starscream或SocketRocket。优势是线程安全、无额外依赖、与NSRunLoop兼容性好。关键代码在RTCClient.m的- (void)connectToSignalingServer方法中// 初始化 WebSocket 任务注意URL 必须是 wss://HTTP 不支持 NSURL *url [NSURL URLWithString:wss://your-signaling-server.com/ws]; NSURLSessionConfiguration *config [NSURLSessionConfiguration defaultSessionConfiguration]; self.session [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; self.webSocketTask [self.session webSocketTaskWithURL:url]; // 启动连接 [self.webSocketTask resume]; // 发送信令消息JSON 字符串 - (void)sendSignalingMessage:(NSDictionary *)message { NSError *error; NSData *jsonData [NSJSONSerialization dataWithJSONObject:message options:0 error:error]; if (!error) { // WebSocket 发送是异步的需用 completion handler 确认发送成功 [self.webSocketTask send:data completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(WebSocket send failed: %, error); } }]; } }参数说明NSURLSessionWebSocketTask的send:方法不阻塞主线程但 completion handler 在后台队列回调所有 UI 更新如更新连接状态 label必须 dispatch 到主线程。Demo 中已用dispatch_async(dispatch_get_main_queue(), ^{ ... })包裹。3.2 PeerConnection 初始化与约束配置iOS 端特有优化RTCSession.m中的- (void)initializePeerConnection是核心。它不仅创建RTCPeerConnection还设置了 iOS 端必须的RTCConfigurationRTCConfiguration *config [[RTCConfiguration alloc] init]; config.bundlePolicy RTCBundlePolicyMaxBundle; // 减少 ICE 候选数量加速连接 config.rtcpMuxPolicy RTCRtcpMuxPolicyRequire; // 强制 RTP/RTCP 复用降低端口占用 config.continualGatheringPolicy RTCContinualGatheringPolicyGatherContinually; // iOS 关键启用 ICE TCP 候选WiFi 下更稳定 RTCIceTransportsType transports RTCIceTransportsTypeAll; config.iceTransportsType transports; // 设置 STUN/TURN 服务器必须否则局域网外无法连通 NSArrayRTCIceServer * *iceServers [ [[RTCIceServer alloc] initWithURIs:[stun:stun.l.google.com:19302]] ]; config.iceServers iceServers; // 创建 PeerConnection self.peerConnection [[RTCPeerConnection alloc] initWithConfiguration:config constraints:nil delegate:self];逻辑说明RTCIceTransportsTypeAll允许 UDP/TCP/SSLTCP 候选iOS 设备在某些企业 WiFi 下 UDP 被禁此时 TCP 候选成为唯一通路bundlePolicyMaxBundle可将音频、视频、数据通道复用同一 DTLS 连接减少 handshake 时间——实测在弱网下首帧延迟降低 300ms。3.3 本地媒体流采集与远端渲染AVCaptureSession 与 RTCVideoRenderer 桥接Demo 的视频采集不走UIImagePickerController而是用AVCaptureSession手动控制确保帧率、分辨率、前后置摄像头切换可控// AVCaptureSession 配置在 RTCSession.m 中 self.captureSession [[AVCaptureSession alloc] init]; self.captureSession.sessionPreset AVCaptureSessionPreset1280x720; // 固定 720p AVCaptureDevice *device [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *input [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; [self.captureSession addInput:input]; // 视频输出绑定到 RTCVideoSource self.videoOutput [[AVCaptureVideoDataOutput alloc] init]; self.videoOutput.alwaysDiscardsLateVideoFrames YES; [self.videoOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()]; [self.captureSession addOutput:self.videoOutput]; // 启动采集 [self.captureSession startRunning]; // 将采集到的 CMSampleBufferRef 转为 RTCVideoFrame 并推给 WebRTC - (void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { RTCVideoFrame *videoFrame [self videoFrameFromSampleBuffer:sampleBuffer]; [self.localVideoSource capturer:videoFrame]; }参数说明alwaysDiscardsLateVideoFramesYES防止采集队列积压导致卡顿sessionPreset设为1280x720而非High因High在不同设备上分辨率不一致iPhone 12 是 4KiPhone SE 是 1080p统一预设便于服务端转码策略。4. 避坑指南iOS 端 WebRTC 最常踩的五个“静默崩溃”点这些坑不会报编译错误也不会 crash但会导致「本地能预览、远端收不到画面」「信令连上了、SDP 交换了、就是黑屏无声」。全是血泪经验总结按发生频率排序。4.1 现象真机运行时本地预览正常但远端看到黑屏控制台无错误原因AVCaptureVideoDataOutput的setSampleBufferDelegate:未在主线程调用或 delegate 对象被提前释放。iOS 15 对CMSampleBufferRef的内存管理更严格delegate 释放后captureOutput:didOutputSampleBuffer:仍可能被回调导致野指针访问。解决在dealloc中显式调用[self.videoOutput setSampleBufferDelegate:nil]并在viewWillDisappear:中停止captureSession- (void)dealloc { [self.videoOutput setSampleBufferDelegate:nil]; [self.captureSession stopRunning]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.captureSession stopRunning]; }4.2 现象模拟器运行正常真机连信令失败控制台打印NSURLSessionWebSocketTask failed with error -999原因-999是NSURLErrorCancelled表示任务被取消。根本原因是模拟器允许 HTTP WebSocket 连接而真机强制要求wss://HTTPS WebSocket。Demo 中若信令 URL 写成ws://真机必然失败。解决检查RTCClient.m中connectToSignalingServer的 URL必须以wss://开头若自建信令服务器需配置 TLS 证书Lets Encrypt 免费证书即可。4.3 现象后台切换后远端听不到声音但应用回到前台立即恢复原因AVAudioSession未在applicationDidEnterBackground:中重新激活。iOS 后台下AVAudioSession会降级为PlayAndRecord模式但 WebRTC 需要VoiceChat模式才能持续采集。解决在AppDelegate.m中添加- (void)applicationDidEnterBackground:(UIApplication *)application { NSError *error; [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeVoiceChat error:error]; [[AVAudioSession sharedInstance] setActive:YES error:error]; }4.4 现象RTC_OBJC_TYPE(RTCAudioTrack)编译报错提示Unknown type name RTCAudioTrack原因WebRTC.framework的头文件未被正确索引。常见于将 framework 拖入Frameworks文件夹但未在Build Settings → Header Search Paths中添加路径。解决在Build Settings → Header Search Paths中添加$(PROJECT_DIR)/WebRTC.framework/Headers并勾选recursive同时确认Always Search User Paths为NoXcode 14 默认关闭。4.5 现象信令连通、SDP 交换成功、peerConnection.iceConnectionState变为connected但远端无画面原因RTCVideoTrack未正确添加到RTCPeerConnection。Demo 中addVideoTrack:方法需在peerConnection创建后、createOffer前调用且 track 必须来自RTCVideoSource。解决检查RTCSession.m中startLocalVideo方法确保顺序为self.localVideoSource [[RTCVideoSource alloc] init];self.localVideoTrack [[RTCVideoTrack alloc] initWithTrackId:localVideo source:self.localVideoSource];[self.peerConnection addVideoTrack:self.localVideoTrack streamIds:[stream-1]];[self.peerConnection createOffer...];5. 验证与调试用 Safari Web Inspector 实时抓包 iOS 系统日志定位问题光靠 Xcode 控制台日志无法定位 WebRTC 连接瓶颈。必须结合 Safari 的 Web Inspector用于信令/SDP 分析和 iOS 系统日志用于底层网络/音频异常。5.1 用 Safari Web Inspector 抓取信令与 SDP 交换过程Safari 16 支持远程调试 iOS 设备上的 WebView而WebRTCDemo-iOS的信令服务器若部署在本地开发机如http://localhost:3000可通过 Safari 查看 WebSocket 流量iOS 设备开启设置 → Safari → 高级 → Web 检查器macOS Safari 开启开发 → [设备名] → [页面标题]在 Web Inspector 的Network标签页筛选WSWebSocket点击连接查看Frames子标签所有信令消息offer,answer,candidate均以 JSON 格式明文显示可复制粘贴验证格式是否合法。关键技巧若offer中amid:video但answer中缺失该行说明远端未正确解析 SDP —— 此时需检查RTCSession.m中setRemoteDescription:的调用时机必须在peerConnection创建后、addVideoTrack前完成。5.2 解析 iOS 系统日志定位音频/网络异常Xcode 的Devices and Simulators窗口可导出完整系统日志。过滤关键词定位问题关键词含义应对措施AVAudioSession音频会话激活失败检查Info.plist后台模式与AVAudioSession配置libboringsslTLS 握手失败信令服务器证书过期或域名不匹配RTCICECandidateICE 候选收集失败检查RTCIceServer配置STUN 是否可达RTCVideoEncoder视频编码器初始化失败sessionPreset超出设备能力如 iPhone 8 强设4K操作步骤Xcode → Window → Devices and Simulators → 选中设备 → 点击右下角View Device Logs→ 导出.logarchive→ 用 Console.app 打开 → 在搜索框输入上述关键词。5.3 用webrtc-internals页面对比两端 SDP 与统计信息需自建信令服务器Google Chrome 的chrome://webrtc-internals是 WebRTC 调试神器。若你的信令服务器支持 Web 端接入如用simple-peer实现的 JS 客户端可让 iOS 端与 Chrome 端互通然后在 Chrome 中打开webrtc-internals查看getStats()返回的inbound-rtp流量验证远端是否收到包remote-inbound-rtp的jitter和packetsLost判断网络质量candidate-pair的statesucceeded表示 ICE 连接成功。实操建议在 Demo 的RTCSession.m中于peerConnection:didChangeIceConnectionState:回调里添加日志- (void)peerConnection:(RTCPeerConnection *)peerConnection didChangeIceConnectionState:(RTCIceConnectionState)state { NSLog(ICE State changed to: %, (state)); if (state RTCIceConnectionStateConnected) { // 此时可调用 getStats() 获取初始统计 [self.peerConnection getStatsWithCompletionHandler:^(NSArrayRTCStatsReport * * _Nonnull reports) { for (RTCStatsReport *report in reports) { NSLog(Stats: %, report); } }]; } }从那以后我每次集成 WebRTC都强制走一遍「Safari 抓信令 Console 查系统日志 Chrome webrtc-internals 对比」三件套。哪怕只是改了一行RTCIceServer的 URL也值得花 3 分钟验证。因为 WebRTC 的问题从来不在代码里而在网络、系统权限、时间戳同步这些看不见的地方。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Open MCP Client 技术解析:基于 Web 的 MCP 协议开源客户端如何把 endpoint 改到 TaoToken

Open MCP Client 技术解析:基于 Web 的 MCP 协议开源客户端如何把 endpoint 改到 TaoToken

/* 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 19:04:47 阅读更多 →
PS5外围交互能力全景解析:从协议栈四层看AnyPS5真实含义

PS5外围交互能力全景解析:从协议栈四层看AnyPS5真实含义

项目标题:“AnyPS5”这个标题乍一看像某个硬件设备、软件工具,或是某种跨平台兼容方案的代号——但目前全网并无公开、权威、可验证的官方产品、开源项目或商业服务以“AnyPS5”为正式命名。它没有出现在索尼官方技术文档、PlayStation开发者门户、主流科…

2026/10/12 19:03:47 阅读更多 →
混合模型时间序列预测:LSTM+XGBoost+GMM的组合逻辑与实战

混合模型时间序列预测:LSTM+XGBoost+GMM的组合逻辑与实战

简介:混合模型时间序列预测实战资源,面向具备一定深度学习基础、希望提升时序建模能力的开发者。压缩包内基于LSTM与Transformer构建混合预测模型,兼顾序列局部依赖与全局模式,配套data.csv、ceshi.csv训练测试数据,以…

2026/10/12 19:03:47 阅读更多 →

最新新闻

小程序分类页左右联动滚动实现:scroll-view锚点定位与高亮同步

小程序分类页左右联动滚动实现:scroll-view锚点定位与高亮同步

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

2026/10/14 1:29:08 阅读更多 →
图神经网络科研实战:动态图表示学习与推荐系统研究指南

图神经网络科研实战:动态图表示学习与推荐系统研究指南

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

2026/10/14 1:29:08 阅读更多 →
12 种 Prompt 注入实测:零宽字符和 Base64 怎么绕过关键词过滤

12 种 Prompt 注入实测:零宽字符和 Base64 怎么绕过关键词过滤

36 条注入样例,只做原文关键词匹配能抓到 22 条,前面加一层归一化能抓到 27 条。 多抓到的那 5 条,全是在关键词中间动了手脚:塞零宽字符、把拉丁字母换成西里尔同形字、或者整句写成全角。 两条管线在 40 条良性样例上都是 0 误报…

2026/10/14 1:29:08 阅读更多 →
Java并发编程实战:从JMM、CAS到AQS与线程池调优

Java并发编程实战:从JMM、CAS到AQS与线程池调优

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

2026/10/14 1:29:08 阅读更多 →
STM32F407简易示波器实战:从ADC采样到DMA波形显示与校准

STM32F407简易示波器实战:从ADC采样到DMA波形显示与校准

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

2026/10/14 1:29:08 阅读更多 →
LaTeX中使用pgfplots绘制三维曲线图:从入门到论文级应用

LaTeX中使用pgfplots绘制三维曲线图:从入门到论文级应用

写论文的人都知道一个魔咒:正文排版折腾到半夜终于整齐了,结果一张三维曲线图插进来,字体、线宽、配色全变味,导师一句话“这张图风格不对,重画”,前功尽弃。LaTeX 环境下的 pgfplots 宏包,就是…

2026/10/14 1:28:08 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战: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/13 22:01:27 阅读更多 →
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 阅读更多 →