BiliTools 流媒体格式指南:一文读懂 DASH / MP4 / FLV 串流方案与下载参数选择
桌面应用音视频【免费下载链接】BiliTools本项目已停止维护。项目地址https://gitcode.com/GitHub_Trending/bilit/BiliTools点击查看免费下载本篇技术指南以 BiliTools基于 Tauri 构建的哔哩哔哩工具箱中的“流媒体格式”下载参数为核心系统梳理哔哩哔哩曾采用与正在使用的三种串流方案DASH、MP4、FLV的技术原理、历史沿革与当前适用场景。读完本文你将理解为什么默认应保持 DASH 格式、MP4 与 FLV 在什么场景下才会被实际用到并能结合源码掌握 BiliTools 内部如何通过fnval参数请求不同格式的播放地址从而在下载设置与任务队列中做出正确选择。哔哩哔哩串流方案的历史演进哔哩哔哩在历史上曾采用过多种流媒体串流方案总体可分为三种DASH 格式、MP4 格式与FLV 格式。三者的核心区别在于服务器向客户端下发媒体数据的方式格式下发方式现状DASH音频、视频分别切片独立下发2018 年引入沿用至今为当前主力方案MP4直接下发含音频的完整 MP4 媒体基本停用仅剩试看类资源付费番剧、影视、课程FLVFLV 分段下发基本完全退役保留选项仅用于存档其中DASH 方案于2018 年被哔哩哔哩引入并一直使用至今当时官方曾发布“关于引入 DASH 技术提升用户播放体验的说明”公告可自行在哔哩哔哩官方动态中检索原文。DASH 的全称是“基于 HTTP 的动态自适应流”Dynamic Adaptive Streaming over HTTP其典型特征是媒体内容被切分为多个分片客户端可根据网络状况动态选择码率档位请求分片从而实现更平滑的播放体验。对下载工具而言这一方案最直观的体现就是“音视频分离”的取流结果。DASH 格式当前主力的流媒体方案[!TIP] 这是哔哩哔哩目前采用的串流格式。其分发的音频与视频质量最好下载速度也最快。 在大多数情况下使用该串流格式即可。若不了解其他格式不要修改下载参数中的“流媒体格式”。DASH 方案下音频与视频会被切片并单独下发给客户端因此解析结果只能拿到无声视频与无画音频两类独立流。这意味着直接下载下来的“视频”文件是不含声音的而“音频”文件是不含画面的。要合并为完整的一个音视频文件需要调用FFmpeg进行混流mux也就是应用内名为“音视频”的任务。这一设计在 BiliTools 的任务类型枚举中也有直接对应TaskType.AudioVideo audioVideo见 src/types/shared.d.ts它与Video纯视频、Audio纯音频并列共同构成弹窗中选择“媒体”内容时的三个选项。源码侧DASH 取流如何实现在 src/services/media/data.ts 的getPlayUrl函数中前端会根据用户选择的格式构造播放地址请求参数DASH 对应case Types.StreamFormat.Dash: params.fnval user.isLogin ? 4048 : 16; break;请求的其余基础参数还包括qn清晰度档位登录用户为1278K 超高清未登录为64720Pfnver: 0、fourk: 1开启 4K/8K 等超高清取流能力auth: wbi携带 WBI 签名鉴权。收到响应后代码从data.dash分支中分别取出视频流与音频流并且音频数组会额外并入杜比与 Hi-Res 无损轨道} else if (data.dash) { const video data.dash.video?.length ? data.dash.video : []; const audio [ ...(data.dash.audio?.length ? data.dash.audio : []), ...(data.dash.dolby?.audio?.length ? [data.dash.dolby.audio[0]] : []), ...(data.dash.flac?.audio ? [data.dash.flac.audio] : []), ]; const codec Types.StreamFormat.Dash; return { video, audio, codec }; }也就是说只有 DASH 方案才能完整覆盖哔哩哔哩的高规格音轨如杜比全景声、Hi-Res 无损、无损 FLAC这与文档中“DASH 分发的音频与视频质量最好”的结论相互印证。音频流与视频流随后分别交给下载核心aria2c下载再通过 Rust 后端的 FFmpeg 封装完成合并——从源码结构看混流逻辑集中在 src-tauri/src/services/ffmpeg.rs 的merge函数中这也是“音视频”任务在下载完成后需要额外占用处理时间的原因。MP4 格式仅剩试看资源的兼容方案[!WARNING] 不要因为长得像MP4后缀就选择该格式。在大多数情况下其下载速度较慢且质量不如 DASH 格式。MP4 方案顾名思义服务端直接向客户端下发 MP4 格式的完整媒体视频自带音频无需再经过 FFmpeg 混流即可直接播放。这也是它在历史上曾作为简单直接方案被使用的原因。但它的劣势同样明显由于是单一封装整体下发通常无法像 DASH 那样灵活按分片请求下载速度较慢可用的清晰度档位与编码规格有限画质与音质普遍不如 DASH目前哔哩哔哩已基本不再使用该方案除了一种例外场景——试看资源例如需要付费的番剧、影视、课程这类资源几乎只能拿到MP4格式且画质与音质大多欠佳。源码侧MP4 取流如何实现在getPlayUrl中MP4 对应case Types.StreamFormat.Mp4: params.fnval 1; break;响应处理时如果接口返回了data.durls注意是复数形式多清晰度列表则代码将其映射为视频流数组并标记codec Types.StreamFormat.Mp4if (data.durls?.length) { const video data.durls.map((v) ({ id: v.quality, baseUrl: v.durl[0].url, backupUrl: v.durl[0].backup_url, size: v.durl[0].size, })); const codec Types.StreamFormat.Mp4; return { video, codec }; }注意此时返回结果中没有audio字段与文档所述“视频会自带音频”的结构特征一致——BiliTools 不会为 MP4 单独下载音轨也就不存在“音视频”合并任务。FLV 格式已退役的存档选项[!WARNING] 该格式基本已完全退役。保留该选项仅用于存档部分资源可能仍可下载。FLV 是哔哩哔哩早年采用的格式使用 FLV 分段方式向客户端下发流媒体。在当年带宽与播放器技术条件下它是网页端低延迟播放的主流选择但随着 2018 年 DASH 方案的上线FLV 逐渐退出历史舞台。如今 BiliTools 保留该选项目的只是兼容存档仍有极少量历史资源可能只提供 FLV 取流地址勾选后可尝试下载但不应将其作为常规下载格式。源码侧FLV 取流如何实现在getPlayUrl中FLV 对应的fnval最为特殊直接置零以请求最传统的播放地址case Types.StreamFormat.Flv: params.fnval 0; break;响应处理时代码先检查data.durl单数形式若命中则会按accept_quality逐档重新请求收集所有可用的清晰度分片再根据返回的accept_format是否包含flv决定标记为 FLV 还是 MP4} else if (data.durl?.length) { // 按 accept_quality 逐档请求收集 durl 分片 const codec data.accept_format.includes(flv) ? Types.StreamFormat.Flv : Types.StreamFormat.Mp4; return { video, codec }; }从这段逻辑可以推断当服务器实际只能返回 FLV 时即便前端选择了其他格式最终也会被归并为 FLV 处理反之亦然。这正好印证了文档中“部分资源可能仍可下载”的不确定性——FLV 是否可用最终取决于服务端是否还保留该格式的取流能力。三种格式的请求参数对照源码级综合 src/services/media/data.ts 中的实现BiliTools 对三种格式的播放地址请求参数映射如下流媒体格式fnval值返回结构音轨处理合并任务DASH 格式登录4048/ 未登录16dash.videodash.audio含杜比 / FLAC独立音轨需要“音视频”任务MP4 格式1durls自带音频无独立音轨不需要FLV 格式0durl分段无独立音轨不需要三种格式在代码中的枚举定义位于 src/types/shared.d.tsexport enum StreamFormat { Dash dash, Mp4 mp4, Flv flv, }而下载设置与弹窗中“流媒体格式”下拉选项的顺序DASH 格式、MP4 格式、FLV 格式来自QualityMap.fmt同文件对应文案定义在 src/i18n/locales/zh-CN.json 的quality.fmt中。此外该地图还一并提供了分辨率res240P 极速至 8K 超高清、音频比特率abr64K 至无损 FLAC、杜比全景声、Hi-Res与编码格式encAVC / HEVC / AV1的完整档位供在下载参数中组合使用。下载实战如何正确选择与处理1. 保持默认优先使用 DASH如果你对三种格式的差异并不熟悉最稳妥的做法是保持默认的 DASH 格式不变不要修改下载参数中的“流媒体格式”。原因有三质量最好DASH 能拿到当前资源可用的最高规格音视频流包括杜比视界、8K、杜比全景声、Hi-Res 等相关档位映射同样来自上文提到的QualityMap速度最快分片化下发天然支持并发下载配合 BiliTools 内置的 aria2c 下载核心可获得更好的吞吐无需决策成本即使拿到的是“无声视频 无画音频”BiliTools 会在下载后通过 FFmpeg 自动执行“音视频”合并任务产出完整文件。2. 理解“音视频”任务的必要性与耗时选择 DASH 格式时请务必勾选或确认任务中包含了音视频audioVideo选项否则最终可能只得到分离的视频与音频文件。合并过程由 FFmpeg 完成对应 src-tauri/src/services/ffmpeg.rs 中的merge实现属于本地重封装/转码操作会占用一定的 CPU 时间与磁盘临时空间视频越长耗时越明显这是 DASH 方案固有的一环并非异常。3. 何时才考虑 MP4 与 FLVMP4仅当你下载付费番剧、影视、课程的试看资源且服务端只提供 MP4 地址时才需要切换到该格式。此时请对画质与音质有合理预期大多欠佳。日常下载普通视频时不要因为“看起来像 MP4 后缀”就选择它。FLV基本仅用于存档与尝鲜。如果你明确知道某个历史资源仍提供 FLV 取流可以切换到该格式尝试否则不建议作为常规选项。4. 相关转换与整理设置在“设置 → 策略”页面对应 src/components/SettingsPage/Strategy.vue中还提供了与流媒体结果相关的两个转换开关见 src/i18n/locales/zh-CN.json 的settings.convert转换为 MP3将下载的音频统一转成 MP3 格式便于在更广泛的播放器中使用转换为 MP4若启用会强制把视频转换为 MP4 封装同时将音频流转为AAC格式适合对封装格式有硬性要求的场景。这两个开关作用于下载完成后的处理阶段与“流媒体格式”取流参数是两个独立维度前者决定从服务端取什么后者决定本地处理成什么理解这一点可以避免混淆。小结DASH是哔哩哔哩自 2018 年沿用至今的主力方案音视频分离下发、质量与速度最优需要 FFmpeg 混流是 BiliTools 的默认与推荐选择MP4已基本停用仅试看类资源付费番剧、影视、课程仍可能返回下载前需接受其较低的速度与质量FLV为早年分段格式已完全退役保留仅用于存档部分资源可能仍可下载。在 BiliTools 中这一切最终都体现为下载参数里“流媒体格式”fmt这一个选项不了解其他格式时请让它保持 DASH确知目标资源只提供 MP4 / FLV 时再按需切换。更完整的下载流程与设置说明可继续阅读 下载指南 与 设置指南。赞分享桌面应用音视频【免费下载链接】BiliTools本项目已停止维护。项目地址https://gitcode.com/GitHub_Trending/bilit/BiliTools点击查看免费下载相关推荐YouTube.js 的 FormatOptions 接口全解析流媒体格式选择与下载参数实战指南YouTube.js 的 FormatOptions 接口全解析流媒体格式选择与下载参数实战指南 导读 在 YouTube.jsYouTube 内部 API后端M3U8 直播录制与 MPEG-DASH 合流一次搞懂Ghost Downloader 3 流媒体下载完全指南M3U8 直播录制与 MPEG DASH 合流一次搞懂Ghost Downloader 3 流媒体下载完全指南 Ghost Downloader 3 是一款全桌面应用网络插件系统Clappr 媒体格式支持全指南浏览器兼容矩阵与 HLS / MP4 / WEBM / DASH / RTMP / FLV 插件化播放方案Clappr 媒体格式支持全指南浏览器兼容矩阵与 HLS / MP4 / WEBM / DASH / RTMP / FLV 插件化播放方案 Clappr 是一前端音视频插件系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →