回放媒体播放与下载地址(动态媒体 URL)

验证状态:存在关键缺口,不可作为完整契约发布。Web 端 URL 构造与消费已源码核验;媒体节点(*.node.netbodycamera.com 解析到的服务端)与采集服务器是最终责任端,其源码不在本工作区,URL 有效期、Range、鉴权、内容类型与错误语义缺证。 适用基线:源码归纳 @ 2026-09-14

用途与场景

回放播放与下载不经过中心后端:Web 用文件行(list-file-info 应答)或解密应答(decrypt)中的 ip/port/playUrl 直接构造媒体 URL——https://{ip 点改连字符}.node.netbodycamera.com{:port}{playUrl};播放交给 ReactPlayer(HLS/原生 video 由浏览器决定),下载在 playUrl 后追加 &ddl=1 交给浏览器原生下载。本页是 inventory 中该动态媒体操作(http-dynamic-playback-media-and-download)的唯一操作正本;?ddl=1 的服务端语义与媒体节点的有效期限/鉴权机制缺证,本页只记录 Web 可证事实。

使用位置

页面/功能 角色或空间分支
视频回放播放器构造播放地址(明文文件以文件行 ip/port/playUrl;加密文件以解密应答) 登录用户;视频回放播放器
文件列表面板构造下载链接(追加 &ddl=1<a href download> 登录用户;文件列表面板

对应 inventory operationId:http-dynamic-playback-media-and-download(consumers 记录)。

端点

GET https://{ip点改连字符}.node.netbodycamera.com{:port}{playUrl}(浏览器 → 媒体节点直连,不经中心后端;下载变体在 playUrl 后追加 &ddl=1)— 回放媒体播放与下载的动态地址。

ip/port/playUrl 的动态值来源:明文文件取 list-file-info 应答行,加密文件取解密应答 data。该地址不属于中心端点(中心服务仓无该媒体域名实现,检索核验),无清单层条目;port 为 443 时省略端口段,playUrl 需自带查询串下载拼接才合法——ddl 的服务端语义缺证。

动线与完成判据

层级 判据
URL 构造 ip/playUrl 非空(加密文件须已解密);纯字符串拼接,无网络请求
媒体可用 ReactPlayer onReady;仅代表浏览器取流成功,转码/封装兼容性由浏览器与媒体端决定
下载可用 <a download> 触发浏览器下载;ddl=1 是否改变服务端行为缺证
失败 onError 文案;无自动重试

错误与边界

  • 本操作不经中心 HTTP 出口,错误响应差异总表不适用;媒体端失败形态、限流语义缺证(待核验)。
  • URL 无 Web 侧过期管理:文件行或解密应答中的 playUrl 若含时效令牌,过期行为缺证;Web 不刷新、不重取。
  • port == 443 时省略端口、其它端口显式拼接(字符串比较 != 443);端口为字符串型端口值时的行为同上。
  • 下载链接以 & 拼接:若 playUrl 不含查询串,URL 形如 ...mp4&ddl=1,是否符合媒体端预期缺证。

调用关系与资源清理

  • 前置:文件清单(明文文件行)或解密(加密文件)。
  • 无会话/订阅占用:每次渲染按当前文件行重建 URL;组件卸载由 React 回收播放器。

已知缺口

  1. 媒体节点与采集服务器是最终责任端:*.node.netbodycamera.com 的解析与路由机制、ip→子域 约定的服务端实现、URL 有效期、Range/seek 支持、鉴权与 ddl 语义均缺证(inventory gaps 同口径记录)。
  2. 未抓包或联调验证媒体响应头(Content-Type/Range/Accept-Ranges)与失败形态。