记录一次 Rclone挂载网盘为本地文件夹,Emby播放视频出现连续跳集的原因分析以及解决。
- Windows 客户端每次点播放都会瞬间触发「下一集」并立即调用
Playback/Stopped
,播放时长为 0 ms。 - 服务端日志里大量
Bitrate exceeds DirectPlay / DirectStream limit
→ 强制转码。 - 转码进程被
SIGKILL
(code 137),随后返回 HTTP 500 → 客户端收不到首片,于是立即跳到下一集。 - 根因:挂载在
/extdisk02/embyGallery/baiduLibs
的 rclone 云盘文件首次读取极慢(> 15 s),Emby 的 15 s 转码启动超时后被 systemd-oom 或者手动资源限制杀死 ffmpeg,导致首片0.ts
生成失败。 - 最终表现:Windows 客户端"连环跳集",而 Web 端因为等待时间更长或已缓存,能正常播放。
解决思路(按优先级)
-
把「云盘 → rclone → 本地」改成「云盘 → rclone cache / vfs-cache-mode writes」
rclone mount baidu: /extdisk02/embyGallery/baiduLibs \ --vfs-cache-mode full \ --cache-dir /var/lib/emby/rclone-cache \ --buffer-size 256M \ --dir-cache-time 24h \ --poll-interval 1h
让 rclone 先把文件拉到本地 SSD,首片秒开,Emby 不再超时。
-
调大 Emby 转码启动超时
Emby Server → 转码 → 「允许转码启动时间」改成 60 s 或更长;
同时把
/var/lib/emby/transcoding-temp
指向本地 SSD,减少 IO 阻塞。 -
降低码率或关闭强制转码
• 用户策略「最大码率」≥ 20 Mbps(高于原片 1.9 Mbps),让文件 Direct Play;
• 或者把片源统一压成 3-5 Mbps H.264,减小首片读取量。
-
排除 OOM / 资源限制
dmesg | egrep -i "killed process|oom"
确认是否内存不足;若确实被杀,给 Emby 和 ffmpeg 加 systemd slice,限制并发转码数或增大内存。
-
只读挂载导致 .nfo 无法写入
日志中
Read-only file system
不影响播放,但会污染日志。把库设为「只读」或把 rclone 挂载改为
--vfs-cache-mode writes
即可。
一句话总结
把云盘文件用 rclone vfs-cache-mode full 缓存到本地 SSD,再适当放宽 Emby 的转码超时或提升客户端码率限制,即可彻底消除 Windows 客户端的「连环跳集」问题。