Emby 播放卡顿或缓冲 — 从网络到转码逐层定位瓶颈
卡顿的本质
Emby 播放卡顿/缓冲只有三种原因:
- Server 供不上来:转码太慢(CPU 不够或没开硬件加速)、磁盘 IO 不够读不过来
- 网络送不过去:客户端和 Server 之间的带宽不够(局域网太差 / 远程带宽不够)
- 客户端接不住:解码能力不够(比如老款 Android TV 盒子解不动 HEVC)
先看 Dashboard → Home → Active Sessions,找到正在播放的那个会话,重点看这几个字段:
- Current Bitrate:当前传输的实际码率
- Transcoding(Yes/No):有没有在转码
- Video Codec / Resolution / Bitrate:视频编码和实时码率
- Audio Codec:音频编码
场景一:局域网内卡顿
同一 Wi-Fi 下看 Emby 都卡,这最不应该——局域网千兆网络的有效带宽通常有几十到几百 Mbps,远高于绝大多数片源的码率。
排查 1:是不是在转码
Active Sessions 里看 Transcoding 那一行:
- Yes:Server 在转码。为什么?
- 检查转码日志(Dashboard → Help → Logs → 搜 "Transcode")看为什么要转码
- 没开硬件加速?软解转码 CPU 不够?
- 文件编码客户端不支持(HEVC + 老盒子 = 强制转码)
- No:Direct Play 或 Direct Stream。为什么还卡?
排查 2:Server CPU 是不是 100%
Dashboard → Home → Server Info(右上角 CPU/内存使用):
- CPU 长期 80~100%:Server 本身性能不够(软解转码太多),或同时在做其他消耗(扫描媒体库、下载器在跑)
- CPU 只有 20~30%:Server 没问题,继续查网络或客户端
排查 3:磁盘 IO 不够
Server CPU 不高但还是卡,可能是磁盘读速度不够:
- 机械硬盘碎片多、坏道
- 同时有多个播放会话(多人同时看)
- Docker 容器里用了慢的存储后端
在 Server 上跑磁盘读速度测试(Windows 用 CrystalDiskMark,Linux 用 hdparm)。普通电影播放至少需要 20~30MB/s 的持续读速。
排查 4:Wi-Fi 信号差
最容易被忽略的原因。你以为 Wi-Fi 5(802.11ac)有 300Mbps,但如果隔了两三堵墙或干扰大,实际有效带宽可能只有 20~30Mbps,甚至更低。
验证:
- 让客户端连有线网线(临时拉一根试试)
- 如果有线播放流畅 → 问题在 Wi-Fi
- 解决:把路由器放高、换 Wi-Fi 6、或者让常用设备(Apple TV、Fire TV)走有线
排查 5:客户端解码能力不够
比如老款 Android TV 盒子(3~4 年前的机型)不支持 HEVC/H.265 硬解,看 HEVC 片源会强制软解,但盒子性能不够就卡。
验证:找一个 H.264 编码的片源(非 HEVC)在同一个客户端上播放。如果 H.264 流畅,HEVC 卡 → 客户端硬件解码 HEVC 不行。
场景二:远程访问卡顿/缓冲
手机/平板在外面用 Emby Connect 或公网 IP 播放卡:
排查 1:客户端比特率设得太高
客户端的 Max streaming bitrate 设得太高,Emby 转码后的码率超过了你当前的带宽:
- 手机 4G:5~10Mbps 够了
- 家宽 Wi-Fi:20~30Mbps(你家宽带上行的 70%)
- 公司 Wi-Fi:看公司网络,可能 5~15Mbps
排查 2:家宽上行带宽是瓶颈
Active Sessions 里看 Current Bitrate:
- 如果设了 10Mbps 但 Active Sessions 里显示只有 3~4Mbps → 说明家宽上行只能供这个速度
- 测试方法:在 Server 上访问 speedtest.net,测 Upload 速度。实际能跑的带宽大约是 Upload 速度的 70%(其他设备也要用)
排查 3:Connect 走中继了
Emby Connect 连不上 P2P 和公网直连时会走中继(流量经过 Emby 的云服务器):
- 中继带宽有限 → 速度很慢
- 解决:配好手动端口转发(让客户端能公网直连),或者换 NAT 穿透更好的路由器
排查 4:手机网络本身不行
手机信号差、地铁里在隧道里、公司 Wi-Fi 限速……这些 Emby 管不了。
场景三:Server 硬件转码没开
明明有 Intel 核显/NVIDIA 独显,但还是在软解转码(CPU 飙高):
检查硬件转码配置
Dashboard → Transcoding → Hardware video decoder:
- 选 Auto 或对应的方案(Quick Sync / NVENC / VAAPI)
- 保存后重启 Emby Server
Docker 环境必须透传设备
Docker 容器里用硬件转码必须在 docker run 里加设备透传参数:
--device=/dev/dri/renderD128 --device=/dev/dri/card0
没加的话容器里看不到核显,Emby 自然只能软解。
宿主机驱动装好了吗
- Intel Quick Sync 需要装 Intel Media Driver(Linux)或 Intel Graphics Driver(Windows)
- NVIDIA NVENC 需要 NVIDIA 显卡驱动 + nvidia-docker
场景四:特定格式特别卡
某部电影卡,但其他都正常:
- 文件本身损坏:用 MediaInfo 检查视频文件有没有异常,或者用 VLC 打开试试会不会也卡
- 码率特别高:4K HDR 蓝光原盘可能 60~80Mbps,某些网络扛不住
- 字幕触发转码:开了 PGS 蓝光字幕 → 触发转码 → 如果没硬件加速就卡 → 先关字幕试试
场景五:多人同时看时卡
一个人看没问题,第二个人加上就卡:
- Server 硬件转码通道数不够(Intel N100 大约同时转 3~4 路 1080p)
- 磁盘 IO 不够(多人同时读不同文件)
- 家宽上行带宽不够(多人同时远程看)
排查工具汇总
| 工具 | 用途 |
|---|---|
| Dashboard → Home → Active Sessions | 实时看转码状态、实时码率、编码格式 |
| Dashboard → Help → Logs | 看转码日志,知道为什么要转码 |
| speedtest.net | 测服务器的公网上行/下行带宽 |
| MediaInfo | 看视频文件的完整编码信息 |
| CrystalDiskMark | 测磁盘读速度 |
| 客户端关闭字幕试一下 | 字幕格式可能触发转码 |