# [Bug] 4K HEVC 103Mbps 片源 DirectPlay 反复 rebuffer:ExoPlayer 内核均 55Mbps / 0.48× 实时,同机同 URL 用 Kodi 可达 105Mbps / 1.05×,mpv 内核同样只有 60Mbps ## 环境 | 项 | 值 | |---|---| | 设备 | Xiaomi TV S Pro Mini LED(MiTV-MFTR0) | | SoC | MediaTek MT9653(`ro.board.platform=mt5879`),4×Cortex-A73,3.86GB RAM | | 系统 | Android 14(SDK 34),HyperOS `3.0.101.0.UFTMATV` | | ABI | `armeabi-v7a,armeabi`(纯 32 位,无 arm64) | | 客户端 | Entryway-TV `com.entryway.tv` v1.0.12(versionCode 56,targetSdk 36) | | 服务端 | Emby 4.10.0.40,局域网,DirectPlay | | 网络 | Wi-Fi 5GHz,RSSI -20dBm,协商 1201Mbps(Wi-Fi 6) | | 客户端设置 | 优先直连播放=开、服务器转码=关、禁用 HEVC=关、串流画质=Original、播放内核分别测 ExoPlayer / mpv | ## 现象 播放 4K HEVC 10bit HDR10 原盘(平均码率 **103.2Mbps**)时: - Emby 会话 `PlayMethod=DirectPlay`,无 `TranscodingInfo`(服务端不转码) - 画面反复停顿转圈,`IsPaused` 反复切换 - 系统时间过 118 秒,播放位置只推进 60 秒(**0.51× 实时**) - 吞吐在 3–116Mbps 之间锯齿状跳动 ## 关键对照(同一台电视、同一条 URL、同一部片) | 播放引擎 | 取流均值 | 峰值 | 播放推进 | |---|---|---|---| | Kodi 21.3(直连同一 302 URL) | **105.4Mbps** | 198.5Mbps | **1.05× 实时** | | Entryway / ExoPlayer 内核 | 55.0Mbps | 116.3Mbps | 0.48× | | Entryway / mpv 内核 | 59.7Mbps | 80.4Mbps | 0.53× | Kodi 前段预缓冲阶段达到均值 136Mbps、2.02× 实时。播放期间 `dumpsys meminfo` 显示 Entryway 进程 PSS 仅 319–334MB(Java Heap 133MB / Native Heap 70MB)。 ## 复现步骤 1. 选一部 4K HEVC 10bit、平均码率 ≥100Mbps 的片源(本报告:《疯狂原始人》2013,76.3GB / 99min / 103.2Mbps / DTS-HD 7.1) 2. Entryway-TV 直接播放(DirectPlay),内核分别选 ExoPlayer 与 mpv 3. 约 10 秒后开始周期性停顿;抓 wlan0 速率可见锯齿,Emby 播放位置推进约 0.5× 实时 ## 量化数据 ### ExoPlayer 内核(每 2 秒采样,120 秒) ```text t(s) Mbps pos t(s) Mbps pos t(s) Mbps pos 2 56.3 107 44 34.7 128 84 61.3 147 7 38.2 112 48 46.3 129 88 75.7 147 11 60.6 112 51 64.9 130 92 39.0 152 15 66.9 113 56 49.7 135 96 53.5 153 19 22.9 117 60 68.9 136 101 73.2 157 23 64.6 117 64 74.0 137 105 27.2 161 27 67.7 117 68 20.9 141 108 73.7 161 31 28.9 122 72 28.2 141 112 69.8 162 35 43.7 123 75 70.1 141 116 30.0 166 39 72.1 123 80 47.3 145 120 69.1 167 ``` - 均值 53.3Mbps,峰值 75.7,最低 20.9;50% 采样点低于片源码率 - 播放推进 60s / 实际 118s = 0.51× 把「播放缓存大小」由 250MB 调到 UI 上限 1000MB 后复测:均值 55.0Mbps,峰值 116.3,推进 0.48×,**无任何改善**;进程 PSS 仍 319MB,与 1000MB 设置不匹配。 ### mpv 内核(62 秒采样) - 均值 59.7Mbps,峰值 80.4,播放推进 0.53× - mpv 自身统计:`hwdec=mediacodec-copy pixels=nv12 vo=gpu` - `cacheSeconds` 在 16 秒内由 8.68 掉到 1.57(下载速度持续低于片源消耗) - 伴随 `Audio device underrun` 反复出现 ### Kodi 21.3 同一 URL(42 秒稳态采样) - 均值 105.4Mbps,峰值 116.9,播放推进 **1.05× 实时** - 无缓冲停顿,画面正常 ## 关键日志 ExoPlayer 内核两轮采样均持续出现: ```text W/DefaultLoadControl( 4691): Target buffer size reached with less than 500ms of buffered media data. ``` 120 秒内 13 条;改成 1000MB 后 93 秒内仍 15 条。 解码器为硬解,并伴随输出帧丢弃: ```text W/ACodec ( 4691): [OMX.MS.HEVC.Decoder] setting nBufferCountActual to 10 failed: -22 D/MediaCodec( 4691): [FWK][onReleaseOutputBuffer] OMX.MS.HEVC.Decoder: discardBuffer: ... mediaTimeUs: ... ``` CPU 占用在 11%–88% 之间波动,与吞吐高低无相关性。 ## 已排除 | 环节 | 实测 | |---|---| | 片源码率 | 103.2Mbps(抓容器头:76.3GB / 5940s) | | 服务端转码 | 无,PlayMethod=DirectPlay,无 TranscodingInfo | | 电视 Wi-Fi 物理层 | RSSI -20dBm,协商 1201Mbps,5GHz,Wi-Fi 6 | | 电视内网单流 | 180Mbps | | 电视→路由器 / 公网 | 0 丢包,2.7ms / 11ms | | 电视是否走代理 | 否,CDN 域名解析为真实公网 IP,直连 | | 同一设备同一 URL 换 Kodi | 105.4Mbps 稳态 / 1.05× 实时,画面正常 | | NAS 有线拉同一条 CDN 直链 | 500–648Mbps | | App 内「播放缓存大小」 | 250MB → 1000MB(UI 上限),无改善 | ## 推断 1. **不是设备或网络限制**:同一台电视、同一条 URL、同一部片,Kodi 能稳定 105Mbps 并以 1.05× 播放,峰值曾达 198Mbps。 2. **问题在 Entryway 的取流/缓冲实现**:ExoPlayer 与 mpv 两个内核都只有 55–60Mbps,且 `DefaultLoadControl` 明确报「字节型缓冲预算不足 500ms」。100Mbps ≈ 12.5MB/s,若预算只能容纳数百毫秒,就会出现「刚开始下载就撞上限 → 停止加载 → 立刻播空 → rebuffer」。 3. 设置页的「播放缓存大小/时长」未作用于播放器内存缓冲:调到 UI 上限 1000MB 后 PSS 仍只有 319MB,行为与警告数量均未变化。 ## 建议排查点(供参考) - `DefaultLoadControl`:`targetBufferBytes` 设为 `C.LENGTH_UNSET` 或按 `minBufferMs × 目标码率` 显式放大;考虑 `setPrioritizeTimeOverSizeThresholds(true)` - `DefaultAllocator`:增大单块 allocation 长度(默认 64KB 级,100Mbps 下每次只覆盖约 5ms) - 检查取流是否被串行化(单连接 + 小 Range):Kodi 用 curl 单连接在同一链路上能跑 105Mbps,说明并发/缓冲策略存在差距 - mpv 内核:`hwdec=mediacodec-copy` + `vo=gpu` 带来 4K 帧拷贝开销并把 10bit 降为 nv12,建议改用 0-copy 硬解路径 - 把设置页的「播放缓存大小/时长」真正映射到 `LoadControl`,或在 UI 说明它是磁盘缓存 ## 备注 - 本机为 32 位系统(`abilist=armeabi-v7a`),无法安装 64 位构建,以上数据全部来自 32 位包。 - App 内「播放缓存大小」UI 上限为 1000MB,实测未作用于播放器内存缓冲。 - 播放期间显示屏保持 `1920x1080 / colorMode 0`(SDR),未进入 HDR 图像模式——另一个独立问题,未纳入本 issue。