
Bilibili-Evolved 定制自动连播行为分场景配置番剧、分P、合集与推荐视频的连播策略【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved导读定制自动连播行为customAutoPlay是 Bilibili-Evolved 增强脚本中用于精细控制哔哩哔哩视频页面自动连播逻辑的组件。B 站原生的自动连播开关是全局一刀切的无法区分多 P 视频番剧收藏夹稍后再看等不同视频类型分别决策。本组件将自动连播拆分为 7 种视频类型独立配置并内置了类型冲突时的优先级裁决逻辑让多 P 视频连播到最后 1P 停止番剧播完最后一集不跳推荐等精细化需求变成可选配置项。读完本文你将掌握每种视频类型的连播行为语义、三种行为值自动/禁用/总是的差异、推荐视频列表第一个的特殊优先级规则以及从源码层面理解该组件的处理器注册、匹配与执行机制。组件定位与适用场景该组件属于 Bilibili-Evolved 的 video 分类组件其入口元数据定义在 registry/lib/components/video/player/custom-auto-play/index.ts 中核心特征如下displayName为定制自动连播行为urlInclude覆盖了videoUrls与bangumiUrls两类页面即普通视频页与番剧页只有在这两类页面中组件才会被注入执行组件内部维护了一个处理器Handler注册表registerHandlers()一次性注册 7 个处理器分别对应 7 种可独立配置的视频类型每次视频切换导航变化或组件选项变化时都会重新初始化脚本重新匹配当前页面适用的处理器并应用连播策略实现动态跟随。组件注册的 7 个处理器及其对应类型见下表处理器类类型文件BangumiAutoplayHandler番剧handlers/BangumiAutoplayHandler.tsFavoriteAutoplayHandler收藏夹handlers/FavoriteAutoplayHandler.tsMultipartAutoplayHandler分P视频handlers/MultipartAutoplayHandler.tsPlaylistAutoplayHandler视频合集handlers/PlaylistAutoplayHandler.tsWatchLaterAutoplayHandler稍后再看handlers/WatchLaterAutoplayHandler.tsRecommendAutoplayHandler推荐视频接下来播放handlers/RecommendAutoplayHandler.tsRecommendListAutoplayHandler推荐视频列表第一个handlers/RecommendListAutoplayHandler.ts三种自动连播行为值每个视频类型都有独立的配置项可选值由枚举AutoplayActionType定义见 AutoplayActionType.ts自动智能判断模式。核心逻辑参考传统连播模式传统连播模式组件的行为即推荐视频都不自动连播而多 P 视频番剧、多 P 列表、收藏夹等会连播到最后一 P 停止。这是大多数场景下的默认推荐值。禁用完全关闭该类型视频的自动连播当前视频播放结束后不再跳转到下一项。总是无条件自动连播具体行为由 B 站本身的播放逻辑决定。例如分P视频设置为总是时分 P 播完后会继续自动连播到推荐视频而番剧设置为总是时仍会遵循 B 站番剧页的逻辑播到最后一集停止。从源码看三者的判定收敛在基类 BaseAutoplayHandler.shouldAutoplayWithAutoHandler 中ALWAYS直接返回trueDISABLE直接返回falseAUTO则交给每个处理器自带的回调autoTypeHandler做精细化判断。例如分 P 视频、收藏夹、稍后再看等类型在自动模式下的回调是() !this.isLastSequentialNumber()——即当前不是最后一 P 才连播而两类推荐视频在自动模式下回调固定返回false永不自动连播与文档中推荐视频都不自动连播的说明完全一致。配置项一览与默认值index.ts中options字段定义了 7 个下拉配置项全部以dropdownEnum: AutoplayActionType渲染为三选一下拉菜单。默认值如下配置项option 名显示名默认值bangumiAutoplayAction自动连播行为-番剧总是ALWAYSfavoriteAutoplayAction自动连播行为-收藏夹自动AUTOmultipartAutoplayAction自动连播行为-分P视频自动AUTOplaylistAutoplayAction自动连播行为-视频合集自动AUTOwatchLaterAutoplayAction自动连播行为-稍后再看自动AUTOrecommendAutoplayAction自动连播行为-推荐视频接下来播放自动AUTOrecommendListAutoplayAction自动连播行为-推荐视频列表第一个自动AUTO值得注意的是番剧的默认值与其他类型不同默认即为总是。也就是说在不做任何修改的情况下番剧页会保持 B 站原生播完当前集继续播下一集、最后一集停止的行为而分 P、收藏夹、合集、稍后再看等默认采用自动智能判断。页面匹配机制处理器如何认出当前页面组件每次执行时会调用BaseAutoplayHandler.getHandlers()遍历已注册的 7 个处理器逐个执行各自的match()方法把匹配当前页面的处理器收集起来见 BaseAutoplayHandler.ts 的静态方法。各处理器的匹配逻辑各不相同番剧页面 URL 命中bangumiUrls中的任意模式收藏夹 / 稍后再看URL 分别命中favoriteListUrls/watchlaterUrls分P视频URL 命中普通视频页且 DOM 中存在.video-pod .multip分 P 列表与.video-pod .auto-play .switch-btn自动连播开关视频合集URL 命中普通视频页且存在.video-pod .section合集列表同时界面是带自动播放切换按钮的旧版或带订阅合集按钮的新版之一见isLegacyLayout/isNewLayout推荐视频接下来播放普通视频页存在.recommend-list-v1 .switch-btn开关推荐视频列表第一个URL 命中普通视频、番剧、收藏夹或稍后再看任一页面且页面中存在推荐列表首个视频链接.rec-list .pic a等选择器见getFirstRecommend()。匹配成功后组件会依次调用每个处理器的shouldAutoplay()判断是否应连播并最终通过setupAutoPlay(enable)落地到页面。落地方式分为两种多数类型通过操作页面右上角的自动连播开关按钮调用 Vue 实例的setContinuousPlay见setupAutoPlay_SwitchBtn而番剧与新版合集界面则通过点击播放器设置浮窗内的播放方式单选按钮setupAutoPlay_Player连播为 value0单集为 value2。优先级说明推荐视频列表第一个的特殊规则自动连播控制是一个互斥动作——同一时刻页面只能有一个生效的连播策略因此多个处理器同时匹配时必然存在优先级冲突。当前机制中唯一会与其他类型同时出现的类型就是推荐视频列表第一个它的优先级规则如下在所有匹配的处理器中只有第一个判定为应该连播的处理器会被启用其余全部被置为不连播见initScript中enableHandler与disableHandlers的分类逻辑推荐视频列表第一个的优先级是最低的它要生效必须同时满足两个条件自身设置为总是且其他匹配类型不是总是若其他类型也设置为总是则其他类型优先生效推荐视频列表第一个的设置被忽略。从实现上看RecommendListAutoplayHandler.shouldAutoplay()中自动模式固定返回false只有在总是时才返回true同时由于处理器注册顺序中它排在最后天然位于getHandlers()返回列表的末尾因此在initScript的首个应连播处理器抢占逻辑中天然处于劣势这从代码结构上印证了最低优先级的设定。当它被启用时实现方式是监听video元素的ended事件一次性播放结束后直接跳转到推荐列表第一个视频的链接onVideoEnded中调用window.location.assign。联动行为示例表当推荐视频列表第一个设置为总是时它在匹配页面上会与其他类型以分P视频为例联动最终行为取决于另一类型的设置见下表设置分P视频最终联动行为自动连播下一 P播完所有 P 后连播推荐视频禁用当前分 P 播放完后自动连播推荐视频总是保持分p视频类型原行为具体参考自动连播行为中的说明即分 P 播完会继续连播但推荐视频的跳转策略被分 P 的总是覆盖视频合集内嵌分P的特殊规则视频合集Playlist类型有一层更细的联动逻辑文档与源码PlaylistAutoplayHandler.ts均给出了明确语义视频合集的某个分集内部如果再内嵌分 P那么分集内部的 P 与 P 之间切换由分P视频multipart的设置控制当前分集播放到最后一 P 后是否继续进入下一个分集才由视频合集playlist的设置控制。源码中shouldAutoplay()通过getNestedMultipartProgress()解析当前 BV 号在合集列表中对应的分集条目读取其内嵌.page-list .page-item数量以及 URL 中的p参数判断是否处于分集内部的中途位置若当前页小于内嵌总页数则回落到multipartAutoplayAction配置自动时返回true即分集内部默认继续连播下一 P否则才依据playlistAutoplayAction决定是否进入下一分集自动时以当前分集是否最后一集为判断依据即!this.isLastSequentialNumber()。同时新版合集界面通过播放器设置浮窗内的单选按钮setupAutoPlay_Player实施控制旧版界面则复用右上角开关setupAutoPlay_SwitchBtn兼容两种 B 站界面布局。从源码理解整体执行流程综合 index.ts 与处理器实现组件一次完整的刷新连播策略流程可以归纳为等待播放器就绪playerReady()并取出所有匹配当前页面的处理器getHandlers()逐个调用shouldAutoplay()将结果分类为应启用与应禁用两组同时保证只有第一个应启用的处理器真正生效先统一执行禁用操作避免后执行的启用被覆盖再对选中的处理器执行启用操作监听右侧面板.right-container-inner、.playlist-container--right或.plp-r的子节点变化经lodash.debounce(initScript, 1000)防抖后重新执行上述流程以响应 SPA 内的视频切换对每个配置项注册addComponentListener用户在设置面板修改任一选项时立即重新初始化脚本。值得注意的实现细节是基类在自动模式下判断最后一 P依赖各子类覆写的getSequentialNumberString()与parseSequentialNumbers()——分 P 与合集读取.video-pod__header .amt形如1/10收藏夹与稍后再看读取.list-count番剧则读取.plp-r span[class^eplist_ep_list_progress]而番剧的 PV、小剧场等没有分 P 序号的条目会退化为按播放图标所在条目是否还有下一个兄弟元素来判断是否最后一集见BangumiAutoplayHandler.isLastSequentialNumber的覆写逻辑。这些 DOM 选择器与 B 站页面结构强相关若 B 站改版组件需要同步适配。使用建议与注意事项若希望多 P 视频 / 番剧 / 收藏夹 / 稍后再看都严格连播到最后一项即停、绝不跳推荐保持各类型为自动即可无需额外设置若希望分 P 播完后继续连播推荐视频请把分P视频设为总是若希望在番剧页保持 B 站原生最后一集停止的同时又不想被推荐视频打断注意番剧默认即为总是这与推荐视频列表第一个的最低优先级规则结合后番剧播完不会跳转推荐由于推荐视频列表第一个的生效条件苛刻自身总是 其他类型非总是它更像一个兜底策略而非常规配置使用前请先确认当前页面匹配了哪些其他类型该组件依赖 B 站页面特定的 DOM 结构与 Vue 实例接口如setContinuousPlay、播放器设置浮窗单选按钮仅适用于组件urlInclude覆盖的视频页与番剧页。文章内容以 custom-auto-play/index.md 的功能说明为骨架并结合 custom-auto-play/index.ts、AutoplayActionType.ts 及handlers/目录下 7 个处理器源码交叉印证读者可在设置面板的视频 → 播放器分类下找到本组件并即时体验。【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考