直播自动化录制:跨平台直播内容采集系统 - LiveAutoRecord技术深度解析
直播自动化录制跨平台直播内容采集系统 - LiveAutoRecord技术深度解析【免费下载链接】LiveAutoRecord基于 Electron 的多平台直播自动录制软件项目地址: https://gitcode.com/GitHub_Trending/li/LiveAutoRecordLiveAutoRecord是一个面向多直播平台的自动化录制解决方案通过模块化架构设计实现了B站、斗鱼、虎牙、抖音等主流直播平台的智能内容采集。该系统采用TypeScript技术栈构建提供桌面客户端、HTTP服务端和命令行工具三种部署模式满足从个人用户到服务器级部署的多样化需求。插件化架构可扩展的平台支持系统统一接口设计下的平台适配器模式LiveAutoRecord的核心设计理念基于插件化架构每个直播平台都作为独立的Provider实现统一的RecorderProviderE接口。这种设计使得新增平台支持变得模块化且标准化开发者只需关注特定平台的API适配无需修改核心调度逻辑。interface RecorderProviderE { id: string // Provider唯一标识如Bilibili name: string // 显示名称 siteURL: string // 平台网址 matchURL(channelURL: string): boolean resolveChannelInfoFromURL(channelURL: string): Promise{ id; title; owner } | null createRecorder(opts): RecorderE fromJSON(json): RecorderE setFFMPEGOutputArgs(args: string[]): void }现有平台插件包括autorecord/bilibili-recorder、autorecord/douyu-recorder、autorecord/huya-recorder和autorecord/douyin-recorder每个插件负责处理对应平台的直播流获取、状态检测和弹幕协议解析。状态机驱动的录制流程控制录制器采用严格的状态机模型确保录制过程的可靠性和一致性。状态流转遵循idle → recording → stopping-record → idle的闭环逻辑每个状态转换都包含完整的资源清理和错误处理机制。interface RecorderE extends EmitterEvents, RecorderCreateOptsE { id: string // UUID标识符 state: RecorderState // 当前状态idle, recording, stopping-record channelId: string // 频道/房间号 quality: Quality // 画质等级lowest, low, medium, high, highest streamPriorities: string[] // 流格式优先级如flv, hls sourcePriorities: string[] // CDN源优先级 recordHandle?: RecordHandle // 当前录制句柄 }智能调度引擎多线程并发检测与健壮性保障三线程并发检查机制RecorderManager作为系统的核心调度器实现了高效的并发检测机制。通过multiThreadCheck()函数创建三个并行工作线程从待检查队列中智能分配任务最大化利用系统资源的同时避免对直播平台API造成过大压力。LiveAutoRecord的主界面展示了已配置的直播频道列表每个频道卡片清晰显示平台、频道ID和当前状态。系统自动管理检查任务的分配和执行确保及时检测直播状态变化。录制流程的健壮性设计录制过程包含多层防护机制确保在各种异常情况下都能安全恢复防重入保护通过singleton()包装确保同一时间只有一个检查/录制流程运行超时检测10秒内无FFmpeg输出则判定连接卡顿自动终止并重试无效流检测帧数连续10次无变化则判定为无效流避免录制空内容HTTP状态监控404等HTTP错误直接判定流无效快速切换到备用源// 创建超时检测器 const createTimeoutChecker (onTimeout: () void, time: number) { let timer: NodeJS.Timeout | null null return { update() { if (timer) clearTimeout(timer) timer setTimeout(onTimeout, time) }, clear() { if (timer) clearTimeout(timer) timer null } } }数据持久化与文件管理策略跨平台配置与数据目录结构LiveAutoRecord使用env-paths库自动适配不同操作系统的数据存储位置确保配置和录制文件的正确存储Windows:%APPDATA%/live-auto-record/Config和%APPDATA%/live-auto-record/DataLinux:~/.config/live-auto-record和~/.local/share/live-auto-recordmacOS:~/Library/Preferences/live-auto-record和~/Library/Application Support/live-auto-record核心数据文件包括manager.json- Manager全局配置保存路径规则、检查间隔等data.json- lowdb数据库录制器和录制历史记录settings.json- 应用级设置通知、语言、调试模式等智能文件命名与组织系统录制文件按照可配置的路径模板自动组织支持丰富的变量替换// 默认保存路径规则 const defaultSavePathRule {dataPath}/{platform}/{owner}/{year}-{month}-{date} {hour}-{min}-{sec} {title}.mp4支持的模板变量包括{platform}平台名称、{owner}主播名、{title}直播标题、{year}、{month}、{date}等时间字段以及{remarks}用户备注。每个录制文件都会生成对应的JSON元数据文件包含弹幕、礼物消息和录制统计信息。录制历史界面按时间顺序展示所有录制内容支持直接播放和SRT字幕生成功能。系统自动按平台和主播分类组织文件便于内容管理和检索。多模式部署架构适应不同使用场景Electron桌面客户端一体化用户体验桌面客户端基于Electron 40和electron-vite 5构建整合了HTTP Server与Web前端提供原生的系统集成功能系统托盘支持最小化到托盘后台持续运行单实例锁app.requestSingleInstanceLock()防止多开冲突FFmpeg静态绑定内置ffmpeg-static无需用户单独安装原生通知录制开始/结束的系统级通知HTTP Server模式服务端部署方案HTTP Server基于Express 5构建提供完整的REST API和SSE实时事件推送适合服务器部署和远程管理// REST API路由结构 app.use(/api/recorder, recorderRouter) // 录制器CRUD app.use(/api/record, recordRouter) // 录制记录查询 app.use(/api/manager, managerRouter) // Manager配置管理 app.use(/api/event, eventRouter) // SSE事件流 app.use(/api/setting, settingRouter) // 应用设置 app.use(/api/provider, providerRouter) // Provider鉴权管理SSEServer-Sent Events机制确保Web前端能实时接收录制状态变化、开始/停止事件等实现近似实时更新的用户体验。CLI命令行工具脚本集成与自动化CLI工具基于commander构建提供完整的命令行接口支持结构化JSON输出便于脚本集成和AI Agent调用# 基本操作命令 lar add https://live.bilibili.com/123456 # 添加录制频道 lar list --json # JSON格式列出所有录制器 lar start recorder-id # 手动启动录制 lar watch # 守护模式持续监控 # 配置管理 lar config savePathRule {platform}/{owner}/{title}.mp4 lar config autoCheckInterval 30000 # 设置检查间隔为30秒FFmpeg集成与流处理优化自适应流选择算法系统采用三级优先级算法选择最佳直播流画质优先级根据用户设置的quality参数lowest/low/medium/high/highest流格式优先级按streamPriorities配置的格式顺序如flv优先于hlsCDN源优先级按sourcePriorities配置的CDN提供商顺序FragmentMP4格式优化默认使用FragmentMP4格式进行录制结合以下FFmpeg参数实现抗损坏和实时播放支持-c copy -movflags frag_keyframe -min_frag_duration 60000000-c copy直接复制流避免重新编码带来的质量损失和性能开销-movflags frag_keyframe生成FragmentMP4格式支持边录边播具有更好的抗损坏能力-min_frag_duration 60000000设置最小分段时长为60秒减少moof boxes数量优化浏览器加载性能添加新录制频道界面提供完整的配置选项包括平台选择、画质设置、流格式和CDN源优先级配置满足专业用户的精细控制需求。鉴权系统与平台适配统一的鉴权接口设计系统为需要登录的平台提供统一的鉴权接口支持Cookie注入和浏览器自动登录两种方式interface ProviderAuthFlow { loginURL: string // 登录页面URL checkLoginResult: (data: { url: string cookies: { name: string; value: string; domain: string; path: string }[] }) { success: boolean; authConfig?: Recordstring, string } timeout?: number // 超时时间默认5分钟 }跨平台的浏览器登录实现鉴权系统通过依赖注入支持不同环境的浏览器登录Electron环境使用BrowserWindow打开登录页面HTTP Server独立运行使用Playwright Chromium进行自动化登录CLI环境同样使用Playwright Chromium适合无头环境鉴权配置持久化到manager.json的providerAuthConfigs字段应用启动时自动加载并注入到对应Provider的API层。开发与扩展指南项目结构与构建系统LiveAutoRecord采用pnpm 10 Workspaces Turborepo的monorepo架构包含11个独立的npm包live-auto-record/ ├── packages/ │ ├── manager/ # 核心调度引擎 │ ├── core/ # CLI和Server共享模块 │ ├── shared/ # 内部共享工具 │ ├── bilibili-recorder/ # B站平台插件 │ ├── douyu-recorder/ # 斗鱼平台插件 │ └── ... ├── apps/ │ ├── electron/ # Electron桌面客户端 │ ├── http-server/ # HTTP服务端 │ ├── cli/ # 命令行工具 │ └── web/ # Vue 3前端构建顺序由Turborepo自动管理shared → manager → core 4 recorders → cli http-server → electron支持增量构建和缓存加速。开发新平台插件的实现模式开发新直播平台支持需要实现RecorderProviderE接口主要关注三个核心方法URL匹配实现matchURL()方法识别平台特定URL模式频道信息解析实现resolveChannelInfoFromURL()从URL提取频道ID和基本信息录制器创建实现createRecorder()创建平台特定的录制器实例以B站插件为例录制流程包含以下关键步骤async function checkLiveStatusAndRecord({ getSavePath }) { // 1. 检查直播状态 const { living, owner, title } await getInfo(this.channelId) if (!living) return null // 2. 获取直播流地址 const { currentStream: stream } await getStream({ channelId: this.channelId, quality: this.quality, streamPriorities: this.streamPriorities, sourcePriorities: this.sourcePriorities }) // 3. 创建录制目录和元数据文件 const savePath getSavePath({ owner, title }) ensureFolderExist(savePath) // 4. 启动FFmpeg录制 const ffmpeg createFFMPEGBuilder(stream.url) .outputOptions(ffmpegOutputOptions) .save(savePath) // 5. 启动弹幕收集 const messageListener startListen(roomId, msgHandler) // 6. 监控录制过程 const timeoutChecker createTimeoutChecker(() { // 超时处理逻辑 }, 10000) return { stop: async () { /* 清理资源 */ } } }全局设置界面提供完整的系统配置选项包括保存路径规则、自动检查间隔、通知设置等支持根据平台和主播信息动态生成文件路径。技术栈与性能优化现代TypeScript技术栈运行时Node.js 22.0.0 TypeScript 5.8构建工具tsup (ESM CJS双输出) Turborepo桌面端Electron 40 electron-vite 5 Vuetify 3.11服务端Express 5 lowdb Server-Sent Events前端Vue 3.5 Vite 7 Tailwind CSS 4 Pinia 3录制核心fluent-ffmpeg ffmpeg-static性能优化策略异步节流写入使用asyncThrottle()包装数据库写入操作1秒间隔批量写入减少磁盘I/O事件防抖处理SSE事件推送使用同tick防抖避免频繁的客户端更新内存优化录制元数据使用流式写入避免大内存占用连接复用HTTP请求使用axios连接池减少连接建立开销实际部署与运维考虑系统要求与环境配置Node.js环境需要Node.js 22.0.0或更高版本FFmpeg依赖系统PATH中需要包含FFmpeg或使用内置的ffmpeg-static存储空间根据录制质量和频率预留足够磁盘空间网络带宽确保稳定的网络连接特别是多频道同时录制时多实例运行限制由于数据持久化基于JSON文件系统不支持多实例并发写入。CLI、HTTP Server、Electron客户端三者共享同一数据目录同一时间只能运行一个实例。系统提供端口检测机制8085端口避免冲突。录制质量与存储平衡系统支持从lowest到highest五种画质等级用户可根据存储空间和网络条件灵活选择。默认使用-c copy参数避免重新编码在保证质量的同时减少CPU使用率。对于需要长期存储的内容建议选择中等以上画质对于临时观看或网络条件受限的场景可选择较低画质。内置播放器基于DPlayer构建支持录制内容的直接预览和播放控制无需额外安装播放软件。播放器显示直播赛事内容包含队伍阵容和实时比分信息。扩展性与二次开发API集成与自动化脚本HTTP Server提供的REST API支持外部系统集成可用于自动化频道管理添加、删除、修改录制器录制状态监控和报警录制内容的后处理和分析与其他系统的数据同步自定义Provider开发开发者可以基于现有Provider实现模板快速添加新的直播平台支持。关键步骤包括实现平台特定的API客户端适配直播流获取逻辑集成平台弹幕协议如WebSocket或HTTP长轮询实现鉴权机制如需要数据导出与处理录制生成的JSON元数据文件包含完整的弹幕和礼物消息时间线可用于生成SRT字幕文件直播内容分析热门时段、互动频率等内容摘要生成与其他分析工具集成LiveAutoRecord通过其模块化设计、健壮的录制引擎和灵活的部署选项为直播内容采集提供了完整的技术解决方案。无论是个人用户的内容收藏还是专业团队的批量录制需求系统都能提供可靠的技术支撑。【免费下载链接】LiveAutoRecord基于 Electron 的多平台直播自动录制软件项目地址: https://gitcode.com/GitHub_Trending/li/LiveAutoRecord创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考