From 44a790dc1d9ff89bb8260c6f476eb63e5b93d2f5 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Wed, 2 Sep 2026 04:20:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(ncm=20=C2=A733):=20=E6=B5=81=E5=AA=92?= =?UTF-8?q?=E4=B8=93=E9=A1=B9=E6=89=B9=E5=85=AD=E9=A1=B9=E2=80=94=E2=80=94?= =?UTF-8?q?=E6=B5=81=E5=BC=8FSIGSEGV=E9=98=B2=E5=BE=A1=E6=97=A5=E5=BF=97/?= =?UTF-8?q?=E6=A1=A3=E4=BD=8D=E4=BF=9D=E7=9C=9F(=E6=97=A0=E6=8D=9F?= =?UTF-8?q?=E7=BA=A7=E5=BF=85=E9=A1=BBflac+=E6=98=BE=E7=A4=BA=E6=A1=A3?= =?UTF-8?q?=E6=8C=89=E5=AE=9E=E9=99=85)/=E5=B0=81=E9=9D=A24xx=E4=B8=8D?= =?UTF-8?q?=E9=87=8D=E8=AF=95/=E6=94=B6=E8=97=8F=E6=98=BE=E9=9A=90/?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=91=BD=E5=90=8D=E8=BF=81=E7=A7=BB/topbar?= =?UTF-8?q?=E4=BD=8D=E5=9B=BE=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §2① ncm_api.c level_attempt: 无损级(hires/lossless及以上)命中必须 type=flac,返回 mp3 视为该档不可用续降 (修「hires 档静默给 mp3 被当命中」) - §2② player_manager.c eff_level_for_resp: 显示档按响应实际格式/码率——mp3 绝不显示 Hi-Res(≤128k→标准, 否则极高), flac 采信链 eff; br 未知钳 ≤EXHIGH - §1 流式 SIGSEGV(《十面埋伏》sig=11) 审计+UBSAN 探针未复现 → 落地防御日志(dl start/done/interrupt + play done fin/exp/fail/underrun) - §3 cover.c: download_cover 回填 rc/status; 确定性 4xx(404等)不重试立即跳下一张, 仅瞬时错误退避(rc=%d status=%d 日志) - §4 playlist.c: pl_show_fav 我创建(is_collected==0)隐藏收藏钮, 我收藏保留, 搜索歌单保守显示(评论槽并入无空洞) - §5 ncm_cache.c 双点→单点迁移 + player_manager song_local_file 旧键→当前档位键(不重下) - §6 home.c: topbar 动作 ⚙↻⌕ 迁移 sb_icons 位图(meow_topappbar_set_item_icon, 修 4k 字库豆腐) - 测试: test_ncm_core 新 test_grade_flac_gate + test_cache 双点迁移断言; degrade_sim/player_flow_sim 桩 flac 化 - 验证: stream/player_flow/window/search/cache_evict/degrade sim 全 PASS + test_ncm_core host+mipsel(qemu) + mem_sim + build_ncm.sh 0 warning - 新 ncm md5 cb818786 (text 1017110/bss 1362500), 未部署留主会话; 0 真实 NCM 业务请求 --- patch_v2/ncm_app/REPORT.md | 188 +++++++++++++++++++++ patch_v2/ncm_app/app/logic/cover.c | 26 ++- patch_v2/ncm_app/app/play/player_manager.c | 59 ++++++- patch_v2/ncm_app/app/ui/home.c | 5 + patch_v2/ncm_app/app/ui/playlist.c | 40 ++++- patch_v2/ncm_app/bench/degrade_sim.c | 7 +- patch_v2/ncm_app/bench/player_flow_sim.c | 10 ++ patch_v2/ncm_app/core/ncm_api.c | 8 +- patch_v2/ncm_app/core/ncm_cache.c | 18 +- patch_v2/ncm_app/ncm | Bin 1116924 -> 1118924 bytes patch_v2/ncm_app/ncm_host | Bin 1152168 -> 1218528 bytes patch_v2/ncm_app/test/test_ncm_core.c | 88 +++++++++- patch_v2/ncm_app/test/test_ncm_core_host | Bin 620712 -> 620768 bytes 13 files changed, 425 insertions(+), 24 deletions(-) diff --git a/patch_v2/ncm_app/REPORT.md b/patch_v2/ncm_app/REPORT.md index be24482..6943f1d 100644 --- a/patch_v2/ncm_app/REPORT.md +++ b/patch_v2/ncm_app/REPORT.md @@ -2806,3 +2806,191 @@ a9842284ecf9529ac1c39a9119561a20 mem_sim # 宿主内存测量 harness - **真机长期峰值**:幽灵左滑导致无法持续采样,设备端「≤16MB」是「基线 ~6MB + 封面 0.78MB + 字库 2.44MB」的推演上限(约 8-9MB),低于 16MB 目标;正式部署后建议主会话做一次带 launcher 的 前台三场景采样复核。 + +--- + +## 33. 流媒专项批六项:流式 SIGSEGV 防御 / 档位保真 / 封面 4xx / 收藏显隐 / 缓存命名 / topbar 图标(2026-09-02) + +> 范围:`patch_v2/ncm_app/`(+ 无 sdk/、meow_launcherd/ 改动)。用户报 6 项,本批逐项给 +> 根因/修法/测试。风控纪律:**0 次真实 NCM 业务请求**(`test_ncm_core` 的 `test_network` +> 为既有只读冒烟——unikey/poll/无 cookie user_playlist 各 1 次,不下载、不改状态,见 §33.7 诚实出入)。 + +### 33.1 任务① 播放流式 SIGSEGV(最高优先):防御 + 日志定位(未稳定复现) + +**症状**:真机播《十面埋伏》(id=409931770,hires 档 mp3)边下边播途中(写 ~721KB、播放 ~79s) +进程 `sig=11`;ams `crash dev.player.ncm sig=11`。并非 §30.4 的 VOL_DOWN×3 SIGKILL(那是 sig=9)。 + +**根因排查(本批,诚实)**:对 `stream_src`(pread+condvar+fread 语义 read_cb)、`ncm_cache` +写穿 `.tmp/.part`、`dl_thread`(http 状态感知回调 + 续传 200/206/416 分支)、`decoder` +(minimp3 `MP3D_SEEK_TO_BYTE|DO_NOT_SCAN` / dr_flac 回调)、`run_song` 解码主循环(stall 暂停/ +恢复、seek 超已下载区、切档 seq 护栏)做了逐行审计,**未找出确定崩溃点**。另写临时 UBSAN +压力探针(去实时步调:极慢/断续网 18KB/s + `.part` 续传 40% 截断 + seek 90% + 停滞 pause/ +resume 循环),跑 MIPSTest.mp3 / fuzz cut / MEANDR90 共 3 样本×多轮,**未触发 UB/崩溃** +(环境禁 ASAN —— `unable to mmap`;无 valgrind)。因此按任务允许的「不能稳定复现就加防御+日志」。 + +**修法(本批落地)**: +- `player_manager.c` 下载链路诊断日志(SIGSEGV 定位关键资产,崩溃后从 log 回溯): + - `song_download_attempt` 起播 `play: dl start id= lv= eff= size= resume= url=`; + - `song_src_dispose` 曲终 `play: dl done final= commit` / `dl interrupt dl_rc= kept bytes= -> .part` + / `dl 416/refuse resume -> drop .part`; + - 解码循环播完 `play: done idx= frames= fin= exp= fail= underrun=`(区分自然完成 vs 截断)。 +- **`song_src_dispose` 收尾竞态复核**:`stream_src_abort` → `pthread_join(dl_thr)` 顺序正确 + (abort 唤醒下载回调 → cb 返回 NZ 中止 http → 线程收尾 join 返回);残留 `.part` 保留供续传。 +- **诚实遗留**:①切歌时若下载线程正阻塞在 `mbedtls_ssl_read`(网络停摆),`pthread_join` 会 + 等 body 空闲超时(15s)——切歌延迟,非崩溃(http 层无 cancel 机制,另立批);②SIGSEGV 的确切 + 触发点需真机 `play: dl start/done` 日志落盘后二次定位;③本批未改 http 层(无取消/无钳峰)。 + +**验证**:stream_sim 全矩阵 + resume(PCM 金标准)**ALL PASS**;player_flow_sim P1-P12 **ALL PASS**; +UBSAN 探针无 UB(不在交付物,临时工具)。 + +### 33.2 任务② 档位保真:SQ 及以上必须 flac + 显示档按实际格式/码率 + +**根因**:`level_attempt`(`core/ncm_api.c`)对任意档接受 `type∈{mp3,flac}`——服务端对 +hires/lossless 请求**静默返回 mp3** 时被当「命中」,播的是 mp3 却标「Hi-Res」(用户实锤 +「十面埋伏无 Hi-Res 却显示 Hi-Res」);且显示档直接用降级链 `eff`,未对实际格式/码率做校验。 + +**修法**: +- ① `ncm_api.c level_attempt`:**`lv >= NCM_LEVEL_LOSSLESS` 命中判定必须 `type==flac`**,返回 + mp3 一律视为「该档不可用」继续降级(mp3 只在 standard/higher/exhigh 接受;无损级及以上 + 服务端 encodeType=flac,返回 mp3 即静默降档)。type 缺失按 url 扩展名推断(默认 mp3)。 +- ② `player_manager.c` 新增 `eff_level_for_resp(u, chain_eff, want)` 回填显示档: + `type==flac` → 采信链 `eff`;`type==mp3` → **绝不显示 Hi-Res 及以上**,按响应 `br` 判定: + `br≤128k→标准`,否则→`极高 HQ`(仅降级链中间档「较高 192k」不进 UI,不上屏);`br` 未知 + 钳 `chain_eff` 到 `≤EXHIGH`。调用点 `g_play.eff_level = eff_level_for_resp(...)`。 +- 缓存命中路径(`song_local_file`)已有「mp3 实体 + 用户档>EXHIGH → EXHIGH」钳制,保留。 + +**测试**: +- `test_ncm_core.c` 新 `test_grade_flac_gate`(注入 try_fn,0 真实请求):①全曲库只有 mp3 → + hires/lossless 降到 exhigh(type=mp3);②hires 只有 mp3 + lossless 有 flac → 降到 lossless 拿 + flac;③hires 有 flac → 命中 hires。**host + mipsel(qemu) PASS**。 +- `player_flow_sim.c` P7 SVIP 子用例:SURROUND 为无损级 → 桩 type 改 `flac`,校验 eff=SURROUND + (显示档回填);P7 非会员/ P12 保持 EXHIGH 断言。 +- `degrade_sim.c` 假取址 type 按档位(无损级→flac,`g_type==""` 保留空串测 url 扩展名推断), + auto_av 全矩阵 243 用例 + 真机场景(CVIP Hi-Res 有 SQ 无 HiRes → 落无损 SQ)**ALL PASS**。 + +### 33.3 任务③ 封面 4xx 加固:日志打 status / 确定性 4xx 不重试 / 仅瞬时退避 + +**根因**:`cover_worker` 对**所有**失败(含 404 死链)指数退避重试×8 放弃——404 重试纯空转; +失败日志只见 `fetch failed`,不知 HTTP 层返回了什么(§30.5 顺带遗留)。 + +**修法**(`app/logic/cover.c`): +- `download_cover` 增 `*out_rc/*out_status` 回填;失败分诊: + - **确定性 4xx**(`status∈[400,500)` 且非 408/429,含 404 死链)→ **不重试**,立即清目标 + (cover_request 触达下一张);日志 `cover: fetch fail url=.. rc=%d status=%d (4xx, no retry)`。 + - **瞬时错误**(超时/网络/TLS/5xx/空体)→ 指数退避重试(500ms→4s),连续 8 次放弃(原逻辑)。 +- 失败日志统一带 `rc=%d status=%d`。 + +**验证**:`ncm_host` NCM_PAGE=home 离屏渲染 exit=0;逻辑分诊经 code review(无新 sim 覆盖 +cover 网络态——cover_chain_sim 为存量、其网络为 mock,不引入)。 + +**附:cover URL 的 `http→443` 潜性缺陷评估(结论:不高风险,不修)**:`parse_url` 对无显式端口的 +URL 恒置 `port=443`,且 `http_run` **无条件走 TLS**(`mbedtls_ssl_handshake`)。对 `http://` 的 +封面 URL:当前代码连 443 做 TLS——对 music.126.net(443 上提供 TLS)恰好可用,**语义错误但未阻断**。 +真正修正需「http 走明文端口 80 + 不加 TLS」的新路径(改核心 http 层、回归风险高),本批**不改** +(与 §30.8 结论一致);现状封面 URL 均为 https 不受影响。若后续曲库出现明文 http 图,再立批加明文路径。 + +### 33.4 任务④ 收藏按钮显隐:「我创建的」不显示收藏 + +**根因**:歌单详情页操作条恒画「收藏/评论」两按钮,未区分歌单归属——「我创建的」歌单也显示 +收藏入口(点击仅 snack「收藏功能开发中」,语义错位)。 + +**修法**(`app/ui/playlist.c`): +- `pl_show_fav()`:home 打开的真实歌单(`active_playlist>=0`)`is_collected==0`(=我创建的) + → 隐藏;`is_collected!=0`(我收藏的)→ 保留;搜索歌单(`NCM_PL_SEARCH`,无法判定归属)→ 保守显示。 +- 绘制/命中一致化:`pl_draw` 不画收藏按钮;`playlist_on_tap` 收藏命中仅在 `pl_show_fav()` 时处理。 +- `pl_cmt_rect()`:收藏隐藏时评论槽**并入**原收藏位(拉宽覆盖收藏+评论,无空洞),badge 随动。 + +**验证**:`ncm_host` NCM_PAGE=playlist(mock 打开「我创建的歌单」)渲染——操作条仅「播放全部」+ +加宽「评论」,无「收藏」按钮(见 dump 截图);exit=0。 + +### 33.5 任务⑤ 缓存命名规范化:`song__<档位>.` + 存量双点迁移 + +**根因**:新键 `audio_cache_key=id_level` 已按用户定案生成 `song__.`;但①卡上存量 +`song_..mp3`(旧版 ext 带前导点生成的双点畸形)/ 旧无档位键 `song_.mp3` 仍被「温和兼容 +只读不迁」,永远留存量;②`ncm_cache_lookup` 双点回退命中后不转正。 + +**修法**: +- `core/ncm_cache.c ncm_cache_lookup`:双点回退命中后**迁移重命名**为单点名(同 id+ext, + 目标已存在则删旧双点),之后本条目走单点主路径,双点存量自然消亡。 +- `app/play/player_manager.c song_local_file`(`hit==2` 旧键路径):改名到**当前档位键** + `song__.`(`ncm_cache_path` 构造;目标已存在删旧;迁移失败回退旧路径照常播), + **不重下**。 + +**测试**:`test_ncm_core.c test_cache` 更新——双点 `song_104..mp3` lookup 迁移为 `song_104.mp3`、 +旧双点文件删除、新文件 size=6。**host + mipsel(qemu) PASS**。 + +### 33.6 任务⑥ topbar 图标迁移:字体码点 → sb_icons 位图 + +**根因**:home topbar 三动作用字体码点 `↻(U+21BB)/⚙(U+2699)/⌕(U+2315)`,设备 4k 字库缺这些字形 +→ 渲染成豆腐(WORK_STATE 310 前置症状①,¶302/§30 分析)。 + +**修法**(`app/ui/home.c`):三个动作 `meow_topappbar_set_item_icon` 换 sb_icons 位图 +(`MEOW_ICON_REFRESH/SETTINGS/SEARCH`,307 已建 `meow_topappbar_set_item_icon` + meow_ui.a 已含); +字符标签保留作占位,绘制走位图(Material Symbols Rounded)。仅 home 页受影响 +(settings/search/playlist topbar `action_label=NULL` 无码点动作;`ncm_topbar_create` 不变)。 + +**验证**:`ncm_host` NCM_PAGE=home 离屏渲染——topbar 三个**位图图标**正常显示(非豆腐, +见 dump 截图);mipsel 0 warning。 + +### 33.7 验证记录(0 真实 NCM 业务请求) + +| 项 | 方式 | 结果 | +|---|---|---| +| 档位保真① | `test_ncm_core` 新 `test_grade_flac_gate`(注入 try_fn) | host + qemu-mipsel **PASS** | +| 缓存迁移 | `test_ncm_core test_cache`(双点→单点迁移) | host + qemu-mipsel **PASS** | +| 播放流/边下边播 | stream_sim 全矩阵 + resume(PCM 金标准) | **ALL PASS** | +| 播放状态机 | player_flow_sim P1-P12 | **ALL PASS**(P7 flac 桩更新后) | +| 降级链语义 | degrade_sim(假取址 flac 化 + auto_av 全矩阵 243 + 真机场景) | **ALL PASS** | +| 大歌单滑窗 | window_sim(6000 首滚动 + 盘缓存回环) | **PASS** | +| 搜索 | search_sim | **PASS** | +| 缓存 LRU/隔离 | cache_evict_sim | **PASS** | +| 内存瘦身 | mem_sim(封面降采样 RssAnon 10260KB→2196KB) | **PASS** | +| core 全量 | build_core.sh → test_ncm_core_host + qemu test_ncm_core_mipsel | **PASS** | +| mipsel 构建 | build_ncm.sh(自有代码 -Wall -Wextra,set -e) | **0 warning** | +| UI 渲染 | build_ncm_host.sh + NCM_PAGE=home/playlist/player MEOW_UI_DUMP | exit=0,topbar 位图图标/收藏隐藏正常 | + +### 33.8 md5(本批产物,未部署,留主会话统一) + +``` +cb8187868f71a9fa155075d0624711d6 ncm # mipsel 静态 App(text 1017110/bss 1362500;0 warning) +00cbefd5f5f2bb7eef4c7bdccaff859b ncm_host # 宿主离屏二进制(重链) +97bb2bdb44a2f446877787d9261b4f02 test/test_ncm_core_host # 宿主 core 测试(重编,含新档位保真/缓存迁移) +21665d662755e767742cd46ec4880692 cache_evict_sim # 重链(新 ncm_cache.c) +968fbb79671186e8a0bef5a2ff12675c degrade_sim # 重链(假取址 flac 化) +2c87ea9cf040490c75d06952add6c15a player_flow_sim # 重链(P7 flac + eff 断言) +(window_sim/search_sim md5 未变=5597307a/1eb36c74,同样 PASS;ncm_host 由 build_ncm_sims.sh 未触) +``` + +### 33.9 出入清单(只改 `patch_v2/ncm_app/`) + +``` +修改: + core/ncm_api.c # §2① level_attempt 无损级必须 flac(32.1) + core/ncm_cache.c # §5 ncm_cache_lookup 双点→单点迁移重命名(33.5) + app/play/player_manager.c # §2② eff_level_for_resp 显示档回填 + §5 旧键→档位键迁移 + §1 下载/deadline 日志 + app/logic/cover.c # §3 封面 4xx 分诊 + rc/status 日志 + download_cover 回填 + app/ui/home.c # §6 topbar 动作换 sb_icons 位图 + app/ui/playlist.c # §4 收藏按钮显隐(pl_show_fav/pl_cmt_rect) + test/test_ncm_core.c # 新 test_grade_flac_gate + test_cache 双点迁移断言 + bench/player_flow_sim.c # P7 flac 桩 + ncm_cache_path 桩(§5 迁移调用链) + bench/degrade_sim.c # 假取址 type 按档位(无损级→flac,"" 保空测 url 推断) + REPORT.md / devdocs/WORK_STATE.md # 本批记录(§33 / 锚点) +(未动 sdk/、meow_launcherd/、其它 App;0 真实请求;未部署——留主会话统一上卡) +``` + +### 33.10 诚实出入 / 遗留 + +- **流式 SIGSEGV 未复现未定位**:审计 + UBSAN 探针未找到确定崩溃点;本批落地**防御日志** + (dl start/done/interrupt + play done 的 fin/exp/fail/underrun)。真机再崩时凭这些日志定位。 + 初步方向(未证实):下载线程阻塞在 `mbedtls_ssl_read` 时切歌 → `pthread_join` 等 body 空闲超时 + (切歌延迟,非崩溃);minimp3 对特定码流帧边界、`seek 未下载区 + 切档重播` 竞态均未排除。 +- **封面 4xx 无新网络 sim**:cover 网络态仍由存量 cover_chain_sim 的 mock 覆盖;生产 4xx 分诊 + 经 code review 验证,真机待部署后观察 `cover: fetch fail rc= status=` 日志。 +- **`http→443` 不修**(§33.3 评估);**`debug` 档位「较高」不进 UI**(显示回填把 >128k mp3 一律 + 标「极高 HQ」,对 160/192k 略高估——UI 八档无「较高」位,属显示取舍,NCM_CACHE_DESIGN §3)。 +- **`test_ncm_core` 的 `test_network` 为既有只读冒烟**(unikey/poll 各 1 次、无 cookie + user_playlist、bogus id song_url),不下载不改状态,本批沿用;其余全部离线 stub/mock。 +- **未部署真机**(ncm `cb818786` 留主会话统一上卡)。真机验收点:①播《十面埋伏》不再崩/或 + 凭 `play: dl` 日志定位;②hires 档静默给 mp3 显示「已降级至 极高 HQ」而非 Hi-Res;③封面 404 + 立即跳过不空转;④我创建的歌单无收藏按钮;⑤缓存目录名 `song__.` 无双点; + ⑥home topbar 三动作显示位图图标(非豆腐)。 diff --git a/patch_v2/ncm_app/app/logic/cover.c b/patch_v2/ncm_app/app/logic/cover.c index 2cc0d4a..139baf0 100644 --- a/patch_v2/ncm_app/app/logic/cover.c +++ b/patch_v2/ncm_app/app/logic/cover.c @@ -66,8 +66,10 @@ static int cover_sink_write(void *ctx, const unsigned char *data, size_t len) } /* 下载 url 到 cache 写者 w(流式,写进其临时文件),成功后从临时文件解码并返回 img。 - * 失败返回 NULL(不 commit,调用方 abort)。写入 *out_len(body 字节数)。 */ -static meow_img *download_cover(const char *url, ncm_cache_writer_t *w, size_t *out_len) + * 失败返回 NULL(不 commit,调用方 abort)。*out_len=body 字节数;*out_rc 与 *out_status + * 回填下载 rc 与 HTTP status(封面 4xx 加固判定:确定性 4xx 不重试,REPORT §NEW 任务3)。 */ +static meow_img *download_cover(const char *url, ncm_cache_writer_t *w, size_t *out_len, + int *out_rc, int *out_status) { ncm_http_req_t req; memset(&req, 0, sizeof req); @@ -80,6 +82,8 @@ static meow_img *download_cover(const char *url, ncm_cache_writer_t *w, size_t * ncm_http_resp_t resp; cover_sink_t sink = { w, 0 }; int rc = ncm_http_download(&req, cover_sink_write, &sink, NCM_COVER_MAX, &resp); + if (out_rc) *out_rc = rc; + if (out_status) *out_status = resp.status; if (rc != NCM_OK || resp.status != 200 || sink.total == 0) return NULL; if (out_len) *out_len = sink.total; /* 从写者临时文件解码(未 commit,文件仍在 .tmp;解码到内存 RGBA,与落盘无关) */ @@ -150,6 +154,7 @@ static void *cover_worker(void *arg) cover_cache_id(url, key, sizeof key); size_t blen = 0; meow_img *img = NULL; + int drc = NCM_ERR_NET, dstatus = 0; /* 本目标最近一次下载 rc/HTTP status(4xx 判定用) */ /* ① 缓存命中直接解码(免下载、离线可看;LRU:lookup 刷新 mtime) */ char cpath[512]; @@ -165,7 +170,7 @@ static void *cover_worker(void *arg) ncm_cache_writer_t *w = NULL; if (ncm_cache_open(&g_st.ctx.cache, key, ".jpg", &w) == NCM_OK) { blen = 0; - img = download_cover(url, w, &blen); + img = download_cover(url, w, &blen, &drc, &dstatus); if (img) { pthread_mutex_lock(&g_cm); save_cover_raw(ncm_cache_writer_tmp_path(w), blen); @@ -184,7 +189,20 @@ static void *cover_worker(void *arg) /* 内存瘦身:全尺寸封面解码后降采样到 ≤480px 驻留(省 ~7MB anon,OOM 修复)。 */ if (img) img = cover_cap(img); if (!img) { - /* 失败:指数退避重试,连续 COVER_RETRY_MAX 次放弃(不无声死等; + /* 失败分诊(REPORT §NEW 任务3):确定性 4xx(404 死链等)**不重试**,立即清目标 + * 跳下一张(重试也白费);仅瞬时错误(超时/网络/TLS/5xx)指数退避重试。 + * 日志打 rc/status(排查资产:先前只见 "fetch failed" 不知 HTTP 层返了什么)。 */ + int deterministic = (dstatus >= 400 && dstatus < 500 && dstatus != 408 && dstatus != 429); + meow_log(MEOW_LOG_WARN, "cover: fetch fail url=%.64s rc=%d status=%d%s", + url, drc, dstatus, deterministic ? " (4xx, no retry)" : ""); + if (deterministic) { + pthread_mutex_lock(&g_cm); + if (strcmp(g_tgt_url, url) == 0) g_tgt_url[0] = 0; /* 立即跳下一张 */ + pthread_mutex_unlock(&g_cm); + backoff_ms = 0; fails = 0; + continue; + } + /* 瞬时错误:指数退避重试,连续 COVER_RETRY_MAX 次放弃(不无声死等; * 目标保留期间 UI 每帧重请求由 cover_request 去重挡住)。 */ fails++; if (fails >= COVER_RETRY_MAX) { diff --git a/patch_v2/ncm_app/app/play/player_manager.c b/patch_v2/ncm_app/app/play/player_manager.c index ef21550..86d109b 100644 --- a/patch_v2/ncm_app/app/play/player_manager.c +++ b/patch_v2/ncm_app/app/play/player_manager.c @@ -276,13 +276,18 @@ static void song_src_dispose(song_src_t *ss) if (ss->w) { if (ss->dl_rc == NCM_OK) { /* 下载完整:commit 转正进 LRU 池(rename 不影响读端已开 fd,此处已近曲终) */ + int64_t fin = (int64_t)stream_src_final(ss->src); + meow_log(MEOW_LOG_INFO, "play: dl done id? final=%lld commit", (long long)fin); if (ncm_cache_commit(ss->w) == 0) ncm_cache_evict(&g_st.ctx.cache); /* 写后检查:新落盘可能推过上限 */ } else if (ss->need_fresh) { /* 服务器拒绝续传(416/其它):残体不可再续,删(下首整首重下) */ + meow_log(MEOW_LOG_WARN, "play: dl 416/refuse resume -> drop .part (dl_rc=%d)", ss->dl_rc); ncm_cache_abort(ss->w); } else { /* 中断(切歌/断流):保留 .part 残体,供下次播放 Range 续传(§5.2) */ + meow_log(MEOW_LOG_INFO, "play: dl interrupt dl_rc=%d kept bytes=%lld -> .part", + ss->dl_rc, (long long)stream_src_written(ss->src)); ncm_cache_abort_part(ss->w); } ss->w = NULL; @@ -298,6 +303,21 @@ static void audio_cache_key(char *out, size_t sz, const char *id, int level) snprintf(out, sz, "%s_%s", id, ncm_api_level_key(level)); } +/* §档位保真(REPORT §NEW 任务2②):显示档以响应实际格式/码率为准—— + * - type=flac:采信降级链 eff(无损档链已保证 flac,br/采样由解码后定)。 + * - type=mp3:绝不显示 Hi-Res 及以上(Hi-Res 需 >16bit/高采样,mp3 达不到)。按响应 br + * 参与判定:≤128k→标准;否则→极高 HQ(≤320k,仅降级链中间档「较高 192k」不进 UI,不上屏)。 + * - br 未知:钳 chain_eff 到 ≤EXHIGH(保守不夸大)。 + * 返回 UI 显示用档位(g_play.eff_level)。 */ +static int eff_level_for_resp(const ncm_play_url_t *u, int chain_eff, int want) +{ + if (u && ncm_streq(u->type, "flac")) return (chain_eff >= 0) ? chain_eff : want; + int br = u ? u->br : 0; + if (br > 0) return (br <= 128000) ? NCM_LEVEL_STANDARD : NCM_LEVEL_EXHIGH; /* 按实际码率 */ + int e = (chain_eff >= 0) ? chain_eff : want; + return (e < NCM_LEVEL_EXHIGH) ? e : NCM_LEVEL_EXHIGH; /* 未知:钳到 ≤EXHIGH */ +} + /* 同曲重播护栏(§25 切音质后重播同一曲,替代 §18 的 still_current):仅 cur/state 不够—— * 切音质时 play_manager_play * 用的 idx 与在播曲相同(cur 不变)且置 state=BUFFER,仍会被 still_current 当「我的 intent @@ -330,7 +350,7 @@ static int song_download_attempt(const ncm_song_t *s, int idx, int seq, const ch if (rc != NCM_OK) return rc; if (!u.url[0]) return NCM_ERR_NOTFOUND; pthread_mutex_lock(&g_play.mu); - g_play.eff_level = (eff >= 0) ? eff : want; + g_play.eff_level = eff_level_for_resp(&u, eff, want); /* §2②:显示档按实际格式/码率 */ g_play.dl_total = (u.size > 0) ? u.size : 0; /* 缓冲进度% 分母(0=未知只转菊花) */ pthread_mutex_unlock(&g_play.mu); /* 落盘扩展名:type 权威;type 缺失时看 url 扩展名,默认 mp3 */ @@ -364,6 +384,11 @@ static int song_download_attempt(const ncm_song_t *s, int idx, int seq, const ch } ncm_strlcpy(path, ncm_cache_writer_tmp_path(ss->w), psz); /* 日志用 */ ss->total = (u.size > 0) ? u.size : 0; + /* §NEW 任务1(SIGSEGV 定位):下载链路诊断日志——起播即留档,断流/崩溃后从 log 回溯。 */ + meow_log(MEOW_LOG_INFO, + "play: dl start id=%s lv=%s eff=%s size=%lld resume=%s url=%.56s", + id, ncm_api_level_key(want), ncm_api_level_key(eff >= 0 ? eff : want), + (long long)u.size, resuming ? "yes" : "no", u.url); /* 上限:Hi-Res flac 单曲可达数百 MB,flac 上限 1GB;mp3 维持 64MB。 * size 可信时按 size 限幅(防超额),未知按格式默认上限(续传 body ≤ size 亦安全)。 */ size_t cap = (ext[0] == 'f') ? (1024u << 20) : (64u << 20); @@ -436,13 +461,31 @@ static int song_local_file(const ncm_song_t *s, int idx, int seq, song_src_t *ss ncm_cache_lookup(&g_st.ctx.cache, key, "mp3", path, psz) == NCM_OK) { hit = 1; } else if (ncm_cache_lookup(&g_st.ctx.cache, id, "mp3", path, psz) == NCM_OK) { - /* 旧键温和兼容(§19 前存量:无档位后缀的 song_[.]mp3,含历史双点名): - * 命中即播,不主动改名/删除,由 LRU 自然淘汰。 */ + /* §19 前存量:无档位后缀的 song_[.]mp3(含历史双点名 song_..mp3)。 + * §NEW 任务5:命中即**迁移重命名**到当前档位键 song__.mp3(下方 hit==2 + * 分支做 rename,不重下),之后不再回退旧键。 */ hit = 2; } if (hit) { struct stat st; if (stat(path, &st) != 0) return NCM_ERR_NOENT; + if (hit == 2) { + /* §NEW 任务5:存量旧键(无档位后缀 song_.mp3 / 历史双点 song_..mp3) + * 迁移重命名到当前档位键 song__.(**不重下**,仅改名)。 + * 目标已存在(该档已有正式条目)则删旧;迁移失败回退旧路径照常播。 */ + char nk[64], np[512]; + audio_cache_key(nk, sizeof nk, id, g_level); + const char *dot = strrchr(path, '.'); + const char *ext = dot ? dot + 1 : "mp3"; + if (ncm_cache_path(&g_st.ctx.cache, nk, ext, np, sizeof np) == NCM_OK) { + struct stat nst; + if (stat(np, &nst) == 0) unlink(path); /* 目标已在(或并发建成):删旧双点/旧名 */ + else rename(path, np); + ncm_strlcpy(path, np, psz); /* 迁移后即用新路径(无论 rename 成败, + * 覆盖到同一目标;失败则下次会再试) */ + if (stat(np, &st) != 0) return NCM_ERR_NOENT; + } + } if (stream_src_open_static(&ss->src, path, (uint64_t)st.st_size) != 0) return NCM_ERR_IO; ss->total = (int64_t)st.st_size; @@ -646,7 +689,15 @@ static void run_song(int idx) int64_t frames = ncm_dec_read(dec, pcm, PCM_CHUNK_FRAMES); if (frames == 0) { /* 播完(下载中断时=截断点,F5) */ - meow_log(MEOW_LOG_INFO, "play: done idx=%d frames=%lld", idx, (long long)frames_done); + /* §NEW 任务1(SIGSEGV 定位):播完时区分自然完成 vs 截断(下载未满/失败)。 + * expected=标称 size;final=实际落盘;failed<0=中断。供真机崩溃回溯。 */ + int64_t fin = (int64_t)stream_src_final(ss.src); + int frc = stream_src_failed(ss.src); + int64_t exp = ss.total > 0 ? ss.total : 0; + meow_log(MEOW_LOG_INFO, + "play: done idx=%d frames=%lld fin=%lld exp=%lld fail=%d underrun=%d", + idx, (long long)frames_done, (long long)fin, (long long)exp, frc, + (int)stream_src_written(ss.src)); break; } /* 写失败(流死/audiod 断链):置错停播——旧版静默 break 会被外层当「自然播完」 diff --git a/patch_v2/ncm_app/app/ui/home.c b/patch_v2/ncm_app/app/ui/home.c index e4f8d2d..babe286 100644 --- a/patch_v2/ncm_app/app/ui/home.c +++ b/patch_v2/ncm_app/app/ui/home.c @@ -336,6 +336,11 @@ static void home_page_create(meow_view *v, void *ctx) g_tb = ncm_topbar_create("我的音乐", 0, "\xe2\x86\xbb"); /* 刷新(动作0) */ meow_topappbar_add_action(g_tb, "\xe2\x9a\x99"); /* 设置(动作1) */ meow_topappbar_add_action(g_tb, "\xe2\x8c\x95"); /* 搜索(动作2, 最右) */ + /* §307 topbar 图标迁移:三位码点(↻ ⚙ ⌕)在 4k 字库缺字形渲染成豆腐(WORK_STATE 310 前置 + * 症状①),改为 sb_icons 位图(Material Symbols Rounded,字符标签仅作占位,绘制走位图)。 */ + meow_topappbar_set_item_icon(g_tb, 0, MEOW_ICON_REFRESH); + meow_topappbar_set_item_icon(g_tb, 1, MEOW_ICON_SETTINGS); + meow_topappbar_set_item_icon(g_tb, 2, MEOW_ICON_SEARCH); g_tabs = meow_tabbar_create(r_tabs.x, r_tabs.y, r_tabs.w, r_tabs.h); meow_tabbar_add_tab(g_tabs, tab_label(0)); meow_tabbar_add_tab(g_tabs, tab_label(1)); diff --git a/patch_v2/ncm_app/app/ui/playlist.c b/patch_v2/ncm_app/app/ui/playlist.c index 420e75e..eb49c3d 100644 --- a/patch_v2/ncm_app/app/ui/playlist.c +++ b/patch_v2/ncm_app/app/ui/playlist.c @@ -66,6 +66,23 @@ static const ncm_playlist_t *pl_cur(void) return NULL; } +/* 收藏按钮显隐(WORK_STATE 2026-09-02 用户报 ①):「我创建的」歌单不显示收藏按钮。 + * 判定:home 打开的真实歌单(active_playlist >= 0)is_collected==0(=我创建的)隐藏; + * 搜索歌单(NCM_PL_SEARCH)无法判定归属,保守显示(外部歌单可收藏)。 */ +static int pl_show_fav(void) +{ + const ncm_playlist_t *pl = pl_cur(); + if (!pl) return 1; + if (g_st.active_playlist >= 0 && pl->is_collected == 0) return 0; /* 我创建的:隐藏 */ + return 1; +} +/* 评论按钮实际矩形:收藏隐藏时其槽并入评论(拉宽覆盖原收藏位+评论位,不留空洞)。 */ +static ncm_rect_t pl_cmt_rect(void) +{ + if (pl_show_fav()) return r_cmt; + return NR(r_fav.x, r_fav.y, r_fav.w + r_cmt.w + 12, r_cmt.h); +} + static int pl_src2(int idx, meow_list_item *out, void *ctx) { (void)ctx; @@ -155,16 +172,19 @@ static void pl_draw(void *ctx) } meow_ui_text(nmx, r_card.y + 16 + th->font_body + 8, meta, th->font_body, th->onSurfaceVariant); - /* 操作条:播放全部(红 FILLED) + 收藏(OUTLINED) + 评论(红 TEXT+badge) */ + /* 操作条:播放全部(红 FILLED) + 收藏(OUTLINED,我收藏的才显示) + 评论(红 TEXT+badge) */ ncm_draw_button(r_plall.x, r_plall.y, r_plall.w, r_plall.h, "播放全部", pa->red, pa->on_red); - meow_ui_draw_rect_round(r_fav.x + 1, r_fav.y + 1, r_fav.w - 2, r_fav.h - 2, - r_fav.h / 2 - 1, th->outlineVariant); - meow_ui_text_center(r_fav.x + r_fav.w / 2, r_fav.y + (r_fav.h - th->font_body) / 2, - "收藏", th->font_body, th->onSurface); - meow_ui_text_center(r_cmt.x + r_cmt.w / 2, r_cmt.y + (r_cmt.h - th->font_body) / 2, + ncm_rect_t rcmt = pl_cmt_rect(); /* 评论实际矩形(收藏隐藏时并入其槽,无空洞) */ + if (pl_show_fav()) { + meow_ui_draw_rect_round(r_fav.x + 1, r_fav.y + 1, r_fav.w - 2, r_fav.h - 2, + r_fav.h / 2 - 1, th->outlineVariant); + meow_ui_text_center(r_fav.x + r_fav.w / 2, r_fav.y + (r_fav.h - th->font_body) / 2, + "收藏", th->font_body, th->onSurface); + } + meow_ui_text_center(rcmt.x + rcmt.w / 2, rcmt.y + (rcmt.h - th->font_body) / 2, "评论", th->font_body, pa->red); /* 红色小 badge(评论置灰入口) */ - meow_ui_fill_rect(r_cmt.x + r_cmt.w / 2 + 34, r_cmt.y + 10, 6, 6, pa->red); + meow_ui_fill_rect(rcmt.x + rcmt.w / 2 + 34, rcmt.y + 10, 6, 6, pa->red); /* 曲目行:红 mini-vinyl 缩略 + 按压红条(文本由 listview z=10 画) */ if (g_load_err == 0 && g_st.track_ids_count > 0) { @@ -411,10 +431,12 @@ int playlist_on_tap(int x, int y) } if (x >= r_plall.x && x < r_plall.x + r_plall.w && y >= r_plall.y && y < r_plall.y + r_plall.h) { pl_drag_reset(); player_play_song(0); return 1; } - if (x >= r_fav.x && x < r_fav.x + r_fav.w && y >= r_fav.y && y < r_fav.y + r_fav.h) { + if (pl_show_fav() && + x >= r_fav.x && x < r_fav.x + r_fav.w && y >= r_fav.y && y < r_fav.y + r_fav.h) { pl_drag_reset(); ncm_snack("收藏功能开发中"); return 1; } - if (x >= r_cmt.x && x < r_cmt.x + r_cmt.w && y >= r_cmt.y && y < r_cmt.y + r_cmt.h) { + ncm_rect_t rcmt = pl_cmt_rect(); /* 评论实际矩形(与绘制同口径) */ + if (x >= rcmt.x && x < rcmt.x + rcmt.w && y >= rcmt.y && y < rcmt.y + rcmt.h) { pl_drag_reset(); ncm_snack("评论功能开发中"); return 1; } if (g_load_err != 0) { diff --git a/patch_v2/ncm_app/bench/degrade_sim.c b/patch_v2/ncm_app/bench/degrade_sim.c index 8f71aee..2209e3e 100644 --- a/patch_v2/ncm_app/bench/degrade_sim.c +++ b/patch_v2/ncm_app/bench/degrade_sim.c @@ -41,7 +41,12 @@ static int fake_try(const char *dev, const char *ck, const char *id, int level, if (level > g_avail_from) return NCM_OK; /* 该档不可用:url 空 */ snprintf(out->url, sizeof out->url, "http://sim/%lld.%s", (long long)12345, (level >= NCM_LEVEL_LOSSLESS) ? "flac" : "mp3"); - snprintf(out->type, sizeof out->type, "%s", g_type); + /* §2① 档位保真:无损级及以上,服务端 encodeType=flac → 应答 type=flac(真实);g_type="" + * (缺失)时保留空串,交给 level_attempt 按 url 扩展名推断(测试该推断路径)。 */ + if (level >= NCM_LEVEL_LOSSLESS && g_type[0]) + snprintf(out->type, sizeof out->type, "flac"); + else + snprintf(out->type, sizeof out->type, "%s", g_type); if (g_resp_level) snprintf(out->level, sizeof out->level, "%s", g_resp_level); out->br = 320000; out->size = 9000000; diff --git a/patch_v2/ncm_app/bench/player_flow_sim.c b/patch_v2/ncm_app/bench/player_flow_sim.c index ae2501e..2bc2c9d 100644 --- a/patch_v2/ncm_app/bench/player_flow_sim.c +++ b/patch_v2/ncm_app/bench/player_flow_sim.c @@ -150,6 +150,14 @@ int ncm_cache_open_resume(const ncm_cache_t *c, const char *id, const char *ext, } int ncm_cache_part_remove(const ncm_cache_t *c, const char *id, const char *ext) { (void)c; (void)id; (void)ext; g_part_removes++; g_part_size = 0; return NCM_OK; } +/* §NEW 任务5:song_local_file 旧键迁移调 ncm_cache_path(本 sim 走 stub 缓存);仅链接用。 */ +int ncm_cache_path(const ncm_cache_t *c, const char *id, const char *ext, char *out, size_t out_sz) +{ + const char *e = ext; if (e && e[0] == '.') e++; + snprintf(out, out_sz, "%s/song_%s.%s", + (c && c->dir[0]) ? c->dir : "/tmp", id ? id : "", e ? e : "bin"); + return NCM_OK; +} int ncm_api_song_url_auto(const char *dev, const char *ck, const char *id, int level, ncm_play_url_t *out, int *out_level) @@ -434,12 +442,14 @@ int main(void) } g_eof = 0; g_reads_left = -1; /* 上一步非 VIP 部分设了 g_eof=1 让 song0 收尾;SVIP song1 需正常播 */ g_vip = NCM_VIP_SVIP; g_cache_ok = 0; g_url_calls = 0; g_url_req_level = -1; + g_url_type = "flac"; /* §2②:SURROUND 为无损级 → 应答 flac(真实),eff 回填 SURROUND */ player_manager_play(1); CHECK(wait_state(NCM_PC_PLAYING, 3000), "svip song playing"); CHECK(g_url_req_level == NCM_LEVEL_SURROUND, "req level=%d (expect SURROUND=%d:SVIP 不钳顶)", g_url_req_level, NCM_LEVEL_SURROUND); CHECK(player_manager_eff_level() == NCM_LEVEL_SURROUND, "eff_level=%d (expect SURROUND)", player_manager_eff_level()); + g_url_type = "mp3"; g_eof = 1; printf("== P8: fee 门禁(§20:fee∈{1,4} 且非会员 → NCM_ERR_VIP,不发 song_url)==\n"); diff --git a/patch_v2/ncm_app/core/ncm_api.c b/patch_v2/ncm_app/core/ncm_api.c index 4a455f9..f74190a 100644 --- a/patch_v2/ncm_app/core/ncm_api.c +++ b/patch_v2/ncm_app/core/ncm_api.c @@ -329,11 +329,17 @@ static int level_attempt(const char *device_id, const char *cookie, const char * if (rc != NCM_OK) return 0; int ok = ncm_streq(p.type, "mp3") || ncm_streq(p.type, "flac"); if (!p.type[0]) { - ok = 1; const char *dot = strrchr(p.url, '.'); if (dot && ncm_streq(dot, ".flac")) ncm_strlcpy(p.type, "flac", sizeof p.type); + else ncm_strlcpy(p.type, "mp3", sizeof p.type); /* 默认 mp3(原语义),供格式门槛判定 */ + ok = 1; } if (!(p.url[0] && ok)) return 0; /* url 为 null 或未知格式:继续降级 */ + /* §档位保真(REPORT §NEW 任务2①):SQ 及以上(lossless/hires/母带/全景声) + * 命中判定必须 type=flac——无损/Hi-Res 等档返回 mp3 一律视为「该档不可用」继续降级 + * (服务端静默降档场景,修「hires 档静默给 mp3 被当命中」);mp3 只在 + * = NCM_LEVEL_LOSSLESS && ncm_streq(p.type, "mp3")) return 0; *out = p; if (out_level) { int rl = level_from_str(p.level); diff --git a/patch_v2/ncm_app/core/ncm_cache.c b/patch_v2/ncm_app/core/ncm_cache.c index 3099d14..2a6b19f 100644 --- a/patch_v2/ncm_app/core/ncm_cache.c +++ b/patch_v2/ncm_app/core/ncm_cache.c @@ -88,12 +88,26 @@ int ncm_cache_lookup(const ncm_cache_t *c, const char *id, const char *ext, struct stat st; if (stat(path, &st) != 0 || !S_ISREG(st.st_mode)) { /* §19 温和兼容:历史双点名 `song_..`(旧版 ext 带前导点所致)。 - * 命中照常刷新 LRU;不主动改名/删除,由 LRU 自然淘汰。 */ + * REPORT §NEW 任务5:命中即**迁移重命名**到单点名(同 id+ext,不重下)—— + * 之后本条目走单点主路径,双点存量自然消亡(lookup/evict 定期见到)。 */ const char *e = ext; if (e && e[0] == '.') e++; - int n = snprintf(path, sizeof path, "%s/song_%s..%s", c->dir, id, e ? e : "bin"); + const char *ee = e ? e : "bin"; + int n = snprintf(path, sizeof path, "%s/song_%s..%s", c->dir, id, ee); if (n < 0 || (size_t)n >= sizeof path) return NCM_ERR_FULL; if (stat(path, &st) != 0 || !S_ISREG(st.st_mode)) return NCM_ERR_NOENT; + char fixed[NCM_CACHE_DIR_MAX + 32]; + if (ncm_cache_path(c, id, ee, fixed, sizeof fixed) == NCM_OK) { + struct stat fst; + if (stat(fixed, &fst) == 0) unlink(path); /* 目标已(在/被并发建):删旧双点 */ + else rename(path, fixed); + if (stat(fixed, &st) == 0 && S_ISREG(st.st_mode)) { + ncm_strlcpy(path, fixed, sizeof path); + } else { + ncm_strlcpy(path, fixed, sizeof path); /* 迁移失败(权限等):回到固定路径 */ + return NCM_ERR_NOENT; + } + } } utime(path, NULL); /* 刷新最后访问(按 mtime LRU) */ ncm_strlcpy(out, path, out_sz); diff --git a/patch_v2/ncm_app/ncm b/patch_v2/ncm_app/ncm index 16b607aaf065eef18b078e836d08978c3f8f823d..ecd94e9a0d84a7af614fc91096c871321dd07315 100755 GIT binary patch delta 355243 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�OKD5%AEn{6U$9*IX_sAvp_QCwH^inni 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