
【免费下载链接】dart_simple_live简简单单的看直播SimpleLive续项目地址https://gitcode.com/gh_mirrors/dart/dart_simple_live点击查看免费下载Simple Live 是一款免费的跨平台直播工具支持哔哩哔哩、抖音、快手、虎牙、斗鱼五大直播平台。用户只需粘贴一条直播间链接App 就能自动识别平台并提取房间号直接跳转到播放页。本文拆解 Simple Live 链接解析的设计思路五种平台 URL 如何提取房间号、短链重定向如何安全跟随、又有哪些防御手段保证粘贴什么都能解析。解析流程总览一条链接的四步旅程打开 App 的我的页面进入工具箱可以看到直播间跳转输入框粘贴链接后点击链接跳转即可进入房间相关界面在 parse_page.dart。核心逻辑则分两层解析层live_url_parser.dart 负责从 URL 中提取平台 房间号纯本地计算不依赖网络。控制层parse_controller.dart 负责短链重定向跟随、次数限制并把解析结果映射到对应的播放站点。一条链接的完整旅程如下粘贴文本 → extractHttpUrl() 提取 http(s) 链接 → LiveUrlParser.parse() 按 host path 段提取站点与房间号 → 命中短链跟随重定向拿到最终地址再重新 parse最多 3 层 → 输出 [roomId, Site] 跳转直播间这种解析层纯函数、控制层管网络的分层让解析规则可以被离线单元测试完整覆盖测试文件见 live_url_parser_test.dart。五种平台 URL 的提取规则LiveUrlParser.parse()的核心策略是按 host域名判断平台按完整 path 段提取房间号而不是从原始字符串里正则硬截取。这样设计有两个好处房间号作为一个完整 path 段校验含.或_的房间号不会被截断host 一律转小写匹配HTTPS://LIVE.DOUYIN.COM/123这类大小写混用也能识别。各平台规则一览平台域名房间号位置提取方式哔哩哔哩live.bilibili.com第一个 path 段live.bilibili.com/2225346→2225346斗鱼douyu.com及其子域第一个 path 段douyu.com/4492468→4492468斗鱼专题页douyu.com/topic/xxxrid查询参数topic/xyz?rid5087042→5087042虎牙huya.com及其子域第一个 path 段huya.com/660148→660148抖音live.douyin.com第一个 path 段live.douyin.com/123456789→123456789抖音网页版douyin.com/live/id或/follow/live/id只认这两种路径抖音内部*.amemv.comreflow段的下一段reflow/7012345678→7012345678快手live.kuaishou.com/u/id、m.chenzhongtech.com/fw/live/id固定位置的 path 段由 kuaishou_live_link.dart 处理几个值得注意的设计细节斗鱼双通道普通房间页房间号在 path 里而topic专题页的房间号藏在rid查询参数中。解析器对两种形态都做了处理避免用户从分享卡片复制的专题链接解析失败。抖音宁缺毋滥www.douyin.com是巨型站点包含视频、用户主页等大量非直播路径。解析器只接受/live/id和/follow/live/id两种形态/video/...、/user/...一律返回null而不是错误地提取一个不存在的房间号。快手单独建模快手域名体系最复杂主域 移动端域m.chenzhongtech.com所以抽出了独立的KuaishouLiveLink类专门负责哪些域名可信、房间号在哪一段、短链怎么校验避免规则散落在主解析器里。房间号字符校验房间号必须匹配^[A-Za-z0-9._-]$快手为^[A-Za-z0-9_-]$斗鱼rid和抖音reflow则要求纯数字。校验不通过就返回null从源头上杜绝脏数据进入播放链路。解析成功后siteId会被映射到 App 的站点配置表 sites.dart其中注册了BiliBiliSite、DouyinSite、DouyuSite、HuyaSite、KuaishouSite五个播放实现分别位于 bilibili_site.dart、douyin_site.dart、douyu_site.dart、huya_site.dart、kuaishou_site.dart。短链重定向为什么 b23.tv / v.douyin.com / v.kuaishou.com 要特殊处理用户分享直播时最常复制的是短链比如b23.tv/Ab12Cd3、v.douyin.com/iAbC12d3、v.kuaishou.com/nQxz1。短链本身不包含任何房间号信息无法本地提取必须先请求一次拿到Location响应头跟随重定向到真实直播间地址再对最终地址重新解析。LiveParsedUrl用一个isShortLink布尔值显式标记这种状态调用方看到它就知道先追重定向再来解析。控制层的getLocation()方法负责这一步关键设计有三点不自动跟随重定向HTTP 请求设置followRedirects: false手动读取Location头并循环跳转最多 5 次_maxRedirects。这样每一步都掌握在手里能记录、能中断、能校验。解析递归深度限制极端情况下短链 A 跳转到短链 Bparse()用depth参数限制最多递归 3 层_maxParseDepth防止短链互相跳转造成死循环。超时与状态白名单每次跳转设置 8 秒连接/收发超时只接受 2xx/3xx 状态遇到非 3xx 就取当前地址作为最终结果拿不到Location头则放弃。快手短链的受信域名白名单快手短链的处理比另外两家更严格。resolveKuaishouRoomId()在跟随重定向时每一跳的目标地址都要通过KuaishouLiveLink.isTrustedRedirectTarget()校验——只有落在v.kuaishou.com短链域或能直接提取出房间号的快手直播域才允许继续跟随。同时用visited集合记录已访问地址同一地址出现第二次立即终止。这层防御的意义是短链解析全程不带任何登录 Cookie请求头恒为空一旦重定向跳出快手域名体系说明链接已被污染或被恶意改写直接拒绝。容错设计应对用户会粘贴任何东西链接解析的真实输入来自用户随手粘贴质量极不可控。Simple Live 在入口处做了四层兜底文本中抠出 URLextractHttpUrl()用正则从任意文本中取出第一个http(s)://链接并刻意排除中文标点作为边界。正则注释里还记录了一个细节不做二次清理因为Cc_2365.这类带标点的可能就是合法的房间号的一部分。容忍缺省协议头用户直接粘贴live.douyin.com/123时Uri.tryParse解析不出 host解析器会自动补上https://前缀重试测试用例中不带协议头的链接专门覆盖了这个场景。大小写归一host 统一转小写后再匹配协议头同样不区分大小写。失败即 null任何一步不符合规则都返回null无法识别的链接、空字符串、纯中文乱码由 UI 层统一提示无法解析此链接不会抛出异常中断流程。整套规则对应的测试覆盖在 live_url_parser_test.dart 中五种平台正常链接、短链、topic?rid、reflow路径、大小写、缺协议、含点号房间号、非法输入返回null共 14 组用例是解析层行为的事实契约。命令行场景的复用同一个解析器还被命令行工具复用。simple_live_console.dart 先调LiveUrlParser.parse()遇到短链时取一次重定向地址后再次parse()然后按siteId分发到对应站点输出直链。App 端和 CLI 共享同一份解析规则保证了链接能跳就能取直链的一致性。小结Simple Live 的链接解析方案可以概括为四条设计原则结构化解析代替正则截取按 host 判平台、按完整 path 段取房间号天然兼容含特殊字符的房间号平台差异显式建模斗鱼双形态、抖音白名单路径、快手独立链接类每种平台的怪癖都有对应代码位置不靠 if-else 补丁短链重定向受控跟随手动读Location、限制跳数与递归深度、快手白名单 访问去重、无 Cookie 请求性能与安全兼得输入假设从最坏情况出发抠 URL、补协议、归一化、失败返回 null让解析失败永远是温和的提示而不是崩溃。如果你想进一步研究解析规则的实现细节建议从 live_url_parser.dart 和它的测试 live_url_parser_test.dart 入手配合 parse_controller.dart 中的重定向控制就能看到从一段粘贴文本到一个直播间的完整链路。赞分享【免费下载链接】dart_simple_live简简单单的看直播SimpleLive续项目地址https://gitcode.com/gh_mirrors/dart/dart_simple_live点击查看免费下载相关推荐Simple Live重新定义跨平台直播观看体验Simple Live重新定义跨平台直播观看体验 从痛点出发为什么需要直播聚合工具 在当今多元化的直播生态中用户面临着诸多困扰手机内存被多个直播App挤音视频直播Simple Live重新定义跨平台直播观看体验Simple Live重新定义跨平台直播观看体验 你是否曾为同时关注多个平台的主播而烦恼是否希望有一个统一的入口来管理所有直播内容Simple Live正音视频直播Dart Simple Live重新定义跨平台直播聚合体验Dart Simple Live重新定义跨平台直播聚合体验 在当今碎片化的直播生态中你是否曾因频繁切换不同平台而深感疲惫当热门主播同时开播时你是否希望有音视频直播创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考