如何通过AEM托管自有HLS的.m3u8和.ts文件供Video.js播放
AEM 无修改托管分发HLS流(m3u8/ts)操作方案
要实现需求核心是让AEM跳过所有DAM资源处理流程,将m3u8和ts文件当成纯二进制静态文件返回,具体操作如下:
1. 配置正确的MIME类型映射
避免AEM误判文件格式导致返回头异常:
- 登录AEM控制台,进入
/system/console/configMgr,找到Apache Sling MIME Type Service配置项 - 新增两条映射规则:
.m3u8对应application/vnd.apple.mpegurl.ts对应video/MP2T
- 保存配置即可。
2. 排除文件的自动处理流程
默认AEM会对上传的DAM资源做元数据提取、缩略图生成、工作流触发等操作,需要主动排除这两类文件:
- 同样在
/system/console/configMgr,找到Day CQ DAM Asset Upload Restriction配置 - 在允许上传的格式列表加入
m3u8、ts,同时在「跳过元数据提取的文件后缀」列表中加入这两个后缀 - 再找到Adobe Granite Workflow Package Configuration,把
m3u8、ts后缀排除在DAM工作流触发规则之外,避免自动触发转码、元数据写入类工作流 - 如果你部署了自定义的资源压缩、内容重写模块,也需要把这两个后缀加入对应排除列表。
3. 按原目录结构上传文件
- 不要使用AEM的「视频上传」专用入口,直接用通用文件上传功能,或者通过Sling Post请求批量上传
- 完全保持本地生成的目录结构不变,保证m3u8文件里引用的ts文件相对路径和本地完全一致
- 推荐上传到
/content/dam/hls/这类专用静态资源目录下,避免和其他动态处理的资源混放 - 上传后核对资源的二进制大小,确认和本地原始文件完全一致,没有自动生成额外的转码文件、缩略图。
4. 验证播放效果
上传完成后直接访问m3u8文件的AEM访问路径,确认两点:
- 响应头
Content-Type和之前配置的MIME类型一致,没有强制下载的Content-Disposition头 - 下载的m3u8、ts文件哈希值和本地原始文件完全一致,无内容修改
- 确认无误后直接把m3u8的AEM访问地址填入Video.js的播放器配置即可正常播放。
可选优化(使用Dispatcher场景)
如果前端部署了AEM Dispatcher做缓存,需要在Dispatcher规则中允许.m3u8、.ts后缀的访问,同时配置对应的缓存规则,降低回源频率提升播放稳定性。
内容的提问来源于stack exchange,提问作者robotcoder
相关产品推荐
相关产品推荐

