Harden relay preview mp4 handling
这个提交包含在:
@@ -8,6 +8,25 @@ export type ChangeLogEntry = {
|
||||
};
|
||||
|
||||
export const CHANGE_LOG_ENTRIES: ChangeLogEntry[] = [
|
||||
{
|
||||
version: "2026.03.17-live-camera-relay-mp4-hardening",
|
||||
releaseDate: "2026-03-17",
|
||||
repoVersion: "pending",
|
||||
summary:
|
||||
"修复实时分析 relay 预览在 Chrome `mp4` 分段下容易失效的问题,并让 live-camera 录制优先回到更稳定的 `webm`。",
|
||||
features: [
|
||||
"media 服务在 relay 会话收到第一段 `mp4` 时会额外保留初始化片段,后续滚动缓存即使裁掉旧分段,也能继续为 preview 重建可解码的输入源",
|
||||
"relay preview 构建会跳过明显异常的小 `mp4` 分段,并优先尝试把保留的初始化片段与当前缓存拼成单一输入后再转成 `preview.webm`",
|
||||
"如果 relay preview 本轮重建失败,但磁盘上仍有上一版可播放 `preview.webm`,worker 会保留旧预览继续对 viewer 提供播放,而不是直接把同步观看打成永久失败",
|
||||
"live-camera 的合成录制 mime 选择已改为优先 `video/webm`,Chrome 不再默认上传 fragmented `mp4` relay 分段,从源头减少 `trex/tfhd` 类 ffmpeg 拼接失败",
|
||||
],
|
||||
tests: [
|
||||
"cd media && go test ./...",
|
||||
"pnpm check",
|
||||
"pnpm build",
|
||||
"部署后线上 smoke: 重新开始一条 `/live-camera` 实时分析,确认 relay 新分段优先为 `webm`,viewer 端继续通过 `/media/assets/sessions/.../preview.webm` 拉流且不再快速掉入 `previewStatus=failed`",
|
||||
],
|
||||
},
|
||||
{
|
||||
version: "2026.03.17-live-camera-media-asset-url",
|
||||
releaseDate: "2026-03-17",
|
||||
|
||||
@@ -392,12 +392,6 @@ function pickRecorderMimeType() {
|
||||
const supported =
|
||||
typeof MediaRecorder !== "undefined" &&
|
||||
typeof MediaRecorder.isTypeSupported === "function";
|
||||
if (
|
||||
supported &&
|
||||
MediaRecorder.isTypeSupported("video/mp4;codecs=avc1.42E01E,mp4a.40.2")
|
||||
) {
|
||||
return "video/mp4";
|
||||
}
|
||||
if (
|
||||
supported &&
|
||||
MediaRecorder.isTypeSupported("video/webm;codecs=vp9,opus")
|
||||
@@ -410,6 +404,12 @@ function pickRecorderMimeType() {
|
||||
) {
|
||||
return "video/webm;codecs=vp8,opus";
|
||||
}
|
||||
if (
|
||||
supported &&
|
||||
MediaRecorder.isTypeSupported("video/mp4;codecs=avc1.42E01E,mp4a.40.2")
|
||||
) {
|
||||
return "video/mp4";
|
||||
}
|
||||
return "video/webm";
|
||||
}
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户