
如何解析B站entry.jsonBilibiliCacheVideoMerge中合集章节名与BV号提取实战指南【免费下载链接】BilibiliCacheVideoMergeAndroid上将bilibili缓存视频合并导出为mp4支持安卓5.0 ~ 13视频挂载弹幕播放(Android consolidates and exports the bilibilibili cache video to mp4, supports Android 5.0~13, and plays the video on the screen)项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMergeBilibiliCacheVideoMerge 是一款 Android 开源工具能将 B 站缓存视频合并导出为 MP4支持安卓 5.0~13并可在播放器上挂载弹幕。它的读缓存能力核心就是解析 B 站缓存目录下的entry.json文件——从里面提取合集名称、章节名称、BV号再配合audio.m4s、video.m4s完成合并。本文将带你读懂这份 JSON 的字段结构并跟着项目源码走一遍从 entry.json 到列表展示的完整提取流程 一、先认识主角entry.json 长什么样每个缓存视频目录里都有一个entry.json它是 B 站记录视频元信息的档案袋。项目测试目录里就放了一份真实样例样例文件entry.json对照样例重点字段一览字段位置作用示例值title一级视频大标题合集名来源《熊出没·雪岭熊风》主题曲MV……bvid一级BV号缺失时可用avid兜底BV1tW411b7G4avid一级老版 av 号拼接成av17771445兜底17771445cover一级封面图地址i1.hdslb.com/bfs/archive/…page_data.page二级第几 P章节索引1page_data.download_subtitle二级带 P 编号的副标题章节名来源…P1page_data.part二级章节别名兜底字段P1ep.index_title二级大会员番剧的章节标题第1话 注意普通视频走page_data番剧走ep两者结构不同——这正是解析代码里最需要兼容的地方。二、核心解析方法getCollectionChapterName 四步走所有名称提取逻辑集中在 FileTool.java 的getCollectionChapterNameByJsonStr方法中。它接收 JSON 字符串和一个长度为 4 的result数组约定如下result[0]合集名result[1]章节名result[2]封面地址result[3]BV号第 1 步解析封面与 BV号含 avid 兜底封面取自一级cover字段见 L198-L205解析失败不中断流程。BV号提取有个经典兜底设计L207-L223先读bvid若bvid为空或长度不足则用av avid拼出老版编号保证列表里始终有可展示的视频编号。第 2 步提取合集名称title 特殊字符清洗合集名直接取一级titleL226-L235但会先用一条正则把所有不适合做文件名的特殊字符引号、斜杠、全角标点、换行等全部剔除。这条正则定义在 LConstants.kt 的SPECIAL_CHARACTERS_REGULAR_RULE中。如果连title都取不到就用随机 UUID 顶替避免空值。第 3 步确定章节名page_data / ep 双通道这是最容易踩坑的一步L240-L300逻辑可以拆成 4 条规则优先级条件章节名来源①page等于 1直接用合集名代替单 P 视频没必要再标P1②存在page_data取download_subtitle再去掉开头的合集名前缀只留差异部分③只有ep番剧取index_title同样去前缀清洗④上述都没有回退到part字段再不行用 UUID 兜底去合集名前缀这个小细节很关键B 站的download_subtitle形如《某视频》P3去掉《某视频》后剩下P3列表展示才干净。第 4 步异常兜底策略贯穿全程整条链路采用解析失败不断链的思路每一步都用 try-catch 包裹失败时记日志并给 UUID 占位。这样即使遇到旧版 App 产生的残缺 JSON列表也能正常渲染只是名字变成一段随机码。三、路径映射entry.json 如何找到 audio.m4s 和 video.m4s有了元信息还要找到真正的媒体文件。FileTool.java 的getNeedPath会递归遍历章节目录按文件名精确匹配四类文件audio.m4s→ 音轨video.m4s→ 视频轨entry.json→ 元信息danmaku.xml→ 弹幕配套的 needSrcErrorHandle 会校验audio.m4s、video.m4s、entry.json是否齐全缺哪个就生成xx下没找到audio.m4s,…这样的提示——这也是用户反馈某集无法合并时最值得先检查的环节。四、解析结果的流向CacheFile 实体与两种管理器解析出的四元组最终装进数据实体 CacheFile.ktcollectionName合集名、chapterName章节名、bvId、coverUrl以及 audio/video/json/danmaku 的路径。跨页面传递时则使用支持 Parcel 序列化的 CacheDo.java。项目用策略模式区分两种读取来源本地路径模式PathCacheFileManager.kt 直接按文件路径扫描合集→章节两级目录对每个章节调用getCollectionChapterNameSAF/URI 模式UriCacheFileManager.kt 通过 ContentResolver 读文件URI 版解析入口见 UriTool.java内部仍复用同一个getCollectionChapterNameByJsonStr。两条通道殊途同归entry.json 是唯一的元信息来源。五、动手实践3 步复现这套提取逻辑想在自己的脚本或工具里复刻按这个最短路径走拿到样例数据clone 仓库git clone https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge直接打开 entry.json 作为测试输入按顺序取字段先title合集名清洗特殊字符→ 再bvid空则avavid→ 再判断page_data还是ep→ 最后取download_subtitle/index_title/part别漏两个坑page 1时章节名要回退成合集名章节名记得先做replaceFirst(合集名, )去前缀否则列表会出现标题 P3这种冗余显示。⚠️ 常见误区提醒❌ 只兼容page_data不兼容ep→ 番剧缓存全部解析失败❌ 忽略avid兜底 → 老缓存无bvid字段显示空编号❌ 不做特殊字符清洗 → 合并出的文件名带\/、【】等非法字符部分文件系统直接报错。小结entry.json虽然只有一个文件却浓缩了 B 站缓存的全部元信息title定合集、page_data/ep定章节、bvidavid定身份、cover定封面。BilibiliCacheVideoMerge 用多字段兜底 逐级降级的稳健解析策略把这份 JSON 变成了可合并、可展示、可播放的完整缓存列表——理解这套提取流程你也能轻松驾驭 B 站缓存目录的结构 解析核心utils/FileTool.java清洗正则utils/LConstants.kt数据实体entity/CacheFile.kt【免费下载链接】BilibiliCacheVideoMergeAndroid上将bilibili缓存视频合并导出为mp4支持安卓5.0 ~ 13视频挂载弹幕播放(Android consolidates and exports the bilibilibili cache video to mp4, supports Android 5.0~13, and plays the video on the screen)项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考