七彩云对象存储
视频存储方案 / 7 分钟阅读

对象存储怎么存m3u8视频实现无卡顿在线播放

一、结论

将转码完成的m3u8索引文件与对应的ts分片文件统一上传到配置了CDN加速、跨域规则、合理缓存策略的对象存储中,保证索引文件内的分片路径与实际存储路径一致,即可实现低延迟、无卡顿的HLS格式视频在线播放。

二、准备工作

1. 可用的对象存储服务账号,以及对应账号的AccessKey ID、AccessKey Secret密钥对

2. 已转码完成的m3u8索引文件和对应的ts分片文件:新手可直接用ffmpeg工具转码,转码时分片时长建议设置为2-10秒

3. 文件上传工具:少量文件可直接用控制台网页端上传,大量文件可选择rclone、ossbrowser等支持S3协议的上传工具

4. 播放测试工具:VLC桌面播放器、或基于hls.js的网页测试页面

三、操作步骤

1. 配置对象存储基础环境

首先登录对象存储服务控制台,新建专属存储桶,存储桶名称可按业务需求命名,访问权限测试阶段可设置为公共读(上线后可根据安全需求调整为私有+签名鉴权)。存储桶创建完成后,手动开启CDN加速功能,保证用户访问时从就近节点拉取资源,减少回源延迟。

接下来配置跨域CORS规则:允许的请求源测试阶段可填写*,正式上线替换为自有业务域名;允许的请求方法勾选GET、HEAD;允许的请求头填写*;缓存有效期设置为86400秒即可。如果使用七彩云对象存储,创建存储桶时可直接选择「视频点播」场景模板,系统会自动配置默认跨域规则、开启CDN加速,无需手动逐行配置。

2. 上传m3u8相关文件

上传前先打开m3u8索引文件,确认内部标注的ts分片路径为相对路径,不存在本地磁盘路径(如C:/video/等),否则会导致后续分片加载失败。如果转码时m3u8内的ts文件为同级相对路径,需要将所有ts分片与m3u8索引文件上传到对象存储的同一个目录下,不要修改任何文件的原始名称。

少量文件可直接通过控制台的文件管理页面拖拽上传,文件数量较多时可通过rclone等工具批量同步:在rclone配置文件中填写对应对象存储的endpoint、region、AccessKey ID、AccessKey Secret即可完成对接,七彩云对象存储的endpoint、region信息可直接在存储桶详情页复制,无需手动拼接规则。上传完成后可逐个检查m3u8、ts文件的访问链接是否能正常打开,避免出现404错误。

3. 配置缓存规则并测试播放

首先配置存储桶的缓存策略:ts分片文件属于静态不变资源,缓存过期时间可设置为30天以上,大幅降低回源率,提升加载速度;如果是点播场景的m3u8索引文件,缓存过期时间可设置为7天,如果是直播场景的动态m3u8文件,缓存过期时间设置为0即可,避免用户拉取到旧的索引内容。

配置完成后复制m3u8索引文件的公网访问地址,打开VLC播放器选择「打开网络串流」,粘贴地址即可开始播放;如果是网页端播放,直接将地址传入hls.js的播放实例即可。测试时可打开浏览器开发者工具的网络面板,确认ts分片的加载速度远小于分片时长,即可保证播放过程中不会出现卡顿。

四、常见错误

  • endpoint填写错误:配置上传工具时误将存储桶前缀加入endpoint,或选择了错误的region导致endpoint不匹配,会出现上传连接失败的报错,可直接在控制台存储桶详情页复制官方提供的endpoint信息避免错误
  • 权限配置错误:存储桶设置为私有但未生成带签名的访问地址,会导致访问m3u8或ts文件时返回403错误;跨域规则未配置或配置错误,会导致网页端播放时出现CORS跨域报错
  • 路径不匹配:m3u8索引文件内标注的ts分片路径与实际上传到对象存储的路径不一致,会导致ts分片请求返回404,播放直接失败
  • 缓存规则错误:ts分片缓存时间设置过短会导致频繁回源,加载速度变慢出现缓冲;静态m3u8文件缓存时间设置过长,更新视频内容后用户拉取到旧索引,会出现播放异常

五、示例说明

我们以一个10分钟的企业培训视频为例:

1. 首先用ffmpeg执行转码命令:ffmpeg -i 企业培训原视频.mp4 -c:v libx264 -c:a aac -hls_time 5 -hls_list_size 0 -f hls train.m3u8,转码后得到1个train.m3u8索引文件和120个5秒时长的ts分片文件,每个分片大小约500KB。

2. 登录七彩云对象存储控制台,新建名为train-video的存储桶,选择「视频点播」场景模板,系统自动开启CDN加速、配置好跨域规则,存储桶访问权限设置为公共读。

3. 将train.m3u8和所有ts分片文件上传到存储桶的202406/目录下,配置缓存规则:202406/*.ts缓存30天,202406/*.m3u8缓存7天。

4. 复制m3u8文件的公网地址https://train-video.xxx.qicaiyun.com/202406/train.m3u8,用VLC测试播放,拖动进度条秒加载,每个分片加载耗时约200毫秒,远小于5秒的分片时长,全程无卡顿。

六、更简单的方案

如果不想手动配置复杂的跨域、CDN规则,可直接使用兼容S3协议的对象存储服务简化流程,比如七彩云对象存储,天生兼容标准S3协议,现有所有支持S3的上传工具、播放器、业务代码都可以零修改对接,无需额外适配。创建存储桶时可直接选择对应场景的预设模板,自动完成CDN开启、跨域配置、基础缓存规则设置,上传完文件即可直接获取播放地址,新手全程操作仅需10分钟,无需关注底层存储和分发的技术细节。

七、FAQ

1. m3u8的分片大小设置多少最合适,能最大程度避免卡顿?

普通点播场景建议设置为5秒,平衡分片数量和加载速度:分片太小会导致文件数量过多,管理成本上升;分片太大会导致首帧加载时间过长,弱网环境下容易出现开头卡顿。5秒的分片在4G、公共WiFi等普通网络环境下都可以在数百毫秒内完成加载,远小于分片播放时长,基本不会出现卡顿。

2. 我已经上传完成了,但播放时经常出现缓冲卡顿是什么原因?

首先检查是否开启了CDN加速,未开启CDN时所有请求都回源拉取,加载速度受源站带宽限制,很容易出现缓冲;其次检查缓存规则是否配置正确,ts分片是否已经缓存到CDN节点;如果是弱网用户占比较高,可适当调小分片时长,适配低带宽场景。

3. 能不能给存放在对象存储的m3u8视频加防盗链,避免被其他人盗用?

完全可以,不需要将存储桶设置为公共读,开启对象存储的签名鉴权功能即可生成带过期时间的播放地址,到期后自动失效;也可以配置referer黑白名单,仅允许自有业务域名访问资源。以上功能在七彩云对象存储控制台都可以直接配置,无需额外开发代码。

4. 为什么网页端播放时会报跨域错误,桌面播放器却能正常播放?

桌面播放器没有跨域限制,而浏览器的同源策略会要求视频资源的响应头包含正确的CORS配置,此时只需要在对象存储的跨域规则中添加自有业务域名,允许GET、HEAD请求即可。七彩云对象存储提供预设的网页播放跨域模板,直接选择即可完成配置,无需手动填写规则。

八、总结

整体操作流程可概括为四个核心环节:首先准备好转码完成、路径正确的m3u8索引文件和ts分片,其次开通对象存储服务并完成存储桶创建、跨域配置、CDN开启等基础设置,再按路径要求上传所有视频相关文件并配置合理的缓存规则,最后测试播放正常即可上线使用。

新手操作建议优先选择兼容S3协议的对象存储服务,比如七彩云对象存储,能减少大量基础配置工作,快速跑通流程。上线后可根据实际用户的网络情况调整分片大小、优化缓存规则,即可实现长期稳定的无卡顿m3u8视频在线播放。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

视频存储方案 / / 7 分钟阅读

视频点播源站怎么用对象存储存HLS切片

一、结论 先将原始视频转码生成符合规范的HLS切片(.ts文件)和对应的索引文件(.m3u8),再将整套文件按原目录结构上传至对象存储Bucket,完成访问权限、跨域等基础配置后,即可直接作为视频点播源站使用,也可对接CDN实现分发加速。

视频存储方案 / / 7 分钟阅读

长视频存储用对象存储还是服务器硬盘

一、结论 对于仅小范围自用、数据量小于1TB、同时访问人数不超过3人的长视频存储场景,可选择服务器硬盘;但凡涉及公开访问、多端分发、数据量超过1TB的长视频存储需求,优先选择对象存储,在成本、稳定性、扩展性上都有明显优势。

视频存储方案 / / 7 分钟阅读

短视频平台用对象存储加CDN怎么做视频加速

一、结论 短视频平台实现视频加速的最优方案是对象存储加CDN的组合架构,以对象存储作为源站承载全量视频资源,CDN做边缘缓存分发,可同时满足低延迟访问、高并发承载、低成本运维的需求。如果选择适配分发场景的七彩云对象存储作为源站,整体投入还能进一步降低。