
Streambed IPC通道参考所有主进程通信事件与参数速查表【免费下载链接】streambertA cross-platform Electron Desktop App to stream and download any Movie, TV Series or Anime in the World. Zero Ads and Tracking项目地址: https://gitcode.com/GitHub_Trending/st/streambertStreambert是一款跨平台 Electron 桌面应用可流媒体播放和下载全球电影、剧集与动漫主打零广告、零追踪。它的功能之所以丰富核心在于渲染进程与主进程之间大量经过精心设计的IPC 通道Inter-Process Communication。本文整理出 Streambert IPC 通道参考按功能分组列出所有主进程通信事件、触发方向与参数速查表帮助新手和普通用户快速理解每个通道谁调用谁、传什么参数、返回什么结果。先看架构IPC 是怎么组织的Streambert 的进程通信集中在两个入口文件文件作用preload.js通过contextBridge向页面暴露安全的window.electronAPI是渲染进程唯一能摸到主进程的大门index.js主进程入口创建窗口、配置会话、广告拦截并在 src/ipc/ 各模块上注册全部ipcMain.handle通道各功能模块的处理器源码分布下载管理src/ipc/downloads.js播放器与窗口控制src/ipc/player.js字幕搜索与下载src/ipc/subtitles.js加密密钥存储与定时备份src/ipc/storage.js动漫剧集解析AllMangasrc/ipc/allmanga.js拦截统计src/ipc/blockStats.jsDiscord 富状态src/ipc/discordRpc.js每个通道都遵循同一套命名约定invoke系列请求-响应由渲染进程主动调用on/off系列主进程推送用于主进程主动通知渲染进程如onDownloadProgress/offDownloadProgress。媒体捕获通道m3u8 与字幕流自动嗅探这是 Streambert 最魔法的部分。主进程在 index.js#L140-L186 通过webRequest拦截网络请求一旦嗅探到媒体流就推送给渲染进程通道方向参数说明m3u8-found主 → 渲染url字符串捕获到 m3u8 播放地址供播放器接管或下载subtitle-found主 → 渲染{ url, lang }捕获到 .vtt/.srt 字幕lang从 URL 解析渲染进程通过 preload.js#L4-L18 的onM3u8Found(cb)/onSubtitleFound(cb)订阅用完调用对应的off方法解绑。下载管理通道速查表下载是 Streambed 使用频率最高的 IPC 场景全部通道注册在 src/ipc/downloads.js通道参数返回值说明check-downloaderfolder下载器目录{ exists, reason }或{ exists, token }校验下载器二进制是否存在有效时签发一次性 token真实路径永不离开主进程run-download{ token, m3u8Url, name, downloadPath, mediaId, mediaType, season, episode, posterPath, tmdbId, subtitles }启动结果启动下载子进程token 换取受信任的二进制路径download-progress{ id, progress, speed, size, ... }—主 → 渲染推送解析下载器/ffmpeg 输出后实时推送进度get-downloads无下载列表读取全部下载记录delete-download{ id, filePath }删除结果删除单条下载及文件delete-all-downloads无清理结果一键清空全部下载get-downloads-size无占用字节数统计下载目录体积show-in-folderpath—在资源管理器/访达中定位文件file-existspath布尔判断文件是否存在scan-directorypath文件列表扫描目录生成媒体库一个值得新手学习的细节check-downloader返回的不是路径而是token见 downloads.js#L211-L216真实路径只保存在主进程内存的trustedBinaryPaths中从架构上杜绝了渲染进程伪造任意路径执行命令。字幕通道从搜索到随文件下发字幕相关通道注册在 src/ipc/subtitles.js渲染进程入口见 preload.js#L114-L120通道参数说明search-subtitles{ tmdbId, mediaType, season, episode, languages, subdlApiKey, wyzieApiKey }并行查询 SubDL 与 Wyzie 两个字幕源get-subtitle-url{ fileId }生成字幕直链download-subtitles-for-file{ downloadId, ... }为某条下载记录批量下载字幕delete-subtitle-file{ downloadId, subtitlePath }删除已下载的字幕文件prune-subtitle-paths{ downloadId }清理失效的字幕路径引用字幕搜索走主进程fetch天然绕过浏览器 CORS 与反爬限制——这也是 Streambert 把网络请求尽量放在主进程的原因。动漫剧集解析通道主进程代劳的 HTTP 请求动漫AllManga解析是典型的渲染进程搞不定、必须主进程代劳的场景通道参数说明resolve-allmanga{ title, seasonNumber, episodeNumber, isMovie, translationType }解析出可直接播放的视频地址内置分季映射表与硬编码 showIdset-player-video{ url, referer, startTime }返回{ playerUrl }主进程启动本地代理服务器中转视频流debug-allmangaargs输出解析调试信息便于排查源码见 src/ipc/allmanga.js#L769-L776其中set-player-video会在本机 127.0.0.1 上拉起一个代理服务器用来携带正确的 Referer 头绕过源站校验。窗口控制与系统交互通道Streambert 在 Windows 上使用自定义标题栏src/components/WindowTitlebar.jsx因此窗口操作也要走 IPC通道参数说明window-minimize/window-toggle-maximize/window-close无最小化 / 切换最大化 / 关闭window-is-maximized无查询当前最大化状态window-maximizedboolean主 → 渲染推送状态变化时更新标题栏图标get-platform无返回process.platform前端据此适配 UIopen-externalurl用系统浏览器打开外部链接open-pathfilePath用系统默认程序打开文件open-path-at-time{ filePath, seconds, subtitlePaths }用 VLC/mpv 从指定秒数续播附带字幕文件路径会做白名单校验pick-folder无弹出原生文件夹选择框get-install-path无返回应用安装位置get-video-durationfilePath调用 ffprobe 获取视频时长quit-app无请求退出应用show-notification{ title, body, silent }触发系统原生通知confirm-close{ count }主 → 渲染推送有 N 个下载进行时请求关闭确认close-responseconfirmed渲染 → 主回复确认后杀掉全部下载进程并退出confirm-close/close-response构成一个漂亮的双向协商案例完整实现见 index.js#L288-L307。播放器清理与存储维护通道通道参数说明player-stopped无send单向播放页卸载时通知主进程销毁播放器 webview、清空缓存并触发 GC是 Streambert 低内存占用的关键query-video-progresswebContentsId主进程递归遍历所有嵌套 iframe 查询播放进度突破跨域同源限制见 player.js#L649-L693get-cache-size/get-downloads-size无分别查询缓存与下载占用clear-app-cache/clear-watch-data/reset-app无分级清理仅缓存 → 观看记录 → 全量重置webview-enter-fullscreen/webview-leave-fullscreen无主 → 渲染推送播放器 webview 进入/退出全屏时同步 UIplayer-stopped的三步清理逻辑销毁 WebContents → 冲刷 HTTP/着色器缓存 → 主渲染双端 GC写在 index.js#L335-L367。画中画Pop-out弹出窗口通道Streambert 支持把正在播放的流媒体弹到独立小窗始终置顶相关通道注册在 index.js#L386-L488通道参数说明open-pip-window{ url, title }创建 640×360 置顶窗口加载指定 URL已有窗口则复用并跳转close-pip-window无关闭弹出窗口get-pip-webcontents-id无返回弹出窗口的 webContents id供进度查询使用pip-window-opened/pip-window-closed无主 → 渲染推送主窗口据此暂停/恢复自己的播放popout-window-minimize等 4 个无弹出窗口自定义标题栏的按钮通道由 popout-preload.js 桥接安全存储、Wyzie 兑换与定时备份通道通道参数说明secure-store-getkey从 OS 级加密存储safeStorage读取密钥返回{ value }secure-store-set{ key, value }写入密钥值为空则删除该键wyzie-open-redeem无打开 Wyzie 兑换页wyzie-validate-keykey校验兑换码get-scheduled-backup-settings/set-scheduled-backup-settingssettings读写定时备份配置频率、保留份数、路径perform-scheduled-backup{ data, settings }执行备份并自动清理超出保留份数的旧备份scheduled-backup-requested无主 → 渲染推送应用启动后判定该备份了通知前端发起导出备份文件的生成与轮转逻辑见 src/ipc/storage.js#L202-L258。自动更新、拦截统计与 Discord 通道通道参数说明detect-update-format无按平台返回exe/dmg/deb/pacman/appimagedownload-and-install-update{ url, format }校验来源域名白名单后下载并安装更新包cancel-update无中止正在进行的更新下载update-progress{ ...进度 }主 → 渲染推送更新下载进度fetch-release-image{ url }安全抓取更新日志里的截图blocked-stats-update{ total, domains }主 → 渲染推送被拦截广告/追踪器的批量增量250ms 防抖get-block-stats无获取历史拦截总量与域名分布discord-rpc-set-enabledenabled开关 Discord 富状态默认关闭discord-rpc-update-activityactivity上报正在看 XXX状态拦截统计的内存累计 250ms 批量推送 3 秒防抖落盘策略是处理高频事件的优秀范例见 src/ipc/blockStats.js#L48-L82。其他杂项通道一览通道说明get-app-version从 Electron 读取 package.json 版本号storage.js#L170audio-device-changed仅 macOSnavigator.mediaDevices检测到音频设备切换时上报用于 HDMI 切屏后的音频恢复总结这套 IPC 设计给新手的三个启示方向分离请求-响应用invoke状态推送用send/on命名一目了然onXxx必配offXxx敏感逻辑留在主进程媒体嗅探、代理服务器、二进制路径校验、密钥加密渲染进程拿到的都是结果而非能力高频事件先聚合再推送下载进度、拦截统计都做了解析与防抖避免 IPC 风暴拖垮界面。如果你想动手研究建议从 preload.js 入手——它是整张速查表的目录按功能注释分区对照本文的表格逐行阅读半小时就能通读 Streambert 全部主进程通信事件与参数。【免费下载链接】streambertA cross-platform Electron Desktop App to stream and download any Movie, TV Series or Anime in the World. Zero Ads and Tracking项目地址: https://gitcode.com/GitHub_Trending/st/streambert创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考