HLS/DASH 切片:直播点播的网页播放方案 📅 发布时间:2026/7/9 7:55:57 👁️ 浏览次数: HLS/DASH 切片直播点播的网页播放方案视频做好了怎么放到网页上让别人看直接放 MP4 文件加载慢、拖动卡。HLS 和 DASH 是目前最主流的流媒体方案把视频切成小分片边下边播。这篇讲怎么用 FFmpeg 生成 HLS m3u8 和 DASH mpd以及两者的区别和选型。大家好我是黒漂技术佬。做视频网站、直播、在线课程都需要流媒体切片。直接传一个大 MP4用户打开要等半天拖动进度条也要缓冲。切成 HLS 或 DASH 之后几秒钟就能开始播放还能自动切换清晰度。这篇讲 HLS 和 DASH 的基本原理FFmpeg 怎么生成各自的优缺点以及实际项目里怎么选。一、HLS 是什么HLSHTTP Live Streaming是苹果推出的流媒体协议现在全平台都支持了。原理把一个视频切成很多个小的 TS 分片文件一般 10 秒一个再生成一个 m3u8 播放列表文件。播放器先下载 m3u8然后按顺序下载分片播放。视频 → 切成 N 个 .ts 分片 一个 .m3u8 索引文件优点兼容性最好iOS 原生支持安卓、PC 浏览器也都支持基于 HTTPCDN 好加速防火墙友好支持多码率自适应清晰度自动切换缺点延迟较高默认 30 秒不适合互动直播TS 封装有 overhead同样画质体积略大二、最简单的 HLS 切片ffmpeg-iinput.mp4-c:vlibx264-c:aaac-fhls output.m3u8就这一条命令生成一个 m3u8 文件和一堆 ts 分片。默认每 2 秒一个分片数量 视频时长 / 2。三、HLS 常用参数1. 分片时长ffmpeg-iinput.mp4-ccopy-fhls-hls_time10output.m3u8-hls_time 10每个分片约 10 秒。分片短启动快、seek 准但文件多、开销大分片长文件少、开销小但启动慢、seek 不准一般点播用 6-10 秒直播用 2-4 秒。2. 分片数量控制直播模式直播的时候分片会越来越多占满硬盘。设置保留数量ffmpeg-iinput.mp4-ccopy-fhls-hls_time4-hls_list_size6output.m3u8-hls_list_size 6m3u8 里只保留最新的 6 个分片旧的删掉。配合直播推流使用始终只存最近几十秒的内容。3. 单个文件模式不推荐ffmpeg-iinput.mp4-ccopy-fhls-hls_flagssingle_file output.m3u8所有分片存在一个文件里m3u8 用字节偏移量索引。文件少了但不利于 CDN 缓存一般不用。4. 加密 HLSffmpeg-iinput.mp4-ccopy-fhls-hls_key_info_filekey_info.txt output.m3u8视频分片加密防止别人直接下载。需要准备 key_info 文件指定密钥地址和密钥文件。视频网站、付费课程常用。四、多码率自适应 HLS同一个视频压成多个清晰度播放器根据网速自动切换。先生成多个码率# 1080pffmpeg-iinput.mp4-c:vlibx264-b:v4M-c:aaac-b:a128k-fhls-hls_time10hls_1080p/output.m3u8# 720pffmpeg-iinput.mp4-c:vlibx264-b:v2M-c:aaac-b:a128k-fhls-hls_time10hls_720p/output.m3u8# 480pffmpeg-iinput.mp4-c:vlibx264-b:v1M-c:aaac-b:a96k-fhls-hls_time10hls_480p/output.m3u8再写一个主播放列表master m3u8#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH4000000,RESOLUTION1920x1080 hls_1080p/output.m3u8 #EXT-X-STREAM-INF:BANDWIDTH2000000,RESOLUTION1280x720 hls_720p/output.m3u8 #EXT-X-STREAM-INF:BANDWIDTH1000000,RESOLUTION854x480 hls_480p/output.m3u8播放器读这个主列表根据网速自动选清晰度。一条命令生成多码率用 filter_complex 分流只解码一次ffmpeg-iinput.mp4\-filter_complex[0:v]split3[v1][v2][v3];[v1]scale1920:1080[out1];[v2]scale1280:720[out2];[v3]scale854:480[out3]\-map[out1]-c:vlibx264-b:v4M-map0:a-c:aaac-b:a128k-fhls-hls_time10hls_1080p/output.m3u8\-map[out2]-c:vlibx264-b:v2M-map0:a-c:aaac-b:a128k-fhls-hls_time10hls_720p/output.m3u8\-map[out3]-c:vlibx264-b:v1M-map0:a-c:aaac-b:a96k-fhls-hls_time10hls_480p/output.m3u8只解码一次效率比转三次高。五、直播推 HLS把 RTMP 或 RTSP 流转成 HLS 直播ffmpeg-irtsp://摄像头地址-ccopy-fhls\-hls_time2\-hls_list_size6\-hls_flagsdelete_segments\/var/www/hls/live.m3u82 秒一个分片保留 6 个分片约 12 秒内容旧分片自动删除配合 Nginx 或 CDN 对外提供 HTTP 访问网页就能看直播了。⚠️ HLS 延迟较高6 个分片就是 12 秒起步加上缓冲一般 20-30 秒延迟。适合安防监控、赛事直播这种不需要互动的场景。六、DASH 是什么DASHDynamic Adaptive Streaming over HTTP是国际标准的自适应码率流媒体协议和 HLS 类似但更灵活。和 HLS 的区别对比项HLSDASH推出方苹果国际标准组织分片格式TS / fMP4fMP4 / WebM索引文件m3u8文本mpdXML兼容性最好全平台大部分现代浏览器支持iOS 较晚才支持灵活性一般更高支持更多编码格式延迟较高可配置更低延迟适用场景追求兼容性 → HLS多编码格式、精细控制 → DASH现在一般两个都生成播放器自动选七、FFmpeg 生成 DASHffmpeg-iinput.mp4-c:vlibx264-c:aaac-fdash output.mpd生成一个 mpd 文件和一堆 m4s 分片。常用参数ffmpeg-iinput.mp4\-c:vlibx264-b:v2M-c:aaac-b:a128k\-fdash\-seg_duration10\-adaptation_setsid0,streamsv id1,streamsa\output.mpd-seg_duration 10分片 10 秒-adaptation_sets视频和音频分属不同自适应集多码率 DASH和 HLS 类似多个视频流一起输出ffmpeg-iinput.mp4\-filter_complex[0:v]split2[v1][v2];[v1]scale1280:720[v720];[v2]scale854:480[v480]\-map[v720]-c:vlibx264-b:v2M\-map[v480]-c:vlibx264-b:v1M\-map0:a-c:aaac-b:a128k\-fdash\-seg_duration10\-adaptation_setsid0,streams0,1 id1,streams2\output.mpd八、HLS vs DASH 怎么选只选一个的话HLS兼容性碾压iOS 必须用 HLS安卓和 PC 也都支持。保守方案选 HLS 不会错。两个都生成现在主流视频平台都是 HLS DASH 都有播放器根据环境自动选择。低延迟场景都不选HLS 和 DASH 都是分片机制延迟天然高。需要秒级以下延迟用 WebRTC1-3 秒延迟用 HTTP-FLV。九、网页播放HLS 播放PC 浏览器原生不支持 HLSSafari 除外需要用 hls.jsscriptsrchttps://cdn.jsdelivr.net/npm/hls.js/scriptvideoidvideocontrols/videoscriptconstvideodocument.getElementById(video);consthlsnewHls();hls.loadSource(output.m3u8);hls.attachMedia(video);/scriptDASH 播放用 dash.jsscriptsrchttps://cdn.dashjs.org/latest/dash.all.min.js/scriptvideodata-dashjs-playersrcoutput.mpdcontrols/video统一方案Video.js / DPlayer封装好的播放器自动判断用 hls.js 还是 dash.js。十、踩过的坑坑 1分片对不上关键帧分片不是从关键帧开始的话每个分片开头会卡一下。解决编码时设置关键帧间隔和分片时长对齐。# 10 秒分片就设 10 秒一个关键帧帧率 30 的话就是 300 帧ffmpeg-iinput.mp4-c:vlibx264-g300-keyint_min300-fhls-hls_time10output.m3u8坑 2m3u8 路径问题m3u8 文件里引用的 ts 路径是相对路径放 CDN 的时候要注意目录结构。解决用-hls_base_url指定基础 URL。ffmpeg-iinput.mp4-fhls-hls_base_urlhttps://cdn.example.com/hls/output.m3u8坑 3HLS 直播延迟太高默认配置 30 秒延迟很正常。优化方向分片改小-hls_time 11 秒一片列表减少-hls_list_size 3播放器端减小缓冲极限能压到 3-5 秒但稳定性会下降。再低就得上 WebRTC 了。坑 4音视频不同步分片切割点如果音视频不对齐播放就会漂移。解决用-hls_flags split_by_time按时间切割或者编码时统一时间基。十一、本篇小结HLS 兼容性最好DASH 更灵活主流平台两个都做FFmpeg 生成 HLS-f hls生成 DASH-f dash点播分片 6-10 秒直播 2-4 秒多码率自适应用 split 分流一次编码输出多路HLS 延迟较高不适合互动直播网页播放用 hls.js 或 dash.js下一篇进入 SDK 开发部分FFmpeg SDK 开发入门——不再用命令行用 C 代码调用 FFmpeg 库打开视频、读帧、解码集成到自己的程序里。我是黒漂技术佬。
收藏!小白程序员必看:用数据和逻辑揭秘AI薪资翻倍的赛道差异! 文章指出传统岗位薪资停滞不前,而AI岗位薪资快速增长,主要原因是供需关系差异。传统岗位供过于求且技术壁垒低,而AI岗位需求旺盛、人才缺口大。文章分析了AIGC、AI大模型和云计算三个AI方向,并强调学习AI技术是提升薪资的有效途径… 2026/7/9 7:53:56
QDD半直驱驱动器热管理实战:液冷方案如何将峰值扭矩输出提升30% QDD半直驱驱动器热管理实战:液冷方案如何将峰值扭矩输出提升30%在机器人执行器领域,半直驱驱动器(QDD)凭借其高动态响应和精确力控能力,正成为四足和人形机器人的首选动力方案。然而,低减速比设计带来的高热… 2026/7/9 7:53:56
新的多线程测试模块 新项目框架搭建总结 一、已创建完整文件结构 QSFP_AutoTester/ ├── Drivers/ ← 驱动层(从旧项目搬过来 你新写的) │ ├── OTP12Driver.cs ← ✅ 你写的,直接复用 │ ├── SFP_EVB_H… 2026/7/9 7:53:56
从一次交付到长期合作,IACheck AI报告审核通审Agent版如何助力检测机构构建报告质量信任体系 在检测行业中,客户选择一家检测机构,往往并不仅仅取决于检测价格、服务速度或者设备能力,更重要的是长期合作过程中,机构能否持续输出稳定、规范、可信的检测报告。对于企业客户而言,一份检测报告不仅是检测结果的载体… 2026/7/9 11:12:39
终极老旧Mac升级实战:OpenCore Legacy Patcher深度解析与应用指南 终极老旧Mac升级实战:OpenCore Legacy Patcher深度解析与应用指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否拥有一台被苹果官方抛弃的… 2026/7/9 11:10:38
Misc-隐藏的小猫(图片隐写) 1. 题目基本信息题型:Misc 杂项(最简单文件隐写)难度:⭐ 入门送分题题目描述:图片里藏了秘密flag,看看图片底层有什么?附件:cat.pngFlag格式:flag{xxx}解题环境ÿ… 2026/7/9 11:08:37
带你了解PD-L1 PD-L1抗体的分子特性与免疫调控机制PD-L1(程序性死亡配体1,又称B7-H1或CD274)是一种I型跨膜糖蛋白,由290个氨基酸组成,属于B7共刺激分子家族的重要成员。其结构包含胞外免疫球蛋白可变区(IgV-like domain&a… 2026/7/9 11:06:36
STM32与欧姆龙G6D-ASI实现直流负载智能管理方案 1. 项目背景与核心需求在工业自动化与电力电子领域,直流负载管理一直是系统设计的关键痛点。传统机械式继电器在频繁开关场景下存在触点磨损、响应延迟等问题,而普通电子开关又难以兼顾大电流承载与精确控制。这个项目正是针对这一行业难题,采… 2026/7/9 11:04:35
锂离子电池电压平衡技术及STM32实现方案 1. 锂离子电池电压平衡的必要性 在串联连接的锂离子电池组中,电压不平衡是一个常见但危险的问题。当两节或多节电池串联使用时,即使使用同一批次的全新电池,随着充放电循环次数的增加,各单体电池的电压也会逐渐出现差异。这种差异… 2026/7/9 11:04:35
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08