Commit Graph
311 Commits
Author SHA1 Message Date
Joftal 87fddfc357 feat:完善soop日志和注释 2026-03-15 13:23:41 +08:00
Joftal fe9565c54f feat:修改soop离线判定逻辑 2026-03-15 12:59:28 +08:00
Joftal d366a63e55 feat:更新部分错误日志说明和注释 2026-03-13 15:54:13 +08:00
Joftal b926af66a5 feat(webapp): 在 Cookie 管理中增加 SoopLive 登录面板
- 为 WebUI 增加 SoopLive 专属登录与 Cookie 管理面板
- 支持账号密码登录、手动 Cookie 校验与清空凭证
- 在编辑 Cookie 弹窗中接入 Soop 专属流程
- 新增 SoopLive 前端 API 封装与样式适配
- 优化移动端布局与交互状态管理
2026-03-13 15:43:33 +08:00
Joftal e3024826c9 feat(api): 新增 SoopLive 凭证管理与 Cookie 校验接口
- 新增 SoopLive 登录、Cookie 校验、凭证查询和清空接口
- 抽取 Cookie 更新后同步刷新 live options 的公共逻辑
- 在平台统计与 OSRP 能力声明中加入 sooplive
- 支持通过 OSRP 平台参数构造 Soop 播放页 URL
- 补充 Soop handler 相关测试
2026-03-13 15:43:21 +08:00
Joftal feb2b96aa0 feat(hls): 为 Soop HLS 增加 preloading 过滤代理
- 新增本地 HLS 代理,支持重写 m3u8 与媒体分片 URL
- 增加 preloading 分片过滤,避免录制到无效预加载片段
- 新增下载专用 HTTP 客户端,区分信息请求与下载请求代理
- 在录制器中为 SOOP 平台接入 HLS 过滤代理
- 补充下载客户端与 HLS 代理测试
2026-03-13 15:43:03 +08:00
Joftal f3092f502c feat(sooplive): 接入 SoopLive 平台核心实现与登录鉴权
- 注册 play.sooplive.co.kr 平台构建器
- 新增 sooplive_auth 配置结构与平台 URL 映射
- 实现 Soop 播放页解析、频道信息获取和 HLS 流获取
- 实现 Cookie 校验、账号密码登录换 Cookie 和自动续登逻辑
- 补充 Soop 核心单元测试与配置测试
2026-03-13 15:42:38 +08:00
kira1928 5f7dfa567e Merge pull request #1093 from bililive-go/fix/recorded-files-data-race
fix: 为 recordedFiles 添加互斥锁
2026-03-11 22:27:39 +09:00
kira1928 6e00cbdc50 排除特定情况下的潜在风险 2026-03-11 22:19:32 +09:00
kira1928 32ea16f58c 修复不停机升级时config结构变化导致重启后无法解析config的bug 2026-03-11 22:00:40 +09:00
kira1928 90d5cc1b11 fix: 为 recordedFiles 添加互斥锁,修复 accumulateRecordedFiles 与 SetInitialRecordedFiles 之间的数据竞争 2026-03-11 04:20:35 +09:00
kira1928 cec6382091 改善一个边缘情况下的多线程问题 2026-03-11 03:32:38 +09:00
kira1928 86bac8193d fix: 修复 RestartRecorder 中优雅更新检查逻辑,避免卡住 2026-03-11 02:47:58 +09:00
kira1928 567c52b808 修复review意见 2026-03-11 02:33:34 +09:00
kira1928 6c21fe7ee2 fix: RestartRecorder 竞态条件导致僵尸录制器不断请求
问题:RestartRecorder 分段重启时先释放锁再重新获取锁,
LiveEnd 事件处理器可能在间隙看到录制器不存在的中间状态,
导致 HasRecorder 返回 false,新建的录制器永远不会被移除。

修复:在锁内完成 map 的原子替换(取出旧 recorder + 创建新 recorder),
外部观察者始终能看到录制器存在。CloseForRestart 等耗时操作在锁外执行。
addRecorderLocked 失败时恢复旧 recorder 避免数据丢失。

测试:通过已有的 newRecorder 注入点实现确定性并发编排,
验证 LiveEnd 的 HasRecorder 在锁释放后看到的是 restart 完成后的状态。

Closes #1089
2026-03-11 01:58:27 +09:00
kira1928 85a6ee583c 修复freebsd编译错误 2026-03-11 01:07:16 +09:00
kira1928 050415c3f7 更新编译平台白名单 2026-03-11 01:01:30 +09:00
kira1928 93cd3eef7b 优化CI缓存 2026-03-11 00:50:50 +09:00
kira1928 c66d0da5cd 增加内存统计类型,优化github发布流程 2026-03-10 23:02:44 +09:00
kira1928 ee140934c4 Merge remote-tracking branch 'origin/master' into feature/refine-docker-image-build-process 2026-03-10 20:03:25 +09:00
Joftal d59d2ac238 修复分时和直播间改名摘要推送功能没有统一结束录制后再推送的问题 2026-02-26 02:17:43 +08:00
Joftal 0b9889973d 循环逻辑优化 2026-02-25 19:21:06 +08:00
Joftal cbe31a2964 修改构建错误 2026-02-25 19:18:12 +08:00
Joftal 7a069c254c 统一bark日志书写 2026-02-25 19:14:02 +08:00
Joftal 3cc9d7089c 录制摘要通知改为下播后统一发送,解决分段会频繁推通知 2026-02-25 18:37:23 +08:00
Joftal 0a65c225be 新增录制摘要通知,推送本次录制结果:录制文件名、大小 2026-02-25 17:14:45 +08:00
Joftal 120d3aeaa7 新增Bark推送功能 2026-02-25 16:09:53 +08:00
Joftal 033d812393 优化视频大小分割输入框智能化,支持输入Xmb、XGB格式 2026-02-25 14:20:22 +08:00
Joftal 850a9db269 addLives 和 putRawConfig 提前获取 inst,消除链式调用的 nil panic 风险 2026-02-25 10:47:12 +08:00
Joftal d46b8d25b3 修复循环监控时间失效的问题 2026-02-23 20:09:37 +08:00
kira1928 f8129a5d07 继续根据review意见进行修改 2026-02-22 02:54:25 +09:00
kira1928 c63deb5c5a 根据review意见进行修复 2026-02-22 02:30:54 +09:00
kira1928 adbcb3063f 优化CI 构建 docker image流程 2026-02-22 02:12:26 +09:00
kira1928 943aaf1844 录制失败时醒目提醒 2026-02-20 05:57:00 +09:00
kira1928 3d73e8d70a 新增录制时自动解析实际分辨率显示在webui;添加直播流 url 和 header 信息到 webui;修复统计界面的部分bug 2026-02-20 04:15:10 +09:00
kira1928 8d38c5e0ba 新增并发测试 2026-02-19 17:54:41 +09:00
kira1928 1c7547081d 默认启用崩溃检测 2026-02-19 17:50:36 +09:00
kira1928 185785cd44 使用实例取代指针,彻底杜绝空指针问题。 2026-02-19 17:36:23 +09:00
kira1928 507e7c286b 解决inst.Lives 线程安全问题 2026-02-19 17:11:00 +09:00
kira1928 4c0d2fa6b6 完善自动更新功能 (#1073)
* 完善自动更新功能

* 修复 CI error

* 根据review意见更新代码

* 修复e2e CI
2026-02-18 02:19:53 +09:00
kira1928 1cdf122995 完善自动更新功能 2026-02-05 00:30:13 +09:00
15b0b12777 0.8.0/dev (#1061)
* Initial plan

* Initial plan for hierarchical configuration system

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Implement hierarchical configuration system with platform and room-level overrides

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Add config validation, platform key mapping, and hierarchical config example

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Add enhanced GUI configuration interface with hierarchical config support

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Complete implementation with documentation and working web UI demo

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 根据反馈完善层级配置系统:移除二进制文件,更新中文界面,支持所有直播平台

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 改进配置界面:添加YAML解析库,输出模板预览和详细工具提示

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 完善监控列表界面:增加直播间详细信息展开功能

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 修复后端API支持和前端功能,添加日志查看功能

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 修复前端编译错误,调整优化package.json

* 实现真实的层级配置系统:添加日志存储,解析配置,更新所有组件使用解析后配置

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 实现层级配置系统:支持平台级设置、中文GUI界面、监控详情展示和真实数据后端

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 实现真实的平台访问频率限制功能

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 为所有主要直播平台添加访问频率限制支持

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 完成层级配置系统:平台访问频率限制功能全面实现

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 实现层级配置系统:支持平台级设置、中文GUI界面、监控详情展示、真实数据后端和统一访问频率限制

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 修复CI lint错误:添加webapp默认构建文件

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* feat: 新增ntfy通知功能

* feat: 添加停止录制时的ntfy推送通知

* 优化ntfy推送通知

* Update src/notify/ntfy/ntfy.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix test error

* 为每个直播间分别保留一组直播间自己的log信息,供前端取用。
前端监控列表的详细信息现在由SSE实时更新。
为详情页面的日志增加了一些便利功能。

* 升级antd v3 -> v6

* 升级 react-router-dom v5-> v6

* 优化层级设置UI,访问频率限制逻辑等

* code refine

* fix CI error

* Fix CI error

* Fix CI error

* Fix "Component state update uses potentially inconsistent value" issue

* 根据代码review修复问题:替换废弃方法,添加null检查,修复state更新和变量使用

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 修复CI编译错误:添加default构建文件并修正handler.go中的变量引用

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Initial plan

* Implement real-time countdown for next GetInfo request

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Add real-time download speed display for recording streams

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Fix setState callbacks to return prevState instead of null

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Use safe type assertion for RecorderManager to prevent panic

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Address PR review comments: add periodic SSE broadcast, fix optional chaining, cleanup memory leaks

- Add periodic (3s) broadcast of recorder status via SSE for real-time download speed updates
- Use optional chaining (?.) for safer recorder_status.speed access
- Remove redundant nil check for recorder in GetRecorder
- Clean up countdownTimers state when rows are collapsed to prevent memory leak
- Use Math.ceil() for countdown initialization to avoid premature "available" display
- Set up broadcast callback in server initialization to avoid circular dependencies

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Fix race condition and improve comments in status broadcaster

- Add sync.WaitGroup to ensure broadcaster goroutine exits cleanly
- Update comments to reflect callback-based implementation
- Ensure proper cleanup sequence in Close() method

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Improve error handling in recorder status retrieval

- Add warning log when GetStatus() fails for better observability
- Simplify logic by assigning status regardless of nil value
- Helps with debugging recorder status issues

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Improve countdown display and download speed formatting

- Add SSE list threshold config (default 50 rooms) in RPC settings
- Change download speed format from "0.562x" to "MB/s" or "KB/s" based on bitrate
- Update recorder status broadcast interval from 3s to 5s
- Fix countdown display: use "距离下次刷新" instead of "距下次GetInfo请求"
- Change "立即可用" to "正在刷新" for better UX
- Implement auto-calibrating countdown that adjusts with SSE updates
- Track last update times to maintain accurate countdown state

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Add list-level SSE subscription with configurable threshold

- Enable SSE for live room list by default when room count < threshold
- Automatically switch to detail-only SSE when list exceeds threshold
- Update SSE subscription strategy dynamically when rooms added/removed
- Wildcard SSE subscription ('*') receives all live_update events
- List refreshes automatically when receiving SSE updates
- Clean up list-level subscription on component unmount

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* 任务系统 init

* 新增任务列表,直播事件功能和对应数据库

* 修复新增功能前后端bug

* 暂时commit部分修改内容,还未充分检查

* 0.8.0/dev (#1059)

* 优化视频播放界面,新增退出视频播放按钮(支持ESC退出)

* 文件列表新增文件重命名和删除操作,支持批量操作

* 设置界面引入前端校验,确保前后端参数一致性,之前前端非法参数可以保存到后端config,如最小录制时长。本次修改在前端加入校验提示,非法参数直接拦截并提示有效值

* 哔哩哔哩cookie功能优化,新增扫码登录和验证机制

* 哔哩哔哩cookie界面优化

* fix code review

* 修复重命名、删除、批量操作的越权问题

* 表单验证间隔检测规则保持这里为0

* 完善报错

* 回滚误改的listening_count

* 修改文案

* 修复哔哩哔哩cookie界面api反复调用问题

* 补充console

* 重复的 ESC 键监听器问题修复

* 修复cookie潜在的内存问题

* cookie错误处理日志

* 错误日志改进

* 补充注释

* 调整文件编码转义,支持特殊字符,国际化,emojy等

* 修复--rsp是ReadableStream,只能读一次。如果 rsp.json() 失败后再去 rsp.text() 会失败。所以原始代码 clone 了一个 response 使用。

* 实现直播流选择,可选画质设置

* ci: 对齐版本、修复 lint 警告并添加开发工具模板

版本对齐:
- 将 CI 中的 Go 版本从 1.24 更新到 1.25 (匹配 go.mod)
- 将 Node.js 配置改为使用 .node-version 文件 (v20.10.0)
- 升级 actions/setup-go 到 v5, actions/setup-node 到 v4

Lint 修复:
- 修复 staticcheck 警告 (S1039, ST1023, S1009, QF1008)
- 删除未使用的函数:
  - recorder.go: renderUploadPath, logAvailableStreams, extractRoomID
  - store.go: getIntFromMap, getFloat64FromMap
  - runjob_windows.go: runWithKillOnClose
- 重新生成 mock 文件

开发环境:
- 添加 VS Code 调试配置模板 (.vscode/launch.example.json)
- 更新 .gitignore 支持本地 launch.json 自定义
- 更新 README 添加使用说明

* feat: 添加版本统计、更新器增强与开发环境改进

版本统计:
- 新增 telemetry 包,仅统计程序版本号
- 用于了解用户更新程序的整体趋势
- 不收集平台、架构或任何其他个人数据

更新器增强:
- 实现 SHA256 校验和验证,确保下载完整性
- 支持 tar.gz 和 zip 压缩包解压
- 优先使用 bililive-go.com 代理,回退到 GitHub 直连

开发环境:
- 升级 Go 版本到 1.25
- 新增 tools/devtools.go 管理开发工具依赖 (delve, gopls, staticcheck)
- Makefile 添加 help 命令
- 新增 test/ 目录和 launcher 测试基础设施

* fix: 修复前端 ESLint 警告并启用严格模式构建

ESLint 修复:
- config-info/index.tsx: 移除未使用的 useNavigate 和 addPlatformVisible
- history-panel/index.tsx: 移除未使用的 List、UserOutlined、HistoryResponse
- live-list/index.tsx: 移除未使用的 Modal

构建配置改进:
- 默认 build 命令使用 CI=true 模式,警告视为错误
- 添加 cross-env 依赖实现跨平台环境变量设置
- 添加 yarn lint 命令进行独立 ESLint 检查
- ESLint 配置中将 no-unused-vars 规则设为 error

这确保本地开发与 CI 行为一致,尽早发现代码问题

* 删除未使用的golang函数

* feat: 添加 Playwright E2E 测试框架

- 集成 Playwright 进行端到端测试
- 使用 osrp-stream-tester 作为测试流服务器
- 添加基础 UI 测试和直播录制测试用例
- 创建 GitHub Actions E2E 测试工作流
- 更新 Makefile 添加测试相关命令

使用方法:
- make install-e2e  # 安装测试依赖
- make test-e2e     # 运行 E2E 测试
- make test-e2e-ui  # 带 UI 运行测试

* fix: 添加 package-lock.json 以修复 CI

* feat: 添加 Playwright E2E 测试框架、相关测试用例和 GitHub Actions 工作流。

* ci: 新增 Playwright E2E 测试工作流。

* feat: 添加 Playwright E2E 测试 GitHub Actions 工作流。

* feat: 添加 E2E 测试的 GitHub Actions 工作流。

* feat: 添加端到端测试以及对应的 GitHub Actions CI 工作流

* feat: 新增录制功能的端到端测试

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>
Co-authored-by: July <31428852+onlyjuly@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Joftal <42807405+Joftal@users.noreply.github.com>
2026-01-31 03:44:14 +09:00
Copilotandkira1928 4b2b515222 Enable weak TLS 1.2 cipher suites for edgesrv.com domains (#1050)
* Initial plan

* Add TLS cipher suite support for edgesrv.com with error logging

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Refactor TLS config: extract shared function and improve error detection

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Further refine TLS error detection and extract hostname helper

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Fix ineffassign lint error in NewBaseLive function

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Address code review feedback: use DialContext, improve TLS error detection, extract common logic

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Address code review: improve TLS handling, add tests, enhance transport config

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Refine TLS config: remove duplicate init, optimize warning log, remove unnecessary GCM ciphers

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Fix race condition in ByteCounter creation with atomic GetOrCreateConnCounter

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Use sync.Once for edgesrv warning log instead of mutex+bool

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

* Extract HTTP transport config to newProductionTransport helper function

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>
2026-01-03 01:36:54 +09:00
Copilotandkira1928 31613152da Change default RPC bind from 127.0.0.1:8080 to :8080 (#1049)
* Initial plan

* 将默认 RPC bind 地址从 127.0.0.1:8080 改为 :8080

Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kira1928 <2352900+kira1928@users.noreply.github.com>
2026-01-01 19:40:17 +09:00
kira1928 0fb23db4b0 把config和logger改为全局实例,另外保留config yml文件内的注释文本 (#1048)
* 把config和logger从instance成员改为全局实例

* 保留config.yml文件内的注释文本;修复之前漏掉的一些logger调用代码

* code refine

* code refine
2025-12-31 22:14:59 +09:00
kira1928 dd26a4bce1 修复 lint ci error 2025-11-02 21:11:28 +09:00
kira1928 10d1b13069 feat: 更新配置处理逻辑以支持动态设置AppDataPath和只读工具目录 2025-10-26 22:19:16 +09:00
kira1928 0f1e59b6bb feat: 更新remotetools依赖至v0.3.3;增强Dockerfile以支持容器内工具目录配置;添加isInContainer函数以判断运行环境 2025-10-26 21:49:53 +09:00
kira1928 630beb7ea1 feat: 更新remotetools依赖至v0.3.2;添加ToolRootFolder配置以支持可写工具目录;更新LiveInfo组件以显示Docker相关信息 2025-10-26 18:39:28 +09:00
kira1928 aa9cb5eaa0 feat: 更新依赖和配置以支持内置工具同步;升级多个GitHub Actions和Docker相关依赖 2025-10-26 00:37:45 +09:00