Fix live camera media asset URLs
这个提交包含在:
@@ -8,6 +8,27 @@ export type ChangeLogEntry = {
|
||||
};
|
||||
|
||||
export const CHANGE_LOG_ENTRIES: ChangeLogEntry[] = [
|
||||
{
|
||||
version: "2026.03.17-live-camera-media-asset-url",
|
||||
releaseDate: "2026-03-17",
|
||||
repoVersion: "902bd78+media-asset-url-fix",
|
||||
summary:
|
||||
"修复同步观看预览地址被重复拼接 `/media` 导致的 404,观看端可以继续打开 relay 缓存视频。",
|
||||
features: [
|
||||
"共享的 `getMediaAssetUrl()` 现在会保留已带 `/media/` 前缀的应用内路径,不再把 `/media/assets/...` 再次拼成 `/media/media/assets/...`",
|
||||
"当服务端直接返回完整 `https://...` 外链时,前端会原样使用该地址,避免对外部媒体地址做错误拼接",
|
||||
"其他仍是普通相对路径的媒体资源会继续自动补齐 `/media` 前缀,因此旧调用方无需改动",
|
||||
"同步观看点击“同步观看”后,请求的 preview 地址恢复为 `/media/assets/sessions/.../preview.webm`,不再因 `404 page not found` 导致无视频可播",
|
||||
"线上 smoke 已确认 `https://te.hao.work/` 已切换到包含本次修复的新构建,而不是继续提供部署前的旧资源 revision",
|
||||
],
|
||||
tests: [
|
||||
"pnpm vitest run client/src/lib/media.test.ts",
|
||||
"pnpm check",
|
||||
"pnpm build",
|
||||
"playwright-skill 线上 smoke: 登录 `H1` 后访问 `https://te.hao.work/live-camera`,确认 viewer 实际请求 `https://te.hao.work/media/assets/sessions/.../preview.webm?...` 并返回 `200`,同时不存在 `/media/media/...` 双前缀请求",
|
||||
"线上 smoke: 已确认部署前公开站点还是旧 revision;部署后 `https://te.hao.work/` 已切换到包含本次修复的新构建",
|
||||
],
|
||||
},
|
||||
{
|
||||
version: "2026.03.17-live-camera-pose-buffer-window",
|
||||
releaseDate: "2026-03-17",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { formatRecordingTime, pickBitrate } from "./media";
|
||||
import { formatRecordingTime, getMediaAssetUrl, pickBitrate } from "./media";
|
||||
|
||||
describe("media utilities", () => {
|
||||
it("formats recording time with minute and second padding", () => {
|
||||
@@ -14,4 +14,16 @@ describe("media utilities", () => {
|
||||
expect(pickBitrate("balanced", true)).toBe(1_400_000);
|
||||
expect(pickBitrate("balanced", false)).toBe(1_900_000);
|
||||
});
|
||||
|
||||
it("keeps already-prefixed media asset paths stable", () => {
|
||||
expect(getMediaAssetUrl("/media/assets/sessions/demo/preview.webm")).toBe(
|
||||
"/media/assets/sessions/demo/preview.webm"
|
||||
);
|
||||
expect(getMediaAssetUrl("https://cdn.example.com/demo.webm")).toBe(
|
||||
"https://cdn.example.com/demo.webm"
|
||||
);
|
||||
expect(getMediaAssetUrl("/assets/sessions/demo/preview.webm")).toBe(
|
||||
"/media/assets/sessions/demo/preview.webm"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -212,6 +212,12 @@ export async function getMediaSession(sessionId: string) {
|
||||
}
|
||||
|
||||
export function getMediaAssetUrl(path: string) {
|
||||
if (/^https?:\/\//i.test(path)) {
|
||||
return path;
|
||||
}
|
||||
if (path.startsWith(`${MEDIA_BASE}/`)) {
|
||||
return path;
|
||||
}
|
||||
return `${MEDIA_BASE}${path.startsWith("/") ? path : `/${path}`}`;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,35 @@
|
||||
# Tennis Training Hub - 变更日志
|
||||
|
||||
## 2026.03.17-live-camera-media-asset-url (2026-03-17)
|
||||
|
||||
### 功能更新
|
||||
|
||||
- 修复同步观看预览地址重复拼接 `/media` 的问题;当前端收到 `/media/assets/...` 这类已完整的应用内媒体路径时,会直接使用原值,不再错误请求 `/media/media/assets/...`
|
||||
- 当前端收到完整的 `https://...` 外部媒体地址时,也会保持原样,避免把外链错误改写成站内 media 路径
|
||||
- 其他仍是普通相对路径的媒体资源会继续自动补齐 `/media` 前缀,因此原有依赖相对路径的调用链不需要调整
|
||||
- `/live-camera` 点击“同步观看”后,请求的缓存视频地址恢复为 `/media/assets/sessions/.../preview.webm`,不再因 `404 page not found` 导致无视频可播
|
||||
|
||||
### 测试
|
||||
|
||||
- `pnpm vitest run client/src/lib/media.test.ts`
|
||||
- `pnpm check`
|
||||
- `pnpm build`
|
||||
- `playwright-skill` 线上 smoke:登录 `H1` 后访问 `https://te.hao.work/live-camera`,确认 viewer 实际请求 `https://te.hao.work/media/assets/sessions/.../preview.webm?...` 并返回 `200`,同时不存在 `/media/media/...` 双前缀请求
|
||||
- `curl -I https://te.hao.work/`
|
||||
- `curl -I https://te.hao.work/assets/index-*.js`
|
||||
- `curl -I https://te.hao.work/assets/index-*.css`
|
||||
|
||||
### 线上 smoke
|
||||
|
||||
- 部署前确认公开站点仍在旧资源 revision,尚未提供本次修复
|
||||
- 部署完成后,`https://te.hao.work/` 已切到本次新构建,而不是继续提供部署前的旧资源 revision
|
||||
- `/live-camera` 的同步观看请求地址已恢复为 `/media/assets/sessions/.../preview.webm`,Playwright 真实浏览器验证拿到的 preview 请求状态为 `200`
|
||||
- 已确认不存在 `/media/media/assets/...` 双重前缀请求
|
||||
|
||||
### 仓库版本
|
||||
|
||||
- `902bd78+media-asset-url-fix`
|
||||
|
||||
## 2026.03.17-live-camera-pose-buffer-window (2026-03-17)
|
||||
|
||||
### 功能更新
|
||||
|
||||
在新工单中引用
屏蔽一个用户