文档说明
一、方案一:前端实时比对 TS 帧像素 + 跳过广告 TS 切片
1. 实现思路
- 运营端上传广告基准图片,提取固定像素特征值;
- 前端播放器加载 M3U8 视频时,逐帧解析TS 切片首帧 / 前几帧的像素数据;
- 与广告基准像素做相似度比对,匹配则判定为广告 TS;
- 播放器自动跳过该广告 TS,直接请求下一个正常 TS 切片播放。
2. 核心问题
- 破坏 M3U8 切片时序完整性M3U8 协议基于连续的 DURATION 时长、SEQUENCE 序列号构建播放时序,直接跳过单个 / 多个 TS 切片后,播放器的播放时间轴与切片序列号脱节,出现播放卡顿、进度条异常、播放器报错中断问题。
- 音视频轨同步失效TS 切片包含视频轨与音频轨,跳过视频 TS 后,音频轨仍按原时序加载,易出现画面黑屏但音频继续、音画错位的情况。
- 前端性能瓶颈移动端 / 网页端解析 TS 帧像素、做图像比对会占用大量 CPU / 内存,导致播放器卡顿、设备发热、耗电激增,移动端体验极差。
- 比对准确率不足视频广告存在分辨率压缩、帧率变化、水印叠加等情况,像素比对易出现误判 / 漏判,影响正常内容播放。
3. 可行性结论
不可行。核心违背 M3U8 协议的连续时序规则,且前端性能与准确率无法满足在线视频播放需求。
二、方案二:服务端 / 边缘层修改 M3U8 索引、删除广告 TS
1. 实现思路
- 结合广告像素比对 / 广告标识,标记并删除广告对应的 TS 条目;
- 重新生成剔除广告 TS 的新 M3U8 索引,返回给前端播放器加载。
2. 核心问题
- 播放断点与时序断裂原始 M3U8 的总时长、切片序列号连续,删除广告 TS 后,前后 TS 的时间戳不衔接,播放器解析到断点位置时,会触发加载失败、停止播放、进度条跳变。
- 音视频轨道紊乱M3U8 的音视频切片通常独立分包或绑定时序,删除视频 TS 后,音频切片未同步剔除,导致音频超前 / 滞后、无声、杂音等问
3. 可行性结论
不可行。仅修改索引文件未处理切片时序、音轨、加密关联,无法解决 M3U8 协议的整体性约束,播放稳定性无法保障。
三、方案三:全量拉取 TS + 剔除广告 TS+FFmpeg 转码合成新视频
1. 实现思路
- 服务端(UniAPP 云函数)/ 客户端全量下载原始 M3U8 对应的所有 TS 切片;
- 筛选并删除标记为广告的 TS 切片;
- 调用FFmpeg 工具对剩余正常 TS 进行拼接、转码,生成 MP4 / 新的合规 M3U8 文件;
- 前端播放处理后的新视频文件。
2. 落地分支与问题
(1)客户端实现(移动端 / H5)
- 问题:移动端设备算力、存储、带宽有限,全量下载 TS、FFmpeg 转码耗时极长;H5 端受浏览器沙箱限制,无法直接调用 FFmpeg 核心能力;移动端安装包体积会因集成 FFmpeg 库大幅增加。
- 结论:完全不现实,无法满足在线视频即时播放需求。
(2)服务端实现
- 个人用可以,但对服务器有要求,消耗资源太多,不合适
3. 可行性结论
理论可行、工程落地不可行。仅适用于极短时长、低并发的离线处理场景,无法满足在线视频网站即时、高并发、低成本的核心需求。
四、三类方案总对比表
| 方案 | 核心逻辑 | 关键问题 | 可行性 | 适配场景 |
|---|---|---|---|---|
| 前端跳过广告 TS | 实时帧比对 + 跳过切片 | 破坏 M3U8 时序、前端性能差、音画不同步 | ❌ 不可行 | 无 |
| 修改 M3U8 索引删 TS | 重编索引文件 | 时序断裂、音轨紊乱、加密失效、缓存异常 | ❌ 不可行 | 无 |
| FFmpeg 拼接转码 | 全量 TS 处理 + 重编码 | 客户端算力不足、服务端资源 / 成本 / 超时限制 | ⚠️ 理论可行 | 离线短视频、非即时播放 |
五、核心问题根源总结
- M3U8 协议约束:HLS 协议依赖连续的切片序列号、时间戳、音视频轨绑定,任何非协议内的切片删除都会破坏播放完整性,这是所有过滤方案的核心瓶颈。
- 技术架构限制:UniAPP 云函数为 Serverless 架构,不适合 CPU 密集型的 FFmpeg 转码、大文件下载处理;Cloudflare 侧重静态分发与边缘缓存,无法处理视频切片的重编码逻辑。
- 在线视频业务特性:用户要求即时播放、低延迟、高流畅,与广告过滤的预处理、转码耗时存在天然矛盾。