Skip to content

fix: 修复 Omni 视频 MIME 枚举缺失导致的 502 - #93

Merged
Mag1cFall merged 2 commits into
Mag1cFall:mainfrom
jinpeng2700-tech:fix/interaction-video-media
Nov 1, 2026
Merged

Mag1cFall merged 2 commits into
Mag1cFall:mainfrom
jinpeng2700-tech:fix/interaction-video-media

Conversation

@jinpeng2700-tech

Copy link
Copy Markdown
Contributor

问题与修复

在 API 试用页使用 gemini-omni-1.1-flash 图生视频时,CreateInteractionStream 实际可能返回视频 delta [null,"<BASE64 MP4>"]。v0.2.18 的解码器要求 MIME 字段为整数,导致已返回的视频在 $delta[1][4][0] 被拒绝,请求最终以 502「期望整数」失败。

本次修改只对视频 delta 的空 MIME 枚举增加兼容:Base64 解码后通过 http.DetectContentType 确认为 video/mp4,再输出媒体事件。保留原数值枚举路径;未知非空枚举、无效 Base64、无法识别为 MP4 的数据仍返回协议错误,图片处理不变。同时补充协议文档和回归测试。

复现证据

  • 官方 v0.2.18,SpiderMonkey WAA 后端。
  • 输入为本地生成的 640×360 红球示意图,未使用用户图片或账号数据作为测试夹具。
  • 请求接口:POST /v1beta/models/gemini-omni-1.1-flash:streamGenerateContent?alt=sse。
  • 配置:responseModalities=["VIDEO"]、responseFormat.video={"aspectRatio":"16:9","duration":"4s","resolution":"360p"}、videoConfig.task="image_to_video"。
  • 隔离诊断确认视频字段长度为 2,首字段为 null,第二字段为 Base64 视频。诊断代码未包含在本 PR 中。

验证

  • TestDecodeInteractionMedia:10 个案例通过,覆盖缺失枚举、原数值视频/图片格式及异常数据。
  • TestDecodeInteractionStreamVideoWithoutMIME:完整事件流成功输出视频与结束事件,视频字节保持不变。
  • 测试命令:go test -p 4 -mod=readonly -tags netgo,osusergo -ldflags="-linkmode external -extldflags '-static'" ./internal/aistudio -run 'TestDecodeInteraction' -v(Go 1.27.3、Zig musl 工具链、官方 SpiderMonkey 静态库)。
  • 修补版在 Linux VPS 上完成两次真实图生视频:隔离实例约 14.6 秒;生产 HTTPS 接口约 17.3 秒,均无流内错误,正常结束。
  • 两个结果均经 ffprobe/ffmpeg 检查:640×360、约 4.032 秒、H.264/AAC,完整解码成功。
  • 完整 internal/aistudio 测试集尝试在本地 WSL 静态链接环境运行时,于既有 runtime_lease_test.go:21 的 t.Setenv 路径发生 SIGSEGV,因此不将全量测试标记为通过。

PR 不包含凭据、用户媒体、部署配置或编译产物。

@Mag1cFall
Mag1cFall merged commit 0302e77 into Mag1cFall:main Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants