快速笔记:每日大赛官网这事我踩过一次:播放卡顿怎么排查别再走弯路

前言 我在一次大赛期间维护官网直播/回放时被卡顿问题整惨过——现场流量陡增、观众投诉不断、追溯半天才定位到问题根源。把当时的教训和常用排查流程整理成这篇笔记,给同样要保障视频体验的你:少走弯路,能快准狠地把问题缩小到几类里再解决。
先说结论(省时索引)
- 先判断范围:是单个用户、某类网络还是全站通发?
- 客户端优先排查:浏览器/设备/播放器是常见罪魁。
- 网络层面:丢包、带宽、CDN缓存命中率最容易出问题。
- 服务端/转码:码率自适应、分片长度、转码队列常导致突发卡顿。 按顺序排查,上下一步步缩小范围,别同时改太多东西。
快速排查流程(一步步来) 1) 确认影响范围
- 报错来源:工单、监控、社群反馈、现场/远程复现?
- 区域/运营商/设备:是否集中在某个省/某个运营商/手机型号或浏览器?
- 时间点:是持续问题还是高峰时段才出现?
2) 复现并记录(越多数据越快定位)
- 在不同网络(家宽/移动4G/企业网/同城机房)和不同设备上复现。
- 记录重现步骤、时间戳、视频ID、流类型(VOD/HLS/DASH/RTMP/WebRTC)。
- 在复现时抓取浏览器Network面板、播放器日志、浏览器控制台、系统资源占用(CPU/内存)。
3) 快速判断客户端/网络/服务端归属
- 本地能流畅播放 + 多地区用户卡顿 → 服务器/CDN/网络问题。
- 多用户都能卡顿,且浏览器console有解码或缓冲错误 → 源/编码/播放器配置问题。
- 仅个别用户卡顿且与网络有关(丢包、慢速) → 客户端网络或ISP问题。
常见问题与排查要点(按类细化)
客户端(浏览器/APP/播放器)
- 浏览器兼容性、硬解是否正常:查看控制台是否有“MediaSource”或“decode”相关错误。手机上观察硬解是否被禁用导致高CPU。
- 播放器缓冲策略(initialBuffer, bufferGoal, maxBuffer):缓冲区太小、ABR策略抖动会频繁降码/升码引发卡顿。
- JS/H5播放器控制台日志:播放器会报错(e.g. “buffering”, “fragLoadError”)。 排查命令/步骤:
- Chrome DevTools → Network(查看.ts/.m4s请求、响应码、时序)、Media(播放统计)、Console(player errors)。
- 用 VLC/ffplay 直接拉流测试,排除浏览器层问题:ffplay http://…/playlist.m3u8
网络层(带宽/丢包/延迟/CDN)
- 丢包和高延迟会触发重传或缓冲不足。做 ping/traceroute、mtr,重点看跨自治系统处哪段丢包。
- CDN缓存命中率低、回源压力大会导致分片延迟、重试。看 CDN 报表、边缘结点 QPS、HTTP 5xx。
- 分片过大(如 10s+)会放大卡顿感,分片太短又会增压控制平面。常用 2–6s 之间折中。 排查命令/步骤:
- ping、traceroute、mtr,speedtest 做基线带宽测试。
- tcpdump/wireshark 捕获关键流量,分析 TCP 重传、SACK、RTO。
- CDN 控制台查看边缘/回源流量、缓存命中率、错误率。
服务端/转码/存储
- 转码队列堆积、编码参数不合理(码率过高、帧率/分辨率不匹配)会导致观众端无法及时下载分片。
- HTTP 服务器(Nginx/Apache)连接数、keepalive、TLS 配置不当会引发并发瓶颈。
- 源站带宽不足或磁盘 I/O 成为瓶颈。 排查要点:
- 检查转码服务队列长度、CPU/GPU 使用率、输入延时。
- 查看 Nginx access/error 日志,关注 5xx、上游超时(504)等。
- 存储 IOPS/吞吐是否饱和。
实用工具与常用命令(快抄)
- ffprobe/ffmpeg:检查媒体信息 ffprobe -v error -showformat -showstreams filename.mp4
- ffplay 拉流测试 ffplay http://host/playlist.m3u8
- curl 检查分片响应时间和头 curl -I -w "%{time_starttransfer}\n" -o /dev/null http://edge/segment.ts
- Chrome DevTools:Network/Media/Console 三合一排查客户端问题。
- mtr/ping/traceroute、tcpdump/wireshark:网络层诊断。
- CDN/监控面板:缓存命中率、错误率、边缘抖动。
常见根因与解决思路(我踩过的几种)
- 根因:ABR 策略在高并发下抖动频繁 → 播放器来回切码导致缓冲不足 解决:优化 ABR 算法,增加缓冲预留或限制频繁切换;短期降默认码率上限。
- 根因:CDN 边缘节点未被正常预热,造成回源压力 → 分段加载慢或 5xx 解决:提前预热、增加边缘容量,调整 cache-control 与分片命名策略以增加缓存命中。
- 根因:转码队列堆积(突发流量) → 实时流延时增长、分片生成慢 解决:弹性转码节点、优先级队列、在高峰临时降码率策略。
- 根因:客户端网络丢包严重 → TCP 重传/延迟 解决:启用 HTTP/2 或 QUIC(UDP)改善重传策略;对低带宽用户提供更低码率或音频优先流。
短期缓解与长期修复清单 短期(立刻可做)
- 降低默认码率或启用更保守的 ABR 上限。
- 增加播放器初始缓冲时长(例如从 1s 提到 3s)。
- 在受影响区域临时切换到健康的 CDN 或回退到静态备份流。 长期(根治方向)
- 建立综合观测:端到端(客户端指标 + CDN + 源站 + 转码)联动面板。
- 自动扩缩容:转码、源站和 CDN 策略结合流量预案。
- 定期做压测(多区域并发),验证分片时长、码率曲线、转码能力。
简单排查清单(复制到你的工单或值班手册)
- 报障时间/视频ID/播放节点URL/流类型
- 受影响范围(地域/设备/浏览器)
- 浏览器Network截图、播放器日志(带时间戳)
- CDN 边缘/回源错误率、缓存命中率截图
- 转码队列长度与CPU/GPU使用情况
- 网络诊断结果(ping/mtr/wireshark片段)